nuxeo-development-framework 3.8.1 → 3.8.2

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 (197) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +1265 -1768
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/activities-log/activities-log/activities-log.service.js +2 -2
  4. package/esm2015/lib/components/attachment-item/attachment-item/attachment-item.component.js +2 -2
  5. package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +2 -2
  6. package/esm2015/lib/components/comments/components/comments-dashlet/comments-dashlet.component.js +2 -2
  7. package/esm2015/lib/components/comments/components/comments-list/comments-list.component.js +1 -1
  8. package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +2 -2
  9. package/esm2015/lib/components/comments/services/comment-api.service.js +3 -3
  10. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +3 -3
  11. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +2 -2
  12. package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +2 -2
  13. package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +3 -3
  14. package/esm2015/lib/components/correspondence-relation/services/viewer-files.service.js +3 -3
  15. package/esm2015/lib/components/create-entity/create-entity/create-entity.component.js +2 -2
  16. package/esm2015/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.js +2 -2
  17. package/esm2015/lib/components/cts-tags/services/tags-api.service.js +2 -2
  18. package/esm2015/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.js +6 -6
  19. package/esm2015/lib/components/custom-toastr/interfaces/toast-type.interface.js +1 -1
  20. package/esm2015/lib/components/custom-toastr/services/custom-toastr.service.js +23 -11
  21. package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +2 -2
  22. package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +2 -2
  23. package/esm2015/lib/components/documents/services/document-templates.service.js +3 -3
  24. package/esm2015/lib/components/documents/services/documents.service.js +3 -3
  25. package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +2 -2
  26. package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +2 -2
  27. package/esm2015/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.js +2 -2
  28. package/esm2015/lib/components/dynamic-form/components/dynamic-form/form-builder.service.js +2 -2
  29. package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.js +3 -3
  30. package/esm2015/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.js +2 -2
  31. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +2 -2
  32. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.js +5 -5
  33. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +3 -3
  34. package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.js +2 -2
  35. package/esm2015/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.js +2 -2
  36. package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.js +2 -2
  37. package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +4 -4
  38. package/esm2015/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.js +2 -2
  39. package/esm2015/lib/components/dynamic-form/services/dynamic-form-update.service.js +2 -2
  40. package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +2 -2
  41. package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +3 -3
  42. package/esm2015/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.js +3 -3
  43. package/esm2015/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.js +3 -3
  44. package/esm2015/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.js +2 -2
  45. package/esm2015/lib/components/dynamic-view/date-viewer/date-viewer.component.js +2 -2
  46. package/esm2015/lib/components/dynamic-view/department-viewer/department-viewer.component.js +2 -2
  47. package/esm2015/lib/components/file-manger/components/clipboard/clipboard.component.js +2 -2
  48. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +4 -4
  49. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +2 -2
  50. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +4 -4
  51. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +5 -5
  52. package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +4 -4
  53. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +3 -3
  54. package/esm2015/lib/components/file-manger/directives/file-grid-infinite-scroll.directive.js +78 -0
  55. package/esm2015/lib/components/file-manger/file-manager.abstract.js +459 -301
  56. package/esm2015/lib/components/file-manger/file-manger.module.js +10 -5
  57. package/esm2015/lib/components/file-manger/models/file-manager-config.model.js +7 -0
  58. package/esm2015/lib/components/file-manger/models/index.js +4 -0
  59. package/esm2015/lib/components/file-manger/models/pagination-payload.mode.js +2 -0
  60. package/esm2015/lib/components/file-manger/models/pagination-response.model.js +6 -0
  61. package/esm2015/lib/components/latest-activity/services/activity-log.service.js +3 -3
  62. package/esm2015/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.js +2 -2
  63. package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +2 -2
  64. package/esm2015/lib/components/notifications/components/notification-toast/notification-toast.component.js +3 -3
  65. package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +2 -2
  66. package/esm2015/lib/components/notifications/components/notifications-list/notifications-list.component.js +2 -2
  67. package/esm2015/lib/components/notifications/notifications.service.js +5 -5
  68. package/esm2015/lib/components/pdf-tron/pdftron/pdftron.component.js +3 -3
  69. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +2 -2
  70. package/esm2015/lib/components/permissions/permission.service.js +2 -2
  71. package/esm2015/lib/components/permissions/permissions/permissions.component.js +3 -3
  72. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/department-management.service.js +2 -2
  73. package/esm2015/lib/components/table/dynamic-column/dynamic-column.component.js +2 -2
  74. package/esm2015/lib/components/table/table/table.component.js +3 -3
  75. package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +2 -2
  76. package/esm2015/lib/components/vocabulary/translated-vocabulary-select/translated-vocabulary-select.component.js +2 -2
  77. package/esm2015/lib/core/adapters/adapter.service.js +1 -1
  78. package/esm2015/lib/core/core.module.js +1 -1
  79. package/esm2015/lib/core/env/env-manager.js +1 -1
  80. package/esm2015/lib/core/env/index.js +1 -1
  81. package/esm2015/lib/core/services/callApi/call-api.service.js +1 -1
  82. package/esm2015/lib/core/services/extension/action.extensions.js +1 -1
  83. package/esm2015/lib/core/services/extension/component-register.service.js +1 -1
  84. package/esm2015/lib/core/services/extension/extenion-utils.js +1 -1
  85. package/esm2015/lib/core/services/extension/extension-element.js +1 -1
  86. package/esm2015/lib/core/services/extension/extension-loader.service.js +1 -1
  87. package/esm2015/lib/core/services/extension/extension.service.js +1 -1
  88. package/esm2015/lib/core/services/initialization/initialization.service.js +1 -1
  89. package/esm2015/lib/core/utilities/moment-date-adapter.js +1 -1
  90. package/esm2015/lib/core/utilities/utility.service.js +1 -1
  91. package/esm2015/lib/directive/app-has-role/app-has-role.directive.js +2 -2
  92. package/esm2015/lib/directive/permissions/evaluators.service.js +2 -2
  93. package/esm2015/lib/directive/permissions/permissions.directive.js +2 -2
  94. package/esm2015/lib/directive/rtl/set-dir-rtl.directive.js +2 -2
  95. package/esm2015/lib/directive/rtl/set-rtl.directive.js +2 -2
  96. package/esm2015/lib/shared-services/dynamic-form.service.js +2 -2
  97. package/esm2015/lib/shared-services/file-manager.service.js +456 -222
  98. package/esm2015/lib/shared-services/global-admin.service.js +1 -1
  99. package/esm2015/lib/shared-services/mainfolder.service.js +3 -3
  100. package/esm2015/lib/shared-services/publishing-document.service.js +3 -3
  101. package/esm2015/lib/shared-services/recently-viewed.service.js +3 -3
  102. package/esm2015/lib/shared-services/shared-docs.service.js +3 -3
  103. package/esm2015/lib/shared-services/upload-file.service.js +2 -2
  104. package/esm2015/lib/shared-services/upload-managment.service.js +2 -2
  105. package/esm2015/lib/shared-services/user.service.js +3 -3
  106. package/esm2015/public-api.js +23 -21
  107. package/fesm2015/nuxeo-development-framework.js +1247 -1688
  108. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  109. package/lib/components/activities-log/activities-log/activities-log.service.d.ts +1 -1
  110. package/lib/components/attachment-item/attachment-item/attachment-item.component.d.ts +1 -1
  111. package/lib/components/comments/components/comment-item/comment-item.component.d.ts +1 -1
  112. package/lib/components/comments/components/comments-dashlet/comments-dashlet.component.d.ts +1 -1
  113. package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +1 -1
  114. package/lib/components/comments/services/comment-api.service.d.ts +2 -2
  115. package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +2 -2
  116. package/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.d.ts +1 -1
  117. package/lib/components/correspondence-relation/components/versions/versions.component.d.ts +1 -1
  118. package/lib/components/correspondence-relation/services/correspondence-realation.service.d.ts +2 -2
  119. package/lib/components/correspondence-relation/services/viewer-files.service.d.ts +2 -2
  120. package/lib/components/create-entity/create-entity/create-entity.component.d.ts +1 -1
  121. package/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.d.ts +1 -1
  122. package/lib/components/cts-tags/services/tags-api.service.d.ts +1 -1
  123. package/lib/components/custom-toastr/components/custom-toastr/custom-toastr.component.d.ts +1 -1
  124. package/lib/components/custom-toastr/interfaces/toast-type.interface.d.ts +1 -1
  125. package/lib/components/custom-toastr/services/custom-toastr.service.d.ts +8 -4
  126. package/lib/components/documents/components/attachments-list/attachments-list.component.d.ts +1 -1
  127. package/lib/components/documents/components/document-list/documents-list.component.d.ts +1 -1
  128. package/lib/components/documents/services/document-templates.service.d.ts +2 -2
  129. package/lib/components/documents/services/documents.service.d.ts +2 -2
  130. package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +1 -1
  131. package/lib/components/dynamic-chart/services/chart-data.service.d.ts +1 -1
  132. package/lib/components/dynamic-filter/dynamic-filter/dynamic-filter.component.d.ts +1 -1
  133. package/lib/components/dynamic-form/components/dynamic-form/form-builder.service.d.ts +1 -1
  134. package/lib/components/dynamic-form/components/dynamic-form-dateitem/dynamic-form-dateitem.component.d.ts +1 -1
  135. package/lib/components/dynamic-form/components/dynamic-form-dateitem/owlDateTimeIntl.d.ts +1 -1
  136. package/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.d.ts +1 -1
  137. package/lib/components/dynamic-form/components/dynamic-form-department/services/department-api.service.d.ts +4 -4
  138. package/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.d.ts +2 -2
  139. package/lib/components/dynamic-form/components/dynamic-form-select-users/dynamic-form-select-users.component.d.ts +1 -1
  140. package/lib/components/dynamic-form/components/dynamic-form-select-users/services/user-api.service.d.ts +1 -1
  141. package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select-i18n.d.ts +1 -1
  142. package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.d.ts +3 -3
  143. package/lib/components/dynamic-form/components/dynamic-form-viewer/dynamic-form-viewer.component.d.ts +1 -1
  144. package/lib/components/dynamic-form/services/dynamic-form-update.service.d.ts +1 -1
  145. package/lib/components/dynamic-search/dynamic-search/dynamic-search.component.d.ts +1 -1
  146. package/lib/components/dynamic-table/dynamic-table/dynamic-table.component.d.ts +2 -2
  147. package/lib/components/dynamic-view/custom-document-viewer/custom-document-viewer.component.d.ts +2 -2
  148. package/lib/components/dynamic-view/custom-pp-viewer/custom-pp-viewer.component.d.ts +2 -2
  149. package/lib/components/dynamic-view/cutome-voc-viewer/cutome-voc-viewer.component.d.ts +1 -1
  150. package/lib/components/dynamic-view/date-viewer/date-viewer.component.d.ts +1 -1
  151. package/lib/components/dynamic-view/department-viewer/department-viewer.component.d.ts +1 -1
  152. package/lib/components/file-manger/components/clipboard/clipboard.component.d.ts +1 -1
  153. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +3 -3
  154. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +1 -1
  155. package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +3 -3
  156. package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +3 -3
  157. package/lib/components/file-manger/components/sidepanel/sidepanel.component.d.ts +2 -2
  158. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +2 -2
  159. package/lib/components/file-manger/directives/file-grid-infinite-scroll.directive.d.ts +12 -0
  160. package/lib/components/file-manger/file-manager.abstract.d.ts +20 -8
  161. package/lib/components/file-manger/file-manger.module.d.ts +37 -36
  162. package/lib/components/file-manger/models/file-manager-config.model.d.ts +8 -0
  163. package/lib/components/file-manger/models/index.d.ts +3 -0
  164. package/lib/components/file-manger/models/pagination-payload.mode.d.ts +3 -0
  165. package/lib/components/file-manger/models/pagination-response.model.d.ts +30 -0
  166. package/lib/components/latest-activity/services/activity-log.service.d.ts +2 -2
  167. package/lib/components/mutiple-dynamic-form-viewer/multiple-dynamic-form-viewer/multiple-dynamic-form-viewer.component.d.ts +1 -1
  168. package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +1 -1
  169. package/lib/components/notifications/components/notification-toast/notification-toast.component.d.ts +1 -1
  170. package/lib/components/notifications/components/notifications-button/notifications-button.component.d.ts +1 -1
  171. package/lib/components/notifications/components/notifications-list/notifications-list.component.d.ts +1 -1
  172. package/lib/components/notifications/notifications.service.d.ts +4 -4
  173. package/lib/components/pdf-tron/pdftron/pdftron.component.d.ts +2 -2
  174. package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +1 -1
  175. package/lib/components/permissions/permission.service.d.ts +1 -1
  176. package/lib/components/permissions/permissions/permissions.component.d.ts +2 -2
  177. package/lib/components/select-users-by-department/select-users-by-departments/department-management.service.d.ts +1 -1
  178. package/lib/components/table/dynamic-column/dynamic-column.component.d.ts +1 -1
  179. package/lib/components/table/table/table.component.d.ts +2 -2
  180. package/lib/components/vocabulary/services/vocabulary-api.service.d.ts +1 -1
  181. package/lib/components/vocabulary/translated-vocabulary-select/translated-vocabulary-select.component.d.ts +1 -1
  182. package/lib/directive/app-has-role/app-has-role.directive.d.ts +1 -1
  183. package/lib/directive/permissions/evaluators.service.d.ts +1 -1
  184. package/lib/directive/permissions/permissions.directive.d.ts +1 -1
  185. package/lib/directive/rtl/set-dir-rtl.directive.d.ts +1 -1
  186. package/lib/directive/rtl/set-rtl.directive.d.ts +1 -1
  187. package/lib/shared-services/dynamic-form.service.d.ts +1 -1
  188. package/lib/shared-services/file-manager.service.d.ts +27 -19
  189. package/lib/shared-services/mainfolder.service.d.ts +2 -2
  190. package/lib/shared-services/publishing-document.service.d.ts +2 -2
  191. package/lib/shared-services/recently-viewed.service.d.ts +2 -2
  192. package/lib/shared-services/shared-docs.service.d.ts +2 -2
  193. package/lib/shared-services/upload-file.service.d.ts +1 -1
  194. package/lib/shared-services/upload-managment.service.d.ts +1 -1
  195. package/lib/shared-services/user.service.d.ts +2 -2
  196. package/package.json +1 -1
  197. package/public-api.d.ts +22 -20
