payload 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/dist/admin/components/elements/DocumentControls/index.d.ts.map +1 -1
  2. package/dist/admin/components/elements/DocumentControls/index.js +6 -4
  3. package/dist/admin/components/elements/Dropzone/index.d.ts.map +1 -1
  4. package/dist/admin/components/elements/Dropzone/index.js +2 -2
  5. package/dist/admin/components/elements/EditUpload/index.d.ts.map +1 -1
  6. package/dist/admin/components/elements/EditUpload/index.js +14 -6
  7. package/dist/admin/components/elements/EditUpload/index.scss +5 -0
  8. package/dist/admin/components/elements/FileDetails/index.js +2 -2
  9. package/dist/admin/components/elements/PreviewSizes/index.d.ts +1 -1
  10. package/dist/admin/components/elements/PreviewSizes/index.d.ts.map +1 -1
  11. package/dist/admin/components/elements/PreviewSizes/index.js +58 -32
  12. package/dist/admin/components/elements/PreviewSizes/index.scss +0 -1
  13. package/dist/admin/components/elements/Publish/index.d.ts +1 -0
  14. package/dist/admin/components/elements/Publish/index.d.ts.map +1 -1
  15. package/dist/admin/components/elements/Publish/index.js +56 -5
  16. package/dist/admin/components/forms/field-types/Blocks/SectionTitle/index.scss +1 -0
  17. package/dist/admin/components/forms/field-types/Checkbox/Input.d.ts +2 -2
  18. package/dist/admin/components/forms/field-types/Checkbox/Input.d.ts.map +1 -1
  19. package/dist/admin/components/forms/field-types/Checkbox/Input.js +8 -4
  20. package/dist/admin/components/forms/field-types/Checkbox/index.js +5 -5
  21. package/dist/admin/components/forms/field-types/Code/index.d.ts.map +1 -1
  22. package/dist/admin/components/forms/field-types/Code/index.js +3 -3
  23. package/dist/admin/components/forms/field-types/DateTime/Input.d.ts +2 -2
  24. package/dist/admin/components/forms/field-types/DateTime/Input.d.ts.map +1 -1
  25. package/dist/admin/components/forms/field-types/DateTime/Input.js +8 -4
  26. package/dist/admin/components/forms/field-types/Email/index.d.ts.map +1 -1
  27. package/dist/admin/components/forms/field-types/Email/index.js +9 -5
  28. package/dist/admin/components/forms/field-types/Number/index.d.ts.map +1 -1
  29. package/dist/admin/components/forms/field-types/Number/index.js +9 -5
  30. package/dist/admin/components/forms/field-types/Point/index.d.ts.map +1 -1
  31. package/dist/admin/components/forms/field-types/Point/index.js +15 -7
  32. package/dist/admin/components/forms/field-types/RichText/types.d.ts +5 -0
  33. package/dist/admin/components/forms/field-types/RichText/types.d.ts.map +1 -1
  34. package/dist/admin/components/forms/field-types/Tabs/index.d.ts.map +1 -1
  35. package/dist/admin/components/forms/field-types/Tabs/index.js +2 -2
  36. package/dist/admin/components/forms/field-types/Text/Input.d.ts +4 -4
  37. package/dist/admin/components/forms/field-types/Text/Input.d.ts.map +1 -1
  38. package/dist/admin/components/forms/field-types/Text/Input.js +8 -4
  39. package/dist/admin/components/forms/field-types/Text/index.js +7 -7
  40. package/dist/admin/components/forms/field-types/Textarea/Input.d.ts +4 -4
  41. package/dist/admin/components/forms/field-types/Textarea/Input.d.ts.map +1 -1
  42. package/dist/admin/components/forms/field-types/Textarea/Input.js +9 -5
  43. package/dist/admin/components/forms/field-types/Textarea/index.js +7 -7
  44. package/dist/admin/components/forms/useField/index.d.ts.map +1 -1
  45. package/dist/admin/components/forms/useField/index.js +31 -25
  46. package/dist/admin/components/utilities/Auth/index.d.ts.map +1 -1
  47. package/dist/admin/components/utilities/Auth/index.js +10 -3
  48. package/dist/admin/components/utilities/DocumentInfo/index.d.ts.map +1 -1
  49. package/dist/admin/components/utilities/DocumentInfo/index.js +7 -3
  50. package/dist/admin/components/views/LivePreview/Context/index.d.ts.map +1 -1
  51. package/dist/admin/components/views/LivePreview/Context/index.js +1 -1
  52. package/dist/admin/components/views/LivePreview/Toolbar/Controls/index.d.ts.map +1 -1
  53. package/dist/admin/components/views/LivePreview/Toolbar/Controls/index.js +91 -29
  54. package/dist/admin/components/views/LivePreview/Toolbar/Controls/index.scss +5 -0
  55. package/dist/admin/components/views/LivePreview/index.d.ts.map +1 -1
  56. package/dist/admin/components/views/LivePreview/index.js +1 -1
  57. package/dist/admin/components/views/collections/Edit/Upload/index.js +2 -2
  58. package/dist/admin/components/views/collections/List/Cell/index.d.ts.map +1 -1
  59. package/dist/admin/components/views/collections/List/Cell/index.js +3 -3
  60. package/dist/admin/components/views/collections/List/index.scss +9 -0
  61. package/dist/auth/graphql/resolvers/access.d.ts.map +1 -1
  62. package/dist/auth/graphql/resolvers/access.js +3 -4
  63. package/dist/auth/graphql/resolvers/forgotPassword.js +3 -4
  64. package/dist/auth/graphql/resolvers/init.d.ts.map +1 -1
  65. package/dist/auth/graphql/resolvers/init.js +3 -4
  66. package/dist/auth/graphql/resolvers/login.js +3 -4
  67. package/dist/auth/graphql/resolvers/logout.js +3 -4
  68. package/dist/auth/graphql/resolvers/me.js +3 -4
  69. package/dist/auth/graphql/resolvers/refresh.js +3 -4
  70. package/dist/auth/graphql/resolvers/resetPassword.js +3 -4
  71. package/dist/auth/graphql/resolvers/unlock.js +3 -4
  72. package/dist/auth/graphql/resolvers/verifyEmail.js +3 -4
  73. package/dist/auth/operations/access.d.ts.map +1 -1
  74. package/dist/auth/operations/access.js +52 -42
  75. package/dist/collections/buildEndpoints.d.ts.map +1 -1
  76. package/dist/collections/buildEndpoints.js +9 -1
  77. package/dist/collections/graphql/resolvers/create.d.ts.map +1 -1
  78. package/dist/collections/graphql/resolvers/create.js +3 -4
  79. package/dist/collections/graphql/resolvers/delete.d.ts.map +1 -1
  80. package/dist/collections/graphql/resolvers/delete.js +3 -4
  81. package/dist/collections/graphql/resolvers/docAccess.d.ts.map +1 -1
  82. package/dist/collections/graphql/resolvers/docAccess.js +8 -4
  83. package/dist/collections/graphql/resolvers/find.d.ts.map +1 -1
  84. package/dist/collections/graphql/resolvers/find.js +3 -4
  85. package/dist/collections/graphql/resolvers/findByID.d.ts.map +1 -1
  86. package/dist/collections/graphql/resolvers/findByID.js +3 -2
  87. package/dist/collections/graphql/resolvers/findVersionByID.d.ts.map +1 -1
  88. package/dist/collections/graphql/resolvers/findVersionByID.js +3 -4
  89. package/dist/collections/graphql/resolvers/findVersions.d.ts.map +1 -1
  90. package/dist/collections/graphql/resolvers/findVersions.js +3 -4
  91. package/dist/collections/graphql/resolvers/restoreVersion.d.ts.map +1 -1
  92. package/dist/collections/graphql/resolvers/restoreVersion.js +3 -4
  93. package/dist/collections/graphql/resolvers/update.d.ts.map +1 -1
  94. package/dist/collections/graphql/resolvers/update.js +3 -4
  95. package/dist/collections/operations/docAccess.d.ts.map +1 -1
  96. package/dist/collections/operations/docAccess.js +19 -8
  97. package/dist/config/schema.d.ts.map +1 -1
  98. package/dist/config/schema.js +2 -1
  99. package/dist/config/types.d.ts +2 -2
  100. package/dist/config/types.d.ts.map +1 -1
  101. package/dist/config/types.js +1 -1
  102. package/dist/exports/utilities.d.ts +1 -1
  103. package/dist/exports/utilities.d.ts.map +1 -1
  104. package/dist/exports/utilities.js +4 -1
  105. package/dist/express/types.d.ts +4 -0
  106. package/dist/express/types.d.ts.map +1 -1
  107. package/dist/fields/config/schema.d.ts.map +1 -1
  108. package/dist/fields/config/schema.js +63 -61
  109. package/dist/fields/config/types.d.ts +53 -34
  110. package/dist/fields/config/types.d.ts.map +1 -1
  111. package/dist/fields/config/types.js +1 -1
  112. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  113. package/dist/fields/hooks/beforeChange/promise.js +2 -1
  114. package/dist/fields/validations.d.ts +4 -4
  115. package/dist/fields/validations.d.ts.map +1 -1
  116. package/dist/fields/validations.js +90 -106
  117. package/dist/fields/validations.spec.js +4 -4
  118. package/dist/globals/buildEndpoints.d.ts.map +1 -1
  119. package/dist/globals/buildEndpoints.js +5 -1
  120. package/dist/globals/graphql/resolvers/docAccess.d.ts.map +1 -1
  121. package/dist/globals/graphql/resolvers/docAccess.js +8 -4
  122. package/dist/globals/graphql/resolvers/findOne.d.ts.map +1 -1
  123. package/dist/globals/graphql/resolvers/findOne.js +3 -4
  124. package/dist/globals/graphql/resolvers/findVersionByID.d.ts.map +1 -1
  125. package/dist/globals/graphql/resolvers/findVersionByID.js +3 -4
  126. package/dist/globals/graphql/resolvers/findVersions.d.ts.map +1 -1
  127. package/dist/globals/graphql/resolvers/findVersions.js +3 -4
  128. package/dist/globals/graphql/resolvers/restoreVersion.d.ts.map +1 -1
  129. package/dist/globals/graphql/resolvers/restoreVersion.js +3 -4
  130. package/dist/globals/graphql/resolvers/update.d.ts.map +1 -1
  131. package/dist/globals/graphql/resolvers/update.js +3 -4
  132. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  133. package/dist/globals/operations/docAccess.js +18 -7
  134. package/dist/graphql/registerSchema.d.ts.map +1 -1
  135. package/dist/graphql/registerSchema.js +4 -3
  136. package/dist/graphql/utilities/wrapCustomResolver.d.ts +9 -0
  137. package/dist/graphql/utilities/wrapCustomResolver.d.ts.map +1 -0
  138. package/dist/graphql/utilities/wrapCustomResolver.js +34 -0
  139. package/dist/translations/pl.json +24 -24
  140. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  141. package/dist/uploads/getFileByPath.js +7 -2
  142. package/dist/uploads/imageResizer.d.ts.map +1 -1
  143. package/dist/uploads/imageResizer.js +4 -3
  144. package/dist/uploads/types.d.ts +11 -1
  145. package/dist/uploads/types.d.ts.map +1 -1
  146. package/dist/uploads/types.js +1 -1
  147. package/dist/utilities/configToJSONSchema.d.ts +8 -1
  148. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  149. package/dist/utilities/configToJSONSchema.js +24 -25
  150. package/dist/utilities/flattenTopLevelFields.d.ts +7 -0
  151. package/dist/utilities/flattenTopLevelFields.d.ts.map +1 -1
  152. package/dist/utilities/flattenTopLevelFields.js +8 -2
  153. package/dist/utilities/getEntityPolicies.d.ts.map +1 -1
  154. package/dist/utilities/getEntityPolicies.js +6 -2
  155. package/dist/utilities/initTransaction.d.ts.map +1 -1
  156. package/dist/utilities/initTransaction.js +19 -7
  157. package/dist/utilities/isolateTransactionID.d.ts +6 -0
  158. package/dist/utilities/isolateTransactionID.d.ts.map +1 -0
  159. package/dist/utilities/isolateTransactionID.js +38 -0
  160. package/package.json +1 -1
  161. package/utilities.d.ts +1 -1
  162. package/utilities.js +4 -1
@@ -9,6 +9,9 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ withNullableJSONSchemaType: function() {
13
+ return withNullableJSONSchemaType;
14
+ },
12
15
  entityToJSONSchema: function() {
13
16
  return entityToJSONSchema;
14
17
  },
@@ -48,9 +51,7 @@ function buildOptionEnums(options) {
48
51
  return option;
49
52
  });
50
53
  }
51
- /**
52
- * This is used for generating the TypeScript types (payload-types.ts) with the payload generate:types command.
53
- */ function generateEntitySchemas(entities) {
54
+ function generateEntitySchemas(entities) {
54
55
  const properties = [
55
56
  ...entities
56
57
  ].reduce((acc, { slug })=>{
@@ -66,7 +67,7 @@ function buildOptionEnums(options) {
66
67
  type: 'object'
67
68
  };
68
69
  }
69
- function withNullableType(fieldType, isRequired) {
70
+ function withNullableJSONSchemaType(fieldType, isRequired) {
70
71
  const fieldTypes = [
71
72
  fieldType
72
73
  ];
@@ -89,7 +90,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
89
90
  case 'date':
90
91
  {
91
92
  fieldSchema = {
92
- type: withNullableType('string', isRequired)
93
+ type: withNullableJSONSchemaType('string', isRequired)
93
94
  };
94
95
  break;
95
96
  }
@@ -100,11 +101,11 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
100
101
  items: {
101
102
  type: 'number'
102
103
  },
103
- type: withNullableType('array', isRequired)
104
+ type: withNullableJSONSchemaType('array', isRequired)
104
105
  };
105
106
  } else {
106
107
  fieldSchema = {
107
- type: withNullableType('number', isRequired)
108
+ type: withNullableJSONSchemaType('number', isRequired)
108
109
  };
109
110
  }
110
111
  break;
@@ -112,7 +113,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
112
113
  case 'checkbox':
113
114
  {
114
115
  fieldSchema = {
115
- type: withNullableType('boolean', isRequired)
116
+ type: withNullableJSONSchemaType('boolean', isRequired)
116
117
  };
117
118
  break;
118
119
  }
@@ -132,19 +133,17 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
132
133
  }
133
134
  case 'richText':
134
135
  {
135
- fieldSchema = {
136
- items: {
137
- type: 'object'
138
- },
139
- type: withNullableType('array', isRequired)
140
- };
136
+ fieldSchema = field.editor.outputSchema({
137
+ field,
138
+ isRequired
139
+ });
141
140
  break;
142
141
  }
143
142
  case 'radio':
144
143
  {
145
144
  fieldSchema = {
146
145
  enum: buildOptionEnums(field.options),
147
- type: withNullableType('string', isRequired)
146
+ type: withNullableJSONSchemaType('string', isRequired)
148
147
  };
149
148
  break;
150
149
  }
@@ -157,12 +156,12 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
157
156
  enum: optionEnums,
158
157
  type: 'string'
159
158
  },
160
- type: withNullableType('array', isRequired)
159
+ type: withNullableJSONSchemaType('array', isRequired)
161
160
  };
162
161
  } else {
163
162
  fieldSchema = {
164
163
  enum: optionEnums,
165
- type: withNullableType('string', isRequired)
164
+ type: withNullableJSONSchemaType('string', isRequired)
166
165
  };
167
166
  }
168
167
  break;
@@ -180,7 +179,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
180
179
  ],
181
180
  maxItems: 2,
182
181
  minItems: 2,
183
- type: withNullableType('array', isRequired)
182
+ type: withNullableJSONSchemaType('array', isRequired)
184
183
  };
185
184
  break;
186
185
  }
@@ -216,7 +215,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
216
215
  };
217
216
  })
218
217
  },
219
- type: withNullableType('array', isRequired)
218
+ type: withNullableJSONSchemaType('array', isRequired)
220
219
  };
221
220
  } else {
222
221
  fieldSchema = {
@@ -242,7 +241,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
242
241
  'value',
243
242
  'relationTo'
244
243
  ],
245
- type: withNullableType('object', isRequired)
244
+ type: withNullableJSONSchemaType('object', isRequired)
246
245
  };
247
246
  })
248
247
  };
@@ -259,13 +258,13 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
259
258
  }
260
259
  ]
261
260
  },
262
- type: withNullableType('array', isRequired)
261
+ type: withNullableJSONSchemaType('array', isRequired)
263
262
  };
264
263
  } else {
265
264
  fieldSchema = {
266
265
  oneOf: [
267
266
  {
268
- type: withNullableType(collectionIDFieldTypes[field.relationTo], isRequired)
267
+ type: withNullableJSONSchemaType(collectionIDFieldTypes[field.relationTo], isRequired)
269
268
  },
270
269
  {
271
270
  $ref: `#/definitions/${field.relationTo}`
@@ -321,7 +320,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
321
320
  return blockSchema;
322
321
  })
323
322
  },
324
- type: withNullableType('array', isRequired)
323
+ type: withNullableJSONSchemaType('array', isRequired)
325
324
  };
326
325
  break;
327
326
  }
@@ -333,7 +332,7 @@ function fieldsToJSONSchema(collectionIDFieldTypes, fields, interfaceNameDefinit
333
332
  type: 'object',
334
333
  ...fieldsToJSONSchema(collectionIDFieldTypes, field.fields, interfaceNameDefinitions)
335
334
  },
336
- type: withNullableType('array', isRequired)
335
+ type: withNullableJSONSchemaType('array', isRequired)
337
336
  };
338
337
  if (field.interfaceName) {
339
338
  interfaceNameDefinitions.set(field.interfaceName, fieldSchema);
@@ -483,4 +482,4 @@ function configToJSONSchema(config, defaultIDType) {
483
482
  };
484
483
  }
485
484
 
