payload 2.3.1 → 2.5.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 (196) hide show
  1. package/components/elements.d.ts +3 -0
  2. package/components/elements.js +19 -1
  3. package/components/forms.d.ts +4 -0
  4. package/components/forms.js +17 -1
  5. package/dist/admin/components/elements/DatePicker/index.scss +4 -0
  6. package/dist/admin/components/elements/Header/index.d.ts.map +1 -1
  7. package/dist/admin/components/elements/Header/index.js +72 -5
  8. package/dist/admin/components/elements/Header/index.scss +57 -2
  9. package/dist/admin/components/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  10. package/dist/admin/components/elements/ListDrawer/DrawerContent.js +12 -4
  11. package/dist/admin/components/elements/Nav/index.scss +3 -7
  12. package/dist/admin/components/elements/PreviewSizes/index.d.ts.map +1 -1
  13. package/dist/admin/components/elements/PreviewSizes/index.js +7 -6
  14. package/dist/admin/components/forms/FieldDescription/index.js +4 -2
  15. package/dist/admin/components/forms/FieldDescription/types.d.ts +9 -5
  16. package/dist/admin/components/forms/FieldDescription/types.d.ts.map +1 -1
  17. package/dist/admin/components/forms/FieldDescription/types.js +1 -1
  18. package/dist/admin/components/forms/Form/getDataByPath.d.ts.map +1 -1
  19. package/dist/admin/components/forms/Form/getDataByPath.js +4 -1
  20. package/dist/admin/components/forms/field-types/Array/index.d.ts.map +1 -1
  21. package/dist/admin/components/forms/field-types/Array/index.js +2 -1
  22. package/dist/admin/components/forms/field-types/Blocks/index.js +2 -1
  23. package/dist/admin/components/forms/field-types/Checkbox/index.js +2 -1
  24. package/dist/admin/components/forms/field-types/Code/index.js +2 -1
  25. package/dist/admin/components/forms/field-types/Collapsible/index.d.ts.map +1 -1
  26. package/dist/admin/components/forms/field-types/Collapsible/index.js +6 -5
  27. package/dist/admin/components/forms/field-types/DateTime/Input.js +2 -1
  28. package/dist/admin/components/forms/field-types/Email/index.js +2 -1
  29. package/dist/admin/components/forms/field-types/Group/index.d.ts.map +1 -1
  30. package/dist/admin/components/forms/field-types/Group/index.js +2 -1
  31. package/dist/admin/components/forms/field-types/JSON/index.d.ts.map +1 -1
  32. package/dist/admin/components/forms/field-types/JSON/index.js +7 -2
  33. package/dist/admin/components/forms/field-types/Point/index.js +2 -1
  34. package/dist/admin/components/forms/field-types/RadioGroup/Input.d.ts +2 -2
  35. package/dist/admin/components/forms/field-types/RadioGroup/Input.d.ts.map +1 -1
  36. package/dist/admin/components/forms/field-types/RadioGroup/Input.js +4 -3
  37. package/dist/admin/components/forms/field-types/RadioGroup/index.js +5 -5
  38. package/dist/admin/components/forms/field-types/Relationship/index.d.ts.map +1 -1
  39. package/dist/admin/components/forms/field-types/Relationship/index.js +9 -3
  40. package/dist/admin/components/forms/field-types/Relationship/types.d.ts +1 -1
  41. package/dist/admin/components/forms/field-types/Relationship/types.d.ts.map +1 -1
  42. package/dist/admin/components/forms/field-types/RichText/index.d.ts.map +1 -1
  43. package/dist/admin/components/forms/field-types/RichText/index.js +55 -8
  44. package/dist/admin/components/forms/field-types/RichText/types.d.ts +9 -3
  45. package/dist/admin/components/forms/field-types/RichText/types.d.ts.map +1 -1
  46. package/dist/admin/components/forms/field-types/Select/Input.d.ts +2 -2
  47. package/dist/admin/components/forms/field-types/Select/Input.d.ts.map +1 -1
  48. package/dist/admin/components/forms/field-types/Select/Input.js +3 -2
  49. package/dist/admin/components/forms/field-types/Tabs/index.d.ts.map +1 -1
  50. package/dist/admin/components/forms/field-types/Tabs/index.js +3 -2
  51. package/dist/admin/components/forms/field-types/Text/Input.d.ts.map +1 -1
  52. package/dist/admin/components/forms/field-types/Text/Input.js +2 -1
  53. package/dist/admin/components/forms/field-types/Textarea/Input.js +2 -1
  54. package/dist/admin/components/forms/field-types/Upload/Input.d.ts +2 -2
  55. package/dist/admin/components/forms/field-types/Upload/Input.d.ts.map +1 -1
  56. package/dist/admin/components/forms/field-types/Upload/Input.js +4 -3
  57. package/dist/admin/components/forms/field-types/getFilterOptionsQuery.d.ts.map +1 -1
  58. package/dist/admin/components/forms/field-types/getFilterOptionsQuery.js +12 -1
  59. package/dist/admin/components/templates/Default/index.d.ts +5 -1
  60. package/dist/admin/components/templates/Default/index.d.ts.map +1 -1
  61. package/dist/admin/components/templates/Default/index.js +1 -1
  62. package/dist/admin/components/templates/Default/index.scss +27 -9
  63. package/dist/admin/components/utilities/ActionsProvider/index.d.ts +11 -0
  64. package/dist/admin/components/utilities/ActionsProvider/index.d.ts.map +1 -0
  65. package/dist/admin/components/utilities/ActionsProvider/index.js +86 -0
  66. package/dist/admin/components/views/API/index.d.ts.map +1 -1
  67. package/dist/admin/components/views/API/index.js +12 -1
  68. package/dist/admin/components/views/Dashboard/index.d.ts.map +1 -1
  69. package/dist/admin/components/views/Dashboard/index.js +8 -1
  70. package/dist/admin/components/views/Global/Default.d.ts.map +1 -1
  71. package/dist/admin/components/views/Global/Default.js +57 -2
  72. package/dist/admin/components/views/LivePreview/Context/index.d.ts.map +1 -1
  73. package/dist/admin/components/views/LivePreview/Context/index.js +3 -4
  74. package/dist/admin/components/views/LivePreview/Preview/index.d.ts.map +1 -1
  75. package/dist/admin/components/views/LivePreview/Preview/index.js +7 -4
  76. package/dist/admin/components/views/LivePreview/index.d.ts.map +1 -1
  77. package/dist/admin/components/views/LivePreview/index.js +34 -5
  78. package/dist/admin/components/views/Routes/index.d.ts.map +1 -1
  79. package/dist/admin/components/views/Routes/index.js +4 -3
  80. package/dist/admin/components/views/Version/RenderFieldsToDiff/index.js +6 -3
  81. package/dist/admin/components/views/Version/SelectLocales/index.d.ts.map +1 -1
  82. package/dist/admin/components/views/Version/SelectLocales/index.js +16 -3
  83. package/dist/admin/components/views/Version/Version.d.ts.map +1 -1
  84. package/dist/admin/components/views/Version/Version.js +12 -1
  85. package/dist/admin/components/views/Versions/index.d.ts.map +1 -1
  86. package/dist/admin/components/views/Versions/index.js +28 -5
  87. package/dist/admin/components/views/collections/Edit/Default.d.ts.map +1 -1
  88. package/dist/admin/components/views/collections/Edit/Default.js +19 -1
  89. package/dist/admin/components/views/collections/List/Cell/field-types/Richtext/index.d.ts.map +1 -1
  90. package/dist/admin/components/views/collections/List/Cell/field-types/Richtext/index.js +55 -8
  91. package/dist/admin/components/views/collections/List/formatFields.d.ts.map +1 -1
  92. package/dist/admin/components/views/collections/List/formatFields.js +20 -17
  93. package/dist/admin/components/views/collections/List/index.d.ts.map +1 -1
  94. package/dist/admin/components/views/collections/List/index.js +19 -3
  95. package/dist/admin/hooks/useThumbnail.d.ts.map +1 -1
  96. package/dist/admin/hooks/useThumbnail.js +4 -1
  97. package/dist/auth/baseFields/verification.d.ts.map +1 -1
  98. package/dist/auth/baseFields/verification.js +6 -1
  99. package/dist/auth/operations/local/forgotPassword.d.ts +2 -1
  100. package/dist/auth/operations/local/forgotPassword.d.ts.map +1 -1
  101. package/dist/auth/operations/local/forgotPassword.js +3 -3
  102. package/dist/auth/operations/local/login.d.ts +2 -1
  103. package/dist/auth/operations/local/login.d.ts.map +1 -1
  104. package/dist/auth/operations/local/login.js +3 -3
  105. package/dist/auth/operations/local/resetPassword.d.ts +2 -1
  106. package/dist/auth/operations/local/resetPassword.d.ts.map +1 -1
  107. package/dist/auth/operations/local/resetPassword.js +3 -3
  108. package/dist/auth/operations/local/unlock.d.ts +2 -1
  109. package/dist/auth/operations/local/unlock.d.ts.map +1 -1
  110. package/dist/auth/operations/local/unlock.js +3 -3
  111. package/dist/auth/operations/local/verifyEmail.d.ts +2 -1
  112. package/dist/auth/operations/local/verifyEmail.d.ts.map +1 -1
  113. package/dist/auth/operations/local/verifyEmail.js +3 -3
  114. package/dist/collections/config/schema.d.ts.map +1 -1
  115. package/dist/collections/config/schema.js +5 -2
  116. package/dist/collections/config/types.d.ts +4 -1
  117. package/dist/collections/config/types.d.ts.map +1 -1
  118. package/dist/collections/config/types.js +1 -1
  119. package/dist/collections/graphql/init.d.ts.map +1 -1
  120. package/dist/collections/graphql/init.js +19 -9
  121. package/dist/collections/operations/create.js +7 -7
  122. package/dist/config/schema.d.ts.map +1 -1
  123. package/dist/config/schema.js +6 -3
  124. package/dist/config/shared/componentSchema.d.ts.map +1 -1
  125. package/dist/config/shared/componentSchema.js +2 -1
  126. package/dist/config/types.d.ts +7 -1
  127. package/dist/config/types.d.ts.map +1 -1
  128. package/dist/config/types.js +1 -1
  129. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  130. package/dist/database/queryValidation/validateSearchParams.js +14 -44
  131. package/dist/errors/DuplicateFieldName.d.ts +6 -0
  132. package/dist/errors/DuplicateFieldName.d.ts.map +1 -0
  133. package/dist/errors/DuplicateFieldName.js +24 -0
  134. package/dist/errors/index.d.ts +1 -0
  135. package/dist/errors/index.d.ts.map +1 -1
  136. package/dist/errors/index.js +5 -1
  137. package/dist/exports/components/elements.d.ts +3 -0
  138. package/dist/exports/components/elements.d.ts.map +1 -1
  139. package/dist/exports/components/elements.js +19 -1
  140. package/dist/exports/components/forms.d.ts +4 -0
  141. package/dist/exports/components/forms.d.ts.map +1 -1
  142. package/dist/exports/components/forms.js +17 -1
  143. package/dist/fields/config/sanitize.d.ts +2 -1
  144. package/dist/fields/config/sanitize.d.ts.map +1 -1
  145. package/dist/fields/config/sanitize.js +14 -3
  146. package/dist/fields/config/schema.d.ts.map +1 -1
  147. package/dist/fields/config/schema.js +5 -3
  148. package/dist/fields/config/types.d.ts +1 -1
  149. package/dist/fields/config/types.d.ts.map +1 -1
  150. package/dist/fields/config/types.js +1 -1
  151. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  152. package/dist/fields/hooks/afterRead/promise.js +14 -1
  153. package/dist/fields/validations.d.ts +1 -1
  154. package/dist/fields/validations.d.ts.map +1 -1
  155. package/dist/fields/validations.js +12 -2
  156. package/dist/globals/graphql/init.d.ts.map +1 -1
  157. package/dist/globals/graphql/init.js +8 -5
  158. package/dist/globals/operations/local/findOne.d.ts +2 -1
  159. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  160. package/dist/globals/operations/local/findOne.js +3 -3
  161. package/dist/globals/operations/local/findVersionByID.d.ts +2 -1
  162. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  163. package/dist/globals/operations/local/findVersionByID.js +3 -3
  164. package/dist/globals/operations/local/findVersions.d.ts +2 -1
  165. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  166. package/dist/globals/operations/local/findVersions.js +3 -3
  167. package/dist/globals/operations/local/restoreVersion.d.ts +2 -1
  168. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  169. package/dist/globals/operations/local/restoreVersion.js +3 -3
  170. package/dist/globals/operations/local/update.d.ts +2 -1
  171. package/dist/globals/operations/local/update.d.ts.map +1 -1
  172. package/dist/globals/operations/local/update.js +3 -3
  173. package/dist/graphql/schema/buildMutationInputType.d.ts +1 -1
  174. package/dist/graphql/schema/buildMutationInputType.d.ts.map +1 -1
  175. package/dist/graphql/schema/buildMutationInputType.js +22 -11
  176. package/dist/graphql/schema/buildObjectType.d.ts.map +1 -1
  177. package/dist/graphql/schema/buildObjectType.js +38 -17
  178. package/dist/graphql/schema/buildPoliciesType.d.ts.map +1 -1
  179. package/dist/graphql/schema/buildPoliciesType.js +3 -2
  180. package/dist/translations/index.d.ts +374 -0
  181. package/dist/translations/index.d.ts.map +1 -1
  182. package/dist/translations/index.js +4 -2
  183. package/dist/translations/zh-tw.json +374 -0
  184. package/dist/translations/zh.json +2 -2
  185. package/dist/uploads/generateFileData.d.ts.map +1 -1
  186. package/dist/uploads/generateFileData.js +25 -7
  187. package/dist/uploads/getBaseFields.js +2 -2
  188. package/dist/uploads/getExternalFile.d.ts +9 -0
  189. package/dist/uploads/getExternalFile.d.ts.map +1 -0
  190. package/dist/uploads/getExternalFile.js +76 -0
  191. package/dist/uploads/imageResizer.d.ts.map +1 -1
  192. package/dist/uploads/imageResizer.js +4 -2
  193. package/dist/uploads/types.d.ts +1 -0
  194. package/dist/uploads/types.d.ts.map +1 -1
  195. package/dist/uploads/types.js +1 -1
  196. package/package.json +2 -2