@@ -2,7 +2,7 @@ import { Inject, Injectable } from '@angular/core';
2
2
  import { from } from 'rxjs';
3
3
  import { catchError, map } from 'rxjs/operators';
4
4
  import * as i0 from "@angular/core";
5
- import * as i1 from "../Core/services/nuxeo/nuxeo.service";
5
+ import * as i1 from "../core/services/nuxeo/nuxeo.service";
6
6
  import * as i2 from "../configuration/app-config.service";
7
7
  export class DynamicFormService {
8
8
  constructor(nuxeoService, environment, configService) {
@@ -238,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
238
238
  type: Inject,
239
239
  args: ['environment']
240
240
  }] }, { type: i2.AppConfigService }]; } });
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLElBQUksRUFBa0IsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFHLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVFqRCxNQUFNLE9BQU8sa0JBQWtCO0lBSzdCLFlBQW9CLFlBQTJCLEVBQ2QsV0FBVyxFQUNsQyxhQUFnQztRQUZ0QixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQU4xQyxhQUFRLEdBQUUsRUFBRSxDQUFDO1FBRWIsb0JBQWUsR0FBRyxDQUFDLGlCQUFpQixFQUFHLGFBQWEsRUFBRyxZQUFZLEVBQUcsWUFBWSxFQUFFLFFBQVEsRUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxhQUFhLENBQUMsQ0FBQztRQUNsSSxrQkFBYSxHQUFHLENBQUMsUUFBUSxFQUFHLFNBQVMsRUFBRyxVQUFVLEVBQUcsTUFBTSxFQUFHLE1BQU0sRUFBRyxRQUFRLENBQUMsQ0FBQztRQUs5RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUUxRixDQUFDO0lBRUgsbUJBQW1CLENBQUMsSUFBSTtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdC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QUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7O2dIQS9PVSxrQkFBa0IsOENBTW5CLGFBQWE7b0hBTlosa0JBQWtCLGNBSGpCLE1BQU07NEZBR1Asa0JBQWtCO2tCQUo5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGtleXMgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyAgY2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE51eGVvU2VydmljZSB9IGZyb20gJy4uL0NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uL2FwcC1jb25maWcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1TZXJ2aWNlIHtcclxuICBteVByZWZpeCA9e307XHJcbiAgZHluYW1pY0ZpZWxkc09wZXJhdGlvbnM7XHJcbiAgZXhjbHVkZWRTY2hlbWFzID0gW1wiZ2VuZXJhbGRvY3VtZW50XCIgLCBcImZpbGVfc2NoZW1hXCIgLCBcImR1YmxpbmNvcmVcIiAsIFwiZmFjZXRlZFRhZ1wiICxcImNvbW1vblwiLFwidWlkXCIsXCJmaWxlXCIsXCJmaWxlc1wiLFwicmVsYXRlZHRleHRcIl07XHJcbiBjb250cm9sc1R5cGVzID0gWydzdHJpbmcnICwgJ2Jvb2xlYW4nICwgJ3N0cmluZ1tdJyAsICdsb25nJyAsICdkYXRlJyAsICdkb3VibGUnXTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG51eGVvU2VydmljZSA6IE51eGVvU2VydmljZSAsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2UgOiBBcHBDb25maWdTZXJ2aWNlXHJcbiAgICApIHsgXHJcbiAgICB0aGlzLmR5bmFtaWNGaWVsZHNPcGVyYXRpb25zID0gdGhpcy5jb25maWdTZXJ2aWNlLm15Q29uZmlndXJhdGlvbi5keW5hbWljRm9ybXMub3BlcmF0aW9ucztcclxuXHJcbiAgICB9XHJcblxyXG4gIGdldFNjaGVtYUNvbXBvbmVudHModHlwZSl7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC5yZXF1ZXN0KGBjb25maWcvdHlwZXMvJHt0eXBlfWApXHJcbiAgICAuZ2V0KHtcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnZmV0Y2guc2NoZW1hJzogJ2ZpZWxkcydcclxuICAgIH1cclxuICAgIH0pKS5waXBlKG1hcCgoZGF0YSA6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWVsZHMgPSB7fTtcclxuICAgICAgICBsZXQgZmlsdGVyZWRTY2hlbWFzID0gW107XHJcbiAgICAgICAgaWYoZGF0YS5zY2hlbWFzKXtcclxuICAgICAgICAgIC8vIGV4Y2x1ZGUgc29tZSBzY2hlbWFzIGZyb20gdGhlIHJldHVybmVkIHNjaGVtYXNcclxuICAgICAgICAgICBkYXRhLnNjaGVtYXMuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZih0aGlzLmV4Y2x1ZGVkU2NoZW1hcy5pbmRleE9mKGl0ZW0ubmFtZSkgPT09IC0xKXtcclxuICAgICAgICAgICAgICBmaWx0ZXJlZFNjaGVtYXMucHVzaChpdGVtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgZmlsdGVyZWRTY2hlbWFzLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYoaXRlbS5maWVsZHMpe1xyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0uZmllbGRzKS5tYXAoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIC8vY29udHJvbCB0eXBlIGlzIGV4aXN0IGluIG15IHByb3ZpZGVkIGNvbnRyb2xzIHR5cGVzXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNvbnRyb2xzVHlwZXMuaW5kZXhPZihpdGVtLmZpZWxkc1trZXldWyd0eXBlJ10pID4gLTEpeyBcclxuICAgICAgICAgICAgICAgICAgZmllbGRzW2tleV0gPSB7Li4uaXRlbS5maWVsZHNba2V5XSB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubXlQcmVmaXhba2V5XSA9IGl0ZW0ucHJlZml4ID8gaXRlbS5wcmVmaXggOiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHQoZmllbGRzKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldFNjaGVtYUNvbXBvbmVudHNGcm9tRmFjZXRzKHNjaGVtYUlkKXtcclxuICAgIHJldHVybiBmcm9tKHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnJlcXVlc3QoYGNvbmZpZy9mYWNldHMvJHtzY2hlbWFJZH1gKVxyXG4gICAgLmdldCh7XHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ2ZldGNoLnNjaGVtYSc6ICdmaWVsZHMnXHJcbiAgICB9XHJcbiAgICB9KSkucGlwZShtYXAoKGRhdGEgOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZmllbGRzID0ge307XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkU2NoZW1hcyA9IFtdO1xyXG4gICAgICAgIGlmKGRhdGEuc2NoZW1hcyl7XHJcbiAgICAgICAgICAvLyBleGNsdWRlIHNvbWUgc2NoZW1hcyBmcm9tIHRoZSByZXR1cm5lZCBzY2hlbWFzXHJcbiAgICAgICAgICAgZGF0YS5zY2hlbWFzLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYodGhpcy5leGNsdWRlZFNjaGVtYXMuaW5kZXhPZihpdGVtLm5hbWUpID09PSAtMSl7XHJcbiAgICAgICAgICAgICAgZmlsdGVyZWRTY2hlbWFzLnB1c2goaXRlbSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGZpbHRlcmVkU2NoZW1hcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGl0ZW0uZmllbGRzKXtcclxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmZpZWxkcykubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnRyb2wgdHlwZSBpcyBleGlzdCBpbiBteSBwcm92aWRlZCBjb250cm9scyB0eXBlc1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jb250cm9sc1R5cGVzLmluZGV4T2YoaXRlbS5maWVsZHNba2V5XVsndHlwZSddKSA+IC0xKXsgXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkc1trZXldID0gey4uLml0ZW0uZmllbGRzW2tleV0gfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm15UHJlZml4W2tleV0gPSBpdGVtLnByZWZpeCA/IGl0ZW0ucHJlZml4IDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0KGZpZWxkcyk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBnZXREeW5hbWljRm9ybSh0eXBlKSA6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKHRoaXMuZHluYW1pY0ZpZWxkc09wZXJhdGlvbnMuZ2V0Rm9ybUpzb24sIHtcclxuICAgICAgICAgIHVybDogYCR7dGhpcy5lbnZpcm9ubWVudC5udXhlb30ke3RoaXMuZW52aXJvbm1lbnQuY3VzdG9tQXV0b21hdGlvbn1gLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNvbnRleHQoe1xyXG4gICAgICAgICAgXCJzY2hlbWFcIjogdHlwZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmV4ZWN1dGUoe1xyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiAnKicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzIDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYocmVzLmVudHJpZXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICBsZXQgbXlEYXRhID0gIEpTT04ucGFyc2UocmVzWydlbnRyaWVzJ11bMF1bJ3Byb3BlcnRpZXMnXVsnbm90ZTpub3RlJ10pO1xyXG4gICAgICAgICAgdGhpcy5teVByZWZpeCA9IG15RGF0YS5wcmVmaXg7XHJcbiAgICAgICAgICByZXR1cm4gbXlEYXRhO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybUpzb24odHlwZSAsIGpzb25PYmplY3Qpe1xyXG4gICAganNvbk9iamVjdFsncHJlZml4J109dGhpcy5teVByZWZpeDtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5vcGVyYXRpb24oJ0FDX1VBX0RNU19EeW5hbWljRm9ybV9DcmVhdGUnLCB7XHJcbiAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLmVudmlyb25tZW50LmN1c3RvbUF1dG9tYXRpb259YCxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jb250ZXh0KHtcclxuICAgICAgICAgIFwic2NoZW1hXCI6dHlwZSxcclxuICAgICAgICAgIFwianNvblwiOmpzb25PYmplY3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5leGVjdXRlKClcclxuICAgICkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSkpXHJcbiAgXHJcbn1cclxuIFxyXG4gIGFkYXB0KGZpZWxkcyk6IGFueSB7XHJcbiAgICBjb25zdCBidWlsZGVyQ29tcG9uZW50cyA9IHt9O1xyXG4gICAgZmllbGRzID0gT2JqZWN0LmtleXMoZmllbGRzKS5tYXAoZmllbGRLZXkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgYWRhcHRlZEZpZWxkID0ge1xyXG4gICAgICAgIHRpdGxlOiBmaWVsZEtleSxcclxuICAgICAgICBpY29uOiAndGVybWluYWwnLFxyXG4gICAgICAgIHByZWZpeDogZmllbGRzW2ZpZWxkS2V5XVsncHJlZml4J10sXHJcbiAgICAgICAgc2NoZW1hOiB7XHJcbiAgICAgICAgICAvLyAndmFsaWRhdGUucmVxdWlyZWQnOiBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICdOb3ROdWxsQ29uc3RyYWludCcpLmxlbmd0aCA+IDAsXHJcbiAgICAgICAgICBsYWJlbDogZmllbGRLZXksXHJcbiAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgIGZpeGVkS2V5OiBmaWVsZEtleSxcclxuICAgICAgICAgIGlucHV0OiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgc3dpdGNoIChmaWVsZHNbZmllbGRLZXldLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ3RleHRmaWVsZCc7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tmaWVsZEtleV07XHJcbiAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IGZpZWxkLmNvbnN0cmFpbnRzID8gZmllbGQuY29uc3RyYWludHMgOiBbXTtcclxuICAgICAgICAgIGNvbnN0IHZvY2FidWxhcnlTZWFyY2ggPSBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICdkaXJlY3RvcnlSZXNvbHZlcicpO1xyXG4gICAgICAgICAgY29uc3Qgdm9jYWJ1bGFyeSA9IHZvY2FidWxhcnlTZWFyY2gubGVuZ3RoID8gdm9jYWJ1bGFyeVNlYXJjaFswXS5wYXJhbWV0ZXJzLmRpcmVjdG9yeSA6IG51bGw7XHJcbiAgICAgICAgICBjb25zdCB1c2VyU2VsZWN0b3IgPSBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICd1c2VyTWFuYWdlclJlc29sdmVyJyk7XHJcbiAgICAgICAgICBpZiAodm9jYWJ1bGFyeSkge1xyXG4gICAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndm9jYWJ1bGFyeSc7XHJcbiAgICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWFbJ2N1c3RvbU9wdGlvbnMudm9jSWQnXSA9IHZvY2FidWxhcnk7XHJcbiAgICAgICAgICB9ZWxzZSBpZih1c2VyU2VsZWN0b3IubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWEudHlwZSA9ICd1c2VyU2VsZWN0b3InO1xyXG4gICAgICAgICAgICAvLyBhZGFwdGVkRmllbGQuc2NoZW1hWydjdXN0b21PcHRpb25zLm11bHRpcGxlTW9kZSddID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ3RvZ2dsZSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzdHJpbmdbXSc6XHJcbiAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndGV4dGZpZWxkJztcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxyXG4gICAgICAgICAgLy8gYWRhcHRlZEZpZWxkLnNjaGVtYVsnbXVsdGlwbGUnXSA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZDEgPSBmaWVsZHNbZmllbGRLZXldO1xyXG4gICAgICAgICAgY29uc3QgaXRlbUNvbnN0cmFpbnRzID0gZmllbGQxLml0ZW1Db25zdHJhaW50cyA/IGZpZWxkMS5pdGVtQ29uc3RyYWludHMgOiBbXTtcclxuICAgICAgICAgIGNvbnN0IG11bHRpcGxlVXNlclNlbGVjdG9yID0gaXRlbUNvbnN0cmFpbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0ubmFtZSA9PT0gJ3VzZXJNYW5hZ2VyUmVzb2x2ZXInKTtcclxuICAgICAgICAgIGlmKG11bHRpcGxlVXNlclNlbGVjdG9yLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndXNlclNlbGVjdG9yJztcclxuICAgICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYVsnY3VzdG9tT3B0aW9ucy5tdWx0aXBsZU1vZGUnXSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdsb25nJzpcclxuICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWEudHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZG91YmxlJzpcclxuICAgICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ251bWJlcic7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ2N1c3RvbWRhdGUnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhZGFwdGVkRmllbGQ7XHJcbiAgICB9KTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgYnVpbGRlckNvbXBvbmVudHNbZmllbGQuc2NoZW1hLmZpeGVkS2V5XSA9IGZpZWxkO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYnVpbGRlckNvbXBvbmVudHM7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3REeW5hbWljRm9ybVBheWxvYWQoZGF0YSAsIGR5bmFtaWNGb3JtKXtcclxuICAgIGxldCB1cGRhdGVkRHluYW1pY1ZhbHVlcyA9IHt9XHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5tYXAoa2V5ID0+IHtcclxuICAgICAgbGV0IHVwZGF0ZWRLZXkgPSBrZXkucmVwbGFjZSgnOicsJycpO1xyXG4gICAgICBsZXQgcHJlZml4ID0gZHluYW1pY0Zvcm0ucHJlZml4W3VwZGF0ZWRLZXldO1xyXG4gICAgICBpZiAocHJlZml4KSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgY29tcG9uZW50IGlzIHVzZXIgc2VsZWN0b3IgdG8gbWFwIGl0cyBkYXRhIGZyb20gb2JqZWN0IHRvIHVzZXJuYW1lIG9yIGlkIG9ubHkgXHJcbiAgICAgICAgaWYoZGF0YVtrZXldICYmIGRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gJiYgZGF0YVtrZXldWyd1c2VyU2VsZWN0b3InXSA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgdXBkYXRlZER5bmFtaWNWYWx1ZXNbcHJlZml4ICsgJzonICsgdXBkYXRlZEtleV0gPSB0aGlzLmdldFVzZXJTZWxlY3RvclZhbHVlKGRhdGFba2V5XVsndmFsdWUnXSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgdXBkYXRlZER5bmFtaWNWYWx1ZXNbcHJlZml4ICsgJzonICsgdXBkYXRlZEtleV0gPSBkYXRhW2tleV1cclxuICAgICAgICB9XHJcbiAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZihkYXRhW2tleV1bJ3VzZXJTZWxlY3RvciddICYmIGRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gPT09IHRydWUpe1xyXG4gICAgICAgICAgIHVwZGF0ZWREeW5hbWljVmFsdWVzW3VwZGF0ZWRLZXldID0gdGhpcy5nZXRVc2VyU2VsZWN0b3JWYWx1ZShkYXRhW2tleV1bJ3ZhbHVlJ10pOztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICB1cGRhdGVkRHluYW1pY1ZhbHVlc1t1cGRhdGVkS2V5XSA9IGRhdGFba2V5XVxyXG4gICAgICAgIH1cclxuICAgICB9XHJcbiAgICB9KSAgXHJcbiAgICB0aGlzLnJlbW92ZU51bGxWYWx1ZXModXBkYXRlZER5bmFtaWNWYWx1ZXMpO1xyXG4gICAgcmV0dXJuIHVwZGF0ZWREeW5hbWljVmFsdWVzO1xyXG4gIH1cclxuICBcclxuICBnZXRVc2VyU2VsZWN0b3JWYWx1ZSh2YWx1ZSl7XHJcbiAgICBpZighQXJyYXkuaXNBcnJheSh2YWx1ZSkpe1xyXG4gICAgICByZXR1cm4gdmFsdWUuaWQgPyB2YWx1ZS5pZCA6IHZhbHVlLnByb3BlcnRpZXMudXNlcm5hbWU7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGxldCB1c2Vyc05hbWVzID0gW107XHJcbiAgICAgIHZhbHVlLm1hcChpdGVtID0+IHtcclxuICAgICAgICB1c2Vyc05hbWVzLnB1c2goKGl0ZW0uaWQgPyBpdGVtLmlkIDogaXRlbS5wcm9wZXJ0aWVzLnVzZXJuYW1lKSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiB1c2Vyc05hbWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTnVsbFZhbHVlcyhkYXRhKXtcclxuICAgIE9iamVjdC5rZXlzKGRhdGEpLm1hcChrZXkgPT4ge1xyXG4gICAgICBpZihkYXRhW2tleV0gPT09IG51bGwpe1xyXG4gICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLElBQUksRUFBa0IsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFHLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVFqRCxNQUFNLE9BQU8sa0JBQWtCO0lBSzdCLFlBQW9CLFlBQTJCLEVBQ2QsV0FBVyxFQUNsQyxhQUFnQztRQUZ0QixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUFBO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQU4xQyxhQUFRLEdBQUUsRUFBRSxDQUFDO1FBRWIsb0JBQWUsR0FBRyxDQUFDLGlCQUFpQixFQUFHLGFBQWEsRUFBRyxZQUFZLEVBQUcsWUFBWSxFQUFFLFFBQVEsRUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxhQUFhLENBQUMsQ0FBQztRQUNsSSxrQkFBYSxHQUFHLENBQUMsUUFBUSxFQUFHLFNBQVMsRUFBRyxVQUFVLEVBQUcsTUFBTSxFQUFHLE1BQU0sRUFBRyxRQUFRLENBQUMsQ0FBQztRQUs5RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUUxRixDQUFDO0lBRUgsbUJBQW1CLENBQUMsSUFBSTtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdC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QUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7O2dIQS9PVSxrQkFBa0IsOENBTW5CLGFBQWE7b0hBTlosa0JBQWtCLGNBSGpCLE1BQU07NEZBR1Asa0JBQWtCO2tCQUo5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGtleXMgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyAgY2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE51eGVvU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uL2FwcC1jb25maWcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1TZXJ2aWNlIHtcclxuICBteVByZWZpeCA9e307XHJcbiAgZHluYW1pY0ZpZWxkc09wZXJhdGlvbnM7XHJcbiAgZXhjbHVkZWRTY2hlbWFzID0gW1wiZ2VuZXJhbGRvY3VtZW50XCIgLCBcImZpbGVfc2NoZW1hXCIgLCBcImR1YmxpbmNvcmVcIiAsIFwiZmFjZXRlZFRhZ1wiICxcImNvbW1vblwiLFwidWlkXCIsXCJmaWxlXCIsXCJmaWxlc1wiLFwicmVsYXRlZHRleHRcIl07XHJcbiBjb250cm9sc1R5cGVzID0gWydzdHJpbmcnICwgJ2Jvb2xlYW4nICwgJ3N0cmluZ1tdJyAsICdsb25nJyAsICdkYXRlJyAsICdkb3VibGUnXTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG51eGVvU2VydmljZSA6IE51eGVvU2VydmljZSAsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2UgOiBBcHBDb25maWdTZXJ2aWNlXHJcbiAgICApIHsgXHJcbiAgICB0aGlzLmR5bmFtaWNGaWVsZHNPcGVyYXRpb25zID0gdGhpcy5jb25maWdTZXJ2aWNlLm15Q29uZmlndXJhdGlvbi5keW5hbWljRm9ybXMub3BlcmF0aW9ucztcclxuXHJcbiAgICB9XHJcblxyXG4gIGdldFNjaGVtYUNvbXBvbmVudHModHlwZSl7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudC5yZXF1ZXN0KGBjb25maWcvdHlwZXMvJHt0eXBlfWApXHJcbiAgICAuZ2V0KHtcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnZmV0Y2guc2NoZW1hJzogJ2ZpZWxkcydcclxuICAgIH1cclxuICAgIH0pKS5waXBlKG1hcCgoZGF0YSA6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBmaWVsZHMgPSB7fTtcclxuICAgICAgICBsZXQgZmlsdGVyZWRTY2hlbWFzID0gW107XHJcbiAgICAgICAgaWYoZGF0YS5zY2hlbWFzKXtcclxuICAgICAgICAgIC8vIGV4Y2x1ZGUgc29tZSBzY2hlbWFzIGZyb20gdGhlIHJldHVybmVkIHNjaGVtYXNcclxuICAgICAgICAgICBkYXRhLnNjaGVtYXMuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZih0aGlzLmV4Y2x1ZGVkU2NoZW1hcy5pbmRleE9mKGl0ZW0ubmFtZSkgPT09IC0xKXtcclxuICAgICAgICAgICAgICBmaWx0ZXJlZFNjaGVtYXMucHVzaChpdGVtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgZmlsdGVyZWRTY2hlbWFzLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYoaXRlbS5maWVsZHMpe1xyXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW0uZmllbGRzKS5tYXAoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIC8vY29udHJvbCB0eXBlIGlzIGV4aXN0IGluIG15IHByb3ZpZGVkIGNvbnRyb2xzIHR5cGVzXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNvbnRyb2xzVHlwZXMuaW5kZXhPZihpdGVtLmZpZWxkc1trZXldWyd0eXBlJ10pID4gLTEpeyBcclxuICAgICAgICAgICAgICAgICAgZmllbGRzW2tleV0gPSB7Li4uaXRlbS5maWVsZHNba2V5XSB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubXlQcmVmaXhba2V5XSA9IGl0ZW0ucHJlZml4ID8gaXRlbS5wcmVmaXggOiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHQoZmllbGRzKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGdldFNjaGVtYUNvbXBvbmVudHNGcm9tRmFjZXRzKHNjaGVtYUlkKXtcclxuICAgIHJldHVybiBmcm9tKHRoaXMubnV4ZW9TZXJ2aWNlLm51eGVvQ2xpZW50LnJlcXVlc3QoYGNvbmZpZy9mYWNldHMvJHtzY2hlbWFJZH1gKVxyXG4gICAgLmdldCh7XHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ2ZldGNoLnNjaGVtYSc6ICdmaWVsZHMnXHJcbiAgICB9XHJcbiAgICB9KSkucGlwZShtYXAoKGRhdGEgOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZmllbGRzID0ge307XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkU2NoZW1hcyA9IFtdO1xyXG4gICAgICAgIGlmKGRhdGEuc2NoZW1hcyl7XHJcbiAgICAgICAgICAvLyBleGNsdWRlIHNvbWUgc2NoZW1hcyBmcm9tIHRoZSByZXR1cm5lZCBzY2hlbWFzXHJcbiAgICAgICAgICAgZGF0YS5zY2hlbWFzLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYodGhpcy5leGNsdWRlZFNjaGVtYXMuaW5kZXhPZihpdGVtLm5hbWUpID09PSAtMSl7XHJcbiAgICAgICAgICAgICAgZmlsdGVyZWRTY2hlbWFzLnB1c2goaXRlbSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGZpbHRlcmVkU2NoZW1hcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGl0ZW0uZmllbGRzKXtcclxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtLmZpZWxkcykubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnRyb2wgdHlwZSBpcyBleGlzdCBpbiBteSBwcm92aWRlZCBjb250cm9scyB0eXBlc1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jb250cm9sc1R5cGVzLmluZGV4T2YoaXRlbS5maWVsZHNba2V5XVsndHlwZSddKSA+IC0xKXsgXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkc1trZXldID0gey4uLml0ZW0uZmllbGRzW2tleV0gfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm15UHJlZml4W2tleV0gPSBpdGVtLnByZWZpeCA/IGl0ZW0ucHJlZml4IDogJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmFkYXB0KGZpZWxkcyk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBnZXREeW5hbWljRm9ybSh0eXBlKSA6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5udXhlb1NlcnZpY2UubnV4ZW9DbGllbnRcclxuICAgICAgICAub3BlcmF0aW9uKHRoaXMuZHluYW1pY0ZpZWxkc09wZXJhdGlvbnMuZ2V0Rm9ybUpzb24sIHtcclxuICAgICAgICAgIHVybDogYCR7dGhpcy5lbnZpcm9ubWVudC5udXhlb30ke3RoaXMuZW52aXJvbm1lbnQuY3VzdG9tQXV0b21hdGlvbn1gLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNvbnRleHQoe1xyXG4gICAgICAgICAgXCJzY2hlbWFcIjogdHlwZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmV4ZWN1dGUoe1xyXG4gICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiAnKicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzIDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYocmVzLmVudHJpZXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICBsZXQgbXlEYXRhID0gIEpTT04ucGFyc2UocmVzWydlbnRyaWVzJ11bMF1bJ3Byb3BlcnRpZXMnXVsnbm90ZTpub3RlJ10pO1xyXG4gICAgICAgICAgdGhpcy5teVByZWZpeCA9IG15RGF0YS5wcmVmaXg7XHJcbiAgICAgICAgICByZXR1cm4gbXlEYXRhO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybUpzb24odHlwZSAsIGpzb25PYmplY3Qpe1xyXG4gICAganNvbk9iamVjdFsncHJlZml4J109dGhpcy5teVByZWZpeDtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLm51eGVvU2VydmljZS5udXhlb0NsaWVudFxyXG4gICAgICAgIC5vcGVyYXRpb24oJ0FDX1VBX0RNU19EeW5hbWljRm9ybV9DcmVhdGUnLCB7XHJcbiAgICAgICAgICB1cmw6IGAke3RoaXMuZW52aXJvbm1lbnQubnV4ZW99JHt0aGlzLmVudmlyb25tZW50LmN1c3RvbUF1dG9tYXRpb259YCxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jb250ZXh0KHtcclxuICAgICAgICAgIFwic2NoZW1hXCI6dHlwZSxcclxuICAgICAgICAgIFwianNvblwiOmpzb25PYmplY3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5leGVjdXRlKClcclxuICAgICkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRocm93IGVycjtcclxuICAgICAgfSkpXHJcbiAgXHJcbn1cclxuIFxyXG4gIGFkYXB0KGZpZWxkcyk6IGFueSB7XHJcbiAgICBjb25zdCBidWlsZGVyQ29tcG9uZW50cyA9IHt9O1xyXG4gICAgZmllbGRzID0gT2JqZWN0LmtleXMoZmllbGRzKS5tYXAoZmllbGRLZXkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgYWRhcHRlZEZpZWxkID0ge1xyXG4gICAgICAgIHRpdGxlOiBmaWVsZEtleSxcclxuICAgICAgICBpY29uOiAndGVybWluYWwnLFxyXG4gICAgICAgIHByZWZpeDogZmllbGRzW2ZpZWxkS2V5XVsncHJlZml4J10sXHJcbiAgICAgICAgc2NoZW1hOiB7XHJcbiAgICAgICAgICAvLyAndmFsaWRhdGUucmVxdWlyZWQnOiBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICdOb3ROdWxsQ29uc3RyYWludCcpLmxlbmd0aCA+IDAsXHJcbiAgICAgICAgICBsYWJlbDogZmllbGRLZXksXHJcbiAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgIGZpeGVkS2V5OiBmaWVsZEtleSxcclxuICAgICAgICAgIGlucHV0OiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgc3dpdGNoIChmaWVsZHNbZmllbGRLZXldLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ3RleHRmaWVsZCc7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tmaWVsZEtleV07XHJcbiAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IGZpZWxkLmNvbnN0cmFpbnRzID8gZmllbGQuY29uc3RyYWludHMgOiBbXTtcclxuICAgICAgICAgIGNvbnN0IHZvY2FidWxhcnlTZWFyY2ggPSBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICdkaXJlY3RvcnlSZXNvbHZlcicpO1xyXG4gICAgICAgICAgY29uc3Qgdm9jYWJ1bGFyeSA9IHZvY2FidWxhcnlTZWFyY2gubGVuZ3RoID8gdm9jYWJ1bGFyeVNlYXJjaFswXS5wYXJhbWV0ZXJzLmRpcmVjdG9yeSA6IG51bGw7XHJcbiAgICAgICAgICBjb25zdCB1c2VyU2VsZWN0b3IgPSBjb25zdHJhaW50cy5maWx0ZXIoaXRlbSA9PiBpdGVtLm5hbWUgPT09ICd1c2VyTWFuYWdlclJlc29sdmVyJyk7XHJcbiAgICAgICAgICBpZiAodm9jYWJ1bGFyeSkge1xyXG4gICAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndm9jYWJ1bGFyeSc7XHJcbiAgICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWFbJ2N1c3RvbU9wdGlvbnMudm9jSWQnXSA9IHZvY2FidWxhcnk7XHJcbiAgICAgICAgICB9ZWxzZSBpZih1c2VyU2VsZWN0b3IubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWEudHlwZSA9ICd1c2VyU2VsZWN0b3InO1xyXG4gICAgICAgICAgICAvLyBhZGFwdGVkRmllbGQuc2NoZW1hWydjdXN0b21PcHRpb25zLm11bHRpcGxlTW9kZSddID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ3RvZ2dsZSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzdHJpbmdbXSc6XHJcbiAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndGV4dGZpZWxkJztcclxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxyXG4gICAgICAgICAgLy8gYWRhcHRlZEZpZWxkLnNjaGVtYVsnbXVsdGlwbGUnXSA9IHRydWU7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZDEgPSBmaWVsZHNbZmllbGRLZXldO1xyXG4gICAgICAgICAgY29uc3QgaXRlbUNvbnN0cmFpbnRzID0gZmllbGQxLml0ZW1Db25zdHJhaW50cyA/IGZpZWxkMS5pdGVtQ29uc3RyYWludHMgOiBbXTtcclxuICAgICAgICAgIGNvbnN0IG11bHRpcGxlVXNlclNlbGVjdG9yID0gaXRlbUNvbnN0cmFpbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0ubmFtZSA9PT0gJ3VzZXJNYW5hZ2VyUmVzb2x2ZXInKTtcclxuICAgICAgICAgIGlmKG11bHRpcGxlVXNlclNlbGVjdG9yLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBhZGFwdGVkRmllbGQuc2NoZW1hLnR5cGUgPSAndXNlclNlbGVjdG9yJztcclxuICAgICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYVsnY3VzdG9tT3B0aW9ucy5tdWx0aXBsZU1vZGUnXSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdsb25nJzpcclxuICAgICAgICAgIGFkYXB0ZWRGaWVsZC5zY2hlbWEudHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZG91YmxlJzpcclxuICAgICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ251bWJlcic7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgYWRhcHRlZEZpZWxkLnNjaGVtYS50eXBlID0gJ2N1c3RvbWRhdGUnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhZGFwdGVkRmllbGQ7XHJcbiAgICB9KTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgYnVpbGRlckNvbXBvbmVudHNbZmllbGQuc2NoZW1hLmZpeGVkS2V5XSA9IGZpZWxkO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYnVpbGRlckNvbXBvbmVudHM7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3REeW5hbWljRm9ybVBheWxvYWQoZGF0YSAsIGR5bmFtaWNGb3JtKXtcclxuICAgIGxldCB1cGRhdGVkRHluYW1pY1ZhbHVlcyA9IHt9XHJcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5tYXAoa2V5ID0+IHtcclxuICAgICAgbGV0IHVwZGF0ZWRLZXkgPSBrZXkucmVwbGFjZSgnOicsJycpO1xyXG4gICAgICBsZXQgcHJlZml4ID0gZHluYW1pY0Zvcm0ucHJlZml4W3VwZGF0ZWRLZXldO1xyXG4gICAgICBpZiAocHJlZml4KSB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgY29tcG9uZW50IGlzIHVzZXIgc2VsZWN0b3IgdG8gbWFwIGl0cyBkYXRhIGZyb20gb2JqZWN0IHRvIHVzZXJuYW1lIG9yIGlkIG9ubHkgXHJcbiAgICAgICAgaWYoZGF0YVtrZXldICYmIGRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gJiYgZGF0YVtrZXldWyd1c2VyU2VsZWN0b3InXSA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgdXBkYXRlZER5bmFtaWNWYWx1ZXNbcHJlZml4ICsgJzonICsgdXBkYXRlZEtleV0gPSB0aGlzLmdldFVzZXJTZWxlY3RvclZhbHVlKGRhdGFba2V5XVsndmFsdWUnXSk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgdXBkYXRlZER5bmFtaWNWYWx1ZXNbcHJlZml4ICsgJzonICsgdXBkYXRlZEtleV0gPSBkYXRhW2tleV1cclxuICAgICAgICB9XHJcbiAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZihkYXRhW2tleV1bJ3VzZXJTZWxlY3RvciddICYmIGRhdGFba2V5XVsndXNlclNlbGVjdG9yJ10gPT09IHRydWUpe1xyXG4gICAgICAgICAgIHVwZGF0ZWREeW5hbWljVmFsdWVzW3VwZGF0ZWRLZXldID0gdGhpcy5nZXRVc2VyU2VsZWN0b3JWYWx1ZShkYXRhW2tleV1bJ3ZhbHVlJ10pOztcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICB1cGRhdGVkRHluYW1pY1ZhbHVlc1t1cGRhdGVkS2V5XSA9IGRhdGFba2V5XVxyXG4gICAgICAgIH1cclxuICAgICB9XHJcbiAgICB9KSAgXHJcbiAgICB0aGlzLnJlbW92ZU51bGxWYWx1ZXModXBkYXRlZER5bmFtaWNWYWx1ZXMpO1xyXG4gICAgcmV0dXJuIHVwZGF0ZWREeW5hbWljVmFsdWVzO1xyXG4gIH1cclxuICBcclxuICBnZXRVc2VyU2VsZWN0b3JWYWx1ZSh2YWx1ZSl7XHJcbiAgICBpZighQXJyYXkuaXNBcnJheSh2YWx1ZSkpe1xyXG4gICAgICByZXR1cm4gdmFsdWUuaWQgPyB2YWx1ZS5pZCA6IHZhbHVlLnByb3BlcnRpZXMudXNlcm5hbWU7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGxldCB1c2Vyc05hbWVzID0gW107XHJcbiAgICAgIHZhbHVlLm1hcChpdGVtID0+IHtcclxuICAgICAgICB1c2Vyc05hbWVzLnB1c2goKGl0ZW0uaWQgPyBpdGVtLmlkIDogaXRlbS5wcm9wZXJ0aWVzLnVzZXJuYW1lKSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiB1c2Vyc05hbWVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTnVsbFZhbHVlcyhkYXRhKXtcclxuICAgIE9iamVjdC5rZXlzKGRhdGEpLm1hcChrZXkgPT4ge1xyXG4gICAgICBpZihkYXRhW2tleV0gPT09IG51bGwpe1xyXG4gICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==