486
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29uZmlnVG9KU09OU2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTQsIEpTT05TY2hlbWE0VHlwZU5hbWUgfSBmcm9tICdqc29uLXNjaGVtYSdcblxuaW1wb3J0IHsgc2luZ3VsYXIgfSBmcm9tICdwbHVyYWxpemUnXG5cbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29uZmlnIH0gZnJvbSAnLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIE9wdGlvbiB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL2dsb2JhbHMvY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB7IGRlZXBDb3B5T2JqZWN0IH0gZnJvbSAnLi9kZWVwQ29weU9iamVjdCdcbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICcuL2Zvcm1hdExhYmVscydcblxuY29uc3QgZmllbGRJc1JlcXVpcmVkID0gKGZpZWxkOiBGaWVsZCkgPT4ge1xuICBjb25zdCBpc0NvbmRpdGlvbmFsID0gQm9vbGVhbihmaWVsZD8uYWRtaW4gJiYgZmllbGQ/LmFkbWluPy5jb25kaXRpb24pXG4gIGlmIChpc0NvbmRpdGlvbmFsKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBpc01hcmtlZFJlcXVpcmVkID0gJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJiBmaWVsZC5yZXF1aXJlZCA9PT0gdHJ1ZVxuICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgaXNNYXJrZWRSZXF1aXJlZCkgcmV0dXJuIHRydWVcblxuICAvLyBpZiBhbnkgc3ViZmllbGRzIGFyZSByZXF1aXJlZCwgdGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICBpZiAoJ2ZpZWxkcycgaW4gZmllbGQgJiYgZmllbGQudHlwZSAhPT0gJ2FycmF5Jykge1xuICAgIHJldHVybiBmaWVsZC5maWVsZHMuc29tZSgoc3ViRmllbGQpID0+IGZpZWxkSXNSZXF1aXJlZChzdWJGaWVsZCkpXG4gIH1cblxuICAvLyBpZiBhbnkgdGFiIHN1YmZpZWxkcyBoYXZlIHJlcXVpcmVkIGZpZWxkcywgdGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYnMnKSB7XG4gICAgcmV0dXJuIGZpZWxkLnRhYnMuc29tZSgodGFiKSA9PiB7XG4gICAgICBpZiAoJ25hbWUnIGluIHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmZpZWxkcy5zb21lKChzdWJGaWVsZCkgPT4gZmllbGRJc1JlcXVpcmVkKHN1YkZpZWxkKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRPcHRpb25FbnVtcyhvcHRpb25zOiBPcHRpb25bXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIG9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24udmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uXG4gIH0pXG59XG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBUeXBlU2NyaXB0IHR5cGVzIChwYXlsb2FkLXR5cGVzLnRzKSB3aXRoIHRoZSBwYXlsb2FkIGdlbmVyYXRlOnR5cGVzIGNvbW1hbmQuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlRW50aXR5U2NoZW1hcyhcbiAgZW50aXRpZXM6IChTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgU2FuaXRpemVkR2xvYmFsQ29uZmlnKVtdLFxuKTogSlNPTlNjaGVtYTQge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gWy4uLmVudGl0aWVzXS5yZWR1Y2UoKGFjYywgeyBzbHVnIH0pID0+IHtcbiAgICBhY2Nbc2x1Z10gPSB7XG4gICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke3NsdWd9YCxcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9KVxuXG4gIHJldHVybiB7XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIHByb3BlcnRpZXMsXG4gICAgcmVxdWlyZWQ6IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLFxuICAgIHR5cGU6ICdvYmplY3QnLFxuICB9XG59XG5cbmZ1bmN0aW9uIHdpdGhOdWxsYWJsZVR5cGUoXG4gIGZpZWxkVHlwZTogSlNPTlNjaGVtYTRUeXBlTmFtZSxcbiAgaXNSZXF1aXJlZDogYm9vbGVhbixcbik6IEpTT05TY2hlbWE0VHlwZU5hbWUgfCBKU09OU2NoZW1hNFR5cGVOYW1lW10ge1xuICBjb25zdCBmaWVsZFR5cGVzID0gW2ZpZWxkVHlwZV1cbiAgaWYgKGlzUmVxdWlyZWQpIHJldHVybiBmaWVsZFR5cGVcbiAgZmllbGRUeXBlcy5wdXNoKCdudWxsJylcbiAgcmV0dXJuIGZpZWxkVHlwZXNcbn1cblxuZnVuY3Rpb24gZmllbGRzVG9KU09OU2NoZW1hKFxuICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzOiB7IFtrZXk6IHN0cmluZ106ICdudW1iZXInIHwgJ3N0cmluZycgfSxcbiAgZmllbGRzOiBGaWVsZFtdLFxuICBpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnM6IE1hcDxzdHJpbmcsIEpTT05TY2hlbWE0Pixcbik6IHtcbiAgcHJvcGVydGllczoge1xuICAgIFtrOiBzdHJpbmddOiBKU09OU2NoZW1hNFxuICB9XG4gIHJlcXVpcmVkOiBzdHJpbmdbXVxufSB7XG4gIGNvbnN0IHJlcXVpcmVkRmllbGROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBmaWVsZHMucmVkdWNlKChmaWVsZFNjaGVtYXMsIGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZElzUmVxdWlyZWQoZmllbGQpXG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSByZXF1aXJlZEZpZWxkTmFtZXMuYWRkKGZpZWxkLm5hbWUpXG5cbiAgICAgICAgbGV0IGZpZWxkU2NoZW1hOiBKU09OU2NoZW1hNFxuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgY2FzZSAnY29kZSc6XG4gICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZSgnc3RyaW5nJywgaXNSZXF1aXJlZCkgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgICAgICBpZiAoZmllbGQuaGFzTWFueSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBpdGVtczogeyB0eXBlOiAnbnVtYmVyJyB9LFxuICAgICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0geyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdudW1iZXInLCBpc1JlcXVpcmVkKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2NoZWNrYm94Jzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2Jvb2xlYW4nLCBpc1JlcXVpcmVkKSB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2pzb24nOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogWydvYmplY3QnLCAnYXJyYXknLCAnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgJ251bGwnXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAncmljaFRleHQnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZSgnYXJyYXknLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdyYWRpbyc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBlbnVtOiBidWlsZE9wdGlvbkVudW1zKGZpZWxkLm9wdGlvbnMpLFxuICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdzdHJpbmcnLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25FbnVtcyA9IGJ1aWxkT3B0aW9uRW51bXMoZmllbGQub3B0aW9ucylcblxuICAgICAgICAgICAgaWYgKGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgIGVudW06IG9wdGlvbkVudW1zLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdhcnJheScsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBlbnVtOiBvcHRpb25FbnVtcyxcbiAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdzdHJpbmcnLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ3BvaW50Jzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBtYXhJdGVtczogMixcbiAgICAgICAgICAgICAgbWluSXRlbXM6IDIsXG4gICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ3JlbGF0aW9uc2hpcCc6IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQucmVsYXRpb25Uby5tYXAoKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25Ubzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0OiByZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uSURGaWVsZFR5cGVzW3JlbGF0aW9uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWY6IGAjL2RlZmluaXRpb25zLyR7cmVsYXRpb259YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogWyd2YWx1ZScsICdyZWxhdGlvblRvJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgICAgb25lT2Y6IGZpZWxkLnJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0OiByZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbcmVsYXRpb25dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtyZWxhdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsndmFsdWUnLCAncmVsYXRpb25UbyddLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ29iamVjdCcsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbZmllbGQucmVsYXRpb25Ub10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke2ZpZWxkLnJlbGF0aW9uVG99YCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdhcnJheScsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbZmllbGQucmVsYXRpb25Ub10sIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5yZWxhdGlvblRvfWAsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICd1cGxvYWQnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uSURGaWVsZFR5cGVzW2ZpZWxkLnJlbGF0aW9uVG9dLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5yZWxhdGlvblRvfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNSZXF1aXJlZCkgZmllbGRTY2hlbWEub25lT2YucHVzaCh7IHR5cGU6ICdudWxsJyB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRmllbGRTY2hlbWFzID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICAgICAgICBibG9jay5maWVsZHMsXG4gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tTY2hlbWE6IEpTT05TY2hlbWE0ID0ge1xuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9ja0ZpZWxkU2NoZW1hcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICAgIGJsb2NrVHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q6IGJsb2NrLnNsdWcsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnYmxvY2tUeXBlJywgLi4uYmxvY2tGaWVsZFNjaGVtYXMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLmludGVyZmFjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLnNldChibG9jay5pbnRlcmZhY2VOYW1lLCBibG9ja1NjaGVtYSlcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICRyZWY6IGAjL2RlZmluaXRpb25zLyR7YmxvY2suaW50ZXJmYWNlTmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja1NjaGVtYVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKCdhcnJheScsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAuLi5maWVsZHNUb0pTT05TY2hlbWEoXG4gICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICAgICAgZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5pbnRlcmZhY2VOYW1lKSB7XG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucy5zZXQoZmllbGQuaW50ZXJmYWNlTmFtZSwgZmllbGRTY2hlbWEpXG5cbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5pbnRlcmZhY2VOYW1lfWAsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAncm93JzpcbiAgICAgICAgICBjYXNlICdjb2xsYXBzaWJsZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkU2NoZW1hID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoaWxkU2NoZW1hLnByb3BlcnRpZXMpLmZvckVhY2goKFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0pID0+IHtcbiAgICAgICAgICAgICAgZmllbGRTY2hlbWFzLnNldChwcm9wTmFtZSwgcHJvcFNjaGVtYSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjaGlsZFNjaGVtYS5yZXF1aXJlZC5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgICAgICByZXF1aXJlZEZpZWxkTmFtZXMuYWRkKHByb3BOYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAndGFicyc6IHtcbiAgICAgICAgICAgIGZpZWxkLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkU2NoZW1hID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25JREZpZWxkVHlwZXMsXG4gICAgICAgICAgICAgICAgdGFiLmZpZWxkcyxcbiAgICAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnMsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKHRhYkhhc05hbWUodGFiKSkge1xuICAgICAgICAgICAgICAgIC8vIGNvdWxkIGhhdmUgaW50ZXJmYWNlXG4gICAgICAgICAgICAgICAgZmllbGRTY2hlbWFzLnNldCh0YWIubmFtZSwge1xuICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgICAuLi5jaGlsZFNjaGVtYSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJlcXVpcmVkRmllbGROYW1lcy5hZGQodGFiLm5hbWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hpbGRTY2hlbWEucHJvcGVydGllcykuZm9yRWFjaCgoW3Byb3BOYW1lLCBwcm9wU2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZmllbGRTY2hlbWFzLnNldChwcm9wTmFtZSwgcHJvcFNjaGVtYSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNoaWxkU2NoZW1hLnJlcXVpcmVkLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZEZpZWxkTmFtZXMuYWRkKHByb3BOYW1lKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIC4uLmZpZWxkc1RvSlNPTlNjaGVtYShjb2xsZWN0aW9uSURGaWVsZFR5cGVzLCBmaWVsZC5maWVsZHMsIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5pbnRlcmZhY2VOYW1lKSB7XG4gICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucy5zZXQoZmllbGQuaW50ZXJmYWNlTmFtZSwgZmllbGRTY2hlbWEpXG5cbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5pbnRlcmZhY2VOYW1lfWAsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGRTY2hlbWEgJiYgZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgICAgICBmaWVsZFNjaGVtYXMuc2V0KGZpZWxkLm5hbWUsIGZpZWxkU2NoZW1hKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkU2NoZW1hc1xuICAgICAgfSwgbmV3IE1hcDxzdHJpbmcsIEpTT05TY2hlbWE0PigpKSxcbiAgICApLFxuICAgIHJlcXVpcmVkOiBBcnJheS5mcm9tKHJlcXVpcmVkRmllbGROYW1lcyksXG4gIH1cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIGFuZCBpcyBleHBvcnRlZCB0aHJvdWdoIHBheWxvYWQvdXRpbGl0aWVzXG5leHBvcnQgZnVuY3Rpb24gZW50aXR5VG9KU09OU2NoZW1hKFxuICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgaW5jb21pbmdFbnRpdHk6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfCBTYW5pdGl6ZWRHbG9iYWxDb25maWcsXG4gIGludGVyZmFjZU5hbWVEZWZpbml0aW9uczogTWFwPHN0cmluZywgSlNPTlNjaGVtYTQ+LFxuICBkZWZhdWx0SURUeXBlOiAnbnVtYmVyJyB8ICd0ZXh0Jyxcbik6IEpTT05TY2hlbWE0IHtcbiAgY29uc3QgZW50aXR5OiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgU2FuaXRpemVkR2xvYmFsQ29uZmlnID0gZGVlcENvcHlPYmplY3QoaW5jb21pbmdFbnRpdHkpXG4gIGNvbnN0IHRpdGxlID0gZW50aXR5LnR5cGVzY3JpcHQ/LmludGVyZmFjZVxuICAgID8gZW50aXR5LnR5cGVzY3JpcHQuaW50ZXJmYWNlXG4gICAgOiBzaW5ndWxhcih0b1dvcmRzKGVudGl0eS5zbHVnLCB0cnVlKSlcblxuICBjb25zdCBpZEZpZWxkOiBGaWVsZEFmZmVjdGluZ0RhdGEgPSB7IG5hbWU6ICdpZCcsIHJlcXVpcmVkOiB0cnVlLCB0eXBlOiBkZWZhdWx0SURUeXBlIGFzICd0ZXh0JyB9XG4gIGNvbnN0IGN1c3RvbUlkRmllbGQgPSBlbnRpdHkuZmllbGRzLmZpbmQoXG4gICAgKGZpZWxkKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiBmaWVsZC5uYW1lID09PSAnaWQnLFxuICApIGFzIEZpZWxkQWZmZWN0aW5nRGF0YVxuXG4gIGlmIChjdXN0b21JZEZpZWxkICYmIGN1c3RvbUlkRmllbGQudHlwZSAhPT0gJ2dyb3VwJyAmJiBjdXN0b21JZEZpZWxkLnR5cGUgIT09ICd0YWInKSB7XG4gICAgY3VzdG9tSWRGaWVsZC5yZXF1aXJlZCA9IHRydWVcbiAgfSBlbHNlIHtcbiAgICBlbnRpdHkuZmllbGRzLnVuc2hpZnQoaWRGaWVsZClcbiAgfVxuXG4gIC8vIG1hcmsgdGltZXN0YW1wIGZpZWxkcyByZXF1aXJlZFxuICBpZiAoJ3RpbWVzdGFtcHMnIGluIGVudGl0eSAmJiBlbnRpdHkudGltZXN0YW1wcyAhPT0gZmFsc2UpIHtcbiAgICBlbnRpdHkuZmllbGRzID0gZW50aXR5LmZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgKGZpZWxkLm5hbWUgPT09ICdjcmVhdGVkQXQnIHx8IGZpZWxkLm5hbWUgPT09ICd1cGRhdGVkQXQnKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmZpZWxkLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmllbGRcbiAgICB9KVxuICB9XG5cbiAgaWYgKCdhdXRoJyBpbiBlbnRpdHkgJiYgZW50aXR5LmF1dGggJiYgIWVudGl0eS5hdXRoPy5kaXNhYmxlTG9jYWxTdHJhdGVneSkge1xuICAgIGVudGl0eS5maWVsZHMucHVzaCh7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ3RleHQnLFxuICAgIH0pXG4gIH1cblxuICAvLyB1c2VkIGZvciByZWxhdGlvbnNoaXAgZmllbGRzLCB0byBkZXRlcm1pbmUgd2hldGhlciB0byB1c2UgYSBzdHJpbmcgb3IgbnVtYmVyIHR5cGUgZm9yIHRoZSBJRFxuICBjb25zdCBjb2xsZWN0aW9uSURGaWVsZFR5cGVzOiB7IFtrZXk6IHN0cmluZ106ICdudW1iZXInIHwgJ3N0cmluZycgfSA9IGNvbmZpZy5jb2xsZWN0aW9ucy5yZWR1Y2UoXG4gICAgKGFjYywgY29sbGVjdGlvbikgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tQ29sbGVjdGlvbklkRmllbGQgPSBjb2xsZWN0aW9uLmZpZWxkcy5maW5kKFxuICAgICAgICAoZmllbGQpID0+ICduYW1lJyBpbiBmaWVsZCAmJiBmaWVsZC5uYW1lID09PSAnaWQnLFxuICAgICAgKVxuXG4gICAgICBhY2NbY29sbGVjdGlvbi5zbHVnXSA9IGRlZmF1bHRJRFR5cGUgPT09ICd0ZXh0JyA/ICdzdHJpbmcnIDogJ251bWJlcidcblxuICAgICAgaWYgKGN1c3RvbUNvbGxlY3Rpb25JZEZpZWxkKSB7XG4gICAgICAgIGFjY1tjb2xsZWN0aW9uLnNsdWddID0gY3VzdG9tQ29sbGVjdGlvbklkRmllbGQudHlwZSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6ICdzdHJpbmcnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2NcbiAgICB9LFxuICAgIHt9LFxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgdGl0bGUsXG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgLi4uZmllbGRzVG9KU09OU2NoZW1hKGNvbGxlY3Rpb25JREZpZWxkVHlwZXMsIGVudGl0eS5maWVsZHMsIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyksXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ1RvSlNPTlNjaGVtYShcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWcsXG4gIGRlZmF1bHRJRFR5cGU/OiAnbnVtYmVyJyB8ICd0ZXh0Jyxcbik6IEpTT05TY2hlbWE0IHtcbiAgLy8gYSBtdXRhYmxlIE1hcCB0byBzdG9yZSBjdXN0b20gdG9wLWxldmVsIGBpbnRlcmZhY2VOYW1lYCB0eXBlc1xuICBjb25zdCBpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnM6IE1hcDxzdHJpbmcsIEpTT05TY2hlbWE0PiA9IG5ldyBNYXAoKVxuICBjb25zdCBlbnRpdHlEZWZpbml0aW9uczogeyBbazogc3RyaW5nXTogSlNPTlNjaGVtYTQgfSA9IFtcbiAgICAuLi5jb25maWcuZ2xvYmFscyxcbiAgICAuLi5jb25maWcuY29sbGVjdGlvbnMsXG4gIF0ucmVkdWNlKChhY2MsIGVudGl0eSkgPT4ge1xuICAgIGFjY1tlbnRpdHkuc2x1Z10gPSBlbnRpdHlUb0pTT05TY2hlbWEoY29uZmlnLCBlbnRpdHksIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucywgZGVmYXVsdElEVHlwZSlcbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9KVxuXG4gIHJldHVybiB7XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIGRlZmluaXRpb25zOiB7IC4uLmVudGl0eURlZmluaXRpb25zLCAuLi5PYmplY3QuZnJvbUVudHJpZXMoaW50ZXJmYWNlTmFtZURlZmluaXRpb25zKSB9LFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGNvbGxlY3Rpb25zOiBnZW5lcmF0ZUVudGl0eVNjaGVtYXMoY29uZmlnLmNvbGxlY3Rpb25zIHx8IFtdKSxcbiAgICAgIGdsb2JhbHM6IGdlbmVyYXRlRW50aXR5U2NoZW1hcyhjb25maWcuZ2xvYmFscyB8fCBbXSksXG4gICAgfSxcbiAgICByZXF1aXJlZDogWydjb2xsZWN0aW9ucycsICdnbG9iYWxzJ10sXG4gICAgdGl0bGU6ICdDb25maWcnLFxuICAgIHR5cGU6ICdvYmplY3QnLFxuICB9XG59XG4iXSwibmFtZXMiOlsiZW50aXR5VG9KU09OU2NoZW1hIiwiY29uZmlnVG9KU09OU2NoZW1hIiwiZmllbGRJc1JlcXVpcmVkIiwiZmllbGQiLCJpc0NvbmRpdGlvbmFsIiwiQm9vbGVhbiIsImFkbWluIiwiY29uZGl0aW9uIiwiaXNNYXJrZWRSZXF1aXJlZCIsInJlcXVpcmVkIiwiZmllbGRBZmZlY3RzRGF0YSIsInR5cGUiLCJmaWVsZHMiLCJzb21lIiwic3ViRmllbGQiLCJ0YWJzIiwidGFiIiwiYnVpbGRPcHRpb25FbnVtcyIsIm9wdGlvbnMiLCJtYXAiLCJvcHRpb24iLCJ2YWx1ZSIsImdlbmVyYXRlRW50aXR5U2NoZW1hcyIsImVudGl0aWVzIiwicHJvcGVydGllcyIsInJlZHVjZSIsImFjYyIsInNsdWciLCIkcmVmIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJPYmplY3QiLCJrZXlzIiwid2l0aE51bGxhYmxlVHlwZSIsImZpZWxkVHlwZSIsImlzUmVxdWlyZWQiLCJmaWVsZFR5cGVzIiwicHVzaCIsImZpZWxkc1RvSlNPTlNjaGVtYSIsImNvbGxlY3Rpb25JREZpZWxkVHlwZXMiLCJpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnMiLCJyZXF1aXJlZEZpZWxkTmFtZXMiLCJTZXQiLCJmcm9tRW50cmllcyIsImZpZWxkU2NoZW1hcyIsImFkZCIsIm5hbWUiLCJmaWVsZFNjaGVtYSIsImhhc01hbnkiLCJpdGVtcyIsImVudW0iLCJvcHRpb25FbnVtcyIsIm1heEl0ZW1zIiwibWluSXRlbXMiLCJBcnJheSIsImlzQXJyYXkiLCJyZWxhdGlvblRvIiwib25lT2YiLCJyZWxhdGlvbiIsImNvbnN0IiwiYmxvY2tzIiwiYmxvY2siLCJibG9ja0ZpZWxkU2NoZW1hcyIsImJsb2NrU2NoZW1hIiwiYmxvY2tUeXBlIiwiaW50ZXJmYWNlTmFtZSIsInNldCIsImNoaWxkU2NoZW1hIiwiZW50cmllcyIsImZvckVhY2giLCJwcm9wTmFtZSIsInByb3BTY2hlbWEiLCJ0YWJIYXNOYW1lIiwiTWFwIiwiZnJvbSIsImNvbmZpZyIsImluY29taW5nRW50aXR5IiwiZGVmYXVsdElEVHlwZSIsImVudGl0eSIsImRlZXBDb3B5T2JqZWN0IiwidGl0bGUiLCJ0eXBlc2NyaXB0IiwiaW50ZXJmYWNlIiwic2luZ3VsYXIiLCJ0b1dvcmRzIiwiaWRGaWVsZCIsImN1c3RvbUlkRmllbGQiLCJmaW5kIiwidW5zaGlmdCIsInRpbWVzdGFtcHMiLCJhdXRoIiwiZGlzYWJsZUxvY2FsU3RyYXRlZ3kiLCJjb2xsZWN0aW9ucyIsImNvbGxlY3Rpb24iLCJjdXN0b21Db2xsZWN0aW9uSWRGaWVsZCIsImVudGl0eURlZmluaXRpb25zIiwiZ2xvYmFscyIsImRlZmluaXRpb25zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQSthZ0JBLGtCQUFrQjtlQUFsQkE7O0lBb0VBQyxrQkFBa0I7ZUFBbEJBOzs7MkJBamZTO3VCQU9vQjtnQ0FDZDs4QkFDUDtBQUV4QixNQUFNQyxrQkFBa0IsQ0FBQ0M7SUFDdkIsTUFBTUMsZ0JBQWdCQyxRQUFRRixPQUFPRyxTQUFTSCxPQUFPRyxPQUFPQztJQUM1RCxJQUFJSCxlQUFlLE9BQU87SUFFMUIsTUFBTUksbUJBQW1CLGNBQWNMLFNBQVNBLE1BQU1NLFFBQVEsS0FBSztJQUNuRSxJQUFJQyxJQUFBQSx1QkFBZ0IsRUFBQ1AsVUFBVUssa0JBQWtCLE9BQU87SUFFeEQsd0RBQXdEO0lBQ3hELElBQUksWUFBWUwsU0FBU0EsTUFBTVEsSUFBSSxLQUFLLFNBQVM7UUFDL0MsT0FBT1IsTUFBTVMsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsV0FBYVosZ0JBQWdCWTtJQUN6RDtJQUVBLG9FQUFvRTtJQUNwRSxJQUFJWCxNQUFNUSxJQUFJLEtBQUssUUFBUTtRQUN6QixPQUFPUixNQUFNWSxJQUFJLENBQUNGLElBQUksQ0FBQyxDQUFDRztZQUN0QixJQUFJLFVBQVVBLEtBQUs7Z0JBQ2pCLE9BQU9BLElBQUlKLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLFdBQWFaLGdCQUFnQlk7WUFDdkQ7WUFDQSxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU87QUFDVDtBQUVBLFNBQVNHLGlCQUFpQkMsT0FBaUI7SUFDekMsT0FBT0EsUUFBUUMsR0FBRyxDQUFDLENBQUNDO1FBQ2xCLElBQUksT0FBT0EsV0FBVyxZQUFZLFdBQVdBLFFBQVE7WUFDbkQsT0FBT0EsT0FBT0MsS0FBSztRQUNyQjtRQUVBLE9BQU9EO0lBQ1Q7QUFDRjtBQUVBOztDQUVDLEdBQ0QsU0FBU0Usc0JBQ1BDLFFBQStEO0lBRS9ELE1BQU1DLGFBQWE7V0FBSUQ7S0FBUyxDQUFDRSxNQUFNLENBQUMsQ0FBQ0MsS0FBSyxFQUFFQyxJQUFJLEVBQUU7UUFDcERELEdBQUcsQ0FBQ0MsS0FBSyxHQUFHO1lBQ1ZDLE1BQU0sQ0FBQyxjQUFjLEVBQUVELEtBQUssQ0FBQztRQUMvQjtRQUVBLE9BQU9EO0lBQ1QsR0FBRyxDQUFDO0lBRUosT0FBTztRQUNMRyxzQkFBc0I7UUFDdEJMO1FBQ0FmLFVBQVVxQixPQUFPQyxJQUFJLENBQUNQO1FBQ3RCYixNQUFNO0lBQ1I7QUFDRjtBQUVBLFNBQVNxQixpQkFDUEMsU0FBOEIsRUFDOUJDLFVBQW1CO0lBRW5CLE1BQU1DLGFBQWE7UUFBQ0Y7S0FBVTtJQUM5QixJQUFJQyxZQUFZLE9BQU9EO0lBQ3ZCRSxXQUFXQyxJQUFJLENBQUM7SUFDaEIsT0FBT0Q7QUFDVDtBQUVBLFNBQVNFLG1CQUNQQyxzQkFBOEQsRUFDOUQxQixNQUFlLEVBQ2YyQix3QkFBa0Q7SUFPbEQsTUFBTUMscUJBQXFCLElBQUlDO0lBRS9CLE9BQU87UUFDTGpCLFlBQVlNLE9BQU9ZLFdBQVcsQ0FDNUI5QixPQUFPYSxNQUFNLENBQUMsQ0FBQ2tCLGNBQWN4QztZQUMzQixNQUFNK0IsYUFBYXhCLElBQUFBLHVCQUFnQixFQUFDUCxVQUFVRCxnQkFBZ0JDO1lBQzlELElBQUkrQixZQUFZTSxtQkFBbUJJLEdBQUcsQ0FBQ3pDLE1BQU0wQyxJQUFJO1lBRWpELElBQUlDO1lBQ0osT0FBUTNDLE1BQU1RLElBQUk7Z0JBQ2hCLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztvQkFBUTt3QkFDWG1DLGNBQWM7NEJBQUVuQyxNQUFNcUIsaUJBQWlCLFVBQVVFO3dCQUFZO3dCQUM3RDtvQkFDRjtnQkFFQSxLQUFLO29CQUFVO3dCQUNiLElBQUkvQixNQUFNNEMsT0FBTyxLQUFLLE1BQU07NEJBQzFCRCxjQUFjO2dDQUNaRSxPQUFPO29DQUFFckMsTUFBTTtnQ0FBUztnQ0FDeEJBLE1BQU1xQixpQkFBaUIsU0FBU0U7NEJBQ2xDO3dCQUNGLE9BQU87NEJBQ0xZLGNBQWM7Z0NBQUVuQyxNQUFNcUIsaUJBQWlCLFVBQVVFOzRCQUFZO3dCQUMvRDt3QkFDQTtvQkFDRjtnQkFFQSxLQUFLO29CQUFZO3dCQUNmWSxjQUFjOzRCQUFFbkMsTUFBTXFCLGlCQUFpQixXQUFXRTt3QkFBWTt3QkFDOUQ7b0JBQ0Y7Z0JBRUEsS0FBSztvQkFBUTt3QkFDWFksY0FBYzs0QkFDWm5DLE1BQU07Z0NBQUM7Z0NBQVU7Z0NBQVM7Z0NBQVU7Z0NBQVU7Z0NBQVc7NkJBQU87d0JBQ2xFO3dCQUNBO29CQUNGO2dCQUVBLEtBQUs7b0JBQVk7d0JBQ2ZtQyxjQUFjOzRCQUNaRSxPQUFPO2dDQUNMckMsTUFBTTs0QkFDUjs0QkFDQUEsTUFBTXFCLGlCQUFpQixTQUFTRTt3QkFDbEM7d0JBRUE7b0JBQ0Y7Z0JBRUEsS0FBSztvQkFBUzt3QkFDWlksY0FBYzs0QkFDWkcsTUFBTWhDLGlCQUFpQmQsTUFBTWUsT0FBTzs0QkFDcENQLE1BQU1xQixpQkFBaUIsVUFBVUU7d0JBQ25DO3dCQUVBO29CQUNGO2dCQUVBLEtBQUs7b0JBQVU7d0JBQ2IsTUFBTWdCLGNBQWNqQyxpQkFBaUJkLE1BQU1lLE9BQU87d0JBRWxELElBQUlmLE1BQU00QyxPQUFPLEVBQUU7NEJBQ2pCRCxjQUFjO2dDQUNaRSxPQUFPO29DQUNMQyxNQUFNQztvQ0FDTnZDLE1BQU07Z0NBQ1I7Z0NBQ0FBLE1BQU1xQixpQkFBaUIsU0FBU0U7NEJBQ2xDO3dCQUNGLE9BQU87NEJBQ0xZLGNBQWM7Z0NBQ1pHLE1BQU1DO2dDQUNOdkMsTUFBTXFCLGlCQUFpQixVQUFVRTs0QkFDbkM7d0JBQ0Y7d0JBRUE7b0JBQ0Y7Z0JBRUEsS0FBSztvQkFBUzt3QkFDWlksY0FBYzs0QkFDWkUsT0FBTztnQ0FDTDtvQ0FDRXJDLE1BQU07Z0NBQ1I7Z0NBQ0E7b0NBQ0VBLE1BQU07Z0NBQ1I7NkJBQ0Q7NEJBQ0R3QyxVQUFVOzRCQUNWQyxVQUFVOzRCQUNWekMsTUFBTXFCLGlCQUFpQixTQUFTRTt3QkFDbEM7d0JBQ0E7b0JBQ0Y7Z0JBRUEsS0FBSztvQkFBZ0I7d0JBQ25CLElBQUltQixNQUFNQyxPQUFPLENBQUNuRCxNQUFNb0QsVUFBVSxHQUFHOzRCQUNuQyxJQUFJcEQsTUFBTTRDLE9BQU8sRUFBRTtnQ0FDakJELGNBQWM7b0NBQ1pFLE9BQU87d0NBQ0xRLE9BQU9yRCxNQUFNb0QsVUFBVSxDQUFDcEMsR0FBRyxDQUFDLENBQUNzQzs0Q0FDM0IsT0FBTztnREFDTDVCLHNCQUFzQjtnREFDdEJMLFlBQVk7b0RBQ1YrQixZQUFZO3dEQUNWRyxPQUFPRDtvREFDVDtvREFDQXBDLE9BQU87d0RBQ0xtQyxPQUFPOzREQUNMO2dFQUNFN0MsTUFBTTJCLHNCQUFzQixDQUFDbUIsU0FBUzs0REFDeEM7NERBQ0E7Z0VBQ0U3QixNQUFNLENBQUMsY0FBYyxFQUFFNkIsU0FBUyxDQUFDOzREQUNuQzt5REFDRDtvREFDSDtnREFDRjtnREFDQWhELFVBQVU7b0RBQUM7b0RBQVM7aURBQWE7Z0RBQ2pDRSxNQUFNOzRDQUNSO3dDQUNGO29DQUNGO29DQUNBQSxNQUFNcUIsaUJBQWlCLFNBQVNFO2dDQUNsQzs0QkFDRixPQUFPO2dDQUNMWSxjQUFjO29DQUNaVSxPQUFPckQsTUFBTW9ELFVBQVUsQ0FBQ3BDLEdBQUcsQ0FBQyxDQUFDc0M7d0NBQzNCLE9BQU87NENBQ0w1QixzQkFBc0I7NENBQ3RCTCxZQUFZO2dEQUNWK0IsWUFBWTtvREFDVkcsT0FBT0Q7Z0RBQ1Q7Z0RBQ0FwQyxPQUFPO29EQUNMbUMsT0FBTzt3REFDTDs0REFDRTdDLE1BQU0yQixzQkFBc0IsQ0FBQ21CLFNBQVM7d0RBQ3hDO3dEQUNBOzREQUNFN0IsTUFBTSxDQUFDLGNBQWMsRUFBRTZCLFNBQVMsQ0FBQzt3REFDbkM7cURBQ0Q7Z0RBQ0g7NENBQ0Y7NENBQ0FoRCxVQUFVO2dEQUFDO2dEQUFTOzZDQUFhOzRDQUNqQ0UsTUFBTXFCLGlCQUFpQixVQUFVRTt3Q0FDbkM7b0NBQ0Y7Z0NBQ0Y7NEJBQ0Y7d0JBQ0YsT0FBTyxJQUFJL0IsTUFBTTRDLE9BQU8sRUFBRTs0QkFDeEJELGNBQWM7Z0NBQ1pFLE9BQU87b0NBQ0xRLE9BQU87d0NBQ0w7NENBQ0U3QyxNQUFNMkIsc0JBQXNCLENBQUNuQyxNQUFNb0QsVUFBVSxDQUFDO3dDQUNoRDt3Q0FDQTs0Q0FDRTNCLE1BQU0sQ0FBQyxjQUFjLEVBQUV6QixNQUFNb0QsVUFBVSxDQUFDLENBQUM7d0NBQzNDO3FDQUNEO2dDQUNIO2dDQUNBNUMsTUFBTXFCLGlCQUFpQixTQUFTRTs0QkFDbEM7d0JBQ0YsT0FBTzs0QkFDTFksY0FBYztnQ0FDWlUsT0FBTztvQ0FDTDt3Q0FDRTdDLE1BQU1xQixpQkFBaUJNLHNCQUFzQixDQUFDbkMsTUFBTW9ELFVBQVUsQ0FBQyxFQUFFckI7b0NBQ25FO29DQUNBO3dDQUNFTixNQUFNLENBQUMsY0FBYyxFQUFFekIsTUFBTW9ELFVBQVUsQ0FBQyxDQUFDO29DQUMzQztpQ0FDRDs0QkFDSDt3QkFDRjt3QkFFQTtvQkFDRjtnQkFFQSxLQUFLO29CQUFVO3dCQUNiVCxjQUFjOzRCQUNaVSxPQUFPO2dDQUNMO29DQUNFN0MsTUFBTTJCLHNCQUFzQixDQUFDbkMsTUFBTW9ELFVBQVUsQ0FBQztnQ0FDaEQ7Z0NBQ0E7b0NBQ0UzQixNQUFNLENBQUMsY0FBYyxFQUFFekIsTUFBTW9ELFVBQVUsQ0FBQyxDQUFDO2dDQUMzQzs2QkFDRDt3QkFDSDt3QkFDQSxJQUFJLENBQUNyQixZQUFZWSxZQUFZVSxLQUFLLENBQUNwQixJQUFJLENBQUM7NEJBQUV6QixNQUFNO3dCQUFPO3dCQUN2RDtvQkFDRjtnQkFFQSxLQUFLO29CQUFVO3dCQUNibUMsY0FBYzs0QkFDWkUsT0FBTztnQ0FDTFEsT0FBT3JELE1BQU13RCxNQUFNLENBQUN4QyxHQUFHLENBQUMsQ0FBQ3lDO29DQUN2QixNQUFNQyxvQkFBb0J4QixtQkFDeEJDLHdCQUNBc0IsTUFBTWhELE1BQU0sRUFDWjJCO29DQUdGLE1BQU11QixjQUEyQjt3Q0FDL0JqQyxzQkFBc0I7d0NBQ3RCTCxZQUFZOzRDQUNWLEdBQUdxQyxrQkFBa0JyQyxVQUFVOzRDQUMvQnVDLFdBQVc7Z0RBQ1RMLE9BQU9FLE1BQU1qQyxJQUFJOzRDQUNuQjt3Q0FDRjt3Q0FDQWxCLFVBQVU7NENBQUM7K0NBQWdCb0Qsa0JBQWtCcEQsUUFBUTt5Q0FBQzt3Q0FDdERFLE1BQU07b0NBQ1I7b0NBRUEsSUFBSWlELE1BQU1JLGFBQWEsRUFBRTt3Q0FDdkJ6Qix5QkFBeUIwQixHQUFHLENBQUNMLE1BQU1JLGFBQWEsRUFBRUY7d0NBRWxELE9BQU87NENBQ0xsQyxNQUFNLENBQUMsY0FBYyxFQUFFZ0MsTUFBTUksYUFBYSxDQUFDLENBQUM7d0NBQzlDO29DQUNGO29DQUVBLE9BQU9GO2dDQUNUOzRCQUNGOzRCQUNBbkQsTUFBTXFCLGlCQUFpQixTQUFTRTt3QkFDbEM7d0JBQ0E7b0JBQ0Y7Z0JBRUEsS0FBSztvQkFBUzt3QkFDWlksY0FBYzs0QkFDWkUsT0FBTztnQ0FDTG5CLHNCQUFzQjtnQ0FDdEJsQixNQUFNO2dDQUNOLEdBQUcwQixtQkFDREMsd0JBQ0FuQyxNQUFNUyxNQUFNLEVBQ1oyQix5QkFDRDs0QkFDSDs0QkFDQTVCLE1BQU1xQixpQkFBaUIsU0FBU0U7d0JBQ2xDO3dCQUVBLElBQUkvQixNQUFNNkQsYUFBYSxFQUFFOzRCQUN2QnpCLHlCQUF5QjBCLEdBQUcsQ0FBQzlELE1BQU02RCxhQUFhLEVBQUVsQjs0QkFFbERBLGNBQWM7Z0NBQ1psQixNQUFNLENBQUMsY0FBYyxFQUFFekIsTUFBTTZELGFBQWEsQ0FBQyxDQUFDOzRCQUM5Qzt3QkFDRjt3QkFDQTtvQkFDRjtnQkFFQSxLQUFLO2dCQUNMLEtBQUs7b0JBQWU7d0JBQ2xCLE1BQU1FLGNBQWM3QixtQkFDbEJDLHdCQUNBbkMsTUFBTVMsTUFBTSxFQUNaMkI7d0JBRUZULE9BQU9xQyxPQUFPLENBQUNELFlBQVkxQyxVQUFVLEVBQUU0QyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxVQUFVQyxXQUFXOzRCQUNwRTNCLGFBQWFzQixHQUFHLENBQUNJLFVBQVVDO3dCQUM3Qjt3QkFDQUosWUFBWXpELFFBQVEsQ0FBQzJELE9BQU8sQ0FBQyxDQUFDQzs0QkFDNUI3QixtQkFBbUJJLEdBQUcsQ0FBQ3lCO3dCQUN6Qjt3QkFDQTtvQkFDRjtnQkFFQSxLQUFLO29CQUFRO3dCQUNYbEUsTUFBTVksSUFBSSxDQUFDcUQsT0FBTyxDQUFDLENBQUNwRDs0QkFDbEIsTUFBTWtELGNBQWM3QixtQkFDbEJDLHdCQUNBdEIsSUFBSUosTUFBTSxFQUNWMkI7NEJBRUYsSUFBSWdDLElBQUFBLGlCQUFVLEVBQUN2RCxNQUFNO2dDQUNuQix1QkFBdUI7Z0NBQ3ZCMkIsYUFBYXNCLEdBQUcsQ0FBQ2pELElBQUk2QixJQUFJLEVBQUU7b0NBQ3pCaEIsc0JBQXNCO29DQUN0QmxCLE1BQU07b0NBQ04sR0FBR3VELFdBQVc7Z0NBQ2hCO2dDQUNBMUIsbUJBQW1CSSxHQUFHLENBQUM1QixJQUFJNkIsSUFBSTs0QkFDakMsT0FBTztnQ0FDTGYsT0FBT3FDLE9BQU8sQ0FBQ0QsWUFBWTFDLFVBQVUsRUFBRTRDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLFVBQVVDLFdBQVc7b0NBQ3BFM0IsYUFBYXNCLEdBQUcsQ0FBQ0ksVUFBVUM7Z0NBQzdCO2dDQUNBSixZQUFZekQsUUFBUSxDQUFDMkQsT0FBTyxDQUFDLENBQUNDO29DQUM1QjdCLG1CQUFtQkksR0FBRyxDQUFDeUI7Z0NBQ3pCOzRCQUNGO3dCQUNGO3dCQUNBO29CQUNGO2dCQUVBLEtBQUs7b0JBQVM7d0JBQ1p2QixjQUFjOzRCQUNaakIsc0JBQXNCOzRCQUN0QmxCLE1BQU07NEJBQ04sR0FBRzBCLG1CQUFtQkMsd0JBQXdCbkMsTUFBTVMsTUFBTSxFQUFFMkIseUJBQXlCO3dCQUN2Rjt3QkFFQSxJQUFJcEMsTUFBTTZELGFBQWEsRUFBRTs0QkFDdkJ6Qix5QkFBeUIwQixHQUFHLENBQUM5RCxNQUFNNkQsYUFBYSxFQUFFbEI7NEJBRWxEQSxjQUFjO2dDQUNabEIsTUFBTSxDQUFDLGNBQWMsRUFBRXpCLE1BQU02RCxhQUFhLENBQUMsQ0FBQzs0QkFDOUM7d0JBQ0Y7d0JBQ0E7b0JBQ0Y7Z0JBRUE7b0JBQVM7d0JBQ1A7b0JBQ0Y7WUFDRjtZQUVBLElBQUlsQixlQUFlcEMsSUFBQUEsdUJBQWdCLEVBQUNQLFFBQVE7Z0JBQzFDd0MsYUFBYXNCLEdBQUcsQ0FBQzlELE1BQU0wQyxJQUFJLEVBQUVDO1lBQy9CO1lBRUEsT0FBT0g7UUFDVCxHQUFHLElBQUk2QjtRQUVUL0QsVUFBVTRDLE1BQU1vQixJQUFJLENBQUNqQztJQUN2QjtBQUNGO0FBR08sU0FBU3hDLG1CQUNkMEUsTUFBdUIsRUFDdkJDLGNBQWlFLEVBQ2pFcEMsd0JBQWtELEVBQ2xEcUMsYUFBZ0M7SUFFaEMsTUFBTUMsU0FBNERDLElBQUFBLDhCQUFjLEVBQUNIO0lBQ2pGLE1BQU1JLFFBQVFGLE9BQU9HLFVBQVUsRUFBRUMsWUFDN0JKLE9BQU9HLFVBQVUsQ0FBQ0MsU0FBUyxHQUMzQkMsSUFBQUEsbUJBQVEsRUFBQ0MsSUFBQUEscUJBQU8sRUFBQ04sT0FBT2xELElBQUksRUFBRTtJQUVsQyxNQUFNeUQsVUFBOEI7UUFBRXZDLE1BQU07UUFBTXBDLFVBQVU7UUFBTUUsTUFBTWlFO0lBQXdCO0lBQ2hHLE1BQU1TLGdCQUFnQlIsT0FBT2pFLE1BQU0sQ0FBQzBFLElBQUksQ0FDdEMsQ0FBQ25GLFFBQVVPLElBQUFBLHVCQUFnQixFQUFDUCxVQUFVQSxNQUFNMEMsSUFBSSxLQUFLO0lBR3ZELElBQUl3QyxpQkFBaUJBLGNBQWMxRSxJQUFJLEtBQUssV0FBVzBFLGNBQWMxRSxJQUFJLEtBQUssT0FBTztRQUNuRjBFLGNBQWM1RSxRQUFRLEdBQUc7SUFDM0IsT0FBTztRQUNMb0UsT0FBT2pFLE1BQU0sQ0FBQzJFLE9BQU8sQ0FBQ0g7SUFDeEI7SUFFQSxpQ0FBaUM7SUFDakMsSUFBSSxnQkFBZ0JQLFVBQVVBLE9BQU9XLFVBQVUsS0FBSyxPQUFPO1FBQ3pEWCxPQUFPakUsTUFBTSxHQUFHaUUsT0FBT2pFLE1BQU0sQ0FBQ08sR0FBRyxDQUFDLENBQUNoQjtZQUNqQyxJQUFJTyxJQUFBQSx1QkFBZ0IsRUFBQ1AsVUFBV0EsQ0FBQUEsTUFBTTBDLElBQUksS0FBSyxlQUFlMUMsTUFBTTBDLElBQUksS0FBSyxXQUFVLEdBQUk7Z0JBQ3pGLE9BQU87b0JBQ0wsR0FBRzFDLEtBQUs7b0JBQ1JNLFVBQVU7Z0JBQ1o7WUFDRjtZQUNBLE9BQU9OO1FBQ1Q7SUFDRjtJQUVBLElBQUksVUFBVTBFLFVBQVVBLE9BQU9ZLElBQUksSUFBSSxDQUFDWixPQUFPWSxJQUFJLEVBQUVDLHNCQUFzQjtRQUN6RWIsT0FBT2pFLE1BQU0sQ0FBQ3dCLElBQUksQ0FBQztZQUNqQlMsTUFBTTtZQUNObEMsTUFBTTtRQUNSO0lBQ0Y7SUFFQSwrRkFBK0Y7SUFDL0YsTUFBTTJCLHlCQUFpRW9DLE9BQU9pQixXQUFXLENBQUNsRSxNQUFNLENBQzlGLENBQUNDLEtBQUtrRTtRQUNKLE1BQU1DLDBCQUEwQkQsV0FBV2hGLE1BQU0sQ0FBQzBFLElBQUksQ0FDcEQsQ0FBQ25GLFFBQVUsVUFBVUEsU0FBU0EsTUFBTTBDLElBQUksS0FBSztRQUcvQ25CLEdBQUcsQ0FBQ2tFLFdBQVdqRSxJQUFJLENBQUMsR0FBR2lELGtCQUFrQixTQUFTLFdBQVc7UUFFN0QsSUFBSWlCLHlCQUF5QjtZQUMzQm5FLEdBQUcsQ0FBQ2tFLFdBQVdqRSxJQUFJLENBQUMsR0FBR2tFLHdCQUF3QmxGLElBQUksS0FBSyxXQUFXLFdBQVc7UUFDaEY7UUFFQSxPQUFPZTtJQUNULEdBQ0EsQ0FBQztJQUdILE9BQU87UUFDTEcsc0JBQXNCO1FBQ3RCa0Q7UUFDQXBFLE1BQU07UUFDTixHQUFHMEIsbUJBQW1CQyx3QkFBd0J1QyxPQUFPakUsTUFBTSxFQUFFMkIseUJBQXlCO0lBQ3hGO0FBQ0Y7QUFFTyxTQUFTdEMsbUJBQ2R5RSxNQUF1QixFQUN2QkUsYUFBaUM7SUFFakMsZ0VBQWdFO0lBQ2hFLE1BQU1yQywyQkFBcUQsSUFBSWlDO0lBQy9ELE1BQU1zQixvQkFBa0Q7V0FDbkRwQixPQUFPcUIsT0FBTztXQUNkckIsT0FBT2lCLFdBQVc7S0FDdEIsQ0FBQ2xFLE1BQU0sQ0FBQyxDQUFDQyxLQUFLbUQ7UUFDYm5ELEdBQUcsQ0FBQ21ELE9BQU9sRCxJQUFJLENBQUMsR0FBRzNCLG1CQUFtQjBFLFFBQVFHLFFBQVF0QywwQkFBMEJxQztRQUNoRixPQUFPbEQ7SUFDVCxHQUFHLENBQUM7SUFFSixPQUFPO1FBQ0xHLHNCQUFzQjtRQUN0Qm1FLGFBQWE7WUFBRSxHQUFHRixpQkFBaUI7WUFBRSxHQUFHaEUsT0FBT1ksV0FBVyxDQUFDSCx5QkFBeUI7UUFBQztRQUNyRmYsWUFBWTtZQUNWbUUsYUFBYXJFLHNCQUFzQm9ELE9BQU9pQixXQUFXLElBQUksRUFBRTtZQUMzREksU0FBU3pFLHNCQUFzQm9ELE9BQU9xQixPQUFPLElBQUksRUFBRTtRQUNyRDtRQUNBdEYsVUFBVTtZQUFDO1lBQWU7U0FBVTtRQUNwQ3NFLE9BQU87UUFDUHBFLE1BQU07SUFDUjtBQUNGIn0=
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29uZmlnVG9KU09OU2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTQsIEpTT05TY2hlbWE0VHlwZU5hbWUgfSBmcm9tICdqc29uLXNjaGVtYSdcblxuaW1wb3J0IHsgc2luZ3VsYXIgfSBmcm9tICdwbHVyYWxpemUnXG5cbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJy4uL2NvbGxlY3Rpb25zL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgU2FuaXRpemVkQ29uZmlnIH0gZnJvbSAnLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIE9wdGlvbiB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL2dsb2JhbHMvY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB7IGRlZXBDb3B5T2JqZWN0IH0gZnJvbSAnLi9kZWVwQ29weU9iamVjdCdcbmltcG9ydCB7IHRvV29yZHMgfSBmcm9tICcuL2Zvcm1hdExhYmVscydcblxuY29uc3QgZmllbGRJc1JlcXVpcmVkID0gKGZpZWxkOiBGaWVsZCkgPT4ge1xuICBjb25zdCBpc0NvbmRpdGlvbmFsID0gQm9vbGVhbihmaWVsZD8uYWRtaW4gJiYgZmllbGQ/LmFkbWluPy5jb25kaXRpb24pXG4gIGlmIChpc0NvbmRpdGlvbmFsKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBpc01hcmtlZFJlcXVpcmVkID0gJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJiBmaWVsZC5yZXF1aXJlZCA9PT0gdHJ1ZVxuICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgaXNNYXJrZWRSZXF1aXJlZCkgcmV0dXJuIHRydWVcblxuICAvLyBpZiBhbnkgc3ViZmllbGRzIGFyZSByZXF1aXJlZCwgdGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICBpZiAoJ2ZpZWxkcycgaW4gZmllbGQgJiYgZmllbGQudHlwZSAhPT0gJ2FycmF5Jykge1xuICAgIHJldHVybiBmaWVsZC5maWVsZHMuc29tZSgoc3ViRmllbGQpID0+IGZpZWxkSXNSZXF1aXJlZChzdWJGaWVsZCkpXG4gIH1cblxuICAvLyBpZiBhbnkgdGFiIHN1YmZpZWxkcyBoYXZlIHJlcXVpcmVkIGZpZWxkcywgdGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYnMnKSB7XG4gICAgcmV0dXJuIGZpZWxkLnRhYnMuc29tZSgodGFiKSA9PiB7XG4gICAgICBpZiAoJ25hbWUnIGluIHRhYikge1xuICAgICAgICByZXR1cm4gdGFiLmZpZWxkcy5zb21lKChzdWJGaWVsZCkgPT4gZmllbGRJc1JlcXVpcmVkKHN1YkZpZWxkKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRPcHRpb25FbnVtcyhvcHRpb25zOiBPcHRpb25bXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIG9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24udmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRW50aXR5U2NoZW1hcyhcbiAgZW50aXRpZXM6IChTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgU2FuaXRpemVkR2xvYmFsQ29uZmlnKVtdLFxuKTogSlNPTlNjaGVtYTQge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gWy4uLmVudGl0aWVzXS5yZWR1Y2UoKGFjYywgeyBzbHVnIH0pID0+IHtcbiAgICBhY2Nbc2x1Z10gPSB7XG4gICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke3NsdWd9YCxcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHt9KVxuXG4gIHJldHVybiB7XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIHByb3BlcnRpZXMsXG4gICAgcmVxdWlyZWQ6IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLFxuICAgIHR5cGU6ICdvYmplY3QnLFxuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gU2NoZW1hIFR5cGUgd2l0aCAnbnVsbCcgYWRkZWQgaWYgdGhlIGZpZWxkIGlzIG5vdCByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOdWxsYWJsZUpTT05TY2hlbWFUeXBlKFxuICBmaWVsZFR5cGU6IEpTT05TY2hlbWE0VHlwZU5hbWUsXG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW4sXG4pOiBKU09OU2NoZW1hNFR5cGVOYW1lIHwgSlNPTlNjaGVtYTRUeXBlTmFtZVtdIHtcbiAgY29uc3QgZmllbGRUeXBlcyA9IFtmaWVsZFR5cGVdXG4gIGlmIChpc1JlcXVpcmVkKSByZXR1cm4gZmllbGRUeXBlXG4gIGZpZWxkVHlwZXMucHVzaCgnbnVsbCcpXG4gIHJldHVybiBmaWVsZFR5cGVzXG59XG5cbmZ1bmN0aW9uIGZpZWxkc1RvSlNPTlNjaGVtYShcbiAgY29sbGVjdGlvbklERmllbGRUeXBlczogeyBba2V5OiBzdHJpbmddOiAnbnVtYmVyJyB8ICdzdHJpbmcnIH0sXG4gIGZpZWxkczogRmllbGRbXSxcbiAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zOiBNYXA8c3RyaW5nLCBKU09OU2NoZW1hND4sXG4pOiB7XG4gIHByb3BlcnRpZXM6IHtcbiAgICBbazogc3RyaW5nXTogSlNPTlNjaGVtYTRcbiAgfVxuICByZXF1aXJlZDogc3RyaW5nW11cbn0ge1xuICBjb25zdCByZXF1aXJlZEZpZWxkTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG4gIHJldHVybiB7XG4gICAgcHJvcGVydGllczogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgZmllbGRzLnJlZHVjZSgoZmllbGRTY2hlbWFzLCBmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCBpc1JlcXVpcmVkID0gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGRJc1JlcXVpcmVkKGZpZWxkKVxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkgcmVxdWlyZWRGaWVsZE5hbWVzLmFkZChmaWVsZC5uYW1lKVxuXG4gICAgICAgIGxldCBmaWVsZFNjaGVtYTogSlNPTlNjaGVtYTRcbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICAgIGNhc2UgJ2NvZGUnOlxuICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICBjYXNlICdkYXRlJzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7IHR5cGU6IHdpdGhOdWxsYWJsZUpTT05TY2hlbWFUeXBlKCdzdHJpbmcnLCBpc1JlcXVpcmVkKSB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ251bWJlcic6IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5oYXNNYW55ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlSlNPTlNjaGVtYVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0geyB0eXBlOiB3aXRoTnVsbGFibGVKU09OU2NoZW1hVHlwZSgnbnVtYmVyJywgaXNSZXF1aXJlZCkgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0geyB0eXBlOiB3aXRoTnVsbGFibGVKU09OU2NoZW1hVHlwZSgnYm9vbGVhbicsIGlzUmVxdWlyZWQpIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICB0eXBlOiBbJ29iamVjdCcsICdhcnJheScsICdzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnbnVsbCddLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdyaWNoVGV4dCc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0gZmllbGQuZWRpdG9yLm91dHB1dFNjaGVtYSh7XG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICBpc1JlcXVpcmVkLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdyYWRpbyc6IHtcbiAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICBlbnVtOiBidWlsZE9wdGlvbkVudW1zKGZpZWxkLm9wdGlvbnMpLFxuICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVKU09OU2NoZW1hVHlwZSgnc3RyaW5nJywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnc2VsZWN0Jzoge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uRW51bXMgPSBidWlsZE9wdGlvbkVudW1zKGZpZWxkLm9wdGlvbnMpXG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICBlbnVtOiBvcHRpb25FbnVtcyxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlSlNPTlNjaGVtYVR5cGUoJ2FycmF5JywgaXNSZXF1aXJlZCksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIGVudW06IG9wdGlvbkVudW1zLFxuICAgICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZUpTT05TY2hlbWFUeXBlKCdzdHJpbmcnLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgJ3BvaW50Jzoge1xuICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBtYXhJdGVtczogMixcbiAgICAgICAgICAgICAgbWluSXRlbXM6IDIsXG4gICAgICAgICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZUpTT05TY2hlbWFUeXBlKCdhcnJheScsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgICAgICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgICAgICAgIGZpZWxkU2NoZW1hID0ge1xuICAgICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgb25lT2Y6IGZpZWxkLnJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdDogcmVsYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbklERmllbGRUeXBlc1tyZWxhdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke3JlbGF0aW9ufWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsndmFsdWUnLCAncmVsYXRpb25UbyddLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVKU09OU2NoZW1hVHlwZSgnYXJyYXknLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQucmVsYXRpb25Uby5tYXAoKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q6IHJlbGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbklERmllbGRUeXBlc1tyZWxhdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke3JlbGF0aW9ufWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogWyd2YWx1ZScsICdyZWxhdGlvblRvJ10sXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlSlNPTlNjaGVtYVR5cGUoJ29iamVjdCcsIGlzUmVxdWlyZWQpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbGxlY3Rpb25JREZpZWxkVHlwZXNbZmllbGQucmVsYXRpb25Ub10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke2ZpZWxkLnJlbGF0aW9uVG99YCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVKU09OU2NoZW1hVHlwZSgnYXJyYXknLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmllbGRTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlSlNPTlNjaGVtYVR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbklERmllbGRUeXBlc1tmaWVsZC5yZWxhdGlvblRvXSxcbiAgICAgICAgICAgICAgICAgICAgICBpc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5yZWxhdGlvblRvfWAsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICd1cGxvYWQnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uSURGaWVsZFR5cGVzW2ZpZWxkLnJlbGF0aW9uVG9dLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgJHJlZjogYCMvZGVmaW5pdGlvbnMvJHtmaWVsZC5yZWxhdGlvblRvfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNSZXF1aXJlZCkgZmllbGRTY2hlbWEub25lT2YucHVzaCh7IHR5cGU6ICdudWxsJyB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICBvbmVPZjogZmllbGQuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRmllbGRTY2hlbWFzID0gZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uSURGaWVsZFR5cGVzLFxuICAgICAgICAgICAgICAgICAgICBibG9jay5maWVsZHMsXG4gICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tTY2hlbWE6IEpTT05TY2hlbWE0ID0ge1xuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9ja0ZpZWxkU2NoZW1hcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICAgIGJsb2NrVHlwZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Q6IGJsb2NrLnNsdWcsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsnYmxvY2tUeXBlJywgLi4uYmxvY2tGaWVsZFNjaGVtYXMucmVxdWlyZWRdLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLmludGVyZmFjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLnNldChibG9jay5pbnRlcmZhY2VOYW1lLCBibG9ja1NjaGVtYSlcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICRyZWY6IGAjL2RlZmluaXRpb25zLyR7YmxvY2suaW50ZXJmYWNlTmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja1NjaGVtYVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVKU09OU2NoZW1hVHlwZSgnYXJyYXknLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgLi4uZmllbGRzVG9KU09OU2NoZW1hKFxuICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbklERmllbGRUeXBlcyxcbiAgICAgICAgICAgICAgICAgIGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0eXBlOiB3aXRoTnVsbGFibGVKU09OU2NoZW1hVHlwZSgnYXJyYXknLCBpc1JlcXVpcmVkKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLmludGVyZmFjZU5hbWUpIHtcbiAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLnNldChmaWVsZC5pbnRlcmZhY2VOYW1lLCBmaWVsZFNjaGVtYSlcblxuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke2ZpZWxkLmludGVyZmFjZU5hbWV9YCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdyb3cnOlxuICAgICAgICAgIGNhc2UgJ2NvbGxhcHNpYmxlJzoge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRTY2hlbWEgPSBmaWVsZHNUb0pTT05TY2hlbWEoXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25JREZpZWxkVHlwZXMsXG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hpbGRTY2hlbWEucHJvcGVydGllcykuZm9yRWFjaCgoW3Byb3BOYW1lLCBwcm9wU2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgICBmaWVsZFNjaGVtYXMuc2V0KHByb3BOYW1lLCBwcm9wU2NoZW1hKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNoaWxkU2NoZW1hLnJlcXVpcmVkLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG4gICAgICAgICAgICAgIHJlcXVpcmVkRmllbGROYW1lcy5hZGQocHJvcE5hbWUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICAgICAgZmllbGQudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRTY2hlbWEgPSBmaWVsZHNUb0pTT05TY2hlbWEoXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbklERmllbGRUeXBlcyxcbiAgICAgICAgICAgICAgICB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICAgIGludGVyZmFjZU5hbWVEZWZpbml0aW9ucyxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAodGFiSGFzTmFtZSh0YWIpKSB7XG4gICAgICAgICAgICAgICAgLy8gY291bGQgaGF2ZSBpbnRlcmZhY2VcbiAgICAgICAgICAgICAgICBmaWVsZFNjaGVtYXMuc2V0KHRhYi5uYW1lLCB7XG4gICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAgIC4uLmNoaWxkU2NoZW1hLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmVxdWlyZWRGaWVsZE5hbWVzLmFkZCh0YWIubmFtZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGlsZFNjaGVtYS5wcm9wZXJ0aWVzKS5mb3JFYWNoKChbcHJvcE5hbWUsIHByb3BTY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICAgICAgICBmaWVsZFNjaGVtYXMuc2V0KHByb3BOYW1lLCBwcm9wU2NoZW1hKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgY2hpbGRTY2hlbWEucmVxdWlyZWQuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRmllbGROYW1lcy5hZGQocHJvcE5hbWUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnZ3JvdXAnOiB7XG4gICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgLi4uZmllbGRzVG9KU09OU2NoZW1hKGNvbGxlY3Rpb25JREZpZWxkVHlwZXMsIGZpZWxkLmZpZWxkcywgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLmludGVyZmFjZU5hbWUpIHtcbiAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLnNldChmaWVsZC5pbnRlcmZhY2VOYW1lLCBmaWVsZFNjaGVtYSlcblxuICAgICAgICAgICAgICBmaWVsZFNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgICAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke2ZpZWxkLmludGVyZmFjZU5hbWV9YCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZFNjaGVtYSAmJiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgICAgIGZpZWxkU2NoZW1hcy5zZXQoZmllbGQubmFtZSwgZmllbGRTY2hlbWEpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGRTY2hlbWFzXG4gICAgICB9LCBuZXcgTWFwPHN0cmluZywgSlNPTlNjaGVtYTQ+KCkpLFxuICAgICksXG4gICAgcmVxdWlyZWQ6IEFycmF5LmZyb20ocmVxdWlyZWRGaWVsZE5hbWVzKSxcbiAgfVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgYW5kIGlzIGV4cG9ydGVkIHRocm91Z2ggcGF5bG9hZC91dGlsaXRpZXNcbmV4cG9ydCBmdW5jdGlvbiBlbnRpdHlUb0pTT05TY2hlbWEoXG4gIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnLFxuICBpbmNvbWluZ0VudGl0eTogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB8IFNhbml0aXplZEdsb2JhbENvbmZpZyxcbiAgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zOiBNYXA8c3RyaW5nLCBKU09OU2NoZW1hND4sXG4gIGRlZmF1bHRJRFR5cGU6ICdudW1iZXInIHwgJ3RleHQnLFxuKTogSlNPTlNjaGVtYTQge1xuICBjb25zdCBlbnRpdHk6IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfCBTYW5pdGl6ZWRHbG9iYWxDb25maWcgPSBkZWVwQ29weU9iamVjdChpbmNvbWluZ0VudGl0eSlcbiAgY29uc3QgdGl0bGUgPSBlbnRpdHkudHlwZXNjcmlwdD8uaW50ZXJmYWNlXG4gICAgPyBlbnRpdHkudHlwZXNjcmlwdC5pbnRlcmZhY2VcbiAgICA6IHNpbmd1bGFyKHRvV29yZHMoZW50aXR5LnNsdWcsIHRydWUpKVxuXG4gIGNvbnN0IGlkRmllbGQ6IEZpZWxkQWZmZWN0aW5nRGF0YSA9IHsgbmFtZTogJ2lkJywgcmVxdWlyZWQ6IHRydWUsIHR5cGU6IGRlZmF1bHRJRFR5cGUgYXMgJ3RleHQnIH1cbiAgY29uc3QgY3VzdG9tSWRGaWVsZCA9IGVudGl0eS5maWVsZHMuZmluZChcbiAgICAoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcsXG4gICkgYXMgRmllbGRBZmZlY3RpbmdEYXRhXG5cbiAgaWYgKGN1c3RvbUlkRmllbGQgJiYgY3VzdG9tSWRGaWVsZC50eXBlICE9PSAnZ3JvdXAnICYmIGN1c3RvbUlkRmllbGQudHlwZSAhPT0gJ3RhYicpIHtcbiAgICBjdXN0b21JZEZpZWxkLnJlcXVpcmVkID0gdHJ1ZVxuICB9IGVsc2Uge1xuICAgIGVudGl0eS5maWVsZHMudW5zaGlmdChpZEZpZWxkKVxuICB9XG5cbiAgLy8gbWFyayB0aW1lc3RhbXAgZmllbGRzIHJlcXVpcmVkXG4gIGlmICgndGltZXN0YW1wcycgaW4gZW50aXR5ICYmIGVudGl0eS50aW1lc3RhbXBzICE9PSBmYWxzZSkge1xuICAgIGVudGl0eS5maWVsZHMgPSBlbnRpdHkuZmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSAmJiAoZmllbGQubmFtZSA9PT0gJ2NyZWF0ZWRBdCcgfHwgZmllbGQubmFtZSA9PT0gJ3VwZGF0ZWRBdCcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZmllbGQsXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaWVsZFxuICAgIH0pXG4gIH1cblxuICBpZiAoJ2F1dGgnIGluIGVudGl0eSAmJiBlbnRpdHkuYXV0aCAmJiAhZW50aXR5LmF1dGg/LmRpc2FibGVMb2NhbFN0cmF0ZWd5KSB7XG4gICAgZW50aXR5LmZpZWxkcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgfSlcbiAgfVxuXG4gIC8vIHVzZWQgZm9yIHJlbGF0aW9uc2hpcCBmaWVsZHMsIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHVzZSBhIHN0cmluZyBvciBudW1iZXIgdHlwZSBmb3IgdGhlIElEXG4gIGNvbnN0IGNvbGxlY3Rpb25JREZpZWxkVHlwZXM6IHsgW2tleTogc3RyaW5nXTogJ251bWJlcicgfCAnc3RyaW5nJyB9ID0gY29uZmlnLmNvbGxlY3Rpb25zLnJlZHVjZShcbiAgICAoYWNjLCBjb2xsZWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21Db2xsZWN0aW9uSWRGaWVsZCA9IGNvbGxlY3Rpb24uZmllbGRzLmZpbmQoXG4gICAgICAgIChmaWVsZCkgPT4gJ25hbWUnIGluIGZpZWxkICYmIGZpZWxkLm5hbWUgPT09ICdpZCcsXG4gICAgICApXG5cbiAgICAgIGFjY1tjb2xsZWN0aW9uLnNsdWddID0gZGVmYXVsdElEVHlwZSA9PT0gJ3RleHQnID8gJ3N0cmluZycgOiAnbnVtYmVyJ1xuXG4gICAgICBpZiAoY3VzdG9tQ29sbGVjdGlvbklkRmllbGQpIHtcbiAgICAgICAgYWNjW2NvbGxlY3Rpb24uc2x1Z10gPSBjdXN0b21Db2xsZWN0aW9uSWRGaWVsZC50eXBlID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogJ3N0cmluZydcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sXG4gICAge30sXG4gIClcblxuICByZXR1cm4ge1xuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICB0aXRsZSxcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAuLi5maWVsZHNUb0pTT05TY2hlbWEoY29sbGVjdGlvbklERmllbGRUeXBlcywgZW50aXR5LmZpZWxkcywgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zKSxcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgVHlwZVNjcmlwdCB0eXBlcyAocGF5bG9hZC10eXBlcy50cykgd2l0aCB0aGUgcGF5bG9hZCBnZW5lcmF0ZTp0eXBlcyBjb21tYW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlnVG9KU09OU2NoZW1hKFxuICBjb25maWc6IFNhbml0aXplZENvbmZpZyxcbiAgZGVmYXVsdElEVHlwZT86ICdudW1iZXInIHwgJ3RleHQnLFxuKTogSlNPTlNjaGVtYTQge1xuICAvLyBhIG11dGFibGUgTWFwIHRvIHN0b3JlIGN1c3RvbSB0b3AtbGV2ZWwgYGludGVyZmFjZU5hbWVgIHR5cGVzXG4gIGNvbnN0IGludGVyZmFjZU5hbWVEZWZpbml0aW9uczogTWFwPHN0cmluZywgSlNPTlNjaGVtYTQ+ID0gbmV3IE1hcCgpXG4gIGNvbnN0IGVudGl0eURlZmluaXRpb25zOiB7IFtrOiBzdHJpbmddOiBKU09OU2NoZW1hNCB9ID0gW1xuICAgIC4uLmNvbmZpZy5nbG9iYWxzLFxuICAgIC4uLmNvbmZpZy5jb2xsZWN0aW9ucyxcbiAgXS5yZWR1Y2UoKGFjYywgZW50aXR5KSA9PiB7XG4gICAgYWNjW2VudGl0eS5zbHVnXSA9IGVudGl0eVRvSlNPTlNjaGVtYShjb25maWcsIGVudGl0eSwgaW50ZXJmYWNlTmFtZURlZmluaXRpb25zLCBkZWZhdWx0SURUeXBlKVxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG5cbiAgcmV0dXJuIHtcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgZGVmaW5pdGlvbnM6IHsgLi4uZW50aXR5RGVmaW5pdGlvbnMsIC4uLk9iamVjdC5mcm9tRW50cmllcyhpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnMpIH0sXG4gICAgcHJvcGVydGllczoge1xuICAgICAgY29sbGVjdGlvbnM6IGdlbmVyYXRlRW50aXR5U2NoZW1hcyhjb25maWcuY29sbGVjdGlvbnMgfHwgW10pLFxuICAgICAgZ2xvYmFsczogZ2VuZXJhdGVFbnRpdHlTY2hlbWFzKGNvbmZpZy5nbG9iYWxzIHx8IFtdKSxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ2NvbGxlY3Rpb25zJywgJ2dsb2JhbHMnXSxcbiAgICB0aXRsZTogJ0NvbmZpZycsXG4gICAgdHlwZTogJ29iamVjdCcsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ3aXRoTnVsbGFibGVKU09OU2NoZW1hVHlwZSIsImVudGl0eVRvSlNPTlNjaGVtYSIsImNvbmZpZ1RvSlNPTlNjaGVtYSIsImZpZWxkSXNSZXF1aXJlZCIsImZpZWxkIiwiaXNDb25kaXRpb25hbCIsIkJvb2xlYW4iLCJhZG1pbiIsImNvbmRpdGlvbiIsImlzTWFya2VkUmVxdWlyZWQiLCJyZXF1aXJlZCIsImZpZWxkQWZmZWN0c0RhdGEiLCJ0eXBlIiwiZmllbGRzIiwic29tZSIsInN1YkZpZWxkIiwidGFicyIsInRhYiIsImJ1aWxkT3B0aW9uRW51bXMiLCJvcHRpb25zIiwibWFwIiwib3B0aW9uIiwidmFsdWUiLCJnZW5lcmF0ZUVudGl0eVNjaGVtYXMiLCJlbnRpdGllcyIsInByb3BlcnRpZXMiLCJyZWR1Y2UiLCJhY2MiLCJzbHVnIiwiJHJlZiIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiT2JqZWN0Iiwia2V5cyIsImZpZWxkVHlwZSIsImlzUmVxdWlyZWQiLCJmaWVsZFR5cGVzIiwicHVzaCIsImZpZWxkc1RvSlNPTlNjaGVtYSIsImNvbGxlY3Rpb25JREZpZWxkVHlwZXMiLCJpbnRlcmZhY2VOYW1lRGVmaW5pdGlvbnMiLCJyZXF1aXJlZEZpZWxkTmFtZXMiLCJTZXQiLCJmcm9tRW50cmllcyIsImZpZWxkU2NoZW1hcyIsImFkZCIsIm5hbWUiLCJmaWVsZFNjaGVtYSIsImhhc01hbnkiLCJpdGVtcyIsImVkaXRvciIsIm91dHB1dFNjaGVtYSIsImVudW0iLCJvcHRpb25FbnVtcyIsIm1heEl0ZW1zIiwibWluSXRlbXMiLCJBcnJheSIsImlzQXJyYXkiLCJyZWxhdGlvblRvIiwib25lT2YiLCJyZWxhdGlvbiIsImNvbnN0IiwiYmxvY2tzIiwiYmxvY2siLCJibG9ja0ZpZWxkU2NoZW1hcyIsImJsb2NrU2NoZW1hIiwiYmxvY2tUeXBlIiwiaW50ZXJmYWNlTmFtZSIsInNldCIsImNoaWxkU2NoZW1hIiwiZW50cmllcyIsImZvckVhY2giLCJwcm9wTmFtZSIsInByb3BTY2hlbWEiLCJ0YWJIYXNOYW1lIiwiTWFwIiwiZnJvbSIsImNvbmZpZyIsImluY29taW5nRW50aXR5IiwiZGVmYXVsdElEVHlwZSIsImVudGl0eSIsImRlZXBDb3B5T2JqZWN0IiwidGl0bGUiLCJ0eXBlc2NyaXB0IiwiaW50ZXJmYWNlIiwic2luZ3VsYXIiLCJ0b1dvcmRzIiwiaWRGaWVsZCIsImN1c3RvbUlkRmllbGQiLCJmaW5kIiwidW5zaGlmdCIsInRpbWVzdGFtcHMiLCJhdXRoIiwiZGlzYWJsZUxvY2FsU3RyYXRlZ3kiLCJjb2xsZWN0aW9ucyIsImNvbGxlY3Rpb24iLCJjdXN0b21Db2xsZWN0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
@@ -1,4 +1,11 @@
1
1
  import type { Field, FieldAffectingData, FieldPresentationalOnly } from '../fields/config/types';