@@ -29,14 +29,19 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
29
29
  array: (objectTypeConfig, field)=>{
30
30
  const interfaceName = field?.interfaceName || (0, _combineParentName.default)(parentName, (0, _formatLabels.toWords)(field.name, true));
31
31
  if (!payload.types.arrayTypes[interfaceName]) {
32
- // eslint-disable-next-line no-param-reassign
33
- payload.types.arrayTypes[interfaceName] = buildObjectType({
32
+ const objectType = buildObjectType({
34
33
  name: interfaceName,
35
34
  fields: field.fields,
36
35
  forceNullable: (0, _isFieldNullable.default)(field, forceNullable),
37
36
  parentName: interfaceName,
38
37
  payload
39
38
  });
39
+ if (Object.keys(objectType.getFields()).length) {
40
+ payload.types.arrayTypes[interfaceName] = objectType;
41
+ }
42
+ }
43
+ if (!payload.types.arrayTypes[interfaceName]) {
44
+ return objectTypeConfig;
40
45
  }
41
46
  const arrayType = new _graphql.GraphQLList(new _graphql.GraphQLNonNull(payload.types.arrayTypes[interfaceName]));
42
47
  return {
@@ -47,11 +52,10 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
47
52
  };
48
53
  },
49
54
  blocks: (objectTypeConfig, field)=>{
50
- const blockTypes = field.blocks.map((block)=>{
55
+ const blockTypes = field.blocks.reduce((acc, block)=>{
51
56
  if (!payload.types.blockTypes[block.slug]) {
52
57
  const interfaceName = block?.interfaceName || block?.graphQL?.singularName || (0, _formatLabels.toWords)(block.slug, true);
53
- // eslint-disable-next-line no-param-reassign
54
- payload.types.blockTypes[block.slug] = buildObjectType({
58
+ const objectType = buildObjectType({
55
59
  name: interfaceName,
56
60
  fields: [
57
61
  ...block.fields,
@@ -64,9 +68,18 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
64
68
  parentName: interfaceName,
65
69
  payload
66
70
  });
71
+ if (Object.keys(objectType.getFields()).length) {
72
+ payload.types.blockTypes[block.slug] = objectType;
73
+ }
67
74
  }
68
- return payload.types.blockTypes[block.slug];
69
- });
75
+ if (payload.types.blockTypes[block.slug]) {
76
+ acc.push(payload.types.blockTypes[block.slug]);
77
+ }
78
+ return acc;
79
+ }, []);
80
+ if (blockTypes.length === 0) {
81
+ return objectTypeConfig;
82
+ }
70
83
  const fullName = (0, _combineParentName.default)(parentName, (0, _formatLabels.toWords)(field.name, true));
71
84
  const type = new _graphql.GraphQLList(new _graphql.GraphQLNonNull(new _graphql.GraphQLUnionType({
72
85
  name: fullName,
@@ -112,14 +125,19 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
112
125
  group: (objectTypeConfig, field)=>{
113
126
  const interfaceName = field?.interfaceName || (0, _combineParentName.default)(parentName, (0, _formatLabels.toWords)(field.name, true));
114
127
  if (!payload.types.groupTypes[interfaceName]) {
115
- // eslint-disable-next-line no-param-reassign
116
- payload.types.groupTypes[interfaceName] = buildObjectType({
128
+ const objectType = buildObjectType({
117
129
  name: interfaceName,
118
130
  fields: field.fields,
119
131
  forceNullable: (0, _isFieldNullable.default)(field, forceNullable),
120
132
  parentName: interfaceName,
121
133
  payload
122
134
  });
135
+ if (Object.keys(objectType.getFields()).length) {
136
+ payload.types.groupTypes[interfaceName] = objectType;
137
+ }
138
+ }
139
+ if (!payload.types.groupTypes[interfaceName]) {
140
+ return objectTypeConfig;
123
141
  }
124
142
  return {
125
143
  ...objectTypeConfig,
@@ -363,20 +381,23 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
363
381
  if ((0, _types.tabHasName)(tab)) {
364
382
  const interfaceName = tab?.interfaceName || (0, _combineParentName.default)(parentName, (0, _formatLabels.toWords)(tab.name, true));
365
383
  if (!payload.types.tabTypes[interfaceName]) {
366
- payload.types.tabTypes[interfaceName] = buildObjectType({
384
+ const objectType = buildObjectType({
367
385
  name: interfaceName,
368
386
  fields: tab.fields,
369
387
  forceNullable,
370
388
  parentName: interfaceName,
371
389
  payload
372
390
  });
373
- }
374
- return {
375
- ...tabSchema,
376
- [tab.name]: {
377
- type: payload.types.tabTypes[interfaceName]
391
+ if (Object.keys(objectType.getFields()).length) {
392
+ return {
393
+ ...tabSchema,
394
+ [tab.name]: {
395
+ type: objectType
396
+ }
397
+ };
378
398
  }
379
- };
399
+ }
400
+ return tabSchema;
380
401
  }
381
402
  return {
382
403
  ...tabSchema,
@@ -478,4 +499,4 @@ function buildObjectType({ name, baseFields = {}, fields, forceNullable, parentN
478
499
  }
479
500
  const _default = buildObjectType;
480
501
 
481
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaHFsL3NjaGVtYS9idWlsZE9iamVjdFR5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaFFMRmllbGRDb25maWcsIEdyYXBoUUxUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcblxuaW1wb3J0IHtcbiAgR3JhcGhRTEJvb2xlYW4sXG4gIEdyYXBoUUxFbnVtVHlwZSxcbiAgR3JhcGhRTEZsb2F0LFxuICBHcmFwaFFMSW50LFxuICBHcmFwaFFMTGlzdCxcbiAgR3JhcGhRTE5vbk51bGwsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMU3RyaW5nLFxuICBHcmFwaFFMVW5pb25UeXBlLFxufSBmcm9tICdncmFwaHFsJ1xuaW1wb3J0IHsgRGF0ZVRpbWVSZXNvbHZlciwgRW1haWxBZGRyZXNzUmVzb2x2ZXIgfSBmcm9tICdncmFwaHFsLXNjYWxhcnMnXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuaW1wb3J0IHsgR3JhcGhRTEpTT04gfSBmcm9tICdncmFwaHFsLXR5cGUtanNvbidcblxuaW1wb3J0IHR5cGUgeyBSaWNoVGV4dEFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL2ZpZWxkLXR5cGVzL1JpY2hUZXh0L3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBBcnJheUZpZWxkLFxuICBCbG9ja0ZpZWxkLFxuICBDaGVja2JveEZpZWxkLFxuICBDb2RlRmllbGQsXG4gIENvbGxhcHNpYmxlRmllbGQsXG4gIERhdGVGaWVsZCxcbiAgRW1haWxGaWVsZCxcbiAgRmllbGQsXG4gIEdyb3VwRmllbGQsXG4gIEpTT05GaWVsZCxcbiAgTnVtYmVyRmllbGQsXG4gIFBvaW50RmllbGQsXG4gIFJhZGlvRmllbGQsXG4gIFJlbGF0aW9uc2hpcEZpZWxkLFxuICBSaWNoVGV4dEZpZWxkLFxuICBSb3dGaWVsZCxcbiAgU2VsZWN0RmllbGQsXG4gIFRhYnNGaWVsZCxcbiAgVGV4dEZpZWxkLFxuICBUZXh0YXJlYUZpZWxkLFxuICBVcGxvYWRGaWVsZCxcbn0gZnJvbSAnLi4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgUGF5bG9hZCB9IGZyb20gJy4uLy4uL3BheWxvYWQnXG5cbmltcG9ydCB7IHRhYkhhc05hbWUgfSBmcm9tICcuLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHsgdG9Xb3JkcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9mb3JtYXRMYWJlbHMnXG5pbXBvcnQgY29tYmluZVBhcmVudE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2NvbWJpbmVQYXJlbnROYW1lJ1xuaW1wb3J0IGZvcm1hdE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2Zvcm1hdE5hbWUnXG5pbXBvcnQgZm9ybWF0T3B0aW9ucyBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0T3B0aW9ucydcbmltcG9ydCBidWlsZFdoZXJlSW5wdXRUeXBlIGZyb20gJy4vYnVpbGRXaGVyZUlucHV0VHlwZSdcbmltcG9ydCBpc0ZpZWxkTnVsbGFibGUgZnJvbSAnLi9pc0ZpZWxkTnVsbGFibGUnXG5pbXBvcnQgd2l0aE51bGxhYmxlVHlwZSBmcm9tICcuL3dpdGhOdWxsYWJsZVR5cGUnXG5cbnR5cGUgTG9jYWxlSW5wdXRUeXBlID0ge1xuICBmYWxsYmFja0xvY2FsZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbiAgbG9jYWxlOiB7XG4gICAgdHlwZTogR3JhcGhRTFR5cGVcbiAgfVxuICB3aGVyZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZUNvbmZpZyA9IHtcbiAgW3BhdGg6IHN0cmluZ106IEdyYXBoUUxGaWVsZENvbmZpZzxhbnksIGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBiYXNlRmllbGRzPzogT2JqZWN0VHlwZUNvbmZpZ1xuICBmaWVsZHM6IEZpZWxkW11cbiAgZm9yY2VOdWxsYWJsZT86IGJvb2xlYW5cbiAgbmFtZTogc3RyaW5nXG4gIHBhcmVudE5hbWU6IHN0cmluZ1xuICBwYXlsb2FkOiBQYXlsb2FkXG59XG5cbmZ1bmN0aW9uIGJ1aWxkT2JqZWN0VHlwZSh7XG4gIG5hbWUsXG4gIGJhc2VGaWVsZHMgPSB7fSxcbiAgZmllbGRzLFxuICBmb3JjZU51bGxhYmxlLFxuICBwYXJlbnROYW1lLFxuICBwYXlsb2FkLFxufTogQXJncyk6IEdyYXBoUUxPYmplY3RUeXBlIHtcbiAgY29uc3QgZmllbGRUb1NjaGVtYU1hcCA9IHtcbiAgICBhcnJheTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBBcnJheUZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHBheWxvYWQudHlwZXMuYXJyYXlUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJyYXlUeXBlID0gbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbChwYXlsb2FkLnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgYXJyYXlUeXBlKSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgYmxvY2tzOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IEJsb2NrRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGJsb2NrVHlwZXMgPSBmaWVsZC5ibG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICBpZiAoIXBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXSkge1xuICAgICAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICAgICAgYmxvY2s/LmludGVyZmFjZU5hbWUgfHwgYmxvY2s/LmdyYXBoUUw/LnNpbmd1bGFyTmFtZSB8fCB0b1dvcmRzKGJsb2NrLnNsdWcsIHRydWUpXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgcGF5bG9hZC50eXBlcy5ibG9ja1R5cGVzW2Jsb2NrLnNsdWddID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgLi4uYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jsb2NrVHlwZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXVxuICAgICAgfSlcblxuICAgICAgY29uc3QgZnVsbE5hbWUgPSBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKGZpZWxkLm5hbWUsIHRydWUpKVxuXG4gICAgICBjb25zdCB0eXBlID0gbmV3IEdyYXBoUUxMaXN0KFxuICAgICAgICBuZXcgR3JhcGhRTE5vbk51bGwoXG4gICAgICAgICAgbmV3IEdyYXBoUUxVbmlvblR5cGUoe1xuICAgICAgICAgICAgbmFtZTogZnVsbE5hbWUsXG4gICAgICAgICAgICByZXNvbHZlVHlwZTogKGRhdGEpID0+IHBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tkYXRhLmJsb2NrVHlwZV0ubmFtZSxcbiAgICAgICAgICAgIHR5cGVzOiBibG9ja1R5cGVzLFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgdHlwZSkgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrYm94OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENoZWNrYm94RmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxCb29sZWFuLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIGNvZGU6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogQ29kZUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIGNvbGxhcHNpYmxlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IENvbGxhcHNpYmxlRmllbGQpID0+XG4gICAgICBmaWVsZC5maWVsZHMucmVkdWNlKChvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCBhZGRTdWJGaWVsZCA9IGZpZWxkVG9TY2hlbWFNYXBbc3ViRmllbGQudHlwZV1cbiAgICAgICAgaWYgKGFkZFN1YkZpZWxkKSByZXR1cm4gYWRkU3ViRmllbGQob2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkcywgc3ViRmllbGQpXG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzXG4gICAgICB9LCBvYmplY3RUeXBlQ29uZmlnKSxcbiAgICBkYXRlOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IERhdGVGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgRGF0ZVRpbWVSZXNvbHZlciwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBlbWFpbDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBFbWFpbEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBFbWFpbEFkZHJlc3NSZXNvbHZlciwgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICBncm91cDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBHcm91cEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHBheWxvYWQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHBheWxvYWQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAganNvbjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBKU09ORmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIG51bWJlcjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBOdW1iZXJGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGZpZWxkPy5uYW1lID09PSAnaWQnID8gR3JhcGhRTEludCA6IEdyYXBoUUxGbG9hdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgZmllbGQ/Lmhhc01hbnkgPT09IHRydWUgPyBuZXcgR3JhcGhRTExpc3QodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgcG9pbnQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUG9pbnRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxGbG9hdCkpLFxuICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJhZGlvOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJhZGlvRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCBmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlczogZm9ybWF0T3B0aW9ucyhmaWVsZCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVsYXRpb25zaGlwOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJlbGF0aW9uc2hpcEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbGF0aW9uVG8gfSA9IGZpZWxkXG4gICAgICBjb25zdCBpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcbiAgICAgIGNvbnN0IGhhc01hbnlWYWx1ZXMgPSBmaWVsZC5oYXNNYW55XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgbGV0IHR5cGVcbiAgICAgIGxldCByZWxhdGlvblRvVHlwZSA9IG51bGxcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykpIHtcbiAgICAgICAgcmVsYXRpb25Ub1R5cGUgPSBuZXcgR3JhcGhRTEVudW1UeXBlKHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxhdGlvbnNoaXBOYW1lfV9SZWxhdGlvblRvYCxcbiAgICAgICAgICB2YWx1ZXM6IHJlbGF0aW9uVG8ucmVkdWNlKFxuICAgICAgICAgICAgKHJlbGF0aW9ucywgcmVsYXRpb24pID0+ICh7XG4gICAgICAgICAgICAgIC4uLnJlbGF0aW9ucyxcbiAgICAgICAgICAgICAgW2Zvcm1hdE5hbWUocmVsYXRpb24pXToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZWxhdGlvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IHJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4gcGF5bG9hZC5jb2xsZWN0aW9uc1tyZWxhdGlvbl0uZ3JhcGhRTC50eXBlKVxuXG4gICAgICAgIHR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGAke3JlbGF0aW9uc2hpcE5hbWV9X1JlbGF0aW9uc2hpcGAsXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgIHR5cGU6IHJlbGF0aW9uVG9UeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlc29sdmVUeXBlKGRhdGEsIHsgcmVxIH0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLmNvbGxlY3Rpb25zW2RhdGEuY29sbGVjdGlvbl0uZ3JhcGhRTC50eXBlLm5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIDsoeyB0eXBlIH0gPSBwYXlsb2FkLmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmdyYXBoUUwpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSByZWxhdGlvbnNoaXBUeXBlIGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LFxuICAgICAgLy8gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGlzIGJsb2NrVHlwZSBjYW4gaGF2ZSBhIHJlbGF0aW9uc2hpcFxuICAgICAgLy8gdG8gaXRzZWxmLiBUaGVyZWZvcmUsIHdlIHNldCB0aGUgcmVsYXRpb25zaGlwVHlwZSBlcXVhbCB0byB0aGUgYmxvY2tUeXBlXG4gICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkLlxuXG4gICAgICB0eXBlID0gdHlwZSB8fCBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQXJnczoge1xuICAgICAgICBmYWxsYmFja0xvY2FsZT86IHVua25vd25cbiAgICAgICAgbGltaXQ/OiB1bmtub3duXG4gICAgICAgIGxvY2FsZT86IHVua25vd25cbiAgICAgICAgcGFnZT86IHVua25vd25cbiAgICAgICAgd2hlcmU/OiB1bmtub3duXG4gICAgICB9ID0ge31cblxuICAgICAgaWYgKHBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICByZWxhdGlvbnNoaXBBcmdzLmxvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBwYXlsb2FkLnR5cGVzLmxvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbGF0aW9uc2hpcEFyZ3MuZmFsbGJhY2tMb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogcGF5bG9hZC50eXBlcy5mYWxsYmFja0xvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB7XG4gICAgICAgIGFyZ3M6IHJlbGF0aW9uc2hpcEFyZ3MsXG4gICAgICAgIGV4dGVuc2lvbnM6IHsgY29tcGxleGl0eTogMTAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFtmaWVsZC5uYW1lXVxuICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IGFyZ3MubG9jYWxlIHx8IGNvbnRleHQucmVxLmxvY2FsZVxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTG9jYWxlID0gYXJncy5mYWxsYmFja0xvY2FsZSB8fCBjb250ZXh0LnJlcS5mYWxsYmFja0xvY2FsZVxuICAgICAgICAgIGxldCByZWxhdGVkQ29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgICAgICBpZiAoaGFzTWFueVZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdXG4gICAgICAgICAgICBjb25zdCByZXN1bHRQcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlID0gYXN5bmMgKHJlbGF0ZWREb2MsIGkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGlkID0gcmVsYXRlZERvY1xuICAgICAgICAgICAgICBsZXQgY29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcgPSByZWxhdGVkRG9jLnJlbGF0aW9uVG9cbiAgICAgICAgICAgICAgICBpZCA9IHJlbGF0ZWREb2MudmFsdWVcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXEudHJhbnNhY3Rpb25JRCxcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IHJlc3VsdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgocmVsYXRlZERvYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFByb21pc2VzLnB1c2goY3JlYXRlUG9wdWxhdGlvblByb21pc2UocmVsYXRlZERvYywgaSkpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlc3VsdFByb21pc2VzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZVxuICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgaWQgPSB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gdmFsdWUucmVsYXRpb25Ub1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZERvY3VtZW50ID0gYXdhaXQgY29udGV4dC5yZXEucGF5bG9hZERhdGFMb2FkZXIubG9hZChcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAocmVsYXRlZERvY3VtZW50KSB7XG4gICAgICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiByZWxhdGVkQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZWxhdGVkRG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlbGF0ZWREb2N1bWVudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgaGFzTWFueVZhbHVlcyA/IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkpIDogdHlwZSxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICApLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHJlbGF0aW9uc2hpcCxcbiAgICAgIH1cbiAgICB9LFxuICAgIHJpY2hUZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJpY2hUZXh0RmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBkZXB0aDoge1xuICAgICAgICAgICAgdHlwZTogR3JhcGhRTEludCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhc3luYyByZXNvbHZlKHBhcmVudCwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIGxldCBkZXB0aCA9IHBheWxvYWQuY29uZmlnLmRlZmF1bHREZXB0aFxuICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5kZXB0aCAhPT0gJ3VuZGVmaW5lZCcpIGRlcHRoID0gYXJncy5kZXB0aFxuICAgICAgICAgIGNvbnN0IGVkaXRvcjogUmljaFRleHRBZGFwdGVyID0gZmllbGQ/LmVkaXRvclxuXG4gICAgICAgICAgLy8gUmljaFRleHQgZmllbGRzIGhhdmUgdGhlaXIgb3duIGRlcHRoIGFyZ3VtZW50IGluIEdyYXBoUUwuXG4gICAgICAgICAgLy8gVGhpcyBpcyB3aHkgdGhlIHBvcHVsYXRpb25Qcm9taXNlICh3aGljaCBwb3B1bGF0ZXMgcmljaHRleHQgZmllbGRzIGxpa2UgdXBsb2FkcyBhbmQgcmVsYXRpb25zaGlwcylcbiAgICAgICAgICAvLyBpcyBydW4gaGVyZSBhZ2Fpbiwgd2l0aCB0aGUgcHJvdmlkZWQgZGVwdGguXG4gICAgICAgICAgLy8gSW4gdGhlIGdyYXBocWwgZmluZC50cyByZXNvbHZlciwgdGhlIGRlcHRoIGlzIHRoZW4gaGFyZC1jb2RlZCB0byAwLlxuICAgICAgICAgIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIHBvcHVsYXRpb25Qcm9taXNlIGZvciBHcmFwaFFMIGlzIG9ubHkgcnVuIGhlcmUsIGFuZCBub3QgaW4gdGhlIGZpbmQudHMgcmVzb2x2ZXIgLyBub3JtYWwgcG9wdWxhdGlvbiBwcm9taXNlLlxuICAgICAgICAgIGlmIChlZGl0b3I/LnBvcHVsYXRpb25Qcm9taXNlKSB7XG4gICAgICAgICAgICBhd2FpdCBlZGl0b3I/LnBvcHVsYXRpb25Qcm9taXNlKHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICBmaW5kTWFueTogZmFsc2UsXG4gICAgICAgICAgICAgIGZsYXR0ZW5Mb2NhbGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgb3ZlcnJpZGVBY2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBwb3B1bGF0aW9uUHJvbWlzZXM6IFtdLFxuICAgICAgICAgICAgICByZXE6IGNvbnRleHQucmVxLFxuICAgICAgICAgICAgICBzaG93SGlkZGVuRmllbGRzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2libGluZ0RvYzogcGFyZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFyZW50W2ZpZWxkLm5hbWVdXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcm93OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJvd0ZpZWxkKSA9PlxuICAgICAgZmllbGQuZmllbGRzLnJlZHVjZSgob2JqZWN0VHlwZUNvbmZpZ1dpdGhSb3dGaWVsZHMsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFN1YkZpZWxkID0gZmllbGRUb1NjaGVtYU1hcFtzdWJGaWVsZC50eXBlXVxuICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcywgc3ViRmllbGQpXG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkc1xuICAgICAgfSwgb2JqZWN0VHlwZUNvbmZpZyksXG4gICAgc2VsZWN0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFNlbGVjdEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBmdWxsTmFtZSA9IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIGZpZWxkLm5hbWUpXG5cbiAgICAgIGxldCB0eXBlOiBHcmFwaFFMVHlwZSA9IG5ldyBHcmFwaFFMRW51bVR5cGUoe1xuICAgICAgICBuYW1lOiBmdWxsTmFtZSxcbiAgICAgICAgdmFsdWVzOiBmb3JtYXRPcHRpb25zKGZpZWxkKSxcbiAgICAgIH0pXG5cbiAgICAgIHR5cGUgPSBmaWVsZC5oYXNNYW55ID8gbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbCh0eXBlKSkgOiB0eXBlXG4gICAgICB0eXBlID0gd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgdHlwZSwgZm9yY2VOdWxsYWJsZSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGUgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYnM6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogVGFic0ZpZWxkKSA9PlxuICAgICAgZmllbGQudGFicy5yZWR1Y2UoKHRhYlNjaGVtYSwgdGFiKSA9PiB7XG4gICAgICAgIGlmICh0YWJIYXNOYW1lKHRhYikpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgICAgIHRhYj8uaW50ZXJmYWNlTmFtZSB8fCBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKHRhYi5uYW1lLCB0cnVlKSlcblxuICAgICAgICAgIGlmICghcGF5bG9hZC50eXBlcy50YWJUeXBlc1tpbnRlcmZhY2VOYW1lXSkge1xuICAgICAgICAgICAgcGF5bG9hZC50eXBlcy50YWJUeXBlc1tpbnRlcmZhY2VOYW1lXSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkczogdGFiLmZpZWxkcyxcbiAgICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICAgICAgcGFyZW50TmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRhYlNjaGVtYSxcbiAgICAgICAgICAgIFt0YWIubmFtZV06IHsgdHlwZTogcGF5bG9hZC50eXBlcy50YWJUeXBlc1tpbnRlcmZhY2VOYW1lXSB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGFiU2NoZW1hLFxuICAgICAgICAgIC4uLnRhYi5maWVsZHMucmVkdWNlKChzdWJGaWVsZFNjaGVtYSwgc3ViRmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFkZFN1YkZpZWxkID0gZmllbGRUb1NjaGVtYU1hcFtzdWJGaWVsZC50eXBlXVxuICAgICAgICAgICAgaWYgKGFkZFN1YkZpZWxkKSByZXR1cm4gYWRkU3ViRmllbGQoc3ViRmllbGRTY2hlbWEsIHN1YkZpZWxkKVxuICAgICAgICAgICAgcmV0dXJuIHN1YkZpZWxkU2NoZW1hXG4gICAgICAgICAgfSwgdGFiU2NoZW1hKSxcbiAgICAgICAgfVxuICAgICAgfSwgb2JqZWN0VHlwZUNvbmZpZyksXG4gICAgdGV4dDogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBUZXh0RmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxTdHJpbmcsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgdGV4dGFyZWE6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogVGV4dGFyZWFGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTFN0cmluZywgZm9yY2VOdWxsYWJsZSkgfSxcbiAgICB9KSxcbiAgICB1cGxvYWQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogVXBsb2FkRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVsYXRpb25UbyB9ID0gZmllbGRcblxuICAgICAgY29uc3QgdXBsb2FkTmFtZSA9IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIHRvV29yZHMoZmllbGQubmFtZSwgdHJ1ZSkpXG5cbiAgICAgIC8vIElmIHRoZSByZWxhdGlvbnNoaXBUeXBlIGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LFxuICAgICAgLy8gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGlzIGJsb2NrVHlwZSBjYW4gaGF2ZSBhIHJlbGF0aW9uc2hpcFxuICAgICAgLy8gdG8gaXRzZWxmLiBUaGVyZWZvcmUsIHdlIHNldCB0aGUgcmVsYXRpb25zaGlwVHlwZSBlcXVhbCB0byB0aGUgYmxvY2tUeXBlXG4gICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkLlxuXG4gICAgICBjb25zdCB0eXBlID0gd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgZmllbGQsXG4gICAgICAgIHBheWxvYWQuY29sbGVjdGlvbnNbcmVsYXRpb25Ub10uZ3JhcGhRTC50eXBlIHx8IG5ld2x5Q3JlYXRlZEJsb2NrVHlwZSxcbiAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgIClcblxuICAgICAgY29uc3QgdXBsb2FkQXJncyA9IHt9IGFzIExvY2FsZUlucHV0VHlwZVxuXG4gICAgICBpZiAocGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHVwbG9hZEFyZ3MubG9jYWxlID0ge1xuICAgICAgICAgIHR5cGU6IHBheWxvYWQudHlwZXMubG9jYWxlSW5wdXRUeXBlLFxuICAgICAgICB9XG5cbiAgICAgICAgdXBsb2FkQXJncy5mYWxsYmFja0xvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBwYXlsb2FkLnR5cGVzLmZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyA9IGZpZWxkLnJlbGF0aW9uVG9cblxuICAgICAgY29uc3QgdXBsb2FkID0ge1xuICAgICAgICBhcmdzOiB1cGxvYWRBcmdzLFxuICAgICAgICBleHRlbnNpb25zOiB7IGNvbXBsZXhpdHk6IDIwIH0sXG4gICAgICAgIGFzeW5jIHJlc29sdmUocGFyZW50LCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJlbnRbZmllbGQubmFtZV1cbiAgICAgICAgICBjb25zdCBsb2NhbGUgPSBhcmdzLmxvY2FsZSB8fCBjb250ZXh0LnJlcS5sb2NhbGVcbiAgICAgICAgICBjb25zdCBmYWxsYmFja0xvY2FsZSA9IGFyZ3MuZmFsbGJhY2tMb2NhbGUgfHwgY29udGV4dC5yZXEuZmFsbGJhY2tMb2NhbGVcbiAgICAgICAgICBjb25zdCBpZCA9IHZhbHVlXG5cbiAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREb2N1bWVudCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgICAgICAgIHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgcmV0dXJuIHJlbGF0ZWREb2N1bWVudCB8fCBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZSxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2hlcmVGaWVsZHMgPSBwYXlsb2FkLmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgdXBsb2FkLmFyZ3Mud2hlcmUgPSB7XG4gICAgICAgIHR5cGU6IGJ1aWxkV2hlcmVJbnB1dFR5cGUoe1xuICAgICAgICAgIG5hbWU6IHVwbG9hZE5hbWUsXG4gICAgICAgICAgZmllbGRzOiB3aGVyZUZpZWxkcyxcbiAgICAgICAgICBwYXJlbnROYW1lOiB1cGxvYWROYW1lLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgIH0pLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHVwbG9hZCxcbiAgICAgIH1cbiAgICB9LFxuICB9XG5cbiAgY29uc3Qgb2JqZWN0U2NoZW1hID0ge1xuICAgIG5hbWUsXG4gICAgZmllbGRzOiAoKSA9PlxuICAgICAgZmllbGRzLnJlZHVjZSgob2JqZWN0VHlwZUNvbmZpZywgZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSBmaWVsZFRvU2NoZW1hTWFwW2ZpZWxkLnR5cGVdXG5cbiAgICAgICAgaWYgKHR5cGVvZiBmaWVsZFNjaGVtYSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICAgICAgLi4uZmllbGRTY2hlbWEob2JqZWN0VHlwZUNvbmZpZywgZmllbGQpLFxuICAgICAgICB9XG4gICAgICB9LCBiYXNlRmllbGRzKSxcbiAgfVxuXG4gIGNvbnN0IG5ld2x5Q3JlYXRlZEJsb2NrVHlwZSA9IG5ldyBHcmFwaFFMT2JqZWN0VHlwZShvYmplY3RTY2hlbWEpXG5cbiAgcmV0dXJuIG5ld2x5Q3JlYXRlZEJsb2NrVHlwZVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZE9iamVjdFR5cGVcbiJdLCJuYW1lcyI6WyJidWlsZE9iamVjdFR5cGUiLCJuYW1lIiwiYmFzZUZpZWxkcyIsImZpZWxkcyIsImZvcmNlTnVsbGFibGUiLCJwYXJlbnROYW1lIiwicGF5bG9hZCIsImZpZWxkVG9TY2hlbWFNYXAiLCJhcnJheSIsIm9iamVjdFR5cGVDb25maWciLCJmaWVsZCIsImludGVyZmFjZU5hbWUiLCJjb21iaW5lUGFyZW50TmFtZSIsInRvV29yZHMiLCJ0eXBlcyIsImFycmF5VHlwZXMiLCJpc0ZpZWxkTnVsbGFibGUiLCJhcnJheVR5cGUiLCJHcmFwaFFMTGlzdCIsIkdyYXBoUUxOb25OdWxsIiwidHlwZSIsIndpdGhOdWxsYWJsZVR5cGUiLCJibG9ja3MiLCJibG9ja1R5cGVzIiwibWFwIiwiYmxvY2siLCJzbHVnIiwiZ3JhcGhRTCIsInNpbmd1bGFyTmFtZSIsImZ1bGxOYW1lIiwiR3JhcGhRTFVuaW9uVHlwZSIsInJlc29sdmVUeXBlIiwiZGF0YSIsImJsb2NrVHlwZSIsImNoZWNrYm94IiwiR3JhcGhRTEJvb2xlYW4iLCJjb2RlIiwiR3JhcGhRTFN0cmluZyIsImNvbGxhcHNpYmxlIiwicmVkdWNlIiwib2JqZWN0VHlwZUNvbmZpZ1dpdGhDb2xsYXBzaWJsZUZpZWxkcyIsInN1YkZpZWxkIiwiYWRkU3ViRmllbGQiLCJkYXRlIiwiRGF0ZVRpbWVSZXNvbHZlciIsImVtYWlsIiwiRW1haWxBZGRyZXNzUmVzb2x2ZXIiLCJncm91cCIsImdyb3VwVHlwZXMiLCJqc29uIiwiR3JhcGhRTEpTT04iLCJudW1iZXIiLCJHcmFwaFFMSW50IiwiR3JhcGhRTEZsb2F0IiwiaGFzTWFueSIsInBvaW50IiwicmFkaW8iLCJHcmFwaFFMRW51bVR5cGUiLCJ2YWx1ZXMiLCJmb3JtYXRPcHRpb25zIiwicmVsYXRpb25zaGlwIiwicmVsYXRpb25UbyIsImlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFzTWFueVZhbHVlcyIsInJlbGF0aW9uc2hpcE5hbWUiLCJyZWxhdGlvblRvVHlwZSIsInJlbGF0aW9ucyIsInJlbGF0aW9uIiwiZm9ybWF0TmFtZSIsInZhbHVlIiwiY29sbGVjdGlvbnMiLCJHcmFwaFFMT2JqZWN0VHlwZSIsInJlcSIsImNvbGxlY3Rpb24iLCJuZXdseUNyZWF0ZWRCbG9ja1R5cGUiLCJyZWxhdGlvbnNoaXBBcmdzIiwiY29uZmlnIiwibG9jYWxpemF0aW9uIiwibG9jYWxlIiwibG9jYWxlSW5wdXRUeXBlIiwiZmFsbGJhY2tMb2NhbGUiLCJmYWxsYmFja0xvY2FsZUlucHV0VHlwZSIsImFyZ3MiLCJleHRlbnNpb25zIiwiY29tcGxleGl0eSIsInJlc29sdmUiLCJwYXJlbnQiLCJjb250ZXh0IiwicmVsYXRlZENvbGxlY3Rpb25TbHVnIiwicmVzdWx0cyIsInJlc3VsdFByb21pc2VzIiwiY3JlYXRlUG9wdWxhdGlvblByb21pc2UiLCJyZWxhdGVkRG9jIiwiaSIsImlkIiwiY29sbGVjdGlvblNsdWciLCJyZXN1bHQiLCJwYXlsb2FkRGF0YUxvYWRlciIsImxvYWQiLCJKU09OIiwic3RyaW5naWZ5IiwidHJhbnNhY3Rpb25JRCIsImZvckVhY2giLCJwdXNoIiwiUHJvbWlzZSIsImFsbCIsInJlbGF0ZWREb2N1bWVudCIsInJpY2hUZXh0IiwiZGVwdGgiLCJkZWZhdWx0RGVwdGgiLCJlZGl0b3IiLCJwb3B1bGF0aW9uUHJvbWlzZSIsImZpbmRNYW55IiwiZmxhdHRlbkxvY2FsZXMiLCJvdmVycmlkZUFjY2VzcyIsInBvcHVsYXRpb25Qcm9taXNlcyIsInNob3dIaWRkZW5GaWVsZHMiLCJzaWJsaW5nRG9jIiwicm93Iiwib2JqZWN0VHlwZUNvbmZpZ1dpdGhSb3dGaWVsZHMiLCJzZWxlY3QiLCJ0YWJzIiwidGFiU2NoZW1hIiwidGFiIiwidGFiSGFzTmFtZSIsInRhYlR5cGVzIiwic3ViRmllbGRTY2hlbWEiLCJ0ZXh0IiwidGV4dGFyZWEiLCJ1cGxvYWQiLCJ1cGxvYWROYW1lIiwidXBsb2FkQXJncyIsIndoZXJlRmllbGRzIiwid2hlcmUiLCJidWlsZFdoZXJlSW5wdXRUeXBlIiwib2JqZWN0U2NoZW1hIiwiZmllbGRTY2hlbWEiXSwibWFwcGluZ3MiOiJBQUFBLDBEQUEwRCxHQUMxRCxtQ0FBbUMsR0FDbkMsdUNBQXVDOzs7OytCQXltQnZDOzs7ZUFBQTs7O3lCQTVsQk87Z0NBQ2dEO2lDQUUzQjt1QkE0QkQ7OEJBQ0g7MEVBQ007bUVBQ1A7c0VBQ0c7NEVBQ007d0VBQ0o7eUVBQ0M7Ozs7OztBQTJCN0IsU0FBU0EsZ0JBQWdCLEVBQ3ZCQyxJQUFJLEVBQ0pDLGFBQWEsQ0FBQyxDQUFDLEVBQ2ZDLE1BQU0sRUFDTkMsYUFBYSxFQUNiQyxVQUFVLEVBQ1ZDLE9BQU8sRUFDRjtJQUNMLE1BQU1DLG1CQUFtQjtRQUN2QkMsT0FBTyxDQUFDQyxrQkFBb0NDO1lBQzFDLE1BQU1DLGdCQUNKRCxPQUFPQyxpQkFBaUJDLElBQUFBLDBCQUFpQixFQUFDUCxZQUFZUSxJQUFBQSxxQkFBTyxFQUFDSCxNQUFNVCxJQUFJLEVBQUU7WUFFNUUsSUFBSSxDQUFDSyxRQUFRUSxLQUFLLENBQUNDLFVBQVUsQ0FBQ0osY0FBYyxFQUFFO2dCQUM1Qyw2Q0FBNkM7Z0JBQzdDTCxRQUFRUSxLQUFLLENBQUNDLFVBQVUsQ0FBQ0osY0FBYyxHQUFHWCxnQkFBZ0I7b0JBQ3hEQyxNQUFNVTtvQkFDTlIsUUFBUU8sTUFBTVAsTUFBTTtvQkFDcEJDLGVBQWVZLElBQUFBLHdCQUFlLEVBQUNOLE9BQU9OO29CQUN0Q0MsWUFBWU07b0JBQ1pMO2dCQUNGO1lBQ0Y7WUFFQSxNQUFNVyxZQUFZLElBQUlDLG9CQUFXLENBQUMsSUFBSUMsdUJBQWMsQ0FBQ2IsUUFBUVEsS0FBSyxDQUFDQyxVQUFVLENBQUNKLGNBQWM7WUFFNUYsT0FBTztnQkFDTCxHQUFHRixnQkFBZ0I7Z0JBQ25CLENBQUNDLE1BQU1ULElBQUksQ0FBQyxFQUFFO29CQUFFbUIsTUFBTUMsSUFBQUEseUJBQWdCLEVBQUNYLE9BQU9PO2dCQUFXO1lBQzNEO1FBQ0Y7UUFDQUssUUFBUSxDQUFDYixrQkFB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
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaHFsL3NjaGVtYS9idWlsZE9iamVjdFR5cGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaFFMRmllbGRDb25maWcsIEdyYXBoUUxUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcblxuaW1wb3J0IHtcbiAgR3JhcGhRTEJvb2xlYW4sXG4gIEdyYXBoUUxFbnVtVHlwZSxcbiAgR3JhcGhRTEZsb2F0LFxuICBHcmFwaFFMSW50LFxuICBHcmFwaFFMTGlzdCxcbiAgR3JhcGhRTE5vbk51bGwsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMU3RyaW5nLFxuICBHcmFwaFFMVW5pb25UeXBlLFxufSBmcm9tICdncmFwaHFsJ1xuaW1wb3J0IHsgRGF0ZVRpbWVSZXNvbHZlciwgRW1haWxBZGRyZXNzUmVzb2x2ZXIgfSBmcm9tICdncmFwaHFsLXNjYWxhcnMnXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuaW1wb3J0IHsgR3JhcGhRTEpTT04gfSBmcm9tICdncmFwaHFsLXR5cGUtanNvbidcblxuaW1wb3J0IHR5cGUgeyBSaWNoVGV4dEFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL2ZpZWxkLXR5cGVzL1JpY2hUZXh0L3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBBcnJheUZpZWxkLFxuICBCbG9ja0ZpZWxkLFxuICBDaGVja2JveEZpZWxkLFxuICBDb2RlRmllbGQsXG4gIENvbGxhcHNpYmxlRmllbGQsXG4gIERhdGVGaWVsZCxcbiAgRW1haWxGaWVsZCxcbiAgRmllbGQsXG4gIEdyb3VwRmllbGQsXG4gIEpTT05GaWVsZCxcbiAgTnVtYmVyRmllbGQsXG4gIFBvaW50RmllbGQsXG4gIFJhZGlvRmllbGQsXG4gIFJlbGF0aW9uc2hpcEZpZWxkLFxuICBSaWNoVGV4dEZpZWxkLFxuICBSb3dGaWVsZCxcbiAgU2VsZWN0RmllbGQsXG4gIFRhYnNGaWVsZCxcbiAgVGV4dEZpZWxkLFxuICBUZXh0YXJlYUZpZWxkLFxuICBVcGxvYWRGaWVsZCxcbn0gZnJvbSAnLi4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgUGF5bG9hZCB9IGZyb20gJy4uLy4uL3BheWxvYWQnXG5cbmltcG9ydCB7IHRhYkhhc05hbWUgfSBmcm9tICcuLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHsgdG9Xb3JkcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9mb3JtYXRMYWJlbHMnXG5pbXBvcnQgY29tYmluZVBhcmVudE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2NvbWJpbmVQYXJlbnROYW1lJ1xuaW1wb3J0IGZvcm1hdE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2Zvcm1hdE5hbWUnXG5pbXBvcnQgZm9ybWF0T3B0aW9ucyBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0T3B0aW9ucydcbmltcG9ydCBidWlsZFdoZXJlSW5wdXRUeXBlIGZyb20gJy4vYnVpbGRXaGVyZUlucHV0VHlwZSdcbmltcG9ydCBpc0ZpZWxkTnVsbGFibGUgZnJvbSAnLi9pc0ZpZWxkTnVsbGFibGUnXG5pbXBvcnQgd2l0aE51bGxhYmxlVHlwZSBmcm9tICcuL3dpdGhOdWxsYWJsZVR5cGUnXG5cbnR5cGUgTG9jYWxlSW5wdXRUeXBlID0ge1xuICBmYWxsYmFja0xvY2FsZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbiAgbG9jYWxlOiB7XG4gICAgdHlwZTogR3JhcGhRTFR5cGVcbiAgfVxuICB3aGVyZToge1xuICAgIHR5cGU6IEdyYXBoUUxUeXBlXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0VHlwZUNvbmZpZyA9IHtcbiAgW3BhdGg6IHN0cmluZ106IEdyYXBoUUxGaWVsZENvbmZpZzxhbnksIGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBiYXNlRmllbGRzPzogT2JqZWN0VHlwZUNvbmZpZ1xuICBmaWVsZHM6IEZpZWxkW11cbiAgZm9yY2VOdWxsYWJsZT86IGJvb2xlYW5cbiAgbmFtZTogc3RyaW5nXG4gIHBhcmVudE5hbWU6IHN0cmluZ1xuICBwYXlsb2FkOiBQYXlsb2FkXG59XG5cbmZ1bmN0aW9uIGJ1aWxkT2JqZWN0VHlwZSh7XG4gIG5hbWUsXG4gIGJhc2VGaWVsZHMgPSB7fSxcbiAgZmllbGRzLFxuICBmb3JjZU51bGxhYmxlLFxuICBwYXJlbnROYW1lLFxuICBwYXlsb2FkLFxufTogQXJncyk6IEdyYXBoUUxPYmplY3RUeXBlIHtcbiAgY29uc3QgZmllbGRUb1NjaGVtYU1hcCA9IHtcbiAgICBhcnJheTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBBcnJheUZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgZmllbGQ/LmludGVyZmFjZU5hbWUgfHwgY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmFycmF5VHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgbmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlOiBpc0ZpZWxkTnVsbGFibGUoZmllbGQsIGZvcmNlTnVsbGFibGUpLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMob2JqZWN0VHlwZS5nZXRGaWVsZHMoKSkubGVuZ3RoKSB7XG4gICAgICAgICAgcGF5bG9hZC50eXBlcy5hcnJheVR5cGVzW2ludGVyZmFjZU5hbWVdID0gb2JqZWN0VHlwZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghcGF5bG9hZC50eXBlcy5hcnJheVR5cGVzW2ludGVyZmFjZU5hbWVdKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmF5VHlwZSA9IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwocGF5bG9hZC50eXBlcy5hcnJheVR5cGVzW2ludGVyZmFjZU5hbWVdKSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIGFycmF5VHlwZSkgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIGJsb2NrczogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBCbG9ja0ZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBibG9ja1R5cGVzOiBHcmFwaFFMT2JqZWN0VHlwZTxhbnksIGFueT5bXSA9IGZpZWxkLmJsb2Nrcy5yZWR1Y2UoKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmJsb2NrVHlwZXNbYmxvY2suc2x1Z10pIHtcbiAgICAgICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgICAgIGJsb2NrPy5pbnRlcmZhY2VOYW1lIHx8IGJsb2NrPy5ncmFwaFFMPy5zaW5ndWxhck5hbWUgfHwgdG9Xb3JkcyhibG9jay5zbHVnLCB0cnVlKVxuXG4gICAgICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgIC4uLmJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdibG9ja1R5cGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICAgICAgcGFyZW50TmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBheWxvYWQudHlwZXMuYmxvY2tUeXBlc1tibG9jay5zbHVnXSA9IG9iamVjdFR5cGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF5bG9hZC50eXBlcy5ibG9ja1R5cGVzW2Jsb2NrLnNsdWddKSB7XG4gICAgICAgICAgYWNjLnB1c2gocGF5bG9hZC50eXBlcy5ibG9ja1R5cGVzW2Jsb2NrLnNsdWddKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgfSwgW10pXG5cbiAgICAgIGlmIChibG9ja1R5cGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsTmFtZSA9IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIHRvV29yZHMoZmllbGQubmFtZSwgdHJ1ZSkpXG5cbiAgICAgIGNvbnN0IHR5cGUgPSBuZXcgR3JhcGhRTExpc3QoXG4gICAgICAgIG5ldyBHcmFwaFFMTm9uTnVsbChcbiAgICAgICAgICBuZXcgR3JhcGhRTFVuaW9uVHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBmdWxsTmFtZSxcbiAgICAgICAgICAgIHJlc29sdmVUeXBlOiAoZGF0YSkgPT4gcGF5bG9hZC50eXBlcy5ibG9ja1R5cGVzW2RhdGEuYmxvY2tUeXBlXS5uYW1lLFxuICAgICAgICAgICAgdHlwZXM6IGJsb2NrVHlwZXMsXG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCB0eXBlKSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgY2hlY2tib3g6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogQ2hlY2tib3hGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHsgdHlwZTogd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgR3JhcGhRTEJvb2xlYW4sIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgY29kZTogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBDb2RlRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxTdHJpbmcsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgY29sbGFwc2libGU6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogQ29sbGFwc2libGVGaWVsZCkgPT5cbiAgICAgIGZpZWxkLmZpZWxkcy5yZWR1Y2UoKG9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHMsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFN1YkZpZWxkID0gZmllbGRUb1NjaGVtYU1hcFtzdWJGaWVsZC50eXBlXVxuICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChvYmplY3RUeXBlQ29uZmlnV2l0aENvbGxhcHNpYmxlRmllbGRzLCBzdWJGaWVsZClcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHNcbiAgICAgIH0sIG9iamVjdFR5cGVDb25maWcpLFxuICAgIGRhdGU6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogRGF0ZUZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBEYXRlVGltZVJlc29sdmVyLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIGVtYWlsOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IEVtYWlsRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEVtYWlsQWRkcmVzc1Jlc29sdmVyLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIGdyb3VwOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IEdyb3VwRmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGludGVyZmFjZU5hbWUgPVxuICAgICAgICBmaWVsZD8uaW50ZXJmYWNlTmFtZSB8fCBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKGZpZWxkLm5hbWUsIHRydWUpKVxuXG4gICAgICBpZiAoIXBheWxvYWQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSkge1xuICAgICAgICBjb25zdCBvYmplY3RUeXBlID0gYnVpbGRPYmplY3RUeXBlKHtcbiAgICAgICAgICBuYW1lOiBpbnRlcmZhY2VOYW1lLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZvcmNlTnVsbGFibGU6IGlzRmllbGROdWxsYWJsZShmaWVsZCwgZm9yY2VOdWxsYWJsZSksXG4gICAgICAgICAgcGFyZW50TmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICBwYXlsb2FkLnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0gPSBvYmplY3RUeXBlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXlsb2FkLnR5cGVzLmdyb3VwVHlwZXNbaW50ZXJmYWNlTmFtZV0pIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFR5cGVDb25maWdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHBheWxvYWQudHlwZXMuZ3JvdXBUeXBlc1tpbnRlcmZhY2VOYW1lXSB9LFxuICAgICAgfVxuICAgIH0sXG4gICAganNvbjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBKU09ORmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIG51bWJlcjogKG9iamVjdFR5cGVDb25maWc6IE9iamVjdFR5cGVDb25maWcsIGZpZWxkOiBOdW1iZXJGaWVsZCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGZpZWxkPy5uYW1lID09PSAnaWQnID8gR3JhcGhRTEludCA6IEdyYXBoUUxGbG9hdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgZmllbGQ/Lmhhc01hbnkgPT09IHRydWUgPyBuZXcgR3JhcGhRTExpc3QodHlwZSkgOiB0eXBlLFxuICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0sXG4gICAgcG9pbnQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogUG9pbnRGaWVsZCkgPT4gKHtcbiAgICAgIC4uLm9iamVjdFR5cGVDb25maWcsXG4gICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgdHlwZTogd2l0aE51bGxhYmxlVHlwZShcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBuZXcgR3JhcGhRTExpc3QobmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxGbG9hdCkpLFxuICAgICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgIH0pLFxuICAgIHJhZGlvOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJhZGlvRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgbmV3IEdyYXBoUUxFbnVtVHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCBmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIHZhbHVlczogZm9ybWF0T3B0aW9ucyhmaWVsZCksXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVsYXRpb25zaGlwOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJlbGF0aW9uc2hpcEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbGF0aW9uVG8gfSA9IGZpZWxkXG4gICAgICBjb25zdCBpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb25UbylcbiAgICAgIGNvbnN0IGhhc01hbnlWYWx1ZXMgPSBmaWVsZC5oYXNNYW55XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBOYW1lID0gY29tYmluZVBhcmVudE5hbWUocGFyZW50TmFtZSwgdG9Xb3JkcyhmaWVsZC5uYW1lLCB0cnVlKSlcblxuICAgICAgbGV0IHR5cGVcbiAgICAgIGxldCByZWxhdGlvblRvVHlwZSA9IG51bGxcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25UbykpIHtcbiAgICAgICAgcmVsYXRpb25Ub1R5cGUgPSBuZXcgR3JhcGhRTEVudW1UeXBlKHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxhdGlvbnNoaXBOYW1lfV9SZWxhdGlvblRvYCxcbiAgICAgICAgICB2YWx1ZXM6IHJlbGF0aW9uVG8ucmVkdWNlKFxuICAgICAgICAgICAgKHJlbGF0aW9ucywgcmVsYXRpb24pID0+ICh7XG4gICAgICAgICAgICAgIC4uLnJlbGF0aW9ucyxcbiAgICAgICAgICAgICAgW2Zvcm1hdE5hbWUocmVsYXRpb24pXToge1xuICAgICAgICAgICAgICAgIHZhbHVlOiByZWxhdGlvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCB0eXBlcyA9IHJlbGF0aW9uVG8ubWFwKChyZWxhdGlvbikgPT4gcGF5bG9hZC5jb2xsZWN0aW9uc1tyZWxhdGlvbl0uZ3JhcGhRTC50eXBlKVxuXG4gICAgICAgIHR5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgIG5hbWU6IGAke3JlbGF0aW9uc2hpcE5hbWV9X1JlbGF0aW9uc2hpcGAsXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICByZWxhdGlvblRvOiB7XG4gICAgICAgICAgICAgIHR5cGU6IHJlbGF0aW9uVG9UeXBlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMVW5pb25UeXBlKHtcbiAgICAgICAgICAgICAgICBuYW1lOiByZWxhdGlvbnNoaXBOYW1lLFxuICAgICAgICAgICAgICAgIGFzeW5jIHJlc29sdmVUeXBlKGRhdGEsIHsgcmVxIH0pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkLmNvbGxlY3Rpb25zW2RhdGEuY29sbGVjdGlvbl0uZ3JhcGhRTC50eXBlLm5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGVzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIDsoeyB0eXBlIH0gPSBwYXlsb2FkLmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmdyYXBoUUwpXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSByZWxhdGlvbnNoaXBUeXBlIGlzIHVuZGVmaW5lZCBhdCB0aGlzIHBvaW50LFxuICAgICAgLy8gaXQgY2FuIGJlIGFzc3VtZWQgdGhhdCB0aGlzIGJsb2NrVHlwZSBjYW4gaGF2ZSBhIHJlbGF0aW9uc2hpcFxuICAgICAgLy8gdG8gaXRzZWxmLiBUaGVyZWZvcmUsIHdlIHNldCB0aGUgcmVsYXRpb25zaGlwVHlwZSBlcXVhbCB0byB0aGUgYmxvY2tUeXBlXG4gICAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjcmVhdGVkLlxuXG4gICAgICB0eXBlID0gdHlwZSB8fCBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcblxuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQXJnczoge1xuICAgICAgICBmYWxsYmFja0xvY2FsZT86IHVua25vd25cbiAgICAgICAgbGltaXQ/OiB1bmtub3duXG4gICAgICAgIGxvY2FsZT86IHVua25vd25cbiAgICAgICAgcGFnZT86IHVua25vd25cbiAgICAgICAgd2hlcmU/OiB1bmtub3duXG4gICAgICB9ID0ge31cblxuICAgICAgaWYgKHBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICByZWxhdGlvbnNoaXBBcmdzLmxvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBwYXlsb2FkLnR5cGVzLmxvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbGF0aW9uc2hpcEFyZ3MuZmFsbGJhY2tMb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogcGF5bG9hZC50eXBlcy5mYWxsYmFja0xvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSB7XG4gICAgICAgIGFyZ3M6IHJlbGF0aW9uc2hpcEFyZ3MsXG4gICAgICAgIGV4dGVuc2lvbnM6IHsgY29tcGxleGl0eTogMTAgfSxcbiAgICAgICAgYXN5bmMgcmVzb2x2ZShwYXJlbnQsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmVudFtmaWVsZC5uYW1lXVxuICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IGFyZ3MubG9jYWxlIHx8IGNvbnRleHQucmVxLmxvY2FsZVxuICAgICAgICAgIGNvbnN0IGZhbGxiYWNrTG9jYWxlID0gYXJncy5mYWxsYmFja0xvY2FsZSB8fCBjb250ZXh0LnJlcS5mYWxsYmFja0xvY2FsZVxuICAgICAgICAgIGxldCByZWxhdGVkQ29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgICAgICBpZiAoaGFzTWFueVZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdXG4gICAgICAgICAgICBjb25zdCByZXN1bHRQcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlID0gYXN5bmMgKHJlbGF0ZWREb2MsIGkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGlkID0gcmVsYXRlZERvY1xuICAgICAgICAgICAgICBsZXQgY29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgICAgICAgICAgaWYgKGlzUmVsYXRlZFRvTWFueUNvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvblNsdWcgPSByZWxhdGVkRG9jLnJlbGF0aW9uVG9cbiAgICAgICAgICAgICAgICBpZCA9IHJlbGF0ZWREb2MudmFsdWVcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQucmVxLnBheWxvYWREYXRhTG9hZGVyLmxvYWQoXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXEudHJhbnNhY3Rpb25JRCxcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWxhdGVkVG9NYW55Q29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IHJlc3VsdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgocmVsYXRlZERvYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFByb21pc2VzLnB1c2goY3JlYXRlUG9wdWxhdGlvblByb21pc2UocmVsYXRlZERvYywgaSkpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlc3VsdFByb21pc2VzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZVxuICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgaWQgPSB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnID0gdmFsdWUucmVsYXRpb25Ub1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZERvY3VtZW50ID0gYXdhaXQgY29udGV4dC5yZXEucGF5bG9hZERhdGFMb2FkZXIubG9hZChcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVxLnRyYW5zYWN0aW9uSUQsXG4gICAgICAgICAgICAgICAgcmVsYXRlZENvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAocmVsYXRlZERvY3VtZW50KSB7XG4gICAgICAgICAgICAgIGlmIChpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiByZWxhdGVkQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZWxhdGVkRG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IHJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlbGF0ZWREb2N1bWVudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgaGFzTWFueVZhbHVlcyA/IG5ldyBHcmFwaFFMTGlzdChuZXcgR3JhcGhRTE5vbk51bGwodHlwZSkpIDogdHlwZSxcbiAgICAgICAgICBmb3JjZU51bGxhYmxlLFxuICAgICAgICApLFxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICBbZmllbGQubmFtZV06IHJlbGF0aW9uc2hpcCxcbiAgICAgIH1cbiAgICB9LFxuICAgIHJpY2hUZXh0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJpY2hUZXh0RmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBkZXB0aDoge1xuICAgICAgICAgICAgdHlwZTogR3JhcGhRTEludCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhc3luYyByZXNvbHZlKHBhcmVudCwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIGxldCBkZXB0aCA9IHBheWxvYWQuY29uZmlnLmRlZmF1bHREZXB0aFxuICAgICAgICAgIGlmICh0eXBlb2YgYXJncy5kZXB0aCAhPT0gJ3VuZGVmaW5lZCcpIGRlcHRoID0gYXJncy5kZXB0aFxuICAgICAgICAgIGNvbnN0IGVkaXRvcjogUmljaFRleHRBZGFwdGVyID0gZmllbGQ/LmVkaXRvclxuXG4gICAgICAgICAgLy8gUmljaFRleHQgZmllbGRzIGhhdmUgdGhlaXIgb3duIGRlcHRoIGFyZ3VtZW50IGluIEdyYXBoUUwuXG4gICAgICAgICAgLy8gVGhpcyBpcyB3aHkgdGhlIHBvcHVsYXRpb25Qcm9taXNlICh3aGljaCBwb3B1bGF0ZXMgcmljaHRleHQgZmllbGRzIGxpa2UgdXBsb2FkcyBhbmQgcmVsYXRpb25zaGlwcylcbiAgICAgICAgICAvLyBpcyBydW4gaGVyZSBhZ2Fpbiwgd2l0aCB0aGUgcHJvdmlkZWQgZGVwdGguXG4gICAgICAgICAgLy8gSW4gdGhlIGdyYXBocWwgZmluZC50cyByZXNvbHZlciwgdGhlIGRlcHRoIGlzIHRoZW4gaGFyZC1jb2RlZCB0byAwLlxuICAgICAgICAgIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIG1lYW5zIHRoYXQgdGhlIHBvcHVsYXRpb25Qcm9taXNlIGZvciBHcmFwaFFMIGlzIG9ubHkgcnVuIGhlcmUsIGFuZCBub3QgaW4gdGhlIGZpbmQudHMgcmVzb2x2ZXIgLyBub3JtYWwgcG9wdWxhdGlvbiBwcm9taXNlLlxuICAgICAgICAgIGlmIChlZGl0b3I/LnBvcHVsYXRpb25Qcm9taXNlKSB7XG4gICAgICAgICAgICBhd2FpdCBlZGl0b3I/LnBvcHVsYXRpb25Qcm9taXNlKHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICBmaW5kTWFueTogZmFsc2UsXG4gICAgICAgICAgICAgIGZsYXR0ZW5Mb2NhbGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgb3ZlcnJpZGVBY2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBwb3B1bGF0aW9uUHJvbWlzZXM6IFtdLFxuICAgICAgICAgICAgICByZXE6IGNvbnRleHQucmVxLFxuICAgICAgICAgICAgICBzaG93SGlkZGVuRmllbGRzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2libGluZ0RvYzogcGFyZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGFyZW50W2ZpZWxkLm5hbWVdXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxKU09OLCBmb3JjZU51bGxhYmxlKSxcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcm93OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFJvd0ZpZWxkKSA9PlxuICAgICAgZmllbGQuZmllbGRzLnJlZHVjZSgob2JqZWN0VHlwZUNvbmZpZ1dpdGhSb3dGaWVsZHMsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFN1YkZpZWxkID0gZmllbGRUb1NjaGVtYU1hcFtzdWJGaWVsZC50eXBlXVxuICAgICAgICBpZiAoYWRkU3ViRmllbGQpIHJldHVybiBhZGRTdWJGaWVsZChvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkcywgc3ViRmllbGQpXG4gICAgICAgIHJldHVybiBvYmplY3RUeXBlQ29uZmlnV2l0aFJvd0ZpZWxkc1xuICAgICAgfSwgb2JqZWN0VHlwZUNvbmZpZyksXG4gICAgc2VsZWN0OiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFNlbGVjdEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBmdWxsTmFtZSA9IGNvbWJpbmVQYXJlbnROYW1lKHBhcmVudE5hbWUsIGZpZWxkLm5hbWUpXG5cbiAgICAgIGxldCB0eXBlOiBHcmFwaFFMVHlwZSA9IG5ldyBHcmFwaFFMRW51bVR5cGUoe1xuICAgICAgICBuYW1lOiBmdWxsTmFtZSxcbiAgICAgICAgdmFsdWVzOiBmb3JtYXRPcHRpb25zKGZpZWxkKSxcbiAgICAgIH0pXG5cbiAgICAgIHR5cGUgPSBmaWVsZC5oYXNNYW55ID8gbmV3IEdyYXBoUUxMaXN0KG5ldyBHcmFwaFFMTm9uTnVsbCh0eXBlKSkgOiB0eXBlXG4gICAgICB0eXBlID0gd2l0aE51bGxhYmxlVHlwZShmaWVsZCwgdHlwZSwgZm9yY2VOdWxsYWJsZSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGUgfSxcbiAgICAgIH1cbiAgICB9LFxuICAgIHRhYnM6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogVGFic0ZpZWxkKSA9PlxuICAgICAgZmllbGQudGFicy5yZWR1Y2UoKHRhYlNjaGVtYSwgdGFiKSA9PiB7XG4gICAgICAgIGlmICh0YWJIYXNOYW1lKHRhYikpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcmZhY2VOYW1lID1cbiAgICAgICAgICAgIHRhYj8uaW50ZXJmYWNlTmFtZSB8fCBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKHRhYi5uYW1lLCB0cnVlKSlcblxuICAgICAgICAgIGlmICghcGF5bG9hZC50eXBlcy50YWJUeXBlc1tpbnRlcmZhY2VOYW1lXSkge1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGJ1aWxkT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICAgIG5hbWU6IGludGVyZmFjZU5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkczogdGFiLmZpZWxkcyxcbiAgICAgICAgICAgICAgZm9yY2VOdWxsYWJsZSxcbiAgICAgICAgICAgICAgcGFyZW50TmFtZTogaW50ZXJmYWNlTmFtZSxcbiAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmplY3RUeXBlLmdldEZpZWxkcygpKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi50YWJTY2hlbWEsXG4gICAgICAgICAgICAgICAgW3RhYi5uYW1lXTogeyB0eXBlOiBvYmplY3RUeXBlIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGFiU2NoZW1hXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRhYlNjaGVtYSxcbiAgICAgICAgICAuLi50YWIuZmllbGRzLnJlZHVjZSgoc3ViRmllbGRTY2hlbWEsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhZGRTdWJGaWVsZCA9IGZpZWxkVG9TY2hlbWFNYXBbc3ViRmllbGQudHlwZV1cbiAgICAgICAgICAgIGlmIChhZGRTdWJGaWVsZCkgcmV0dXJuIGFkZFN1YkZpZWxkKHN1YkZpZWxkU2NoZW1hLCBzdWJGaWVsZClcbiAgICAgICAgICAgIHJldHVybiBzdWJGaWVsZFNjaGVtYVxuICAgICAgICAgIH0sIHRhYlNjaGVtYSksXG4gICAgICAgIH1cbiAgICAgIH0sIG9iamVjdFR5cGVDb25maWcpLFxuICAgIHRleHQ6IChvYmplY3RUeXBlQ29uZmlnOiBPYmplY3RUeXBlQ29uZmlnLCBmaWVsZDogVGV4dEZpZWxkKSA9PiAoe1xuICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgIFtmaWVsZC5uYW1lXTogeyB0eXBlOiB3aXRoTnVsbGFibGVUeXBlKGZpZWxkLCBHcmFwaFFMU3RyaW5nLCBmb3JjZU51bGxhYmxlKSB9LFxuICAgIH0pLFxuICAgIHRleHRhcmVhOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFRleHRhcmVhRmllbGQpID0+ICh7XG4gICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgW2ZpZWxkLm5hbWVdOiB7IHR5cGU6IHdpdGhOdWxsYWJsZVR5cGUoZmllbGQsIEdyYXBoUUxTdHJpbmcsIGZvcmNlTnVsbGFibGUpIH0sXG4gICAgfSksXG4gICAgdXBsb2FkOiAob2JqZWN0VHlwZUNvbmZpZzogT2JqZWN0VHlwZUNvbmZpZywgZmllbGQ6IFVwbG9hZEZpZWxkKSA9PiB7XG4gICAgICBjb25zdCB7IHJlbGF0aW9uVG8gfSA9IGZpZWxkXG5cbiAgICAgIGNvbnN0IHVwbG9hZE5hbWUgPSBjb21iaW5lUGFyZW50TmFtZShwYXJlbnROYW1lLCB0b1dvcmRzKGZpZWxkLm5hbWUsIHRydWUpKVxuXG4gICAgICAvLyBJZiB0aGUgcmVsYXRpb25zaGlwVHlwZSBpcyB1bmRlZmluZWQgYXQgdGhpcyBwb2ludCxcbiAgICAgIC8vIGl0IGNhbiBiZSBhc3N1bWVkIHRoYXQgdGhpcyBibG9ja1R5cGUgY2FuIGhhdmUgYSByZWxhdGlvbnNoaXBcbiAgICAgIC8vIHRvIGl0c2VsZi4gVGhlcmVmb3JlLCB3ZSBzZXQgdGhlIHJlbGF0aW9uc2hpcFR5cGUgZXF1YWwgdG8gdGhlIGJsb2NrVHlwZVxuICAgICAgLy8gdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgY3JlYXRlZC5cblxuICAgICAgY29uc3QgdHlwZSA9IHdpdGhOdWxsYWJsZVR5cGUoXG4gICAgICAgIGZpZWxkLFxuICAgICAgICBwYXlsb2FkLmNvbGxlY3Rpb25zW3JlbGF0aW9uVG9dLmdyYXBoUUwudHlwZSB8fCBuZXdseUNyZWF0ZWRCbG9ja1R5cGUsXG4gICAgICAgIGZvcmNlTnVsbGFibGUsXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHVwbG9hZEFyZ3MgPSB7fSBhcyBMb2NhbGVJbnB1dFR5cGVcblxuICAgICAgaWYgKHBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICB1cGxvYWRBcmdzLmxvY2FsZSA9IHtcbiAgICAgICAgICB0eXBlOiBwYXlsb2FkLnR5cGVzLmxvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuXG4gICAgICAgIHVwbG9hZEFyZ3MuZmFsbGJhY2tMb2NhbGUgPSB7XG4gICAgICAgICAgdHlwZTogcGF5bG9hZC50eXBlcy5mYWxsYmFja0xvY2FsZUlucHV0VHlwZSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGVkQ29sbGVjdGlvblNsdWcgPSBmaWVsZC5yZWxhdGlvblRvXG5cbiAgICAgIGNvbnN0IHVwbG9hZCA9IHtcbiAgICAgICAgYXJnczogdXBsb2FkQXJncyxcbiAgICAgICAgZXh0ZW5zaW9uczogeyBjb21wbGV4aXR5OiAyMCB9LFxuICAgICAgICBhc3luYyByZXNvbHZlKHBhcmVudCwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyZW50W2ZpZWxkLm5hbWVdXG4gICAgICAgICAgY29uc3QgbG9jYWxlID0gYXJncy5sb2NhbGUgfHwgY29udGV4dC5yZXEubG9jYWxlXG4gICAgICAgICAgY29uc3QgZmFsbGJhY2tMb2NhbGUgPSBhcmdzLmZhbGxiYWNrTG9jYWxlIHx8IGNvbnRleHQucmVxLmZhbGxiYWNrTG9jYWxlXG4gICAgICAgICAgY29uc3QgaWQgPSB2YWx1ZVxuXG4gICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBjb25zdCByZWxhdGVkRG9jdW1lbnQgPSBhd2FpdCBjb250ZXh0LnJlcS5wYXlsb2FkRGF0YUxvYWRlci5sb2FkKFxuICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXEudHJhbnNhY3Rpb25JRCxcbiAgICAgICAgICAgICAgICByZWxhdGVkQ29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIHJldHVybiByZWxhdGVkRG9jdW1lbnQgfHwgbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGUsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdoZXJlRmllbGRzID0gcGF5bG9hZC5jb2xsZWN0aW9uc1tyZWxhdGlvblRvXS5jb25maWcuZmllbGRzXG5cbiAgICAgIHVwbG9hZC5hcmdzLndoZXJlID0ge1xuICAgICAgICB0eXBlOiBidWlsZFdoZXJlSW5wdXRUeXBlKHtcbiAgICAgICAgICBuYW1lOiB1cGxvYWROYW1lLFxuICAgICAgICAgIGZpZWxkczogd2hlcmVGaWVsZHMsXG4gICAgICAgICAgcGFyZW50TmFtZTogdXBsb2FkTmFtZSxcbiAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICB9KSxcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqZWN0VHlwZUNvbmZpZyxcbiAgICAgICAgW2ZpZWxkLm5hbWVdOiB1cGxvYWQsXG4gICAgICB9XG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IG9iamVjdFNjaGVtYSA9IHtcbiAgICBuYW1lLFxuICAgIGZpZWxkczogKCkgPT5cbiAgICAgIGZpZWxkcy5yZWR1Y2UoKG9iamVjdFR5cGVDb25maWcsIGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gZmllbGRUb1NjaGVtYU1hcFtmaWVsZC50eXBlXVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGRTY2hlbWEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0VHlwZUNvbmZpZ1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5vYmplY3RUeXBlQ29uZmlnLFxuICAgICAgICAgIC4uLmZpZWxkU2NoZW1hKG9iamVjdFR5cGVDb25maWcsIGZpZWxkKSxcbiAgICAgICAgfVxuICAgICAgfSwgYmFzZUZpZWxkcyksXG4gIH1cblxuICBjb25zdCBuZXdseUNyZWF0ZWRCbG9ja1R5cGUgPSBuZXcgR3JhcGhRTE9iamVjdFR5cGUob2JqZWN0U2NoZW1hKVxuXG4gIHJldHVybiBuZXdseUNyZWF0ZWRCbG9ja1R5cGVcbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRPYmplY3RUeXBlXG4iXSwibmFtZXMiOlsiYnVpbGRPYmplY3RUeXBlIiwibmFtZSIsImJhc2VGaWVsZHMiLCJmaWVsZHMiLCJmb3JjZU51bGxhYmxlIiwicGFyZW50TmFtZSIsInBheWxvYWQiLCJmaWVsZFRvU2NoZW1hTWFwIiwiYXJyYXkiLCJvYmplY3RUeXBlQ29uZmlnIiwiZmllbGQiLCJpbnRlcmZhY2VOYW1lIiwiY29tYmluZVBhcmVudE5hbWUiLCJ0b1dvcmRzIiwidHlwZXMiLCJhcnJheVR5cGVzIiwib2JqZWN0VHlwZSIsImlzRmllbGROdWxsYWJsZSIsIk9iamVjdCIsImtleXMiLCJnZXRGaWVsZHMiLCJsZW5ndGgiLCJhcnJheVR5cGUiLCJHcmFwaFFMTGlzdCIsIkdyYXBoUUxOb25OdWxsIiwidHlwZSIsIndpdGhOdWxsYWJsZVR5cGUiLCJibG9ja3MiLCJibG9ja1R5cGVzIiwicmVkdWNlIiwiYWNjIiwiYmxvY2siLCJzbHVnIiwiZ3JhcGhRTCIsInNpbmd1bGFyTmFtZSIsInB1c2giLCJmdWxsTmFtZSIsIkdyYXBoUUxVbmlvblR5cGUiLCJyZXNvbHZlVHlwZSIsImRhdGEiLCJibG9ja1R5cGUiLCJjaGVja2JveCIsIkdyYXBoUUxCb29sZWFuIiwiY29kZSIsIkdyYXBoUUxTdHJpbmciLCJjb2xsYXBzaWJsZSIsIm9iamVjdFR5cGVDb25maWdXaXRoQ29sbGFwc2libGVGaWVsZHMiLCJzdWJGaWVsZCIsImFkZFN1YkZpZWxkIiwiZGF0ZSIsIkRhdGVUaW1lUmVzb2x2ZXIiLCJlbWFpbCIsIkVtYWlsQWRkcmVzc1Jlc29sdmVyIiwiZ3JvdXAiLCJncm91cFR5cGVzIiwianNvbiIsIkdyYXBoUUxKU09OIiwibnVtYmVyIiwiR3JhcGhRTEludCIsIkdyYXBoUUxGbG9hdCIsImhhc01hbnkiLCJwb2ludCIsInJhZGlvIiwiR3JhcGhRTEVudW1UeXBlIiwidmFsdWVzIiwiZm9ybWF0T3B0aW9ucyIsInJlbGF0aW9uc2hpcCIsInJlbGF0aW9uVG8iLCJpc1JlbGF0ZWRUb01hbnlDb2xsZWN0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsImhhc01hbnlWYWx1ZXMiLCJyZWxhdGlvbnNoaXBOYW1lIiwicmVsYXRpb25Ub1R5cGUiLCJyZWxhdGlvbnMiLCJyZWxhdGlvbiIsImZvcm1hdE5hbWUiLCJ2YWx1ZSIsIm1hcCIsImNvbGxlY3Rpb25zIiwiR3JhcGhRTE9iamVjdFR5cGUiLCJyZXEiLCJjb2xsZWN0aW9uIiwibmV3bHlDcmVhdGVkQmxvY2tUeXBlIiwicmVsYXRpb25zaGlwQXJncyIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsImxvY2FsZSIsImxvY2FsZUlucHV0VHlwZSIsImZhbGxiYWNrTG9jYWxlIiwiZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUiLCJhcmdzIiwiZXh0ZW5zaW9ucyIsImNvbXBsZXhpdHkiLCJyZXNvbHZlIiwicGFyZW50IiwiY29udGV4dCIsInJlbGF0ZWRDb2xsZWN0aW9uU2x1ZyIsInJlc3VsdHMiLCJyZXN1bHRQcm9taXNlcyIsImNyZWF0ZVBvcHVsYXRpb25Qcm9taXNlIiwicmVsYXRlZERvYyIsImkiLCJpZCIsImNvbGxlY3Rpb25TbHVnIiwicmVzdWx0IiwicGF5bG9hZERhdGFMb2FkZXIiLCJsb2FkIiwiSlNPTiIsInN0cmluZ2lmeSIsInRyYW5zYWN0aW9uSUQiLCJmb3JFYWNoIiwiUHJvbWlzZSIsImFsbCIsInJlbGF0ZWREb2N1bWVudCIsInJpY2hUZXh0IiwiZGVwdGgiLCJkZWZhdWx0RGVwdGgiLCJlZGl0b3IiLCJwb3B1bGF0aW9uUHJvbWlzZSIsImZpbmRNYW55IiwiZmxhdHRlbkxvY2FsZXMiLCJvdmVycmlkZUFjY2VzcyIsInBvcHVsYXRpb25Qcm9taXNlcyIsInNob3dIaWRkZW5GaWVsZHMiLCJzaWJsaW5nRG9jIiwicm93Iiwib2JqZWN0VHlwZUNvbmZpZ1dpdGhSb3dGaWVsZHMiLCJzZWxlY3QiLCJ0YWJzIiwidGFiU2NoZW1hIiwidGFiIiwidGFiSGFzTmFtZSIsInRhYlR5cGVzIiwic3ViRmllbGRTY2hlbWEiLCJ0ZXh0IiwidGV4dGFyZWEiLCJ1cGxvYWQiLCJ1cGxvYWROYW1lIiwidXBsb2FkQXJncyIsIndoZXJlRmllbGRzIiwid2hlcmUiLCJidWlsZFdoZXJlSW5wdXRUeXBlIiwib2JqZWN0U2NoZW1hIiwiZmllbGRTY2hlbWEiXSwibWFwcGluZ3MiOiJBQUFBLDBEQUEwRCxHQUMxRCxtQ0FBbUMsR0FDbkMsdUNBQXVDOzs7OytCQXVvQnZDOzs7ZUFBQTs7O3lCQTFuQk87Z0NBQ2dEO2lDQUUzQjt1QkE0QkQ7OEJBQ0g7MEVBQ007bUVB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
@@ -1 +1 @@
1
- {"version":3,"file":"buildPoliciesType.d.ts","sourceRoot":"","sources":["../../../src/graphql/schema/buildPoliciesType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAA6B,MAAM,gCAAgC,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,4BAA4B,CAAA;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAK5C,KAAK,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAExF,KAAK,YAAY,GAAG,WAAW,GAAG,SAAS,CAAA;AA6E3C,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,KAAK,EAAE,YAAY,CAAA;CACpB,CAAA;AACD,eAAO,MAAM,iBAAiB,SAAU,iBAAiB;;;;CA4BxD,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,GAAG,CACA;IACE,MAAM,EAAE,gBAAgB,CAAA;IACxB,IAAI,EAAE,YAAY,CAAA;CACnB,GACD;IACE,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,QAAQ,CAAA;CACf,CACJ,CAAA;AACD,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAuDxE;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAyC7E"}
1
+ {"version":3,"file":"buildPoliciesType.d.ts","sourceRoot":"","sources":["../../../src/graphql/schema/buildPoliciesType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAA6B,MAAM,gCAAgC,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,4BAA4B,CAAA;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAK5C,KAAK,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAExF,KAAK,YAAY,GAAG,WAAW,GAAG,SAAS,CAAA;AA8E3C,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,KAAK,EAAE,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,KAAK,EAAE,YAAY,CAAA;CACpB,CAAA;AACD,eAAO,MAAM,iBAAiB,SAAU,iBAAiB;;;;CA4BxD,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,GAAG,CACA;IACE,MAAM,EAAE,gBAAgB,CAAA;IACxB,IAAI,EAAE,YAAY,CAAA;CACnB,GACD;IACE,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,QAAQ,CAAA;CACf,CACJ,CAAA;AACD,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAuDxE;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB,CAyC7E"}
@@ -29,7 +29,8 @@ function _interop_require_default(obj) {
29
29
  };
30
30
  }
31
31
  const buildFields = (label, fieldsToBuild)=>fieldsToBuild.reduce((builtFields, field)=>{
32
- if (!field.hidden) {
32
+ const includeField = !field.hidden && field.type !== 'ui';
33
+ if (includeField) {
33
34
  if (field.name) {
34
35
  const fieldName = (0, _formatName.default)(field.name);
35
36
  const objectTypeFields = [
@@ -206,4 +207,4 @@ function buildPoliciesType(payload) {
206
207
  });
207
208
  }
208
209
 
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaHFsL3NjaGVtYS9idWlsZFBvbGljaWVzVHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaFFMQm9vbGVhbiwgR3JhcGhRTE5vbk51bGwsIEdyYXBoUUxPYmplY3RUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcbmltcG9ydCB7IEdyYXBoUUxKU09OT2JqZWN0IH0gZnJvbSAnZ3JhcGhxbC10eXBlLWpzb24nXG5cbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkNvbmZpZywgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbGxlY3Rpb25zL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBHbG9iYWxDb25maWcsIFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uLy4uL2dsb2JhbHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkIH0gZnJvbSAnLi4vLi4vcGF5bG9hZCdcblxuaW1wb3J0IHsgdG9Xb3JkcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9mb3JtYXRMYWJlbHMnXG5pbXBvcnQgZm9ybWF0TmFtZSBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0TmFtZSdcblxudHlwZSBPcGVyYXRpb25UeXBlID0gJ2NyZWF0ZScgfCAnZGVsZXRlJyB8ICdyZWFkJyB8ICdyZWFkVmVyc2lvbnMnIHwgJ3VubG9jaycgfCAndXBkYXRlJ1xuXG50eXBlIEFjY2Vzc1Njb3BlcyA9ICdkb2NBY2Nlc3MnIHwgdW5kZWZpbmVkXG5cbnR5cGUgT2JqZWN0VHlwZUZpZWxkcyA9IHtcbiAgW2tleSBpbiAnZmllbGRzJyB8IE9wZXJhdGlvblR5cGVdPzogeyB0eXBlOiBHcmFwaFFMT2JqZWN0VHlwZSB9XG59XG5cbmNvbnN0IGJ1aWxkRmllbGRzID0gKGxhYmVsLCBmaWVsZHNUb0J1aWxkKSA9PlxuICBmaWVsZHNUb0J1aWxkLnJlZHVjZSgoYnVpbHRGaWVsZHMsIGZpZWxkKSA9PiB7XG4gICAgaWYgKCFmaWVsZC5oaWRkZW4pIHtcbiAgICAgIGlmIChmaWVsZC5uYW1lKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZvcm1hdE5hbWUoZmllbGQubmFtZSlcblxuICAgICAgICBjb25zdCBvYmplY3RUeXBlRmllbGRzOiBPYmplY3RUeXBlRmllbGRzID0gWydjcmVhdGUnLCAncmVhZCcsICd1cGRhdGUnLCAnZGVsZXRlJ10ucmVkdWNlKFxuICAgICAgICAgIChvcGVyYXRpb25zLCBvcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhcGl0YWxpemVkT3BlcmF0aW9uID0gb3BlcmF0aW9uLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgb3BlcmF0aW9uLnNsaWNlKDEpXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLm9wZXJhdGlvbnMsXG4gICAgICAgICAgICAgIFtvcGVyYXRpb25dOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2xhYmVsfV8ke2ZpZWxkTmFtZX1fJHtjYXBpdGFsaXplZE9wZXJhdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb246IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoR3JhcGhRTEJvb2xlYW4pLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGZpZWxkLmZpZWxkcykge1xuICAgICAgICAgIG9iamVjdFR5cGVGaWVsZHMuZmllbGRzID0ge1xuICAgICAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgICAgICAgbmFtZTogYCR7bGFiZWx9XyR7ZmllbGROYW1lfV9GaWVsZHNgLFxuICAgICAgICAgICAgICBmaWVsZHM6IGJ1aWxkRmllbGRzKGAke2xhYmVsfV8ke2ZpZWxkTmFtZX1gLCBmaWVsZC5maWVsZHMpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5idWlsdEZpZWxkcyxcbiAgICAgICAgICBbZmllbGQubmFtZV06IHtcbiAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICAgIG5hbWU6IGAke2xhYmVsfV8ke2ZpZWxkTmFtZX1gLFxuICAgICAgICAgICAgICBmaWVsZHM6IG9iamVjdFR5cGVGaWVsZHMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZmllbGQubmFtZSAmJiBmaWVsZC5maWVsZHMpIHtcbiAgICAgICAgY29uc3Qgc3ViRmllbGRzID0gYnVpbGRGaWVsZHMobGFiZWwsIGZpZWxkLmZpZWxkcylcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJ1aWx0RmllbGRzLFxuICAgICAgICAgIC4uLnN1YkZpZWxkcyxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3RhYnMnKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC50YWJzLnJlZHVjZShcbiAgICAgICAgICAoZmllbGRzV2l0aFRhYkZpZWxkcywgdGFiKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5maWVsZHNXaXRoVGFiRmllbGRzLFxuICAgICAgICAgICAgICAuLi5idWlsZEZpZWxkcyhsYWJlbCwgdGFiLmZpZWxkcyksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC4uLmJ1aWx0RmllbGRzIH0sXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1aWx0RmllbGRzXG4gIH0sIHt9KVxuXG50eXBlIEJ1aWxkRW50aXR5UG9saWN5ID0ge1xuICBlbnRpdHlGaWVsZHM6IEZpZWxkW11cbiAgbmFtZTogc3RyaW5nXG4gIG9wZXJhdGlvbnM6IE9wZXJhdGlvblR5cGVbXVxuICBzY29wZTogQWNjZXNzU2NvcGVzXG59XG5leHBvcnQgY29uc3QgYnVpbGRFbnRpdHlQb2xpY3kgPSAoYXJnczogQnVpbGRFbnRpdHlQb2xpY3kpID0+IHtcbiAgY29uc3QgeyBuYW1lLCBlbnRpdHlGaWVsZHMsIG9wZXJhdGlvbnMsIHNjb3BlIH0gPSBhcmdzXG5cbiAgY29uc3QgZmllbGRzVHlwZU5hbWUgPSB0b1dvcmRzKGAke25hbWV9LSR7c2NvcGUgfHwgJyd9LUZpZWxkc2AsIHRydWUpXG4gIGNvbnN0IGZpZWxkcyA9IHtcbiAgICBmaWVsZHM6IHtcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgIG5hbWU6IGZpZWxkc1R5cGVOYW1lLFxuICAgICAgICBmaWVsZHM6IGJ1aWxkRmllbGRzKGZpZWxkc1R5cGVOYW1lLCBlbnRpdHlGaWVsZHMpLFxuICAgICAgfSksXG4gICAgfSxcbiAgfVxuXG4gIG9wZXJhdGlvbnMuZm9yRWFjaCgob3BlcmF0aW9uKSA9PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uVHlwZU5hbWUgPSB0b1dvcmRzKGAke25hbWV9LSR7b3BlcmF0aW9ufS0ke3Njb3BlIHx8ICdBY2Nlc3MnfWAsIHRydWUpXG5cbiAgICBmaWVsZHNbb3BlcmF0aW9uXSA9IHtcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgIG5hbWU6IG9wZXJhdGlvblR5cGVOYW1lLFxuICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICBwZXJtaXNzaW9uOiB7IHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChHcmFwaFFMQm9vbGVhbikgfSxcbiAgICAgICAgICB3aGVyZTogeyB0eXBlOiBHcmFwaFFMSlNPTk9iamVjdCB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBmaWVsZHNcbn1cblxudHlwZSBCdWlsZFBvbGljeVR5cGUgPSB7XG4gIHNjb3BlPzogQWNjZXNzU2NvcGVzXG4gIHR5cGVTdWZmaXg/OiBzdHJpbmdcbn0gJiAoXG4gIHwge1xuICAgICAgZW50aXR5OiBDb2xsZWN0aW9uQ29uZmlnXG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9XG4gIHwge1xuICAgICAgZW50aXR5OiBHbG9iYWxDb25maWdcbiAgICAgIHR5cGU6ICdnbG9iYWwnXG4gICAgfVxuKVxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUG9saWN5VHlwZShhcmdzOiBCdWlsZFBvbGljeVR5cGUpOiBHcmFwaFFMT2JqZWN0VHlwZSB7XG4gIGNvbnN0IHsgZW50aXR5LCBzY29wZSwgdHlwZSwgdHlwZVN1ZmZpeCB9ID0gYXJnc1xuICBjb25zdCB7IGZpZWxkcywgZ3JhcGhRTCwgc2x1ZywgdmVyc2lvbnMgfSA9IGVudGl0eVxuXG4gIGxldCBvcGVyYXRpb25zID0gW11cblxuICBpZiAoZ3JhcGhRTCA9PT0gZmFsc2UpIHJldHVybiBudWxsXG5cbiAgaWYgKHR5cGUgPT09ICdjb2xsZWN0aW9uJykge1xuICAgIG9wZXJhdGlvbnMgPSBbJ2NyZWF0ZScsICdyZWFkJywgJ3VwZGF0ZScsICdkZWxldGUnXVxuXG4gICAgaWYgKFxuICAgICAgZW50aXR5LmF1dGggJiZcbiAgICAgIHR5cGVvZiBlbnRpdHkuYXV0aCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiBlbnRpdHkuYXV0aC5tYXhMb2dpbkF0dGVtcHRzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgZW50aXR5LmF1dGgubWF4TG9naW5BdHRlbXB0cyAhPT0gMFxuICAgICkge1xuICAgICAgb3BlcmF0aW9ucy5wdXNoKCd1bmxvY2snKVxuICAgIH1cblxuICAgIGlmICh2ZXJzaW9ucykge1xuICAgICAgb3BlcmF0aW9ucy5wdXNoKCdyZWFkVmVyc2lvbnMnKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbGxlY3Rpb25UeXBlTmFtZSA9IGZvcm1hdE5hbWUoYCR7c2x1Z30ke3R5cGVTdWZmaXggfHwgJyd9YClcblxuICAgIHJldHVybiBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgbmFtZTogY29sbGVjdGlvblR5cGVOYW1lLFxuICAgICAgZmllbGRzOiBidWlsZEVudGl0eVBvbGljeSh7XG4gICAgICAgIG5hbWU6IHNsdWcsXG4gICAgICAgIGVudGl0eUZpZWxkczogZmllbGRzLFxuICAgICAgICBvcGVyYXRpb25zLFxuICAgICAgICBzY29wZSxcbiAgICAgIH0pLFxuICAgIH0pXG4gIH1cblxuICAvLyBlbHNlIGNyZWF0ZSBnbG9iYWwgdHlwZVxuICBvcGVyYXRpb25zID0gWydyZWFkJywgJ3VwZGF0ZSddXG5cbiAgaWYgKGVudGl0eS52ZXJzaW9ucykge1xuICAgIG9wZXJhdGlvbnMucHVzaCgncmVhZFZlcnNpb25zJylcbiAgfVxuXG4gIGNvbnN0IGdsb2JhbFR5cGVOYW1lID0gZm9ybWF0TmFtZShgJHtnbG9iYWw/LmdyYXBoUUw/Lm5hbWUgfHwgc2x1Z30ke3R5cGVTdWZmaXggfHwgJyd9YClcblxuICByZXR1cm4gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICBuYW1lOiBnbG9iYWxUeXBlTmFtZSxcbiAgICBmaWVsZHM6IGJ1aWxkRW50aXR5UG9saWN5KHtcbiAgICAgIG5hbWU6IGVudGl0eS5ncmFwaFFMID8gZW50aXR5Py5ncmFwaFFMPy5uYW1lIHx8IHNsdWcgOiBzbHVnLFxuICAgICAgZW50aXR5RmllbGRzOiBlbnRpdHkuZmllbGRzLFxuICAgICAgb3BlcmF0aW9ucyxcbiAgICAgIHNjb3BlLFxuICAgIH0pLFxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFBvbGljaWVzVHlwZShwYXlsb2FkOiBQYXlsb2FkKTogR3JhcGhRTE9iamVjdFR5cGUge1xuICBjb25zdCBmaWVsZHMgPSB7XG4gICAgY2FuQWNjZXNzQWRtaW46IHtcbiAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChHcmFwaFFMQm9vbGVhbiksXG4gICAgfSxcbiAgfVxuXG4gIE9iamVjdC52YWx1ZXMocGF5bG9hZC5jb25maWcuY29sbGVjdGlvbnMpLmZvckVhY2goKGNvbGxlY3Rpb246IFNhbml0aXplZENvbGxlY3Rpb25Db25maWcpID0+IHtcbiAgICBpZiAoY29sbGVjdGlvbi5ncmFwaFFMID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGNvbGxlY3Rpb25Qb2xpY3lUeXBlID0gYnVpbGRQb2xpY3lUeXBlKHtcbiAgICAgIGVudGl0eTogY29sbGVjdGlvbixcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgIHR5cGVTdWZmaXg6ICdBY2Nlc3MnLFxuICAgIH0pXG5cbiAgICBmaWVsZHNbZm9ybWF0TmFtZShjb2xsZWN0aW9uLnNsdWcpXSA9IHtcbiAgICAgIHR5cGU6IGNvbGxlY3Rpb25Qb2xpY3lUeXBlLFxuICAgIH1cbiAgfSlcblxuICBPYmplY3QudmFsdWVzKHBheWxvYWQuY29uZmlnLmdsb2JhbHMpLmZvckVhY2goKGdsb2JhbDogU2FuaXRpemVkR2xvYmFsQ29uZmlnKSA9PiB7XG4gICAgaWYgKGdsb2JhbC5ncmFwaFFMID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGdsb2JhbFBvbGljeVR5cGUgPSBidWlsZFBvbGljeVR5cGUoe1xuICAgICAgZW50aXR5OiBnbG9iYWwsXG4gICAgICB0eXBlOiAnZ2xvYmFsJyxcbiAgICAgIHR5cGVTdWZmaXg6ICdBY2Nlc3MnLFxuICAgIH0pXG5cbiAgICBmaWVsZHNbZm9ybWF0TmFtZShnbG9iYWwuc2x1ZyldID0ge1xuICAgICAgdHlwZTogZ2xvYmFsUG9saWN5VHlwZSxcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgbmFtZTogJ0FjY2VzcycsXG4gICAgZmllbGRzLFxuICB9KVxufVxuIl0sIm5hbWVzIjpbImJ1aWxkRW50aXR5UG9saWN5IiwiYnVpbGRQb2xpY3lUeXBlIiwiYnVpbGRQb2xpY2llc1R5cGUiLCJidWlsZEZpZWxkcyIsImxhYmVsIiwiZmllbGRzVG9CdWlsZCIsInJlZHVjZSIsImJ1aWx0RmllbGRzIiwiZmllbGQiLCJoaWRkZW4iLCJuYW1lIiwiZmllbGROYW1lIiwiZm9ybWF0TmFtZSIsIm9iamVjdFR5cGVGaWVsZHMiLCJvcGVyYXRpb25zIiwib3BlcmF0aW9uIiwiY2FwaXRhbGl6ZWRPcGVyYXRpb24iLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwidHlwZSIsIkdyYXBoUUxPYmplY3RUeXBlIiwiZmllbGRzIiwicGVybWlzc2lvbiIsIkdyYXBoUUxOb25OdWxsIiwiR3JhcGhRTEJvb2xlYW4iLCJzdWJGaWVsZHMiLCJ0YWJzIiwiZmllbGRzV2l0aFRhYkZpZWxkcyIsInRhYiIsImFyZ3MiLCJlbnRpdHlGaWVsZHMiLCJzY29wZSIsImZpZWxkc1R5cGVOYW1lIiwidG9Xb3JkcyIsImZvckVhY2giLCJvcGVyYXRpb25UeXBlTmFtZSIsIndoZXJlIiwiR3JhcGhRTEpTT05PYmplY3QiLCJlbnRpdHkiLCJ0eXBlU3VmZml4IiwiZ3JhcGhRTCIsInNsdWciLCJ2ZXJzaW9ucyIsImF1dGgiLCJtYXhMb2dpbkF0dGVtcHRzIiwicHVzaCIsImNvbGxlY3Rpb25UeXBlTmFtZSIsImdsb2JhbFR5cGVOYW1lIiwiZ2xvYmFsIiwicGF5bG9hZCIsImNhbkFjY2Vzc0FkbWluIiwiT2JqZWN0IiwidmFsdWVzIiwiY29uZmlnIiwiY29sbGVjdGlvbnMiLCJjb2xsZWN0aW9uIiwiY29sbGVj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
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaHFsL3NjaGVtYS9idWlsZFBvbGljaWVzVHlwZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaFFMQm9vbGVhbiwgR3JhcGhRTE5vbk51bGwsIEdyYXBoUUxPYmplY3RUeXBlIH0gZnJvbSAnZ3JhcGhxbCdcbmltcG9ydCB7IEdyYXBoUUxKU09OT2JqZWN0IH0gZnJvbSAnZ3JhcGhxbC10eXBlLWpzb24nXG5cbmltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbkNvbmZpZywgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbGxlY3Rpb25zL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICcuLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBHbG9iYWxDb25maWcsIFNhbml0aXplZEdsb2JhbENvbmZpZyB9IGZyb20gJy4uLy4uL2dsb2JhbHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkIH0gZnJvbSAnLi4vLi4vcGF5bG9hZCdcblxuaW1wb3J0IHsgdG9Xb3JkcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9mb3JtYXRMYWJlbHMnXG5pbXBvcnQgZm9ybWF0TmFtZSBmcm9tICcuLi91dGlsaXRpZXMvZm9ybWF0TmFtZSdcblxudHlwZSBPcGVyYXRpb25UeXBlID0gJ2NyZWF0ZScgfCAnZGVsZXRlJyB8ICdyZWFkJyB8ICdyZWFkVmVyc2lvbnMnIHwgJ3VubG9jaycgfCAndXBkYXRlJ1xuXG50eXBlIEFjY2Vzc1Njb3BlcyA9ICdkb2NBY2Nlc3MnIHwgdW5kZWZpbmVkXG5cbnR5cGUgT2JqZWN0VHlwZUZpZWxkcyA9IHtcbiAgW2tleSBpbiAnZmllbGRzJyB8IE9wZXJhdGlvblR5cGVdPzogeyB0eXBlOiBHcmFwaFFMT2JqZWN0VHlwZSB9XG59XG5cbmNvbnN0IGJ1aWxkRmllbGRzID0gKGxhYmVsLCBmaWVsZHNUb0J1aWxkKSA9PlxuICBmaWVsZHNUb0J1aWxkLnJlZHVjZSgoYnVpbHRGaWVsZHMsIGZpZWxkKSA9PiB7XG4gICAgY29uc3QgaW5jbHVkZUZpZWxkID0gIWZpZWxkLmhpZGRlbiAmJiBmaWVsZC50eXBlICE9PSAndWknXG4gICAgaWYgKGluY2x1ZGVGaWVsZCkge1xuICAgICAgaWYgKGZpZWxkLm5hbWUpIHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gZm9ybWF0TmFtZShmaWVsZC5uYW1lKVxuXG4gICAgICAgIGNvbnN0IG9iamVjdFR5cGVGaWVsZHM6IE9iamVjdFR5cGVGaWVsZHMgPSBbJ2NyZWF0ZScsICdyZWFkJywgJ3VwZGF0ZScsICdkZWxldGUnXS5yZWR1Y2UoXG4gICAgICAgICAgKG9wZXJhdGlvbnMsIG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWRPcGVyYXRpb24gPSBvcGVyYXRpb24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBvcGVyYXRpb24uc2xpY2UoMSlcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ub3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgW29wZXJhdGlvbl06IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgICAgICAgICAgbmFtZTogYCR7bGFiZWx9XyR7ZmllbGROYW1lfV8ke2NhcGl0YWxpemVkT3BlcmF0aW9ufWAsXG4gICAgICAgICAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChHcmFwaFFMQm9vbGVhbiksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge30sXG4gICAgICAgIClcblxuICAgICAgICBpZiAoZmllbGQuZmllbGRzKSB7XG4gICAgICAgICAgb2JqZWN0VHlwZUZpZWxkcy5maWVsZHMgPSB7XG4gICAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgICAgICAgICAgICBuYW1lOiBgJHtsYWJlbH1fJHtmaWVsZE5hbWV9X0ZpZWxkc2AsXG4gICAgICAgICAgICAgIGZpZWxkczogYnVpbGRGaWVsZHMoYCR7bGFiZWx9XyR7ZmllbGROYW1lfWAsIGZpZWxkLmZpZWxkcyksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJ1aWx0RmllbGRzLFxuICAgICAgICAgIFtmaWVsZC5uYW1lXToge1xuICAgICAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgICAgICAgbmFtZTogYCR7bGFiZWx9XyR7ZmllbGROYW1lfWAsXG4gICAgICAgICAgICAgIGZpZWxkczogb2JqZWN0VHlwZUZpZWxkcyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFmaWVsZC5uYW1lICYmIGZpZWxkLmZpZWxkcykge1xuICAgICAgICBjb25zdCBzdWJGaWVsZHMgPSBidWlsZEZpZWxkcyhsYWJlbCwgZmllbGQuZmllbGRzKVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYnVpbHRGaWVsZHMsXG4gICAgICAgICAgLi4uc3ViRmllbGRzLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAndGFicycpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLnRhYnMucmVkdWNlKFxuICAgICAgICAgIChmaWVsZHNXaXRoVGFiRmllbGRzLCB0YWIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZpZWxkc1dpdGhUYWJGaWVsZHMsXG4gICAgICAgICAgICAgIC4uLmJ1aWxkRmllbGRzKGxhYmVsLCB0YWIuZmllbGRzKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLi4uYnVpbHRGaWVsZHMgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYnVpbHRGaWVsZHNcbiAgfSwge30pXG5cbnR5cGUgQnVpbGRFbnRpdHlQb2xpY3kgPSB7XG4gIGVudGl0eUZpZWxkczogRmllbGRbXVxuICBuYW1lOiBzdHJpbmdcbiAgb3BlcmF0aW9uczogT3BlcmF0aW9uVHlwZVtdXG4gIHNjb3BlOiBBY2Nlc3NTY29wZXNcbn1cbmV4cG9ydCBjb25zdCBidWlsZEVudGl0eVBvbGljeSA9IChhcmdzOiBCdWlsZEVudGl0eVBvbGljeSkgPT4ge1xuICBjb25zdCB7IG5hbWUsIGVudGl0eUZpZWxkcywgb3BlcmF0aW9ucywgc2NvcGUgfSA9IGFyZ3NcblxuICBjb25zdCBmaWVsZHNUeXBlTmFtZSA9IHRvV29yZHMoYCR7bmFtZX0tJHtzY29wZSB8fCAnJ30tRmllbGRzYCwgdHJ1ZSlcbiAgY29uc3QgZmllbGRzID0ge1xuICAgIGZpZWxkczoge1xuICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgbmFtZTogZmllbGRzVHlwZU5hbWUsXG4gICAgICAgIGZpZWxkczogYnVpbGRGaWVsZHMoZmllbGRzVHlwZU5hbWUsIGVudGl0eUZpZWxkcyksXG4gICAgICB9KSxcbiAgICB9LFxuICB9XG5cbiAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb24pID0+IHtcbiAgICBjb25zdCBvcGVyYXRpb25UeXBlTmFtZSA9IHRvV29yZHMoYCR7bmFtZX0tJHtvcGVyYXRpb259LSR7c2NvcGUgfHwgJ0FjY2Vzcyd9YCwgdHJ1ZSlcblxuICAgIGZpZWxkc1tvcGVyYXRpb25dID0ge1xuICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgbmFtZTogb3BlcmF0aW9uVHlwZU5hbWUsXG4gICAgICAgIGZpZWxkczoge1xuICAgICAgICAgIHBlcm1pc3Npb246IHsgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxCb29sZWFuKSB9LFxuICAgICAgICAgIHdoZXJlOiB7IHR5cGU6IEdyYXBoUUxKU09OT2JqZWN0IH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGZpZWxkc1xufVxuXG50eXBlIEJ1aWxkUG9saWN5VHlwZSA9IHtcbiAgc2NvcGU/OiBBY2Nlc3NTY29wZXNcbiAgdHlwZVN1ZmZpeD86IHN0cmluZ1xufSAmIChcbiAgfCB7XG4gICAgICBlbnRpdHk6IENvbGxlY3Rpb25Db25maWdcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH1cbiAgfCB7XG4gICAgICBlbnRpdHk6IEdsb2JhbENvbmZpZ1xuICAgICAgdHlwZTogJ2dsb2JhbCdcbiAgICB9XG4pXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQb2xpY3lUeXBlKGFyZ3M6IEJ1aWxkUG9saWN5VHlwZSk6IEdyYXBoUUxPYmplY3RUeXBlIHtcbiAgY29uc3QgeyBlbnRpdHksIHNjb3BlLCB0eXBlLCB0eXBlU3VmZml4IH0gPSBhcmdzXG4gIGNvbnN0IHsgZmllbGRzLCBncmFwaFFMLCBzbHVnLCB2ZXJzaW9ucyB9ID0gZW50aXR5XG5cbiAgbGV0IG9wZXJhdGlvbnMgPSBbXVxuXG4gIGlmIChncmFwaFFMID09PSBmYWxzZSkgcmV0dXJuIG51bGxcblxuICBpZiAodHlwZSA9PT0gJ2NvbGxlY3Rpb24nKSB7XG4gICAgb3BlcmF0aW9ucyA9IFsnY3JlYXRlJywgJ3JlYWQnLCAndXBkYXRlJywgJ2RlbGV0ZSddXG5cbiAgICBpZiAoXG4gICAgICBlbnRpdHkuYXV0aCAmJlxuICAgICAgdHlwZW9mIGVudGl0eS5hdXRoID09PSAnb2JqZWN0JyAmJlxuICAgICAgdHlwZW9mIGVudGl0eS5hdXRoLm1heExvZ2luQXR0ZW1wdHMgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICBlbnRpdHkuYXV0aC5tYXhMb2dpbkF0dGVtcHRzICE9PSAwXG4gICAgKSB7XG4gICAgICBvcGVyYXRpb25zLnB1c2goJ3VubG9jaycpXG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb25zKSB7XG4gICAgICBvcGVyYXRpb25zLnB1c2goJ3JlYWRWZXJzaW9ucycpXG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGlvblR5cGVOYW1lID0gZm9ybWF0TmFtZShgJHtzbHVnfSR7dHlwZVN1ZmZpeCB8fCAnJ31gKVxuXG4gICAgcmV0dXJuIG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICBuYW1lOiBjb2xsZWN0aW9uVHlwZU5hbWUsXG4gICAgICBmaWVsZHM6IGJ1aWxkRW50aXR5UG9saWN5KHtcbiAgICAgICAgbmFtZTogc2x1ZyxcbiAgICAgICAgZW50aXR5RmllbGRzOiBmaWVsZHMsXG4gICAgICAgIG9wZXJhdGlvbnMsXG4gICAgICAgIHNjb3BlLFxuICAgICAgfSksXG4gICAgfSlcbiAgfVxuXG4gIC8vIGVsc2UgY3JlYXRlIGdsb2JhbCB0eXBlXG4gIG9wZXJhdGlvbnMgPSBbJ3JlYWQnLCAndXBkYXRlJ11cblxuICBpZiAoZW50aXR5LnZlcnNpb25zKSB7XG4gICAgb3BlcmF0aW9ucy5wdXNoKCdyZWFkVmVyc2lvbnMnKVxuICB9XG5cbiAgY29uc3QgZ2xvYmFsVHlwZU5hbWUgPSBmb3JtYXROYW1lKGAke2dsb2JhbD8uZ3JhcGhRTD8ubmFtZSB8fCBzbHVnfSR7dHlwZVN1ZmZpeCB8fCAnJ31gKVxuXG4gIHJldHVybiBuZXcgR3JhcGhRTE9iamVjdFR5cGUoe1xuICAgIG5hbWU6IGdsb2JhbFR5cGVOYW1lLFxuICAgIGZpZWxkczogYnVpbGRFbnRpdHlQb2xpY3koe1xuICAgICAgbmFtZTogZW50aXR5LmdyYXBoUUwgPyBlbnRpdHk/LmdyYXBoUUw/Lm5hbWUgfHwgc2x1ZyA6IHNsdWcsXG4gICAgICBlbnRpdHlGaWVsZHM6IGVudGl0eS5maWVsZHMsXG4gICAgICBvcGVyYXRpb25zLFxuICAgICAgc2NvcGUsXG4gICAgfSksXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkUG9saWNpZXNUeXBlKHBheWxvYWQ6IFBheWxvYWQpOiBHcmFwaFFMT2JqZWN0VHlwZSB7XG4gIGNvbnN0IGZpZWxkcyA9IHtcbiAgICBjYW5BY2Nlc3NBZG1pbjoge1xuICAgICAgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKEdyYXBoUUxCb29sZWFuKSxcbiAgICB9LFxuICB9XG5cbiAgT2JqZWN0LnZhbHVlcyhwYXlsb2FkLmNvbmZpZy5jb2xsZWN0aW9ucykuZm9yRWFjaCgoY29sbGVjdGlvbjogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZykgPT4ge1xuICAgIGlmIChjb2xsZWN0aW9uLmdyYXBoUUwgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgY29sbGVjdGlvblBvbGljeVR5cGUgPSBidWlsZFBvbGljeVR5cGUoe1xuICAgICAgZW50aXR5OiBjb2xsZWN0aW9uLFxuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgdHlwZVN1ZmZpeDogJ0FjY2VzcycsXG4gICAgfSlcblxuICAgIGZpZWxkc1tmb3JtYXROYW1lKGNvbGxlY3Rpb24uc2x1ZyldID0ge1xuICAgICAgdHlwZTogY29sbGVjdGlvblBvbGljeVR5cGUsXG4gICAgfVxuICB9KVxuXG4gIE9iamVjdC52YWx1ZXMocGF5bG9hZC5jb25maWcuZ2xvYmFscykuZm9yRWFjaCgoZ2xvYmFsOiBTYW5pdGl6ZWRHbG9iYWxDb25maWcpID0+IHtcbiAgICBpZiAoZ2xvYmFsLmdyYXBoUUwgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgZ2xvYmFsUG9saWN5VHlwZSA9IGJ1aWxkUG9saWN5VHlwZSh7XG4gICAgICBlbnRpdHk6IGdsb2JhbCxcbiAgICAgIHR5cGU6ICdnbG9iYWwnLFxuICAgICAgdHlwZVN1ZmZpeDogJ0FjY2VzcycsXG4gICAgfSlcblxuICAgIGZpZWxkc1tmb3JtYXROYW1lKGdsb2JhbC5zbHVnKV0gPSB7XG4gICAgICB0eXBlOiBnbG9iYWxQb2xpY3lUeXBlLFxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICBuYW1lOiAnQWNjZXNzJyxcbiAgICBmaWVsZHMsXG4gIH0pXG59XG4iXSwibmFtZXMiOlsiYnVpbGRFbnRpdHlQb2xpY3kiLCJidWlsZFBvbGljeVR5cGUiLCJidWlsZFBvbGljaWVzVHlwZSIsImJ1aWxkRmllbGRzIiwibGFiZWwiLCJmaWVsZHNUb0J1aWxkIiwicmVkdWNlIiwiYnVpbHRGaWVsZHMiLCJmaWVsZCIsImluY2x1ZGVGaWVsZCIsImhpZGRlbiIsInR5cGUiLCJuYW1lIiwiZmllbGROYW1lIiwiZm9ybWF0TmFtZSIsIm9iamVjdFR5cGVGaWVsZHMiLCJvcGVyYXRpb25zIiwib3BlcmF0aW9uIiwiY2FwaXRhbGl6ZWRPcGVyYXRpb24iLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiR3JhcGhRTE9iamVjdFR5cGUiLCJmaWVsZHMiLCJwZXJtaXNzaW9uIiwiR3JhcGhRTE5vbk51bGwiLCJHcmFwaFFMQm9vbGVhbiIsInN1YkZpZWxkcyIsInRhYnMiLCJmaWVsZHNXaXRoVGFiRmllbGRzIiwidGFiIiwiYXJncyIsImVudGl0eUZpZWxkcyIsInNjb3BlIiwiZmllbGRzVHlwZU5hbWUiLCJ0b1dvcmRzIiwiZm9yRWFjaCIsIm9wZXJhdGlvblR5cGVOYW1lIiwid2hlcmUiLCJHcmFwaFFMSlNPTk9iamVjdCIsImVudGl0eSIsInR5cGVTdWZmaXgiLCJncmFwaFFMIiwic2x1ZyIsInZlcnNpb25zIiwiYXV0aCIsIm1heExvZ2luQXR0ZW1wdHMiLCJwdXNoIiwiY29sbGVjdGlvblR5cGVOYW1lIiwiZ2xvYmFsVHlwZU5hbWUiLCJnbG9iYWwiLCJwYXlsb2FkIiwiY2FuQWNjZXNzQWRtaW4iLCJPYmplY3QiLCJ2YWx1ZXMiLCJjb25maWciLCJjb2xsZWN0aW9ucyIsImNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uUG9saWN5VHlwZSIsImdsb2JhbHMiLCJnbG9iYWxQb2xpY3lUeXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQWlHYUEsaUJBQWlCO2VBQWpCQTs7SUEyQ0dDLGVBQWU7ZUFBZkE7O0lBeURoQixPQXlDQztlQXpDdUJDOzs7eUJBck0wQztpQ0FDaEM7OEJBT1Y7bUVBQ0Q7Ozs7OztBQVV2QixNQUFNQyxjQUFjLENBQUNDLE9BQU9DLGdCQUMxQkEsY0FBY0MsTUFBTSxDQUFDLENBQUNDLGFBQWFDO1FBQ2pDLE1BQU1DLGVBQWUsQ0FBQ0QsTUFBTUUsTUFBTSxJQUFJRixNQUFNRyxJQUFJLEtBQUs7UUFDckQsSUFBSUYsY0FBYztZQUNoQixJQUFJRCxNQUFNSSxJQUFJLEVBQUU7Z0JBQ2QsTUFBTUMsWUFBWUMsSUFBQUEsbUJBQVUsRUFBQ04sTUFBTUksSUFBSTtnQkFFdkMsTUFBTUcsbUJBQXFDO29CQUFDO29CQUFVO29CQUFRO29CQUFVO2lCQUFTLENBQUNULE1BQU0sQ0FDdEYsQ0FBQ1UsWUFBWUM7b0JBQ1gsTUFBTUMsdUJBQXVCRCxVQUFVRSxNQUFNLENBQUMsR0FBR0MsV0FBVyxLQUFLSCxVQUFVSSxLQUFLLENBQUM7b0JBRWpGLE9BQU87d0JBQ0wsR0FBR0wsVUFBVTt3QkFDYixDQUFDQyxVQUFVLEVBQUU7NEJBQ1hOLE1BQU0sSUFBSVcsMEJBQWlCLENBQUM7Z0NBQzFCVixNQUFNLENBQUMsRUFBRVIsTUFBTSxDQUFDLEVBQUVTLFVBQVUsQ0FBQyxFQUFFSyxxQkFBcUIsQ0FBQztnQ0FDckRLLFFBQVE7b0NBQ05DLFlBQVk7d0NBQ1ZiLE1BQU0sSUFBSWMsdUJBQWMsQ0FBQ0MsdUJBQWM7b0NBQ3pDO2dDQUNGOzRCQUNGO3dCQUNGO29CQUNGO2dCQUNGLEdBQ0EsQ0FBQztnQkFHSCxJQUFJbEIsTUFBTWUsTUFBTSxFQUFFO29CQUNoQlIsaUJB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