2
+ /**
3
+ * Flattens a collection's fields into a single array of fields, as long
4
+ * as the fields do not affect data.
5
+ *
6
+ * @param fields
7
+ * @param keepPresentationalFields if true, will skip flattening fields that are presentational only
8
+ */
2
9
  declare const flattenFields: (fields: Field[], keepPresentationalFields?: boolean) => (FieldAffectingData | FieldPresentationalOnly)[];
3
10
  export default flattenFields;
4
11
  //# sourceMappingURL=flattenTopLevelFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flattenTopLevelFields.d.ts","sourceRoot":"","sources":["../../src/utilities/flattenTopLevelFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAShG,QAAA,MAAM,aAAa,WACT,KAAK,EAAE,6BACY,OAAO,KACjC,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,EAyBhD,CAAA;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"flattenTopLevelFields.d.ts","sourceRoot":"","sources":["../../src/utilities/flattenTopLevelFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAShG;;;;;;GAMG;AACH,QAAA,MAAM,aAAa,WACT,KAAK,EAAE,6BACY,OAAO,KACjC,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,EAyBhD,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -9,7 +9,13 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  const _types = require("../fields/config/types");
12
- const flattenFields = (fields, keepPresentationalFields)=>{
12
+ /**
13
+ * Flattens a collection's fields into a single array of fields, as long
14
+ * as the fields do not affect data.
15
+ *
16
+ * @param fields
17
+ * @param keepPresentationalFields if true, will skip flattening fields that are presentational only
18
+ */ const flattenFields = (fields, keepPresentationalFields)=>{
13
19
  return fields.reduce((fieldsToUse, field)=>{
14
20
  if ((0, _types.fieldAffectsData)(field) || keepPresentationalFields && (0, _types.fieldIsPresentationalOnly)(field)) {
15
21
  return [
@@ -44,4 +50,4 @@ const flattenFields = (fields, keepPresentationalFields)=>{
44
50
  };
45
51
  const _default = flattenFields;
46
52
 
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmxhdHRlblRvcExldmVsRmllbGRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIEZpZWxkQWZmZWN0aW5nRGF0YSwgRmllbGRQcmVzZW50YXRpb25hbE9ubHkgfSBmcm9tICcuLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQge1xuICBmaWVsZEFmZmVjdHNEYXRhLFxuICBmaWVsZEhhc1N1YkZpZWxkcyxcbiAgZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSxcbiAgdGFiSGFzTmFtZSxcbn0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcblxuY29uc3QgZmxhdHRlbkZpZWxkcyA9IChcbiAgZmllbGRzOiBGaWVsZFtdLFxuICBrZWVwUHJlc2VudGF0aW9uYWxGaWVsZHM/OiBib29sZWFuLFxuKTogKEZpZWxkQWZmZWN0aW5nRGF0YSB8IEZpZWxkUHJlc2VudGF0aW9uYWxPbmx5KVtdID0+IHtcbiAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGZpZWxkc1RvVXNlLCBmaWVsZCkgPT4ge1xuICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSB8fCAoa2VlcFByZXNlbnRhdGlvbmFsRmllbGRzICYmIGZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHkoZmllbGQpKSkge1xuICAgICAgcmV0dXJuIFsuLi5maWVsZHNUb1VzZSwgZmllbGRdXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkSGFzU3ViRmllbGRzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIFsuLi5maWVsZHNUb1VzZSwgLi4uZmxhdHRlbkZpZWxkcyhmaWVsZC5maWVsZHMsIGtlZXBQcmVzZW50YXRpb25hbEZpZWxkcyldXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmllbGRzVG9Vc2UsXG4gICAgICAgIC4uLmZpZWxkLnRhYnMucmVkdWNlKCh0YWJGaWVsZHMsIHRhYikgPT4ge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50YWJGaWVsZHMsXG4gICAgICAgICAgICAuLi4odGFiSGFzTmFtZSh0YWIpXG4gICAgICAgICAgICAgID8gW3sgLi4udGFiLCB0eXBlOiAndGFiJyB9XVxuICAgICAgICAgICAgICA6IGZsYXR0ZW5GaWVsZHModGFiLmZpZWxkcywga2VlcFByZXNlbnRhdGlvbmFsRmllbGRzKSksXG4gICAgICAgICAgXVxuICAgICAgICB9LCBbXSksXG4gICAgICBdXG4gICAgfVxuICAgIHJldHVybiBmaWVsZHNUb1VzZVxuICB9LCBbXSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdHRlbkZpZWxkc1xuIl0sIm5hbWVzIjpbImZsYXR0ZW5GaWVsZHMiLCJmaWVsZHMiLCJrZWVwUHJlc2VudGF0aW9uYWxGaWVsZHMiLCJyZWR1Y2UiLCJmaWVsZHNUb1VzZSIsImZpZWxkIiwiZmllbGRBZmZlY3RzRGF0YSIsImZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHkiLCJmaWVsZEhhc1N1YkZpZWxkcyIsInR5cGUiLCJ0YWJzIiwidGFiRmllbGRzIiwidGFiIiwidGFiSGFzTmFtZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkF1Q0E7OztlQUFBOzs7dUJBaENPO0FBRVAsTUFBTUEsZ0JBQWdCLENBQ3BCQyxRQUNBQztJQUVBLE9BQU9ELE9BQU9FLE1BQU0sQ0FBQyxDQUFDQyxhQUFhQztRQUNqQyxJQUFJQyxJQUFBQSx1QkFBZ0IsRUFBQ0QsVUFBV0gsNEJBQTRCSyxJQUFBQSxnQ0FBeUIsRUFBQ0YsUUFBUztZQUM3RixPQUFPO21CQUFJRDtnQkFBYUM7YUFBTTtRQUNoQztRQUVBLElBQUlHLElBQUFBLHdCQUFpQixFQUFDSCxRQUFRO1lBQzVCLE9BQU87bUJBQUlEO21CQUFnQkosY0FBY0ssTUFBTUosTUFBTSxFQUFFQzthQUEwQjtRQUNuRjtRQUVBLElBQUlHLE1BQU1JLElBQUksS0FBSyxRQUFRO1lBQ3pCLE9BQU87bUJBQ0ZMO21CQUNBQyxNQUFNSyxJQUFJLENBQUNQLE1BQU0sQ0FBQyxDQUFDUSxXQUFXQztvQkFDL0IsT0FBTzsyQkFDRkQ7MkJBQ0NFLElBQUFBLGlCQUFVLEVBQUNELE9BQ1g7NEJBQUM7Z0NBQUUsR0FBR0EsR0FBRztnQ0FBRUgsTUFBTTs0QkFBTTt5QkFBRSxHQUN6QlQsY0FBY1ksSUFBSVgsTUFBTSxFQUFFQztxQkFDL0I7Z0JBQ0gsR0FBRyxFQUFFO2FBQ047UUFDSDtRQUNBLE9BQU9FO0lBQ1QsR0FBRyxFQUFFO0FBQ1A7TUFFQSxXQUFlSiJ9
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmxhdHRlblRvcExldmVsRmllbGRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIEZpZWxkQWZmZWN0aW5nRGF0YSwgRmllbGRQcmVzZW50YXRpb25hbE9ubHkgfSBmcm9tICcuLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQge1xuICBmaWVsZEFmZmVjdHNEYXRhLFxuICBmaWVsZEhhc1N1YkZpZWxkcyxcbiAgZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSxcbiAgdGFiSGFzTmFtZSxcbn0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcblxuLyoqXG4gKiBGbGF0dGVucyBhIGNvbGxlY3Rpb24ncyBmaWVsZHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBmaWVsZHMsIGFzIGxvbmdcbiAqIGFzIHRoZSBmaWVsZHMgZG8gbm90IGFmZmVjdCBkYXRhLlxuICpcbiAqIEBwYXJhbSBmaWVsZHNcbiAqIEBwYXJhbSBrZWVwUHJlc2VudGF0aW9uYWxGaWVsZHMgaWYgdHJ1ZSwgd2lsbCBza2lwIGZsYXR0ZW5pbmcgZmllbGRzIHRoYXQgYXJlIHByZXNlbnRhdGlvbmFsIG9ubHlcbiAqL1xuY29uc3QgZmxhdHRlbkZpZWxkcyA9IChcbiAgZmllbGRzOiBGaWVsZFtdLFxuICBrZWVwUHJlc2VudGF0aW9uYWxGaWVsZHM/OiBib29sZWFuLFxuKTogKEZpZWxkQWZmZWN0aW5nRGF0YSB8IEZpZWxkUHJlc2VudGF0aW9uYWxPbmx5KVtdID0+IHtcbiAgcmV0dXJuIGZpZWxkcy5yZWR1Y2UoKGZpZWxkc1RvVXNlLCBmaWVsZCkgPT4ge1xuICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSB8fCAoa2VlcFByZXNlbnRhdGlvbmFsRmllbGRzICYmIGZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHkoZmllbGQpKSkge1xuICAgICAgcmV0dXJuIFsuLi5maWVsZHNUb1VzZSwgZmllbGRdXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkSGFzU3ViRmllbGRzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIFsuLi5maWVsZHNUb1VzZSwgLi4uZmxhdHRlbkZpZWxkcyhmaWVsZC5maWVsZHMsIGtlZXBQcmVzZW50YXRpb25hbEZpZWxkcyldXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJykge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmllbGRzVG9Vc2UsXG4gICAgICAgIC4uLmZpZWxkLnRhYnMucmVkdWNlKCh0YWJGaWVsZHMsIHRhYikgPT4ge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50YWJGaWVsZHMsXG4gICAgICAgICAgICAuLi4odGFiSGFzTmFtZSh0YWIpXG4gICAgICAgICAgICAgID8gW3sgLi4udGFiLCB0eXBlOiAndGFiJyB9XVxuICAgICAgICAgICAgICA6IGZsYXR0ZW5GaWVsZHModGFiLmZpZWxkcywga2VlcFByZXNlbnRhdGlvbmFsRmllbGRzKSksXG4gICAgICAgICAgXVxuICAgICAgICB9LCBbXSksXG4gICAgICBdXG4gICAgfVxuICAgIHJldHVybiBmaWVsZHNUb1VzZVxuICB9LCBbXSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdHRlbkZpZWxkc1xuIl0sIm5hbWVzIjpbImZsYXR0ZW5GaWVsZHMiLCJmaWVsZHMiLCJrZWVwUHJlc2VudGF0aW9uYWxGaWVsZHMiLCJyZWR1Y2UiLCJmaWVsZHNUb1VzZSIsImZpZWxkIiwiZmllbGRBZmZlY3RzRGF0YSIsImZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHkiLCJmaWVsZEhhc1N1YkZpZWxkcyIsInR5cGUiLCJ0YWJzIiwidGFiRmllbGRzIiwidGFiIiwidGFiSGFzTmFtZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE4Q0E7OztlQUFBOzs7dUJBdkNPO0FBRVA7Ozs7OztDQU1DLEdBQ0QsTUFBTUEsZ0JBQWdCLENBQ3BCQyxRQUNBQztJQUVBLE9BQU9ELE9BQU9FLE1BQU0sQ0FBQyxDQUFDQyxhQUFhQztRQUNqQyxJQUFJQyxJQUFBQSx1QkFBZ0IsRUFBQ0QsVUFBV0gsNEJBQTRCSyxJQUFBQSxnQ0FBeUIsRUFBQ0YsUUFBUztZQUM3RixPQUFPO21CQUFJRDtnQkFBYUM7YUFBTTtRQUNoQztRQUVBLElBQUlHLElBQUFBLHdCQUFpQixFQUFDSCxRQUFRO1lBQzVCLE9BQU87bUJBQUlEO21CQUFnQkosY0FBY0ssTUFBTUosTUFBTSxFQUFFQzthQUEwQjtRQUNuRjtRQUVBLElBQUlHLE1BQU1JLElBQUksS0FBSyxRQUFRO1lBQ3pCLE9BQU87bUJBQ0ZMO21CQUNBQyxNQUFNSyxJQUFJLENBQUNQLE1BQU0sQ0FBQyxDQUFDUSxXQUFXQztvQkFDL0IsT0FBTzsyQkFDRkQ7MkJBQ0NFLElBQUFBLGlCQUFVLEVBQUNELE9BQ1g7NEJBQUM7Z0NBQUUsR0FBR0EsR0FBRztnQ0FBRUgsTUFBTTs0QkFBTTt5QkFBRSxHQUN6QlQsY0FBY1ksSUFBSVgsTUFBTSxFQUFFQztxQkFDL0I7Z0JBQ0gsR0FBRyxFQUFFO2FBQ047UUFDSDtRQUNBLE9BQU9FO0lBQ1QsR0FBRyxFQUFFO0FBQ1A7TUFFQSxXQUFlSiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"getEntityPolicies.d.ts","sourceRoot":"","sources":["../../src/utilities/getEntityPolicies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAG5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,UAAU,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,yBAAyB,GAAG,qBAAqB,CAAA;IACzD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAA;CAC9B,CAAA;AAED,KAAK,UAAU,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,QAAQ,GACxD,gBAAgB,GAChB,oBAAoB,CAAA;AAYxB,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAkNvF"}
1
+ {"version":3,"file":"getEntityPolicies.d.ts","sourceRoot":"","sources":["../../src/utilities/getEntityPolicies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAc,MAAM,6BAA6B,CAAA;AAExF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,UAAU,CAAA;AAI9D,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,yBAAyB,GAAG,qBAAqB,CAAA;IACzD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,GAAG,EAAE,cAAc,CAAA;IACnB,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAA;CAC9B,CAAA;AAED,KAAK,UAAU,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,QAAQ,GACxD,gBAAgB,GAChB,oBAAoB,CAAA;AAYxB,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAuNvF"}
@@ -35,6 +35,7 @@ async function getEntityPolicies(args) {
35
35
  collection: entity.slug,
36
36
  limit: 1,
37
37
  overrideAccess: true,
38
+ req,
38
39
  where: {
39
40
  ...where,
40
41
  and: [
@@ -52,7 +53,8 @@ async function getEntityPolicies(args) {
52
53
  return req.payload.findByID({
53
54
  id,
54
55
  collection: entity.slug,
55
- overrideAccess: true
56
+ overrideAccess: true,
57
+ req
56
58
  });
57
59
  }
58
60
  }
@@ -63,8 +65,10 @@ async function getEntityPolicies(args) {
63
65
  if (accessLevel === 'field' && docBeingAccessed === undefined) {
64
66
  docBeingAccessed = await getEntityDoc();
65
67
  }
68
+ const data = req?.body;
66
69
  const accessResult = await access({
67
70
  id,
71
+ data,
68
72
  doc: docBeingAccessed,
69
73
  req
70
74
  });
@@ -196,4 +200,4 @@ async function getEntityPolicies(args) {
196
200
  return policies;
197
201
  }
198
202
 
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZ2V0RW50aXR5UG9saWNpZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uUGVybWlzc2lvbiwgR2xvYmFsUGVybWlzc2lvbiB9IGZyb20gJy4uL2F1dGgvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFR5cGVXaXRoSUQgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEFjY2VzcyB9IGZyb20gJy4uL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBGaWVsZEFjY2VzcyB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL2dsb2JhbHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBBbGxPcGVyYXRpb25zLCBEb2N1bWVudCwgV2hlcmUgfSBmcm9tICcuLi90eXBlcydcblxuaW1wb3J0IHsgdGFiSGFzTmFtZSB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5cbnR5cGUgQXJncyA9IHtcbiAgZW50aXR5OiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgU2FuaXRpemVkR2xvYmFsQ29uZmlnXG4gIGlkPzogc3RyaW5nXG4gIG9wZXJhdGlvbnM6IEFsbE9wZXJhdGlvbnNbXVxuICByZXE6IFBheWxvYWRSZXF1ZXN0XG4gIHR5cGU6ICdjb2xsZWN0aW9uJyB8ICdnbG9iYWwnXG59XG5cbnR5cGUgUmV0dXJuVHlwZTxUIGV4dGVuZHMgQXJncz4gPSBUWyd0eXBlJ10gZXh0ZW5kcyAnZ2xvYmFsJ1xuICA/IEdsb2JhbFBlcm1pc3Npb25cbiAgOiBDb2xsZWN0aW9uUGVybWlzc2lvblxuXG50eXBlIENyZWF0ZUFjY2Vzc1Byb21pc2UgPSAoYXJnczoge1xuICBhY2Nlc3M6IEFjY2VzcyB8IEZpZWxkQWNjZXNzXG4gIGFjY2Vzc0xldmVsOiAnZW50aXR5JyB8ICdmaWVsZCdcbiAgZGlzYWJsZVdoZXJlPzogYm9vbGVhblxuICBvcGVyYXRpb246IEFsbE9wZXJhdGlvbnNcbiAgcG9saWNpZXNPYmo6IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnlcbiAgfVxufSkgPT4gUHJvbWlzZTx2b2lkPlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW50aXR5UG9saWNpZXM8VCBleHRlbmRzIEFyZ3M+KGFyZ3M6IFQpOiBQcm9taXNlPFJldHVyblR5cGU8VD4+IHtcbiAgY29uc3QgeyBpZCwgZW50aXR5LCBvcGVyYXRpb25zLCByZXEsIHR5cGUgfSA9IGFyZ3NcbiAgY29uc3QgaXNMb2dnZWRJbiA9ICEhcmVxLnVzZXJcbiAgLy8gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS1cbiAgLy8gYHBvbGljaWVzYCBhbmQgYHByb21pc2VzYCBnZXQgbXV0YXRlZCBpblxuICAvLyB0aGUgZnVuY3Rpb25zIGJlbG93LCBhbmQgcmV0dXJuIGluIHRoZSBlbmRcbiAgLy8gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS1cbiAgY29uc3QgcG9saWNpZXMgPSB7XG4gICAgZmllbGRzOiB7fSxcbiAgfSBhcyBSZXR1cm5UeXBlPFQ+XG5cbiAgbGV0IGRvY0JlaW5nQWNjZXNzZWRcblxuICBhc3luYyBmdW5jdGlvbiBnZXRFbnRpdHlEb2MoeyB3aGVyZSB9OiB7IHdoZXJlPzogV2hlcmUgfSA9IHt9KTogUHJvbWlzZTxUeXBlV2l0aElEICYgRG9jdW1lbnQ+IHtcbiAgICBpZiAoZW50aXR5LnNsdWcpIHtcbiAgICAgIGlmICh0eXBlID09PSAnZ2xvYmFsJykge1xuICAgICAgICByZXR1cm4gcmVxLnBheWxvYWQuZmluZEdsb2JhbCh7XG4gICAgICAgICAgb3ZlcnJpZGVBY2Nlc3M6IHRydWUsXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHNsdWc6IGVudGl0eS5zbHVnLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ2NvbGxlY3Rpb24nICYmIGlkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2hlcmUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QgcGFnaW5hdGVkUmVzID0gYXdhaXQgcmVxLnBheWxvYWQuZmluZCh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBlbnRpdHkuc2x1ZyxcbiAgICAgICAgICAgIGxpbWl0OiAxLFxuICAgICAgICAgICAgb3ZlcnJpZGVBY2Nlc3M6IHRydWUsXG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAuLi53aGVyZSxcbiAgICAgICAgICAgICAgYW5kOiBbXG4gICAgICAgICAgICAgICAgLi4uKHdoZXJlLmFuZCB8fCBbXSksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxzOiBpZCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiBwYWdpbmF0ZWRSZXM/LmRvY3M/LlswXSB8fCB1bmRlZmluZWRcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXEucGF5bG9hZC5maW5kQnlJRCh7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY29sbGVjdGlvbjogZW50aXR5LnNsdWcsXG4gICAgICAgICAgb3ZlcnJpZGVBY2Nlc3M6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3QgY3JlYXRlQWNjZXNzUHJvbWlzZTogQ3JlYXRlQWNjZXNzUHJvbWlzZSA9IGFzeW5jICh7XG4gICAgYWNjZXNzLFxuICAgIGFjY2Vzc0xldmVsLFxuICAgIGRpc2FibGVXaGVyZSA9IGZhbHNlLFxuICAgIG9wZXJhdGlvbixcbiAgICBwb2xpY2llc09iaixcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG11dGFibGVQb2xpY2llcyA9IHBvbGljaWVzT2JqXG5cbiAgICBpZiAoYWNjZXNzTGV2ZWwgPT09ICdmaWVsZCcgJiYgZG9jQmVpbmdBY2Nlc3NlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkb2NCZWluZ0FjY2Vzc2VkID0gYXdhaXQgZ2V0RW50aXR5RG9jKClcbiAgICB9XG4gICAgY29uc3QgYWNjZXNzUmVzdWx0ID0gYXdhaXQgYWNjZXNzKHsgaWQsIGRvYzogZG9jQmVpbmdBY2Nlc3NlZCwgcmVxIH0pXG5cbiAgICBpZiAodHlwZW9mIGFjY2Vzc1Jlc3VsdCA9PT0gJ29iamVjdCcgJiYgIWRpc2FibGVXaGVyZSkge1xuICAgICAgbXV0YWJsZVBvbGljaWVzW29wZXJhdGlvbl0gPSB7XG4gICAgICAgIHBlcm1pc3Npb246XG4gICAgICAgICAgaWQgfHwgdHlwZSA9PT0gJ2dsb2JhbCcgPyAhIShhd2FpdCBnZXRFbnRpdHlEb2MoeyB3aGVyZTogYWNjZXNzUmVzdWx0IH0pKSA6IHRydWUsXG4gICAgICAgIHdoZXJlOiBhY2Nlc3NSZXN1bHQsXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtdXRhYmxlUG9saWNpZXNbb3BlcmF0aW9uXT8ucGVybWlzc2lvbiAhPT0gZmFsc2UpIHtcbiAgICAgIG11dGFibGVQb2xpY2llc1tvcGVyYXRpb25dID0ge1xuICAgICAgICBwZXJtaXNzaW9uOiAhIWFjY2Vzc1Jlc3VsdCxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBleGVjdXRlRmllbGRQb2xpY2llcyA9IGFzeW5jICh7IGVudGl0eVBlcm1pc3Npb24sIGZpZWxkcywgb3BlcmF0aW9uLCBwb2xpY2llc09iaiB9KSA9PiB7XG4gICAgY29uc3QgbXV0YWJsZVBvbGljaWVzID0gcG9saWNpZXNPYmouZmllbGRzXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpZWxkcy5tYXAoYXN5bmMgKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5uYW1lKSB7XG4gICAgICAgICAgaWYgKCFtdXRhYmxlUG9saWNpZXNbZmllbGQubmFtZV0pIG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXSA9IHt9XG5cbiAgICAgICAgICBpZiAoZmllbGQuYWNjZXNzICYmIHR5cGVvZiBmaWVsZC5hY2Nlc3Nbb3BlcmF0aW9uXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQWNjZXNzUHJvbWlzZSh7XG4gICAgICAgICAgICAgIGFjY2VzczogZmllbGQuYWNjZXNzW29wZXJhdGlvbl0sXG4gICAgICAgICAgICAgIGFjY2Vzc0xldmVsOiAnZmllbGQnLFxuICAgICAgICAgICAgICBkaXNhYmxlV2hlcmU6IHRydWUsXG4gICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgcG9saWNpZXNPYmo6IG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXVtvcGVyYXRpb25dID0ge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiBwb2xpY2llc09ialtvcGVyYXRpb25dPy5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5maWVsZHMpIHtcbiAgICAgICAgICAgIGlmICghbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdLmZpZWxkcykgbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdLmZpZWxkcyA9IHt9XG5cbiAgICAgICAgICAgIGF3YWl0IGV4ZWN1dGVGaWVsZFBvbGljaWVzKHtcbiAgICAgICAgICAgICAgZW50aXR5UGVybWlzc2lvbixcbiAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgcG9saWNpZXNPYmo6IG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkPy5ibG9ja3MpIHtcbiAgICAgICAgICAgIGlmICghbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdPy5ibG9ja3MpIG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXS5ibG9ja3MgPSB7fVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZmllbGQuYmxvY2tzLm1hcChhc3luYyAoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXS5ibG9ja3M/LltibG9jay5zbHVnXSkge1xuICAgICAgICAgICAgICAgICAgbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdLmJsb2Nrc1tibG9jay5zbHVnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdGlvbl06IHsgcGVybWlzc2lvbjogZW50aXR5UGVybWlzc2lvbiB9LFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXS5ibG9ja3NbYmxvY2suc2x1Z11bb3BlcmF0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdLmJsb2Nrc1tibG9jay5zbHVnXVtvcGVyYXRpb25dID0ge1xuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uOiBlbnRpdHlQZXJtaXNzaW9uLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWN1dGVGaWVsZFBvbGljaWVzKHtcbiAgICAgICAgICAgICAgICAgIGVudGl0eVBlcm1pc3Npb24sXG4gICAgICAgICAgICAgICAgICBmaWVsZHM6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgIHBvbGljaWVzT2JqOiBtdXRhYmxlUG9saWNpZXNbZmllbGQubmFtZV0uYmxvY2tzW2Jsb2NrLnNsdWddLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5maWVsZHMpIHtcbiAgICAgICAgICBhd2FpdCBleGVjdXRlRmllbGRQb2xpY2llcyh7XG4gICAgICAgICAgICBlbnRpdHlQZXJtaXNzaW9uLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgICBwb2xpY2llc09iaixcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJykge1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZmllbGQudGFicy5tYXAoYXN5bmMgKHRhYikgPT4ge1xuICAgICAgICAgICAgICBpZiAodGFiSGFzTmFtZSh0YWIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtdXRhYmxlUG9saWNpZXNbdGFiLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICBtdXRhYmxlUG9saWNpZXNbdGFiLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uXTogeyBwZXJtaXNzaW9uOiBlbnRpdHlQZXJtaXNzaW9uIH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbXV0YWJsZVBvbGljaWVzW3RhYi5uYW1lXVtvcGVyYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICBtdXRhYmxlUG9saWNpZXNbdGFiLm5hbWVdW29wZXJhdGlvbl0gPSB7IHBlcm1pc3Npb246IGVudGl0eVBlcm1pc3Npb24gfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBleGVjdXRlRmllbGRQb2xpY2llcyh7XG4gICAgICAgICAgICAgICAgICBlbnRpdHlQZXJtaXNzaW9uLFxuICAgICAgICAgICAgICAgICAgZmllbGRzOiB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgcG9saWNpZXNPYmo6IG11dGFibGVQb2xpY2llc1t0YWIubmFtZV0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBleGVjdXRlRmllbGRQb2xpY2llcyh7XG4gICAgICAgICAgICAgICAgICBlbnRpdHlQZXJtaXNzaW9uLFxuICAgICAgICAgICAgICAgICAgZmllbGRzOiB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgcG9saWNpZXNPYmosXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBvcGVyYXRpb25zLm1hcChhc3luYyAob3BlcmF0aW9uKSA9PiB7XG4gICAgICBsZXQgZW50aXR5QWNjZXNzUHJvbWlzZTogUHJvbWlzZTx2b2lkPlxuXG4gICAgICBpZiAodHlwZW9mIGVudGl0eS5hY2Nlc3Nbb3BlcmF0aW9uXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbnRpdHlBY2Nlc3NQcm9taXNlID0gY3JlYXRlQWNjZXNzUHJvbWlzZSh7XG4gICAgICAgICAgYWNjZXNzOiBlbnRpdHkuYWNjZXNzW29wZXJhdGlvbl0sXG4gICAgICAgICAgYWNjZXNzTGV2ZWw6ICdlbnRpdHknLFxuICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICBwb2xpY2llc09iajogcG9saWNpZXMsXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb2xpY2llc1tvcGVyYXRpb25dID0ge1xuICAgICAgICAgIHBlcm1pc3Npb246IGlzTG9nZ2VkSW4sXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgZW50aXR5QWNjZXNzUHJvbWlzZVxuXG4gICAgICBhd2FpdCBleGVjdXRlRmllbGRQb2xpY2llcyh7XG4gICAgICAgIGVudGl0eVBlcm1pc3Npb246IHBvbGljaWVzW29wZXJhdGlvbl0ucGVybWlzc2lvbixcbiAgICAgICAgZmllbGRzOiBlbnRpdHkuZmllbGRzLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIHBvbGljaWVzT2JqOiBwb2xpY2llcyxcbiAgICAgIH0pXG4gICAgfSksXG4gIClcblxuICByZXR1cm4gcG9saWNpZXNcbn1cbiJdLCJuYW1lcyI6WyJnZXRFbnRpdHlQb2xpY2llcyIsImFyZ3MiLCJpZCIsImVudGl0eSIsIm9wZXJhdGlvbnMiLCJyZXEiLCJ0eXBlIiwiaXNMb2dnZWRJbiIsInVzZXIiLCJwb2xpY2llcyIsImZpZWxkcyIsImRvY0JlaW5nQWNjZXNzZWQiLCJnZXRFbnRpdHlEb2MiLCJ3aGVyZSIsInNsdWciLCJwYXlsb2FkIiwiZmluZEdsb2JhbCIsIm92ZXJyaWRlQWNjZXNzIiwicGFnaW5hdGVkUmVzIiwiZmluZCIsImNvbGxlY3Rpb24iLCJsaW1pdCIsImFuZCIsImVxdWFscyIsImRvY3MiLCJ1bmRlZmluZWQiLCJmaW5kQnlJRCIsImNyZWF0ZUFjY2Vzc1Byb21pc2UiLCJhY2Nlc3MiLCJhY2Nlc3NMZXZlbCIsImRpc2FibGVXaGVyZSIsIm9wZXJhdGlvbiIsInBvbGljaWVzT2JqIiwibXV0YWJsZVBvbGljaWVzIiwiYWNjZXNzUmVzdWx0IiwiZG9jIiwicGVybWlzc2lvbiIsImV4ZWN1dGVGaWVsZFBvbGljaWVzIiwiZW50aXR5UGVybWlzc2lvbiIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJmaWVsZCIsIm5hbWUiLCJibG9ja3MiLCJibG9jayIsInRhYnMiLCJ0YWIiLCJ0YWJIYXNOYW1lIiwiZW50aXR5QWNjZXNzUHJvbWlzZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFpQ3NCQTs7O2VBQUFBOzs7dUJBeEJLO0FBd0JwQixlQUFlQSxrQkFBa0NDLElBQU87SUFDN0QsTUFBTSxFQUFFQyxFQUFFLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRSxHQUFHTDtJQUM5QyxNQUFNTSxhQUFhLENBQUMsQ0FBQ0YsSUFBSUcsSUFBSTtJQUM3QiwrQ0FBK0M7SUFDL0MsMkNBQTJDO0lBQzNDLDZDQUE2QztJQUM3QywrQ0FBK0M7SUFDL0MsTUFBTUMsV0FBVztRQUNmQyxRQUFRLENBQUM7SUFDWDtJQUVBLElBQUlDO0lBRUosZUFBZUMsYUFBYSxFQUFFQyxLQUFLLEVBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzNELElBQUlWLE9BQU9XLElBQUksRUFBRTtZQUNmLElBQUlSLFNBQVMsVUFBVTtnQkFDckIsT0FBT0QsSUFBSVUsT0FBTyxDQUFDQyxVQUFVLENBQUM7b0JBQzVCQyxnQkFBZ0I7b0JBQ2hCWjtvQkFDQVMsTUFBTVgsT0FBT1csSUFBSTtnQkFDbkI7WUFDRjtZQUVBLElBQUlSLFNBQVMsZ0JBQWdCSixJQUFJO2dCQUMvQixJQUFJLE9BQU9XLFVBQVUsVUFBVTtvQkFDN0IsTUFBTUssZUFBZSxNQUFNYixJQUFJVSxPQUFPLENBQUNJLElBQUksQ0FBQzt3QkFDMUNDLFlBQVlqQixPQUFPVyxJQUFJ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
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZ2V0RW50aXR5UG9saWNpZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb2xsZWN0aW9uUGVybWlzc2lvbiwgR2xvYmFsUGVybWlzc2lvbiB9IGZyb20gJy4uL2F1dGgvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcsIFR5cGVXaXRoSUQgfSBmcm9tICcuLi9jb2xsZWN0aW9ucy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEFjY2VzcyB9IGZyb20gJy4uL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBGaWVsZEFjY2VzcyB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uL2dsb2JhbHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBBbGxPcGVyYXRpb25zLCBEb2N1bWVudCwgV2hlcmUgfSBmcm9tICcuLi90eXBlcydcblxuaW1wb3J0IHsgdGFiSGFzTmFtZSB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5cbnR5cGUgQXJncyA9IHtcbiAgZW50aXR5OiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgU2FuaXRpemVkR2xvYmFsQ29uZmlnXG4gIGlkPzogc3RyaW5nXG4gIG9wZXJhdGlvbnM6IEFsbE9wZXJhdGlvbnNbXVxuICByZXE6IFBheWxvYWRSZXF1ZXN0XG4gIHR5cGU6ICdjb2xsZWN0aW9uJyB8ICdnbG9iYWwnXG59XG5cbnR5cGUgUmV0dXJuVHlwZTxUIGV4dGVuZHMgQXJncz4gPSBUWyd0eXBlJ10gZXh0ZW5kcyAnZ2xvYmFsJ1xuICA/IEdsb2JhbFBlcm1pc3Npb25cbiAgOiBDb2xsZWN0aW9uUGVybWlzc2lvblxuXG50eXBlIENyZWF0ZUFjY2Vzc1Byb21pc2UgPSAoYXJnczoge1xuICBhY2Nlc3M6IEFjY2VzcyB8IEZpZWxkQWNjZXNzXG4gIGFjY2Vzc0xldmVsOiAnZW50aXR5JyB8ICdmaWVsZCdcbiAgZGlzYWJsZVdoZXJlPzogYm9vbGVhblxuICBvcGVyYXRpb246IEFsbE9wZXJhdGlvbnNcbiAgcG9saWNpZXNPYmo6IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnlcbiAgfVxufSkgPT4gUHJvbWlzZTx2b2lkPlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RW50aXR5UG9saWNpZXM8VCBleHRlbmRzIEFyZ3M+KGFyZ3M6IFQpOiBQcm9taXNlPFJldHVyblR5cGU8VD4+IHtcbiAgY29uc3QgeyBpZCwgZW50aXR5LCBvcGVyYXRpb25zLCByZXEsIHR5cGUgfSA9IGFyZ3NcbiAgY29uc3QgaXNMb2dnZWRJbiA9ICEhcmVxLnVzZXJcbiAgLy8gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS1cbiAgLy8gYHBvbGljaWVzYCBhbmQgYHByb21pc2VzYCBnZXQgbXV0YXRlZCBpblxuICAvLyB0aGUgZnVuY3Rpb25zIGJlbG93LCBhbmQgcmV0dXJuIGluIHRoZSBlbmRcbiAgLy8gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS0gLS0tLSAtLS0tIC0tLS1cbiAgY29uc3QgcG9saWNpZXMgPSB7XG4gICAgZmllbGRzOiB7fSxcbiAgfSBhcyBSZXR1cm5UeXBlPFQ+XG5cbiAgbGV0IGRvY0JlaW5nQWNjZXNzZWRcblxuICBhc3luYyBmdW5jdGlvbiBnZXRFbnRpdHlEb2MoeyB3aGVyZSB9OiB7IHdoZXJlPzogV2hlcmUgfSA9IHt9KTogUHJvbWlzZTxUeXBlV2l0aElEICYgRG9jdW1lbnQ+IHtcbiAgICBpZiAoZW50aXR5LnNsdWcpIHtcbiAgICAgIGlmICh0eXBlID09PSAnZ2xvYmFsJykge1xuICAgICAgICByZXR1cm4gcmVxLnBheWxvYWQuZmluZEdsb2JhbCh7XG4gICAgICAgICAgb3ZlcnJpZGVBY2Nlc3M6IHRydWUsXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHNsdWc6IGVudGl0eS5zbHVnLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ2NvbGxlY3Rpb24nICYmIGlkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2hlcmUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3QgcGFnaW5hdGVkUmVzID0gYXdhaXQgcmVxLnBheWxvYWQuZmluZCh7XG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBlbnRpdHkuc2x1ZyxcbiAgICAgICAgICAgIGxpbWl0OiAxLFxuICAgICAgICAgICAgb3ZlcnJpZGVBY2Nlc3M6IHRydWUsXG4gICAgICAgICAgICByZXEsXG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAuLi53aGVyZSxcbiAgICAgICAgICAgICAgYW5kOiBbXG4gICAgICAgICAgICAgICAgLi4uKHdoZXJlLmFuZCB8fCBbXSksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxzOiBpZCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiBwYWdpbmF0ZWRSZXM/LmRvY3M/LlswXSB8fCB1bmRlZmluZWRcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXEucGF5bG9hZC5maW5kQnlJRCh7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY29sbGVjdGlvbjogZW50aXR5LnNsdWcsXG4gICAgICAgICAgb3ZlcnJpZGVBY2Nlc3M6IHRydWUsXG4gICAgICAgICAgcmVxLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFjY2Vzc1Byb21pc2U6IENyZWF0ZUFjY2Vzc1Byb21pc2UgPSBhc3luYyAoe1xuICAgIGFjY2VzcyxcbiAgICBhY2Nlc3NMZXZlbCxcbiAgICBkaXNhYmxlV2hlcmUgPSBmYWxzZSxcbiAgICBvcGVyYXRpb24sXG4gICAgcG9saWNpZXNPYmosXG4gIH0pID0+IHtcbiAgICBjb25zdCBtdXRhYmxlUG9saWNpZXMgPSBwb2xpY2llc09ialxuXG4gICAgaWYgKGFjY2Vzc0xldmVsID09PSAnZmllbGQnICYmIGRvY0JlaW5nQWNjZXNzZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZG9jQmVpbmdBY2Nlc3NlZCA9IGF3YWl0IGdldEVudGl0eURvYygpXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHJlcT8uYm9keVxuXG4gICAgY29uc3QgYWNjZXNzUmVzdWx0ID0gYXdhaXQgYWNjZXNzKHsgaWQsIGRhdGEsIGRvYzogZG9jQmVpbmdBY2Nlc3NlZCwgcmVxIH0pXG5cbiAgICBpZiAodHlwZW9mIGFjY2Vzc1Jlc3VsdCA9PT0gJ29iamVjdCcgJiYgIWRpc2FibGVXaGVyZSkge1xuICAgICAgbXV0YWJsZVBvbGljaWVzW29wZXJhdGlvbl0gPSB7XG4gICAgICAgIHBlcm1pc3Npb246XG4gICAgICAgICAgaWQgfHwgdHlwZSA9PT0gJ2dsb2JhbCcgPyAhIShhd2FpdCBnZXRFbnRpdHlEb2MoeyB3aGVyZTogYWNjZXNzUmVzdWx0IH0pKSA6IHRydWUsXG4gICAgICAgIHdoZXJlOiBhY2Nlc3NSZXN1bHQsXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtdXRhYmxlUG9saWNpZXNbb3BlcmF0aW9uXT8ucGVybWlzc2lvbiAhPT0gZmFsc2UpIHtcbiAgICAgIG11dGFibGVQb2xpY2llc1tvcGVyYXRpb25dID0ge1xuICAgICAgICBwZXJtaXNzaW9uOiAhIWFjY2Vzc1Jlc3VsdCxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBleGVjdXRlRmllbGRQb2xpY2llcyA9IGFzeW5jICh7IGVudGl0eVBlcm1pc3Npb24sIGZpZWxkcywgb3BlcmF0aW9uLCBwb2xpY2llc09iaiB9KSA9PiB7XG4gICAgY29uc3QgbXV0YWJsZVBvbGljaWVzID0gcG9saWNpZXNPYmouZmllbGRzXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGZpZWxkcy5tYXAoYXN5bmMgKGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChmaWVsZC5uYW1lKSB7XG4gICAgICAgICAgaWYgKCFtdXRhYmxlUG9saWNpZXNbZmllbGQubmFtZV0pIG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXSA9IHt9XG5cbiAgICAgICAgICBpZiAoZmllbGQuYWNjZXNzICYmIHR5cGVvZiBmaWVsZC5hY2Nlc3Nbb3BlcmF0aW9uXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYXdhaXQgY3JlYXRlQWNjZXNzUHJvbWlzZSh7XG4gICAgICAgICAgICAgIGFjY2VzczogZmllbGQuYWNjZXNzW29wZXJhdGlvbl0sXG4gICAgICAgICAgICAgIGFjY2Vzc0xldmVsOiAnZmllbGQnLFxuICAgICAgICAgICAgICBkaXNhYmxlV2hlcmU6IHRydWUsXG4gICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgcG9saWNpZXNPYmo6IG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXVtvcGVyYXRpb25dID0ge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uOiBwb2xpY2llc09ialtvcGVyYXRpb25dPy5wZXJtaXNzaW9uLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5maWVsZHMpIHtcbiAgICAgICAgICAgIGlmICghbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdLmZpZWxkcykgbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdLmZpZWxkcyA9IHt9XG5cbiAgICAgICAgICAgIGF3YWl0IGV4ZWN1dGVGaWVsZFBvbGljaWVzKHtcbiAgICAgICAgICAgICAgZW50aXR5UGVybWlzc2lvbixcbiAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgcG9saWNpZXNPYmo6IG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkPy5ibG9ja3MpIHtcbiAgICAgICAgICAgIGlmICghbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdPy5ibG9ja3MpIG11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXS5ibG9ja3MgPSB7fVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgZmllbGQuYmxvY2tzLm1hcChhc3luYyAoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXS5ibG9ja3M/LltibG9jay5zbHVnXSkge1xuICAgICAgICAgICAgICAgICAgbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdLmJsb2Nrc1tibG9jay5zbHVnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdGlvbl06IHsgcGVybWlzc2lvbjogZW50aXR5UGVybWlzc2lvbiB9LFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW11dGFibGVQb2xpY2llc1tmaWVsZC5uYW1lXS5ibG9ja3NbYmxvY2suc2x1Z11bb3BlcmF0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgbXV0YWJsZVBvbGljaWVzW2ZpZWxkLm5hbWVdLmJsb2Nrc1tibG9jay5zbHVnXVtvcGVyYXRpb25dID0ge1xuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uOiBlbnRpdHlQZXJtaXNzaW9uLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWN1dGVGaWVsZFBvbGljaWVzKHtcbiAgICAgICAgICAgICAgICAgIGVudGl0eVBlcm1pc3Npb24sXG4gICAgICAgICAgICAgICAgICBmaWVsZHM6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgIHBvbGljaWVzT2JqOiBtdXRhYmxlUG9saWNpZXNbZmllbGQubmFtZV0uYmxvY2tzW2Jsb2NrLnNsdWddLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC5maWVsZHMpIHtcbiAgICAgICAgICBhd2FpdCBleGVjdXRlRmllbGRQb2xpY2llcyh7XG4gICAgICAgICAgICBlbnRpdHlQZXJtaXNzaW9uLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgICBwb2xpY2llc09iaixcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJykge1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZmllbGQudGFicy5tYXAoYXN5bmMgKHRhYikgPT4ge1xuICAgICAgICAgICAgICBpZiAodGFiSGFzTmFtZSh0YWIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtdXRhYmxlUG9saWNpZXNbdGFiLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICBtdXRhYmxlUG9saWNpZXNbdGFiLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aW9uXTogeyBwZXJtaXNzaW9uOiBlbnRpdHlQZXJtaXNzaW9uIH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbXV0YWJsZVBvbGljaWVzW3RhYi5uYW1lXVtvcGVyYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICBtdXRhYmxlUG9saWNpZXNbdGFiLm5hbWVdW29wZXJhdGlvbl0gPSB7IHBlcm1pc3Npb246IGVudGl0eVBlcm1pc3Npb24gfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBleGVjdXRlRmllbGRQb2xpY2llcyh7XG4gICAgICAgICAgICAgICAgICBlbnRpdHlQZXJtaXNzaW9uLFxuICAgICAgICAgICAgICAgICAgZmllbGRzOiB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgcG9saWNpZXNPYmo6IG11dGFibGVQb2xpY2llc1t0YWIubmFtZV0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBleGVjdXRlRmllbGRQb2xpY2llcyh7XG4gICAgICAgICAgICAgICAgICBlbnRpdHlQZXJtaXNzaW9uLFxuICAgICAgICAgICAgICAgICAgZmllbGRzOiB0YWIuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgcG9saWNpZXNPYmosXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBvcGVyYXRpb25zLm1hcChhc3luYyAob3BlcmF0aW9uKSA9PiB7XG4gICAgICBsZXQgZW50aXR5QWNjZXNzUHJvbWlzZTogUHJvbWlzZTx2b2lkPlxuXG4gICAgICBpZiAodHlwZW9mIGVudGl0eS5hY2Nlc3Nbb3BlcmF0aW9uXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbnRpdHlBY2Nlc3NQcm9taXNlID0gY3JlYXRlQWNjZXNzUHJvbWlzZSh7XG4gICAgICAgICAgYWNjZXNzOiBlbnRpdHkuYWNjZXNzW29wZXJhdGlvbl0sXG4gICAgICAgICAgYWNjZXNzTGV2ZWw6ICdlbnRpdHknLFxuICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICBwb2xpY2llc09iajogcG9saWNpZXMsXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb2xpY2llc1tvcGVyYXRpb25dID0ge1xuICAgICAgICAgIHBlcm1pc3Npb246IGlzTG9nZ2VkSW4sXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgZW50aXR5QWNjZXNzUHJvbWlzZVxuXG4gICAgICBhd2FpdCBleGVjdXRlRmllbGRQb2xpY2llcyh7XG4gICAgICAgIGVudGl0eVBlcm1pc3Npb246IHBvbGljaWVzW29wZXJhdGlvbl0ucGVybWlzc2lvbixcbiAgICAgICAgZmllbGRzOiBlbnRpdHkuZmllbGRzLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIHBvbGljaWVzT2JqOiBwb2xpY2llcyxcbiAgICAgIH0pXG4gICAgfSksXG4gIClcblxuICByZXR1cm4gcG9saWNpZXNcbn1cbiJdLCJuYW1lcyI6WyJnZXRFbnRpdHlQb2xpY2llcyIsImFyZ3MiLCJpZCIsImVudGl0eSIsIm9wZXJhdGlvbnMiLCJyZXEiLCJ0eXBlIiwiaXNMb2dnZWRJbiIsInVzZXIiLCJwb2xpY2llcyIsImZpZWxkcyIsImRvY0JlaW5nQWNjZXNzZWQiLCJnZXRFbnRpdHlEb2MiLCJ3aGVyZSIsInNsdWciLCJwYXlsb2FkIiwiZmluZEdsb2JhbCIsIm92ZXJyaWRlQWNjZXNzIiwicGFnaW5hdGVkUmVzIiwiZmluZCIsImNvbGxlY3Rpb24iLCJsaW1pdCIsImFuZCIsImVxdWFscyIsImRvY3MiLCJ1bmRlZmluZWQiLCJmaW5kQnlJRCIsImNyZWF0ZUFjY2Vzc1Byb21pc2UiLCJhY2Nlc3MiLCJhY2Nlc3NMZXZlbCIsImRpc2FibGVXaGVyZSIsIm9wZXJhdGlvbiIsInBvbGljaWVzT2JqIiwibXV0YWJsZVBvbGljaWVzIiwiZGF0YSIsImJvZHkiLCJhY2Nlc3NSZXN1bHQiLCJkb2MiLCJwZXJtaXNzaW9uIiwiZXhlY3V0ZUZpZWxkUG9saWNpZXMiLCJlbnRpdHlQZXJtaXNzaW9uIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImZpZWxkIiwibmFtZSIsImJsb2NrcyIsImJsb2NrIiwidGFicyIsInRhYiIsInRhYkhhc05hbWUiLCJlbnRpdHlBY2Nlc3NQcm9taXNlIl0sIm1hcHBpbmdzIjoiOzs7OytCQWdDc0JBOzs7ZUFBQUE7Ozt1QkF4Qks7QUF3QnBCLGVBQWVBLGtCQUFrQ0MsSUFBTztJQUM3RCxNQUFNLEVBQUVDLEVBQUUsRUFBRUMsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxFQUFFLEdBQUdMO0lBQzlDLE1BQU1NLGFBQWEsQ0FBQyxDQUFDRixJQUFJRyxJQUFJO0lBQzdCLCtDQUErQztJQUMvQywyQ0FBMkM7SUFDM0MsNkNBQTZDO0lBQzdDLCtDQUErQztJQUMvQyxNQUFNQyxXQUFXO1FBQ2ZDLFFBQVEsQ0FBQztJQUNYO0lBRUEsSUFBSUM7SUFFSixlQUFlQyxhQUFhLEVBQUVDLEtBQUssRUFBcUIsR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSVYsT0FBT1csSUFBSSxFQUFFO1lBQ2YsSUFBSVIsU0FBUyxVQUFVO2dCQUNyQixPQUFPRCxJQUFJVSxPQUFPLENBQUNDLFVBQVUsQ0FBQztvQkFDNUJDLGdCQUFnQjtvQkFDaEJaO29CQUNBUyxNQUFNWCxPQUFPVyxJQUFJO2dCQUNuQjtZQUNGO1lBRUEsSUFBSVIsU0FBUyxnQkFBZ0JKLElBQUk7Z0JBQy9CLElBQUksT0FBT1csVUFBVSxVQUFVO29CQUM3QixNQUFNSyxlQUFlLE1BQU1iLElBQUlVLE9BQU8sQ0FBQ0ks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
@@ -1 +1 @@
1
- {"version":3,"file":"initTransaction.d.ts","sourceRoot":"","sources":["../../src/utilities/initTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3E"}
1
+ {"version":3,"file":"initTransaction.d.ts","sourceRoot":"","sources":["../../src/utilities/initTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB3E"}
@@ -9,14 +9,26 @@ Object.defineProperty(exports, "initTransaction", {
9
9
  }
10
10
  });
11
11
  async function initTransaction(req) {
12
- const { payload, transactionID } = req;
13
- if (!transactionID && typeof payload.db.beginTransaction === 'function') {
14
- req.transactionID = await payload.db.beginTransaction();
15
- if (req.transactionID) {
16
- return true;
17
- }
12
+ const { payload, transactionID, transactionIDPromise } = req;
13
+ if (transactionID) {
14
+ // we already have a transaction, we're not in charge of committing it
15
+ return false;
16
+ }
17
+ if (transactionIDPromise) {
18
+ // wait for whoever else is already creating the transaction
19
+ await transactionIDPromise;
20
+ return false;
21
+ }
22
+ if (typeof payload.db.beginTransaction === 'function') {
23
+ // create a new transaction
24
+ req.transactionIDPromise = payload.db.beginTransaction().then((transactionID)=>{
25
+ req.transactionID = transactionID;
26
+ delete req.transactionIDPromise;
27
+ });
28
+ await req.transactionIDPromise;
29
+ return !!req.transactionID;
18
30
  }
19
31
  return false;
20
32
  }
21
33
 
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvaW5pdFRyYW5zYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi9leHByZXNzL3R5cGVzJ1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyB0cmFuc2FjdGlvbiB1c2luZyB0aGUgZGIgYWRhcHRlciB3aXRoIGEgcmFuZG9tIGlkIGFuZCB0aGVuIGFzc2lnbnMgaXQgdG8gdGhlIHJlcS50cmFuc2FjdGlvblxuICogQHJldHVybnMgdHJ1ZSBpZiBiZWdpbm5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgZmFsc2Ugd2hlbiByZXEgYWxyZWFkeSBoYXMgYSB0cmFuc2FjdGlvbiB0byB1c2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRUcmFuc2FjdGlvbihyZXE6IFBheWxvYWRSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgcGF5bG9hZCwgdHJhbnNhY3Rpb25JRCB9ID0gcmVxXG4gIGlmICghdHJhbnNhY3Rpb25JRCAmJiB0eXBlb2YgcGF5bG9hZC5kYi5iZWdpblRyYW5zYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVxLnRyYW5zYWN0aW9uSUQgPSBhd2FpdCBwYXlsb2FkLmRiLmJlZ2luVHJhbnNhY3Rpb24oKVxuICAgIGlmIChyZXEudHJhbnNhY3Rpb25JRCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG4iXSwibmFtZXMiOlsiaW5pdFRyYW5zYWN0aW9uIiwicmVxIiwicGF5bG9hZCIsInRyYW5zYWN0aW9uSUQiLCJkYiIsImJlZ2luVHJhbnNhY3Rpb24iXSwibWFwcGluZ3MiOiI7Ozs7K0JBTXNCQTs7O2VBQUFBOzs7QUFBZixlQUFlQSxnQkFBZ0JDLEdBQW1CO0lBQ3ZELE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUUsR0FBR0Y7SUFDbkMsSUFBSSxDQUFDRSxpQkFBaUIsT0FBT0QsUUFBUUUsRUFBRSxDQUFDQyxnQkFBZ0IsS0FBSyxZQUFZO1FBQ3ZFSixJQUFJRSxhQUFhLEdBQUcsTUFBTUQsUUFBUUUsRUFBRSxDQUFDQyxnQkFBZ0I7UUFDckQsSUFBSUosSUFBSUUsYUFBYSxFQUFFO1lBQ3JCLE9BQU87UUFDVDtJQUNGO0lBQ0EsT0FBTztBQUNUIn0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvaW5pdFRyYW5zYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi9leHByZXNzL3R5cGVzJ1xuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyB0cmFuc2FjdGlvbiB1c2luZyB0aGUgZGIgYWRhcHRlciB3aXRoIGEgcmFuZG9tIGlkIGFuZCB0aGVuIGFzc2lnbnMgaXQgdG8gdGhlIHJlcS50cmFuc2FjdGlvblxuICogQHJldHVybnMgdHJ1ZSBpZiBiZWdpbm5pbmcgYSB0cmFuc2FjdGlvbiBhbmQgZmFsc2Ugd2hlbiByZXEgYWxyZWFkeSBoYXMgYSB0cmFuc2FjdGlvbiB0byB1c2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRUcmFuc2FjdGlvbihyZXE6IFBheWxvYWRSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgcGF5bG9hZCwgdHJhbnNhY3Rpb25JRCwgdHJhbnNhY3Rpb25JRFByb21pc2UgfSA9IHJlcVxuICBpZiAodHJhbnNhY3Rpb25JRCkge1xuICAgIC8vIHdlIGFscmVhZHkgaGF2ZSBhIHRyYW5zYWN0aW9uLCB3ZSdyZSBub3QgaW4gY2hhcmdlIG9mIGNvbW1pdHRpbmcgaXRcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBpZiAodHJhbnNhY3Rpb25JRFByb21pc2UpIHtcbiAgICAvLyB3YWl0IGZvciB3aG9ldmVyIGVsc2UgaXMgYWxyZWFkeSBjcmVhdGluZyB0aGUgdHJhbnNhY3Rpb25cbiAgICBhd2FpdCB0cmFuc2FjdGlvbklEUHJvbWlzZVxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmICh0eXBlb2YgcGF5bG9hZC5kYi5iZWdpblRyYW5zYWN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gY3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uXG4gICAgcmVxLnRyYW5zYWN0aW9uSURQcm9taXNlID0gcGF5bG9hZC5kYi5iZWdpblRyYW5zYWN0aW9uKCkudGhlbigodHJhbnNhY3Rpb25JRCkgPT4ge1xuICAgICAgcmVxLnRyYW5zYWN0aW9uSUQgPSB0cmFuc2FjdGlvbklEXG4gICAgICBkZWxldGUgcmVxLnRyYW5zYWN0aW9uSURQcm9taXNlXG4gICAgfSlcbiAgICBhd2FpdCByZXEudHJhbnNhY3Rpb25JRFByb21pc2VcbiAgICByZXR1cm4gISFyZXEudHJhbnNhY3Rpb25JRFxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuIl0sIm5hbWVzIjpbImluaXRUcmFuc2FjdGlvbiIsInJlcSIsInBheWxvYWQiLCJ0cmFuc2FjdGlvbklEIiwidHJhbnNhY3Rpb25JRFByb21pc2UiLCJkYiIsImJlZ2luVHJhbnNhY3Rpb24iLCJ0aGVuIl0sIm1hcHBpbmdzIjoiOzs7OytCQU1zQkE7OztlQUFBQTs7O0FBQWYsZUFBZUEsZ0JBQWdCQyxHQUFtQjtJQUN2RCxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxvQkFBb0IsRUFBRSxHQUFHSDtJQUN6RCxJQUFJRSxlQUFlO1FBQ2pCLHNFQUFzRTtRQUN0RSxPQUFPO0lBQ1Q7SUFDQSxJQUFJQyxzQkFBc0I7UUFDeEIsNERBQTREO1FBQzVELE1BQU1BO1FBQ04sT0FBTztJQUNUO0lBQ0EsSUFBSSxPQUFPRixRQUFRRyxFQUFFLENBQUNDLGdCQUFnQixLQUFLLFlBQVk7UUFDckQsMkJBQTJCO1FBQzNCTCxJQUFJRyxvQkFBb0IsR0FBR0YsUUFBUUcsRUFBRSxDQUFDQyxnQkFBZ0IsR0FBR0MsSUFBSSxDQUFDLENBQUNKO1lBQzdERixJQUFJRSxhQUFhLEdBQUdBO1lBQ3BCLE9BQU9GLElBQUlHLG9CQUFvQjtRQUNqQztRQUNBLE1BQU1ILElBQUlHLG9CQUFvQjtRQUM5QixPQUFPLENBQUMsQ0FBQ0gsSUFBSUUsYUFBYTtJQUM1QjtJQUNBLE9BQU87QUFDVCJ9
@@ -0,0 +1,6 @@
1
+ import type { PayloadRequest } from '../express/types';
2
+ /**
3
+ * Creates a proxy for the given request that has its own TransactionID
4
+ */
5
+ export default function isolateTransactionID(req: PayloadRequest): PayloadRequest;
6
+ //# sourceMappingURL=isolateTransactionID.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolateTransactionID.d.ts","sourceRoot":"","sources":["../../src/utilities/isolateTransactionID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAuBhF"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, /**
6
+ * Creates a proxy for the given request that has its own TransactionID
7
+ */ "default", {
8
+ enumerable: true,
9
+ get: function() {
10
+ return isolateTransactionID;
11
+ }
12
+ });
13
+ function isolateTransactionID(req) {
14
+ const delegate = {};
15
+ const handler = {
16
+ deleteProperty (target, p) {
17
+ return Reflect.deleteProperty(p === 'transactionID' ? delegate : target, p);
18
+ },
19
+ get (target, p, receiver) {
20
+ return Reflect.get(p === 'transactionID' ? delegate : target, p, receiver);
21
+ },
22
+ has (target, p) {
23
+ return Reflect.has(p === 'transactionID' ? delegate : target, p);
24
+ },
25
+ set (target, p, newValue, receiver) {
26
+ if (p === 'transactionID') {
27
+ // in case of transactionID we must ignore any receiver, because
28
+ // "If provided and target does not have a setter for propertyKey, the property will be set on receiver instead."
29
+ return Reflect.set(delegate, p, newValue);
30
+ } else {
31
+ return Reflect.set(target, p, newValue, receiver);
32
+ }
33
+ }
34
+ };
35
+ return new Proxy(req, handler);
36
+ }
37
+
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvaXNvbGF0ZVRyYW5zYWN0aW9uSUQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uL2V4cHJlc3MvdHlwZXMnXG5cbi8qKlxuICogQ3JlYXRlcyBhIHByb3h5IGZvciB0aGUgZ2l2ZW4gcmVxdWVzdCB0aGF0IGhhcyBpdHMgb3duIFRyYW5zYWN0aW9uSURcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNvbGF0ZVRyYW5zYWN0aW9uSUQocmVxOiBQYXlsb2FkUmVxdWVzdCk6IFBheWxvYWRSZXF1ZXN0IHtcbiAgY29uc3QgZGVsZWdhdGUgPSB7fVxuICBjb25zdCBoYW5kbGVyOiBQcm94eUhhbmRsZXI8UGF5bG9hZFJlcXVlc3Q+ID0ge1xuICAgIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkocCA9PT0gJ3RyYW5zYWN0aW9uSUQnID8gZGVsZWdhdGUgOiB0YXJnZXQsIHApXG4gICAgfSxcbiAgICBnZXQodGFyZ2V0LCBwLCByZWNlaXZlcikge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHAgPT09ICd0cmFuc2FjdGlvbklEJyA/IGRlbGVnYXRlIDogdGFyZ2V0LCBwLCByZWNlaXZlcilcbiAgICB9LFxuICAgIGhhcyh0YXJnZXQsIHApIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmhhcyhwID09PSAndHJhbnNhY3Rpb25JRCcgPyBkZWxlZ2F0ZSA6IHRhcmdldCwgcClcbiAgICB9LFxuICAgIHNldCh0YXJnZXQsIHAsIG5ld1ZhbHVlLCByZWNlaXZlcikge1xuICAgICAgaWYgKHAgPT09ICd0cmFuc2FjdGlvbklEJykge1xuICAgICAgICAvLyBpbiBjYXNlIG9mIHRyYW5zYWN0aW9uSUQgd2UgbXVzdCBpZ25vcmUgYW55IHJlY2VpdmVyLCBiZWNhdXNlXG4gICAgICAgIC8vIFwiSWYgcHJvdmlkZWQgYW5kIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgc2V0dGVyIGZvciBwcm9wZXJ0eUtleSwgdGhlIHByb3BlcnR5IHdpbGwgYmUgc2V0IG9uIHJlY2VpdmVyIGluc3RlYWQuXCJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KGRlbGVnYXRlLCBwLCBuZXdWYWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHAsIG5ld1ZhbHVlLCByZWNlaXZlcilcbiAgICAgIH1cbiAgICB9LFxuICB9XG4gIHJldHVybiBuZXcgUHJveHkocmVxLCBoYW5kbGVyKVxufVxuIl0sIm5hbWVzIjpbImlzb2xhdGVUcmFuc2FjdGlvbklEIiwicmVxIiwiZGVsZWdhdGUiLCJoYW5kbGVyIiwiZGVsZXRlUHJvcGVydHkiLCJ0YXJnZXQiLCJwIiwiUmVmbGVjdCIsImdldCIsInJlY2VpdmVyIiwiaGFzIiwic2V0IiwibmV3VmFsdWUiLCJQcm94eSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFFQTs7Q0FFQyxHQUNEOzs7ZUFBd0JBOzs7QUFBVCxTQUFTQSxxQkFBcUJDLEdBQW1CO0lBQzlELE1BQU1DLFdBQVcsQ0FBQztJQUNsQixNQUFNQyxVQUF3QztRQUM1Q0MsZ0JBQWVDLE1BQU0sRUFBRUMsQ0FBQztZQUN0QixPQUFPQyxRQUFRSCxjQUFjLENBQUNFLE1BQU0sa0JBQWtCSixXQUFXRyxRQUFRQztRQUMzRTtRQUNBRSxLQUFJSCxNQUFNLEVBQUVDLENBQUMsRUFBRUcsUUFBUTtZQUNyQixPQUFPRixRQUFRQyxHQUFHLENBQUNGLE1BQU0sa0JBQWtCSixXQUFXRyxRQUFRQyxHQUFHRztRQUNuRTtRQUNBQyxLQUFJTCxNQUFNLEVBQUVDLENBQUM7WUFDWCxPQUFPQyxRQUFRRyxHQUFHLENBQUNKLE1BQU0sa0JBQWtCSixXQUFXRyxRQUFRQztRQUNoRTtRQUNBSyxLQUFJTixNQUFNLEVBQUVDLENBQUMsRUFBRU0sUUFBUSxFQUFFSCxRQUFRO1lBQy9CLElBQUlILE1BQU0saUJBQWlCO2dCQUN6QixnRUFBZ0U7Z0JBQ2hFLGlIQUFpSDtnQkFDakgsT0FBT0MsUUFBUUksR0FBRyxDQUFDVCxVQUFVSSxHQUFHTTtZQUNsQyxPQUFPO2dCQUNMLE9BQU9MLFFBQVFJLEdBQUcsQ0FBQ04sUUFBUUMsR0FBR00sVUFBVUg7WUFDMUM7UUFDRjtJQUNGO0lBQ0EsT0FBTyxJQUFJSSxNQUFNWixLQUFLRTtBQUN4QiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payload",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Node, React and MongoDB Headless CMS and Application Framework",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
package/utilities.d.ts CHANGED
@@ -2,7 +2,7 @@ export { withMergedProps } from './dist/admin/components/utilities/WithMergedPro
2
2
  export { extractTranslations } from './dist/translations/extractTranslations';
3
3
  export { i18nInit } from './dist/translations/init';
4
4
  export { combineMerge } from './dist/utilities/combineMerge';
5
- export { configToJSONSchema, entityToJSONSchema } from './dist/utilities/configToJSONSchema';
5
+ export { configToJSONSchema, entityToJSONSchema, withNullableJSONSchemaType, } from './dist/utilities/configToJSONSchema';
6
6
  export { createArrayFromCommaDelineated } from './dist/utilities/createArrayFromCommaDelineated';
7
7
  export { deepCopyObject } from './dist/utilities/deepCopyObject';
8
8
  export { deepMerge } from './dist/utilities/deepMerge';