@mediusinc/mng-commons 0.5.0 → 0.7.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 (92) hide show
  1. package/assets/i18n/en.json +2 -2
  2. package/assets/i18n/sl.json +2 -2
  3. package/esm2020/lib/api/models/builders/query-param.builder.mjs +7 -1
  4. package/esm2020/lib/api/services/crud-api.abstract.service.mjs +2 -2
  5. package/esm2020/lib/components/action/action.component.mjs +3 -3
  6. package/esm2020/lib/components/action/editor/action-editor.component.mjs +5 -5
  7. package/esm2020/lib/components/action/models/action-execution.model.mjs +3 -2
  8. package/esm2020/lib/components/action/route/action-route.component.mjs +3 -3
  9. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +3 -3
  10. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +3 -3
  11. package/esm2020/lib/components/form/editor/form-editor.component.mjs +3 -3
  12. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +3 -3
  13. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
  14. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +5 -5
  15. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +3 -3
  16. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
  17. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -3
  18. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +27 -36
  19. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +3 -3
  20. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
  21. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
  22. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +3 -3
  23. package/esm2020/lib/components/layout/breadcrumb.component.mjs +3 -3
  24. package/esm2020/lib/components/layout/footer.component.mjs +3 -3
  25. package/esm2020/lib/components/layout/main-layout.component.mjs +3 -3
  26. package/esm2020/lib/components/layout/menu-item.component.mjs +3 -3
  27. package/esm2020/lib/components/layout/menu.component.mjs +3 -3
  28. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +3 -3
  29. package/esm2020/lib/components/layout/topbar.component.mjs +3 -3
  30. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +3 -3
  31. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +3 -3
  32. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +3 -3
  33. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +3 -3
  34. package/esm2020/lib/components/tableview/table/table.component.mjs +94 -26
  35. package/esm2020/lib/components/tableview/tableview.component.mjs +5 -13
  36. package/esm2020/lib/config/formly.config.mjs +5 -5
  37. package/esm2020/lib/data-providers/editor.data-provider.mjs +1 -1
  38. package/esm2020/lib/descriptors/action.descriptor.mjs +6 -15
  39. package/esm2020/lib/descriptors/column.descriptor.mjs +32 -1
  40. package/esm2020/lib/descriptors/editor.descriptor.mjs +3 -3
  41. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +21 -0
  42. package/esm2020/lib/descriptors/field.descriptor.mjs +14 -14
  43. package/esm2020/lib/descriptors/index.mjs +2 -2
  44. package/esm2020/lib/descriptors/table.descriptor.mjs +72 -9
  45. package/esm2020/lib/descriptors/tableview.descriptor.mjs +4 -4
  46. package/esm2020/lib/directives/component.directive.mjs +3 -3
  47. package/esm2020/lib/directives/template.directive.mjs +3 -3
  48. package/esm2020/lib/mng-commons.module.mjs +4 -4
  49. package/esm2020/lib/pipes/boolean.pipe.mjs +3 -3
  50. package/esm2020/lib/pipes/enum.pipe.mjs +3 -3
  51. package/esm2020/lib/pipes/i18n-property.pipe.mjs +3 -3
  52. package/esm2020/lib/pipes/json-path.pipe.mjs +3 -3
  53. package/esm2020/lib/pipes/link-formatter.pipe.mjs +3 -3
  54. package/esm2020/lib/services/action-executor.service.mjs +6 -6
  55. package/esm2020/lib/services/commons.service.mjs +3 -3
  56. package/esm2020/lib/services/internal/commons-init.service.mjs +3 -3
  57. package/esm2020/lib/services/navigation.service.mjs +3 -3
  58. package/esm2020/lib/services/view-container.component.service.mjs +3 -3
  59. package/esm2020/lib/types/type.model.mjs +1 -1
  60. package/esm2020/lib/utils/action-data-provider.util.mjs +116 -0
  61. package/esm2020/lib/utils/editor-formly.util.mjs +31 -11
  62. package/esm2020/lib/utils/index.mjs +2 -1
  63. package/esm2020/lib/utils/styles.util.mjs +41 -0
  64. package/fesm2015/mediusinc-mng-commons.mjs +579 -260
  65. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  66. package/fesm2020/mediusinc-mng-commons.mjs +567 -251
  67. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  68. package/lib/api/models/builders/query-param.builder.d.ts +1 -0
  69. package/lib/api/services/crud-api.abstract.service.d.ts +8 -2
  70. package/lib/components/action/models/action-execution.model.d.ts +5 -3
  71. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +1 -4
  72. package/lib/components/tableview/table/table.component.d.ts +21 -11
  73. package/lib/components/tableview/tableview.component.d.ts +1 -3
  74. package/lib/data-providers/editor.data-provider.d.ts +4 -4
  75. package/lib/descriptors/action.descriptor.d.ts +3 -3
  76. package/lib/descriptors/column.descriptor.d.ts +10 -0
  77. package/lib/descriptors/editor.descriptor.d.ts +2 -3
  78. package/lib/descriptors/field-validation.descriptor.d.ts +18 -0
  79. package/lib/descriptors/field.descriptor.d.ts +8 -9
  80. package/lib/descriptors/index.d.ts +1 -1
  81. package/lib/descriptors/table.descriptor.d.ts +27 -5
  82. package/lib/descriptors/tableview.descriptor.d.ts +2 -2
  83. package/lib/types/type.model.d.ts +7 -0
  84. package/lib/utils/action-data-provider.util.d.ts +17 -0
  85. package/lib/utils/editor-formly.util.d.ts +2 -1
  86. package/lib/utils/index.d.ts +1 -0
  87. package/lib/utils/styles.util.d.ts +14 -0
  88. package/package.json +6 -6
  89. package/scss/mng-overrides/_theme_datatable.scss +21 -0
  90. package/scss/mng-overrides/_theme_tableview.scss +0 -43
  91. package/esm2020/lib/descriptors/field.validator.mjs +0 -21
  92. package/lib/descriptors/field.validator.d.ts +0 -18
@@ -28,7 +28,7 @@ export class MngActionExecutorService {
28
28
  }
29
29
  prepareActionExecContext(action, itemId, item, dataProvider, viewContainer, sourceComponent, actionData) {
30
30
  const ctxDataProvider = dataProvider ?? action.dataProvider ?? viewContainer?.getDataProvider();
31
- return new ActionExecContext(ctxDataProvider, this.getDataProviderService(ctxDataProvider) ?? undefined, {
31
+ return new ActionExecContext(action, ctxDataProvider, this.getDataProviderService(ctxDataProvider) ?? undefined, {
32
32
  item,
33
33
  itemId,
34
34
  actionData
@@ -175,7 +175,7 @@ export class MngActionExecutorService {
175
175
  ctxDataProvider = viewContainerDataProvider;
176
176
  }
177
177
  }
178
- const context = new ActionExecContext(ctxDataProvider, this.getDataProviderService(ctxDataProvider) ?? undefined, {
178
+ const context = new ActionExecContext(action, ctxDataProvider, this.getDataProviderService(ctxDataProvider) ?? undefined, {
179
179
  item,
180
180
  itemId,
181
181
  actionData
@@ -350,12 +350,12 @@ export class MngActionExecutorService {
350
350
  return this.errorMapper.toMngError(error, actionError);
351
351
  }
352
352
  }
353
- MngActionExecutorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionExecutorService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i2.DialogService }, { token: i3.ConfirmationService }, { token: i4.TranslateService }, { token: i5.MngNavigationService }, { token: i6.MngErrorMapperService }, { token: i7.MngLinkFormatterPipe }, { token: ACTION_EDITOR_DIALOG_COMPONENT_SETTING }], target: i0.ɵɵFactoryTarget.Injectable });
354
- MngActionExecutorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionExecutorService });
355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngActionExecutorService, decorators: [{
353
+ MngActionExecutorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngActionExecutorService, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i2.DialogService }, { token: i3.ConfirmationService }, { token: i4.TranslateService }, { token: i5.MngNavigationService }, { token: i6.MngErrorMapperService }, { token: i7.MngLinkFormatterPipe }, { token: ACTION_EDITOR_DIALOG_COMPONENT_SETTING }], target: i0.ɵɵFactoryTarget.Injectable });
354
+ MngActionExecutorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngActionExecutorService });
355
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngActionExecutorService, decorators: [{
356
356
  type: Injectable
357
357
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.Router }, { type: i2.DialogService }, { type: i3.ConfirmationService }, { type: i4.TranslateService }, { type: i5.MngNavigationService }, { type: i6.MngErrorMapperService }, { type: i7.MngLinkFormatterPipe }, { type: i0.Type, decorators: [{
358
358
  type: Inject,
359
359
  args: [ACTION_EDITOR_DIALOG_COMPONENT_SETTING]
360
360
  }] }]; } });
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBQyxzQkFBc0IsRUFBYyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUE2QixNQUFNLDZCQUE2QixDQUFDO0FBR2pMLE9BQU8sRUFBQywyQkFBMkIsRUFBb0Isc0JBQXNCLEVBQUUsY0FBYyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBSXRJLE9BQU8sRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHckQsT0FBTyxFQUFDLHNDQUFzQyxFQUFDLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7QUFHaEUsTUFBTSxPQUFPLHdCQUF3QjtJQUNqQyxZQUNZLFFBQWtCLEVBQ2xCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsU0FBMkIsRUFDM0IsaUJBQXVDLEVBQ3ZDLFdBQWtDLEVBQ2xDLGFBQW1DLEVBQ2EsNEJBQXVDO1FBUnZGLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFD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QUFLLEVBQUUsSUFBSSxJQUFJLGNBQWM7WUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksZUFBZTtZQUMxQyxLQUFLLEVBQUUsS0FBSztTQUNmLENBQUM7UUFDRixJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRTtZQUNwQyxXQUFXLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEMsV0FBVyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDakQsV0FBVyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQztTQUM1QztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNELENBQUM7O3FIQS9jUSx3QkFBd0IsNlFBVXJCLHNDQUFzQzt5SEFWekMsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVU7OzBCQVdGLE1BQU07MkJBQUMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlciwgVXJsVHJlZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWd9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge09ic2VydmFibGUsIGZyb20sIG9mLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmlyc3QsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25SZXN1bHQsIEFjdGlvbkRhdGEsIEFjdGlvbkVycm9yLCBBY3Rpb25FeGVjQ29udGV4dCwgQWN0aW9uUnVuUmVzdWx0LCBBY3Rpb25UcmlnZ2VyUmVzdWx0LCBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmltcG9ydCB7TW5nVGFibGVDZWxsQ2xpY2tFdmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZXZpZXcvbW9kZWxzJztcbmltcG9ydCB7SURhdGFQcm92aWRlciwgSUVkaXRvckRhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sIEFjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IsIEFjdGlvblR5cGVFbnVtLCBUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7SVZpZXdDb250YWluZXIsIE1uZ0Vycm9yfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdMaW5rRm9ybWF0dGVyUGlwZX0gZnJvbSAnLi4vcGlwZXMnO1xuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWxzLCBOb3RpZmljYXRpb25VdGlsfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge01uZ0Vycm9yTWFwcGVyU2VydmljZX0gZnJvbSAnLi9lcnJvci1tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQge01uZ05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQge0FDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HfSBmcm9tICcuL3Rva2Vucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBNbmdOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlcnJvck1hcHBlcjogTW5nRXJyb3JNYXBwZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGxpbmtGb3JtYXR0ZXI6IE1uZ0xpbmtGb3JtYXR0ZXJQaXBlLFxuICAgICAgICBASW5qZWN0KEFDVElPTl9FRElUT1JfRElBTE9HX0NPTVBPTkVOVF9TRVRUSU5HKSBwcml2YXRlIGRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ6IFR5cGU8YW55PlxuICAgICkge31cblxuICAgIHB1YmxpYyBwcmVwYXJlQWN0aW9uRXhlY0NvbnRleHQ8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ge1xuICAgICAgICBjb25zdCBjdHhEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXIgPz8gYWN0aW9uLmRhdGFQcm92aWRlciA/PyB2aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PihcbiAgICAgICAgICAgIGN0eERhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YVByb3ZpZGVyU2VydmljZShjdHhEYXRhUHJvdmlkZXIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICAgICAgICBhY3Rpb25EYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc291cmNlQ29tcG9uZW50LFxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5BY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUFjdGlvbkV4ZWNDb250ZXh0KGFjdGlvbiwgaXRlbUlkLCBpdGVtLCBkYXRhUHJvdmlkZXIsIHZpZXdDb250YWluZXIsIHNvdXJjZUNvbXBvbmVudCwgYWN0aW9uRGF0YSk7XG4gICAgICAgIGlmIChhY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudD8uZ2V0Q29uZmlybWF0aW9uU2VydmljZSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygc291cmNlQ29tcG9uZW50Py5nZXRDb25maXJtYXRpb25TZXJ2aWNlSW5zdGFuY2VLZXkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgU291cmNlIGNvbXBvbmVudCAke3NvdXJjZUNvbXBvbmVudH0gc2hvdWxkIGJlIGltcGxlbWVudGluZyBJQ29uZmlybWF0aW9uU2VydmljZSBpbnRlcmZhY2UgdG8gYmUgYWJsZSB0byBwcm92aWRlIGNvbmZpcm1hdGlvbiBmdW5jdGlvbmFsaXR5LmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzcmNDb25maXJtQ29tcG9uZW50ID0gc291cmNlQ29tcG9uZW50IGFzIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlO1xuICAgICAgICAgICAgbGV0IGNvbmZpcm1QYXJhbXM6IENvbmZpcm1hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbiksXG4gICAgICAgICAgICAgICAgYWNjZXB0VmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVqZWN0VmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uVGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmhlYWRlciA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLnRpdGxlJywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbk1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLm1lc3NhZ2UgPSBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5tZXNzYWdlJywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbk1lc3NhZ2UsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uSWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaWNvbiA9IGFjdGlvbi5ydW5Db25maXJtYXRpb25JY29uID09PSB1bmRlZmluZWQgPyAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnIDogYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkljb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHRMYWJlbCA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLmFjY2VwdCcsIGFjdGlvbi5ydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZSwgaXRlbSwgJ2dlbmVyYWwueWVzJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLnJlamVjdCcsIGFjdGlvbi5ydW5Db25maXJtYXRpb25SZWplY3RUaXRsZSwgaXRlbSwgJ2dlbmVyYWwubm8nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC5ydW5GdW5jdGlvbihjb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgcmVzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHJ1blJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuUmVzdWx0Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydW5SZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FcnJvci5ub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAncnVuJywgdmlld0NvbnRhaW5lciwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gYWN0aW9uRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgdW5kZWZpbmVkLCBuZXcgQWN0aW9uRXJyb3IobnVsbCwgdHJ1ZSkpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25Db25maWdNYXBGbikge1xuICAgICAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zID0gYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuKGNvbnRleHQsIGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpLmNvbmZpcm0oY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5ydW5GdW5jdGlvbihjb250ZXh0KS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5SZXN1bHQubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkVycm9yLm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgYWN0aW9uRXJyb3IsICdydW4nLCB2aWV3Q29udGFpbmVyLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhY3Rpb25FcnJvcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24gc2F2ZSBmdW5jdGlvbiB1c3VhbGx5IHRyaWdnZXJlZCBvbiBmb3JtIHN1Ym1pdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBmb3JtSXRlbSBJdGVtIGluc3RhbmNlIChmcm9tIGZvcm0pLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBmZXRjaCBmdW5jdGlvbiB3YXMgY2FsbGVkLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyL3NlcnZpY2UuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgQWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yU2F2ZTxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGZvcm1JdGVtPzogVCxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yKGFjdGlvbiwgZm9ybUl0ZW0sIGl0ZW1JZCwgZGF0YVByb3ZpZGVyLCBzb3VyY2VDb21wb25lbnQsIHZpZXdDb250YWluZXIsIGFjdGlvbkRhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5zdWJtaXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdWJtaXQgZnVuY3Rpb24gZm9yIGFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lfSBjYW5ub3QgYmUgaW52b2tlZC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uLnN1Ym1pdEZ1bmN0aW9uKGNvbnRleHQpLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25SdW5SZXN1bHQoY29udGV4dCwgcmVzKSksXG4gICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuUmVzdWx0Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1JdGVtXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBydW5SZXN1bHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXJyb3Iubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCBhY3Rpb25FcnJvciwgJ3N1Ym1pdCcsIHZpZXdDb250YWluZXIsIGZvcm1JdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gYWN0aW9uRXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24gZmV0Y2ggZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpdGVtIEl0ZW0gaW5zdGFuY2UgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlclxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBmZXRjaCBmdW5jdGlvbiB3YXMgY2FsbGVkLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyL3NlcnZpY2UuIFRhYmxldmlldyBjb21wb25lbnQuXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgQWRkaXRpb25hbCBhY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yRmV0Y2g8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25SdW5SZXN1bHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yKGFjdGlvbiwgaXRlbSwgaXRlbUlkLCBkYXRhUHJvdmlkZXIsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSk7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZmV0Y2hGdW5jdGlvbihjb250ZXh0KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSk7XG4gICAgICAgIC8vIFRPRE86IGVycm9yIGhhbmRsaW5nXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGV4ZWMgY29udGV4dCBmb3IgYWN0aW9uIG9mIHR5cGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGNvbXBvbmVudCBmcm9tIHdoZXJlIHRoZSBjb250ZXh0IHByZXBhcmF0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUV4ZWNDb250ZXh0Rm9yRWRpdG9yPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YVxuICAgICk6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+IHtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgYWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gYWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+PihcbiAgICAgICAgICAgIGN0eERhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YVByb3ZpZGVyU2VydmljZShjdHhEYXRhUHJvdmlkZXIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICAgICAgICBhY3Rpb25EYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc291cmNlQ29tcG9uZW50LFxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHNlcnZpY2UgaW5zdGFuY2Ugb2YgZGF0YSBwcm92aWRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldERhdGFQcm92aWRlclNlcnZpY2U8VCwgUz4oZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPik6IFMgfCBudWxsIHtcbiAgICAgICAgaWYgKGRhdGFQcm92aWRlcj8uc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldDxTPihkYXRhUHJvdmlkZXIuc2VydmljZVR5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZXMgYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gaXRlbSBJdGVtIGluc3RhbmNlIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBPcHRpb25hbCBhZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIFZpZXcgY29udGFpbmVyIGNvbXBvbmVudC9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBzb3VyY2VDb21wb25lbnQgU291cmNlIGFjdGl2YXRpb24gY29tcG9uZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmF0ZUFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnlcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDb21wb25lbnQgPSB0aGlzLmRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ7XG4gICAgICAgICAgICBsZXQgZGlhbG9nQ2xhc3NOYW1lID0gJyc7XG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZSA9IGFjdGlvbi5kaWFsb2dDbGFzc05hbWUgPz8gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZyc7XG4gICAgICAgICAgICAgICAgbGV0IGRpYWxvZ1NpemVDbGFzc05hbWUgPSAnJztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5kaWFsb2dTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uRWRpdG9yRGVzY3JpcHRvci5EaWFsb2dTaXplRW51bS5FeHRyYVNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nU2l6ZUNsYXNzTmFtZSA9ICdtbmctYWN0aW9uLWVkaXRvci1kaWFsb2cteHMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uRWRpdG9yRGVzY3JpcHRvci5EaWFsb2dTaXplRW51bS5TbWFsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1NpemVDbGFzc05hbWUgPSAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nLXNtJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IuRGlhbG9nU2l6ZUVudW0uTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dTaXplQ2xhc3NOYW1lID0gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZy1sZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLkRpYWxvZ1NpemVFbnVtLkV4dHJhTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dTaXplQ2xhc3NOYW1lID0gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZy14bCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLkRpYWxvZ1NpemVFbnVtLk5vcm1hbDpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGlhbG9nU2l6ZUNsYXNzTmFtZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lICs9IGAgJHtkaWFsb2dTaXplQ2xhc3NOYW1lfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uZWRpdG9yQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coZGlhbG9nQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzczogZGlhbG9nQ2xhc3NOYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGl0ZW1JZCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLml0ZW1JZCA9IGl0ZW1JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuaXRlbSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aW9uRGF0YSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLmFjdGlvbkRhdGEgPSBhY3Rpb25EYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS52aWV3Q29udGFpbmVyID0gdmlld0NvbnRhaW5lcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzb3VyY2VDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5zb3VyY2VDb21wb25lbnQgPSBzb3VyY2VDb21wb25lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4odW5kZWZpbmVkLCBkaWFsb2dSZWYpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRXZlbnQpIHtcbiAgICAgICAgICAgIC8vIGp1c3QgZW1pdCBldmVudFxuICAgICAgICAgICAgcmV0dXJuIG9mKG5ldyBBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHVuZGVmaW5lZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGlyZWN0bHkgZXhlY3V0ZSBhY3Rpb25cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1bkFjdGlvbjxULCBTPihhY3Rpb24sIGl0ZW1JZCwgaXRlbSwgdW5kZWZpbmVkLCBzb3VyY2VDb21wb25lbnQsIHZpZXdDb250YWluZXIsIGFjdGlvbkRhdGEpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlcyA9PiBuZXcgQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PihyZXMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGFjdGlvbiBmcm9tIHRhYmxlIHJvdyBjbGljayBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGV2ZW50IFRhcmdldCB0YWJsZSBjbGljayBldmVudC5cbiAgICAgKiBAcGFyYW0gcm91dGUgQ3VycmVudGx5IGFjdGl2YXRlIHJvdXRlLlxuICAgICAqIEBwYXJhbSB0YWJsZURlc2NyaXB0b3IgVGFibGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZGF0YUtleVByb3BlcnR5IERhdGEga2V5IHByb3BlcnR5LlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyUm93Q2xpY2tBY3Rpb248VD4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgZXZlbnQ6IE1uZ1RhYmxlQ2VsbENsaWNrRXZlbnQ8VD4sXG4gICAgICAgIHJvdXRlPzogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHRhYmxlRGVzY3JpcHRvcj86IFRhYmxlRGVzY3JpcHRvcjxUPixcbiAgICAgICAgZGF0YUtleVByb3BlcnR5Pzogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGlkUHJvcGVydHkgPSBkYXRhS2V5UHJvcGVydHkgPz8gdGFibGVEZXNjcmlwdG9yPy5kYXRhS2V5UHJvcGVydHkgPz8gYWN0aW9uPy5tb2RlbD8uaWRQcm9wZXJ0eU5hbWUgPz8gZGF0YUtleVByb3BlcnR5O1xuICAgICAgICBpZiAoIWlkUHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUm93IGNsaWNrIGFjdGlvbiAke2FjdGlvbi5hY3Rpb25OYW1lfSBjYW4gbm90IGJlIHRyaWdnZXJlZCwgYmVjYXVzZSBpZCBwcm9wZXJ0eSBjb3VsZCBub3QgYmUgZm91bmQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SXRlbSA9IGV2ZW50Py5yb3dJdGVtIGFzIGFueTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlckFjdGlvbihhY3Rpb24sIHJvd0l0ZW1baWRQcm9wZXJ0eV0sIGV2ZW50LnJvd0l0ZW0sIHVuZGVmaW5lZCwgcm91dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXJzIGFjdGlvbiB3aXRoIG9wdGlvbmFsIGRhdGEgKGl0ZW0sIGl0ZW1JZCwgLi4uKSBhbmQgY3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIE9wdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqIEBwYXJhbSByb3V0ZSBPcHRpb25hbCBhY3RpdmF0ZWQgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJBY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGEsXG4gICAgICAgIHJvdXRlPzogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55XG4gICAgKTogT2JzZXJ2YWJsZTxBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PiB7XG4gICAgICAgIGlmIChhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRVcmw6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgbGV0IGFjdGlvblVybCA9IGFjdGlvbi5yb3V0ZVVybCA/PyAnJztcbiAgICAgICAgICAgIC8vIFRPRE86IGRvbnQgc3RyaXAgJy8nLCBidXQgdXNlIGl0IGFjY29yZGluZ2x5IHdpdGggQW5ndWxhcidzIHJvdXRlciBwYXR0ZXJucyAoLywgLi8sIC4uLylcbiAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSB0aGlzLmxpbmtGb3JtYXR0ZXIudHJhbnNmb3JtKGFjdGlvblVybCwgaXRlbUlkLCBpdGVtLCBhY3Rpb24ubW9kZWwsIGFjdGlvbkRhdGEpO1xuXG4gICAgICAgICAgICByZXR1cm4gb2YoXG4gICAgICAgICAgICAgICAgbmV3IEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4oXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYmFzZVVybCwgLi4uYWN0aW9uVXJsU2VnbWVudHNdLCB7cmVsYXRpdmVUbzogcm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIGFjdGlvbkRhdGEsIHZpZXdDb250YWluZXIsIHNvdXJjZUNvbXBvbmVudCkucGlwZShtYXAocmVzID0+IG5ldyBBY3Rpb25UcmlnZ2VyUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWFjdGl2YXRlQWN0aW9uPFQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c0xvY2F0aW9uKCkpIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIHNvIGJhY2sgY2FuIGJlIG5vcm1hbGx5IGNhbGxlZFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIGZpZ3VyZSBvdXQgdGhlIGJhc2UgdXJsIGJ5IGVsaW1pbmF0aW5nIGFjdGlvbiBzcGVjaWZpYyB1cmxcbiAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gdXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB1cmxQYXRoU2VnbWVudHMuc2xpY2UoMCwgdXJsUGF0aFNlZ21lbnRzLmxlbmd0aCAtIGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aCkuam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC8ke3JlZGlyZWN0VXJsfWAsIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9NbmdBY3Rpb25FcnJvcihlcnJvcj86IGFueSk6IE1uZ0Vycm9yIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXJyb3I6IE1uZ0Vycm9yID0ge1xuICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSA/PyAnVW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1cyA9IGVycm9yLnN0YXR1cztcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnN0YXR1c0Rlc2NyaXB0aW9uID0gZXJyb3Iuc3RhdHVzVGV4dDtcbiAgICAgICAgICAgIGFjdGlvbkVycm9yLnVybCA9IGVycm9yLnVybCA/PyB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JNYXBwZXIudG9NbmdFcnJvcihlcnJvciwgYWN0aW9uRXJyb3IpO1xuICAgIH1cbn1cbiJdfQ==
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRELE9BQU8sRUFBQyxzQkFBc0IsRUFBYyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUE2QixNQUFNLDZCQUE2QixDQUFDO0FBR2pMLE9BQU8sRUFBQywyQkFBMkIsRUFBb0Isc0JBQXNCLEVBQUUsY0FBYyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBSXRJLE9BQU8sRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHckQsT0FBTyxFQUFDLHNDQUFzQyxFQUFDLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7QUFHaEUsTUFBTSxPQUFPLHdCQUF3QjtJQUNqQyxZQUNZLFFBQWtCLEVBQ2xCLE1BQWMsRUFDZCxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsU0FBMkIsRUFDM0IsaUJBQXVDLEVBQ3ZDLFdBQWtDLEVBQ2xDLGFBQW1DLEVBQ2EsNEJBQXVDO1FBUnZGLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFD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QWE7WUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksY0FBYztZQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxlQUFlO1lBQzFDLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUNGLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO1lBQ3BDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNqRCxXQUFXLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7cUhBamRRLHdCQUF3Qiw2UUFVckIsc0NBQXNDO3lIQVZ6Qyx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVTs7MEJBV0YsTUFBTTsyQkFBQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbSwgb2YsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7QWN0aW9uQWN0aXZhdGlvblJlc3VsdCwgQWN0aW9uRGF0YSwgQWN0aW9uRXJyb3IsIEFjdGlvbkV4ZWNDb250ZXh0LCBBY3Rpb25SdW5SZXN1bHQsIEFjdGlvblRyaWdnZXJSZXN1bHQsIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdUYWJsZUNlbGxDbGlja0V2ZW50fSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxldmlldy9tb2RlbHMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyLCBJRWRpdG9yRGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSwgQWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uVHlwZUVudW0sIFRhYmxlRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJVmlld0NvbnRhaW5lciwgTW5nRXJyb3J9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0xpbmtGb3JtYXR0ZXJQaXBlfSBmcm9tICcuLi9waXBlcyc7XG5pbXBvcnQge0lkVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbHMsIE5vdGlmaWNhdGlvblV0aWx9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7TW5nRXJyb3JNYXBwZXJTZXJ2aWNlfSBmcm9tICcuL2Vycm9yLW1hcHBlci5zZXJ2aWNlJztcbmltcG9ydCB7TW5nTmF2aWdhdGlvblNlcnZpY2V9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7QUNUSU9OX0VESVRPUl9ESUFMT0dfQ09NUE9ORU5UX1NFVFRJTkd9IGZyb20gJy4vdG9rZW5zJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycm9yTWFwcGVyOiBNbmdFcnJvck1hcHBlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbGlua0Zvcm1hdHRlcjogTW5nTGlua0Zvcm1hdHRlclBpcGUsXG4gICAgICAgIEBJbmplY3QoQUNUSU9OX0VESVRPUl9ESUFMT0dfQ09NUE9ORU5UX1NFVFRJTkcpIHByaXZhdGUgZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudDogVHlwZTxhbnk+XG4gICAgKSB7fVxuXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25FeGVjQ29udGV4dDxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueSxcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGFcbiAgICApOiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBhY3Rpb24uZGF0YVByb3ZpZGVyID8/IHZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGFcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQWN0aW9uRXhlY0NvbnRleHQoYWN0aW9uLCBpdGVtSWQsIGl0ZW0sIGRhdGFQcm92aWRlciwgdmlld0NvbnRhaW5lciwgc291cmNlQ29tcG9uZW50LCBhY3Rpb25EYXRhKTtcbiAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Db25maXJtYXRpb24pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50Py5nZXRDb25maXJtYXRpb25TZXJ2aWNlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBTb3VyY2UgY29tcG9uZW50ICR7c291cmNlQ29tcG9uZW50fSBzaG91bGQgYmUgaW1wbGVtZW50aW5nIElDb25maXJtYXRpb25TZXJ2aWNlIGludGVyZmFjZSB0byBiZSBhYmxlIHRvIHByb3ZpZGUgY29uZmlybWF0aW9uIGZ1bmN0aW9uYWxpdHkuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNyY0NvbmZpcm1Db21wb25lbnQgPSBzb3VyY2VDb21wb25lbnQgYXMgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2U7XG4gICAgICAgICAgICBsZXQgY29uZmlybVBhcmFtczogQ29uZmlybWF0aW9uID0ge1xuICAgICAgICAgICAgICAgIGtleTogc3JjQ29uZmlybUNvbXBvbmVudC5nZXRDb25maXJtYXRpb25TZXJ2aWNlSW5zdGFuY2VLZXkoYWN0aW9uKSxcbiAgICAgICAgICAgICAgICBhY2NlcHRWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByZWplY3RWaXNpYmxlOiBmYWxzZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25UaXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID0gSTE4blV0aWxzLkFjdGlvbi5nZXQodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0udGl0bGUnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uVGl0bGUsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uTWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMubWVzc2FnZSA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLm1lc3NhZ2UnLCBhY3Rpb24ucnVuQ29uZmlybWF0aW9uTWVzc2FnZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbi5ydW5Db25maXJtYXRpb25JY29uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5pY29uID0gYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkljb24gPT09IHVuZGVmaW5lZCA/ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScgOiBhY3Rpb24ucnVuQ29uZmlybWF0aW9uSWNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdExhYmVsID0gSTE4blV0aWxzLkFjdGlvbi5nZXQodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0uYWNjZXB0JywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlLCBpdGVtLCAnZ2VuZXJhbC55ZXMnKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHRWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb24ucnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdExhYmVsID0gSTE4blV0aWxzLkFjdGlvbi5nZXQodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgJ2NvbmZpcm0ucmVqZWN0JywgYWN0aW9uLnJ1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5ubycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdFZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8QWN0aW9uUnVuUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+PihvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLnJ1bkZ1bmN0aW9uKGNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5SZXN1bHQubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkVycm9yLm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGFjdGlvbiwgYWN0aW9uRXJyb3IsICdydW4nLCB2aWV3Q29udGFpbmVyLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhY3Rpb25FcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCB1bmRlZmluZWQsIG5ldyBBY3Rpb25FcnJvcihudWxsLCB0cnVlKSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMgPSBhY3Rpb24ucnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4oY29udGV4dCwgY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3JjQ29uZmlybUNvbXBvbmVudC5nZXRDb25maXJtYXRpb25TZXJ2aWNlKCkuY29uZmlybShjb25maXJtUGFyYW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLnJ1bkZ1bmN0aW9uKGNvbnRleHQpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpLFxuICAgICAgICAgICAgICAgIG1hcChydW5SZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1blJlc3VsdC5ub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRXJyb3IgPSB0aGlzLnRvTW5nQWN0aW9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXJyb3Iubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcih0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCBhY3Rpb25FcnJvciwgJ3J1bicsIHZpZXdDb250YWluZXIsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGFjdGlvbkVycm9yKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWRpdG9yIGFjdGlvbiBzYXZlIGZ1bmN0aW9uIHVzdWFsbHkgdHJpZ2dlcmVkIG9uIGZvcm0gc3VibWl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGZvcm1JdGVtIEl0ZW0gaW5zdGFuY2UgKGZyb20gZm9ybSkuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGZldGNoIGZ1bmN0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JTYXZlPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgZm9ybUl0ZW0/OiBULFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGFcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlRXhlY0NvbnRleHRGb3JFZGl0b3IoYWN0aW9uLCBmb3JtSXRlbSwgaXRlbUlkLCBkYXRhUHJvdmlkZXIsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN1Ym1pdCBmdW5jdGlvbiBmb3IgYWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWV9IGNhbm5vdCBiZSBpbnZva2VkLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb24uc3VibWl0RnVuY3Rpb24oY29udGV4dCkucGlwZShcbiAgICAgICAgICAgIG1hcChyZXMgPT4gbmV3IEFjdGlvblJ1blJlc3VsdChjb250ZXh0LCByZXMpKSxcbiAgICAgICAgICAgIG1hcChydW5SZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBydW5SZXN1bHQubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3VibWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25FcnJvci5ub3RpZmljYXRpb24gPSBOb3RpZmljYXRpb25VdGlsLmFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sIGFjdGlvbkVycm9yLCAnc3VibWl0Jywgdmlld0NvbnRhaW5lciwgZm9ybUl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhY3Rpb25FcnJvcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWRpdG9yIGFjdGlvbiBmZXRjaCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBpbnN0YW5jZSAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gaXRlbUlkIEl0ZW0gaWQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGZldGNoIGZ1bmN0aW9uIHdhcyBjYWxsZWQuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIvc2VydmljZS4gVGFibGV2aWV3IGNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0gYWN0aW9uRGF0YSBBZGRpdGlvbmFsIGFjdGlvbiBkYXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JGZXRjaDxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtPzogVCxcbiAgICAgICAgaXRlbUlkPzogSWRUeXBlLFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnksXG4gICAgICAgIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPixcbiAgICAgICAgYWN0aW9uRGF0YT86IEFjdGlvbkRhdGFcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvblJ1blJlc3VsdDxULCBTLCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlRXhlY0NvbnRleHRGb3JFZGl0b3IoYWN0aW9uLCBpdGVtLCBpdGVtSWQsIGRhdGFQcm92aWRlciwgc291cmNlQ29tcG9uZW50LCB2aWV3Q29udGFpbmVyLCBhY3Rpb25EYXRhKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5mZXRjaEZ1bmN0aW9uKGNvbnRleHQpLnBpcGUobWFwKHJlcyA9PiBuZXcgQWN0aW9uUnVuUmVzdWx0KGNvbnRleHQsIHJlcykpKTtcbiAgICAgICAgLy8gVE9ETzogZXJyb3IgaGFuZGxpbmdcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSBJdGVtIGluc3RhbmNlIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGNvbnRleHQgcHJlcGFyYXRpb24gd2FzIGNhbGxlZC5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lci9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIEFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlRXhlY0NvbnRleHRGb3JFZGl0b3I8VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPixcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgc291cmNlQ29tcG9uZW50PzogYW55LFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhXG4gICAgKTogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4ge1xuICAgICAgICBsZXQgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlciAmJiBhY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBhY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4RGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyID0gdmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lckRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgICAgIGN0eERhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3VyY2VDb21wb25lbnQsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgc2VydmljZSBpbnN0YW5jZSBvZiBkYXRhIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0YVByb3ZpZGVyU2VydmljZTxULCBTPihkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+KTogUyB8IG51bGwge1xuICAgICAgICBpZiAoZGF0YVByb3ZpZGVyPy5zZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0PFM+KGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlcyBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpdGVtIEl0ZW0gaW5zdGFuY2UgKGlmIGV4aXN0cykuXG4gICAgICogQHBhcmFtIGl0ZW1JZCBJdGVtIGlkIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIE9wdGlvbmFsIGFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgVmlldyBjb250YWluZXIgY29tcG9uZW50L3NlcnZpY2UuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgYWN0aXZhdGlvbiBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlQWN0aW9uPFQsIFM+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGl0ZW1JZD86IElkVHlwZSxcbiAgICAgICAgaXRlbT86IFQsXG4gICAgICAgIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhLFxuICAgICAgICB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz4sXG4gICAgICAgIHNvdXJjZUNvbXBvbmVudD86IGFueVxuICAgICk6IE9ic2VydmFibGU8QWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pj4ge1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgbGV0IGRpYWxvZ0NvbXBvbmVudCA9IHRoaXMuZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudDtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDbGFzc05hbWUgPSAnJztcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lID0gYWN0aW9uLmRpYWxvZ0NsYXNzTmFtZSA/PyAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nJztcbiAgICAgICAgICAgICAgICBsZXQgZGlhbG9nU2l6ZUNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLmRpYWxvZ1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLkRpYWxvZ1NpemVFbnVtLkV4dHJhU21hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dTaXplQ2xhc3NOYW1lID0gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZy14cyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLkRpYWxvZ1NpemVFbnVtLlNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nU2l6ZUNsYXNzTmFtZSA9ICdtbmctYWN0aW9uLWVkaXRvci1kaWFsb2ctc20nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uRWRpdG9yRGVzY3JpcHRvci5EaWFsb2dTaXplRW51bS5MYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1NpemVDbGFzc05hbWUgPSAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nLWxnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IuRGlhbG9nU2l6ZUVudW0uRXh0cmFMYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1NpemVDbGFzc05hbWUgPSAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nLXhsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkVkaXRvckRlc2NyaXB0b3IuRGlhbG9nU2l6ZUVudW0uTm9ybWFsOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkaWFsb2dTaXplQ2xhc3NOYW1lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWUgKz0gYCAke2RpYWxvZ1NpemVDbGFzc05hbWV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5lZGl0b3JDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50ID0gYWN0aW9uLmVkaXRvckNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkaWFsb2dDbGFzc05hbWUpO1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzOiBkaWFsb2dDbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuaXRlbUlkID0gaXRlbUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhY3Rpb25EYXRhKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEuYWN0aW9uRGF0YSA9IGFjdGlvbkRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhLnNvdXJjZUNvbXBvbmVudCA9IHNvdXJjZUNvbXBvbmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGRpYWxvZ0NvbXBvbmVudCwgZGlhbG9nQ29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybiBvZihuZXcgQWN0aW9uQWN0aXZhdGlvblJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+Pih1bmRlZmluZWQsIGRpYWxvZ1JlZikpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FdmVudCkge1xuICAgICAgICAgICAgLy8ganVzdCBlbWl0IGV2ZW50XG4gICAgICAgICAgICByZXR1cm4gb2YobmV3IEFjdGlvbkFjdGl2YXRpb25SZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4odW5kZWZpbmVkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgaXRlbUlkLCBpdGVtLCB1bmRlZmluZWQsIHNvdXJjZUNvbXBvbmVudCwgdmlld0NvbnRhaW5lciwgYWN0aW9uRGF0YSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzID0+IG5ldyBBY3Rpb25BY3RpdmF0aW9uUmVzdWx0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KHJlcykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIGZyb20gdGFibGUgcm93IGNsaWNrIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZXZlbnQgVGFyZ2V0IHRhYmxlIGNsaWNrIGV2ZW50LlxuICAgICAqIEBwYXJhbSByb3V0ZSBDdXJyZW50bHkgYWN0aXZhdGUgcm91dGUuXG4gICAgICogQHBhcmFtIHRhYmxlRGVzY3JpcHRvciBUYWJsZSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBkYXRhS2V5UHJvcGVydHkgRGF0YSBrZXkgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJSb3dDbGlja0FjdGlvbjxUPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBldmVudDogTW5nVGFibGVDZWxsQ2xpY2tFdmVudDxUPixcbiAgICAgICAgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgdGFibGVEZXNjcmlwdG9yPzogVGFibGVEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBkYXRhS2V5UHJvcGVydHk/OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgY29uc3QgaWRQcm9wZXJ0eSA9IGRhdGFLZXlQcm9wZXJ0eSA/PyB0YWJsZURlc2NyaXB0b3I/LmRhdGFLZXlQcm9wZXJ0eSA/PyBhY3Rpb24/Lm1vZGVsPy5pZFByb3BlcnR5TmFtZSA/PyBkYXRhS2V5UHJvcGVydHk7XG4gICAgICAgIGlmICghaWRQcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb3cgY2xpY2sgYWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWV9IGNhbiBub3QgYmUgdHJpZ2dlcmVkLCBiZWNhdXNlIGlkIHByb3BlcnR5IGNvdWxkIG5vdCBiZSBmb3VuZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJdGVtID0gZXZlbnQ/LnJvd0l0ZW0gYXMgYW55O1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgcm93SXRlbVtpZFByb3BlcnR5XSwgZXZlbnQucm93SXRlbSwgdW5kZWZpbmVkLCByb3V0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIHdpdGggb3B0aW9uYWwgZGF0YSAoaXRlbSwgaXRlbUlkLCAuLi4pIGFuZCBjdXJyZW50bHkgYWN0aXZhdGVkIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbkRhdGEgT3B0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICogQHBhcmFtIHJvdXRlIE9wdGlvbmFsIGFjdGl2YXRlZCByb3V0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlckFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBpdGVtSWQ/OiBJZFR5cGUsXG4gICAgICAgIGl0ZW0/OiBULFxuICAgICAgICBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YSxcbiAgICAgICAgcm91dGU/OiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+LFxuICAgICAgICBzb3VyY2VDb21wb25lbnQ/OiBhbnlcbiAgICApOiBPYnNlcnZhYmxlPEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4+IHtcbiAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybDogVXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gYWN0aW9uLnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgLy8gVE9ETzogZG9udCBzdHJpcCAnLycsIGJ1dCB1c2UgaXQgYWNjb3JkaW5nbHkgd2l0aCBBbmd1bGFyJ3Mgcm91dGVyIHBhdHRlcm5zICgvLCAuLywgLi4vKVxuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25VcmxTZWdtZW50cyA9IHRoaXMubGlua0Zvcm1hdHRlci50cmFuc2Zvcm0oYWN0aW9uVXJsLCBpdGVtSWQsIGl0ZW0sIGFjdGlvbi5tb2RlbCwgYWN0aW9uRGF0YSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvZihcbiAgICAgICAgICAgICAgICBuZXcgQWN0aW9uVHJpZ2dlclJlc3VsdDxULCBTLCBJRGF0YVByb3ZpZGVyPFQsIFM+PihcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBmcm9tKHRoaXMucm91dGVyLm5hdmlnYXRlKFtiYXNlVXJsLCAuLi5hY3Rpb25VcmxTZWdtZW50c10sIHtyZWxhdGl2ZVRvOiByb3V0ZSwgcXVlcnlQYXJhbXM6IHBhcnNlZFVybC5xdWVyeVBhcmFtc30pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZUFjdGlvbihhY3Rpb24sIGl0ZW1JZCwgaXRlbSwgYWN0aW9uRGF0YSwgdmlld0NvbnRhaW5lciwgc291cmNlQ29tcG9uZW50KS5waXBlKG1hcChyZXMgPT4gbmV3IEFjdGlvblRyaWdnZXJSZXN1bHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4ocmVzKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlYWN0aXZhdGVBY3Rpb248VD4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldFByZXZpb3VzTG9jYXRpb24oKSkge1xuICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGludGVybmFsIGhpc3RvcnkgcmVjb3Jkcywgc28gYmFjayBjYW4gYmUgbm9ybWFsbHkgY2FsbGVkXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIGludGVybmFsIGhpc3RvcnkgcmVjb3JkcywgZmlndXJlIG91dCB0aGUgYmFzZSB1cmwgYnkgZWxpbWluYXRpbmcgYWN0aW9uIHNwZWNpZmljIHVybFxuICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYmFjaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1cmxQYXRoU2VnbWVudHMgPSB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgbGV0IGFjdGlvblVybCA9IGFjdGlvbj8ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVXJsID0gYWN0aW9uVXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdFVybCA9IHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgLyR7cmVkaXJlY3RVcmx9YCwge3JlcGxhY2VVcmw6IHRydWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b01uZ0FjdGlvbkVycm9yKGVycm9yPzogYW55KTogTW5nRXJyb3Ige1xuICAgICAgICBjb25zdCBhY3Rpb25FcnJvcjogTW5nRXJyb3IgPSB7XG4gICAgICAgICAgICBuYW1lOiBlcnJvcj8ubmFtZSA/PyAnVW5rbm93bkVycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlID8/ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgICAgIGNhdXNlOiBlcnJvclxuICAgICAgICB9O1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgYWN0aW9uRXJyb3Iuc3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xuICAgICAgICAgICAgYWN0aW9uRXJyb3Iuc3RhdHVzRGVzY3JpcHRpb24gPSBlcnJvci5zdGF0dXNUZXh0O1xuICAgICAgICAgICAgYWN0aW9uRXJyb3IudXJsID0gZXJyb3IudXJsID8/IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1hcHBlci50b01uZ0Vycm9yKGVycm9yLCBhY3Rpb25FcnJvcik7XG4gICAgfVxufVxuIl19
@@ -330,9 +330,9 @@ export class MngCommonsService {
330
330
  return titlePieces.join(' - ');
331
331
  }
332
332
  }
333
- MngCommonsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsService, deps: [{ token: i1.Router }, { token: i2.PrimeNGConfig }, { token: i3.TranslateService }, { token: i4.Title }, { token: MNG_MODULE_CONFIG_IT }, { token: MNG_BROWSER_STORAGE_IT }], target: i0.ɵɵFactoryTarget.Injectable });
334
- MngCommonsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsService });
335
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsService, decorators: [{
333
+ MngCommonsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngCommonsService, deps: [{ token: i1.Router }, { token: i2.PrimeNGConfig }, { token: i3.TranslateService }, { token: i4.Title }, { token: MNG_MODULE_CONFIG_IT }, { token: MNG_BROWSER_STORAGE_IT }], target: i0.ɵɵFactoryTarget.Injectable });
334
+ MngCommonsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngCommonsService });
335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngCommonsService, decorators: [{
336
336
  type: Injectable
337
337
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.PrimeNGConfig }, { type: i3.TranslateService }, { type: i4.Title }, { type: undefined, decorators: [{
338
338
  type: Inject,
@@ -31,9 +31,9 @@ export class MngCommonsInitService {
31
31
  this.isInitialized = true;
32
32
  }
33
33
  }
34
- MngCommonsInitService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsInitService, deps: [{ token: i1.TranslateService }, { token: i2.MngConfigurationService }, { token: i3.MngCommonsService }, { token: MNG_COMMONS_INITIALIZER_IT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
35
- MngCommonsInitService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsInitService });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngCommonsInitService, decorators: [{
34
+ MngCommonsInitService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngCommonsInitService, deps: [{ token: i1.TranslateService }, { token: i2.MngConfigurationService }, { token: i3.MngCommonsService }, { token: MNG_COMMONS_INITIALIZER_IT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
35
+ MngCommonsInitService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngCommonsInitService });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngCommonsInitService, decorators: [{
37
37
  type: Injectable
38
38
  }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.MngConfigurationService }, { type: i3.MngCommonsService }, { type: undefined, decorators: [{
39
39
  type: Inject,
@@ -40,9 +40,9 @@ export class MngNavigationService {
40
40
  }
41
41
  }
42
42
  }
43
- MngNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngNavigationService, deps: [{ token: i1.Router }, { token: i2.Location }], target: i0.ɵɵFactoryTarget.Injectable });
44
- MngNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngNavigationService });
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngNavigationService, decorators: [{
43
+ MngNavigationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngNavigationService, deps: [{ token: i1.Router }, { token: i2.Location }], target: i0.ɵɵFactoryTarget.Injectable });
44
+ MngNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngNavigationService });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngNavigationService, decorators: [{
46
46
  type: Injectable
47
47
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }]; } });
48
48
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsYUFBYSxFQUFTLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFHdEQsTUFBTSxPQUFPLG9CQUFvQjtJQUc3QixZQUFvQixNQUFjLEVBQVUsUUFBa0I7UUFBMUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFGdEQsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFHaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pDLElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDOUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxrQkFBa0I7UUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQjtRQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRU0sSUFBSTtRQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4QjthQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDOztpSEFsQ1Esb0JBQW9CO3FIQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdOYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSBoaXN0b3J5OiBBcnJheTxzdHJpbmc+ID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChldmVudC51cmxBZnRlclJlZGlyZWN0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXJyZW50TG9jYXRpb24oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmhpc3RvcnkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcmV2aW91c0xvY2F0aW9uKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5oaXN0b3J5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYmFjaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnBvcCgpO1xuICAgICAgICBpZiAodGhpcy5oaXN0b3J5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -27,9 +27,9 @@ export class MngViewContainerComponentService {
27
27
  return this._dataProvider;
28
28
  }
29
29
  }
30
- MngViewContainerComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngViewContainerComponentService, deps: [{ token: i1.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
31
- MngViewContainerComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngViewContainerComponentService });
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngViewContainerComponentService, decorators: [{
30
+ MngViewContainerComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngViewContainerComponentService, deps: [{ token: i1.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
31
+ MngViewContainerComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngViewContainerComponentService });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: MngViewContainerComponentService, decorators: [{
33
33
  type: Injectable
34
34
  }], ctorParameters: function () { return [{ type: i1.MessageService }]; } });
35
35
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1jb250YWluZXIuY29tcG9uZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3ZpZXctY29udGFpbmVyLmNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHekMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBTTdCOztHQUVHO0FBRUgsTUFBTSxPQUFPLGdDQUFnQztJQU16QyxZQUFvQixjQUE4QjtRQUE5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFKM0MsWUFBTyxHQUErQixFQUFFLENBQUM7UUFFeEMsd0JBQW1CLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7SUFFTCxDQUFDO0lBRXRELElBQVcsWUFBWSxDQUFDLFlBQWlDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQVU7UUFDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0saUJBQWlCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRU0sZUFBZTtRQUNsQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQzs7NkhBMUJRLGdDQUFnQztpSUFBaEMsZ0NBQWdDOzJGQUFoQyxnQ0FBZ0M7a0JBRDVDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge01lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtJVmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vbW9kZWxzJztcblxuLyoqXG4gKiBTaG91bGQgYmUgdXNlZCB3aXRoIHByb3ZpZGVycyBkZWZpbmVkIHdpdGhpbiBjb21wb25lbnQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZTxULCBTPiBpbXBsZW1lbnRzIElWaWV3Q29udGFpbmVyPFQsIFM+IHtcbiAgICBwcml2YXRlIF9kYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgIHB1YmxpYyBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfcmVsb2FkVGFibGVTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UpIHt9XG5cbiAgICBwdWJsaWMgc2V0IGRhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElEYXRhUHJvdmlkZXI8VCwgUz4pIHtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVsb2FkVGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWxvYWRUYWJsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRyaWdnZXJUYWJsZVJlbG9hZChldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuX3JlbG9hZFRhYmxlU3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWVzc2FnZVNlcnZpY2UoKTogTWVzc2FnZVNlcnZpY2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YVByb3ZpZGVyKCk6IElEYXRhUHJvdmlkZXI8VCwgUz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVByb3ZpZGVyO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHlwZXMvdHlwZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDbGFzc1R5cGU8VD4gZXh0ZW5kcyBGdW5jdGlvbiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW51bVR5cGUge1xuICAgIFtrZXk6IHN0cmluZ106IEVudW1Db25zdGFudFR5cGU7XG59XG5leHBvcnQgdHlwZSBFbnVtQ29uc3RhbnRUeXBlID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBJZFR5cGUgPSBudW1iZXIgfCBzdHJpbmc7XG5leHBvcnQgdHlwZSBQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZSA9IFByaW1pdGl2ZVR5cGUgfCBEYXRlIHwgRW51bVR5cGU7XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHlwZXMvdHlwZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtGb3JtbHlGaWVsZENvbmZpZ30gZnJvbSAnQG5neC1mb3JtbHkvY29yZS9saWIvbW9kZWxzL2ZpZWxkY29uZmlnJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NUeXBlPFQ+IGV4dGVuZHMgRnVuY3Rpb24ge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudW1UeXBlIHtcbiAgICBba2V5OiBzdHJpbmddOiBFbnVtQ29uc3RhbnRUeXBlO1xufVxuXG5leHBvcnQgdHlwZSBFbnVtQ29uc3RhbnRUeXBlID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBJZFR5cGUgPSBudW1iZXIgfCBzdHJpbmc7XG5leHBvcnQgdHlwZSBQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZSA9IFByaW1pdGl2ZVR5cGUgfCBEYXRlIHwgRW51bVR5cGU7XG5cbi8vIGZpZWxkIHZhbGlkYXRpb25cbmV4cG9ydCB0eXBlIE1uZ0ZpZWxkVmFsaWRhdG9yID0gKFxuICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICBmaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgICAgW2lkOiBzdHJpbmddOiBhbnk7XG4gICAgfVxuKSA9PiBWYWxpZGF0aW9uRXJyb3JzIHwgYm9vbGVhbiB8IG51bGw7XG5leHBvcnQgdHlwZSBNbmdGaWVsZFZhbGlkYXRpb25NZXNzYWdlID0gc3RyaW5nIHwgKChlcnJvcjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPik7XG4iXX0=
@@ -0,0 +1,116 @@
1
+ import { isObservable, throwError } from 'rxjs';
2
+ export class ActionDataProviderUtil {
3
+ static runFetchOrFail(ctx) {
4
+ const dataProviderExec = ActionDataProviderUtil.runFetchDataProvider(ctx);
5
+ if (isObservable(dataProviderExec)) {
6
+ return dataProviderExec;
7
+ }
8
+ const serviceExec = ActionDataProviderUtil.runGetByIdService(ctx);
9
+ return isObservable(serviceExec)
10
+ ? serviceExec
11
+ : throwError(() => new Error(`Data provider and service instance could not extract fetch function to execute in action ${ctx.action.actionName} (${ctx.action.model?.typeName}) for item id ${ctx.data?.itemId}.`));
12
+ }
13
+ static runCreateOrFail(ctx) {
14
+ const dataProviderExec = ActionDataProviderUtil.runCreateDataProvider(ctx);
15
+ if (isObservable(dataProviderExec)) {
16
+ return dataProviderExec;
17
+ }
18
+ const serviceExec = ActionDataProviderUtil.runCreateService(ctx);
19
+ return isObservable(serviceExec)
20
+ ? serviceExec
21
+ : throwError(() => new Error(`Data provider and service instance could not extract create function to execute in action ${ctx.action.actionName} (${ctx.action.model?.typeName}) for item ${ctx.data?.item}.`));
22
+ }
23
+ static runUpdateOrFail(ctx) {
24
+ const dataProviderExec = ActionDataProviderUtil.runUpdateDataProvider(ctx);
25
+ if (isObservable(dataProviderExec)) {
26
+ return dataProviderExec;
27
+ }
28
+ const serviceExec = ActionDataProviderUtil.runUpdateService(ctx);
29
+ return isObservable(serviceExec)
30
+ ? serviceExec
31
+ : throwError(() => new Error(`Data provider and service instance could not extract update function to execute in action ${ctx.action.actionName} (${ctx.action.model?.typeName}) for item id ${ctx.data?.itemId}.`));
32
+ }
33
+ static runDeleteOrFail(ctx) {
34
+ const dataProviderExec = ActionDataProviderUtil.runDeleteDataProvider(ctx);
35
+ if (isObservable(dataProviderExec)) {
36
+ return dataProviderExec;
37
+ }
38
+ const serviceExec = ActionDataProviderUtil.runDeleteService(ctx);
39
+ return isObservable(serviceExec)
40
+ ? serviceExec
41
+ : throwError(() => new Error(`Data provider and service instance could not extract delete function to execute in action ${ctx.action.actionName} (${ctx.action.model?.typeName}) for item id ${ctx.data?.itemId}.`));
42
+ }
43
+ static runGetByIdService(ctx) {
44
+ if (typeof ctx.serviceInstance !== 'undefined') {
45
+ const crudServiceInstance = ctx.serviceInstance;
46
+ if (typeof crudServiceInstance.getByIdGet === 'function') {
47
+ return ctx.data?.itemId ? crudServiceInstance.getByIdGet(ctx.data.itemId) : null;
48
+ }
49
+ }
50
+ return null;
51
+ }
52
+ static runCreateService(ctx) {
53
+ if (typeof ctx.serviceInstance !== 'undefined') {
54
+ const crudServiceInstance = ctx.serviceInstance;
55
+ if (typeof crudServiceInstance.createPost === 'function') {
56
+ return ctx.data?.item ? crudServiceInstance.createPost(ctx.data.item) : null;
57
+ }
58
+ }
59
+ return null;
60
+ }
61
+ static runUpdateService(ctx) {
62
+ if (typeof ctx.serviceInstance !== 'undefined') {
63
+ const crudServiceInstance = ctx.serviceInstance;
64
+ if (typeof crudServiceInstance.updatePut === 'function') {
65
+ return ctx.data?.itemId && ctx.data.item ? crudServiceInstance.updatePut(ctx.data.itemId, ctx.data.item) : null;
66
+ }
67
+ }
68
+ return null;
69
+ }
70
+ static runDeleteService(ctx) {
71
+ if (typeof ctx.serviceInstance !== 'undefined') {
72
+ const crudServiceInstance = ctx.serviceInstance;
73
+ if (typeof crudServiceInstance.removeDelete === 'function') {
74
+ return ctx.data?.itemId ? crudServiceInstance.removeDelete(ctx.data.itemId, ctx.data.item) : null;
75
+ }
76
+ }
77
+ return null;
78
+ }
79
+ static runFetchDataProvider(ctx) {
80
+ if (typeof ctx.dataProvider !== 'undefined') {
81
+ const editorDataProvider = ctx.dataProvider;
82
+ if (typeof editorDataProvider.fetch === 'function') {
83
+ return ctx.data?.itemId ? editorDataProvider.fetch(ctx.data.itemId, ctx.serviceInstance) : null;
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+ static runCreateDataProvider(ctx) {
89
+ if (typeof ctx.dataProvider !== 'undefined') {
90
+ const editorDataProvider = ctx.dataProvider;
91
+ if (typeof editorDataProvider.create === 'function') {
92
+ return ctx.data?.item ? editorDataProvider.create(ctx.data.item, ctx.serviceInstance) : null;
93
+ }
94
+ }
95
+ return null;
96
+ }
97
+ static runUpdateDataProvider(ctx) {
98
+ if (typeof ctx.dataProvider !== 'undefined') {
99
+ const editorDataProvider = ctx.dataProvider;
100
+ if (typeof editorDataProvider.update === 'function') {
101
+ return ctx.data?.itemId ? editorDataProvider.update(ctx.data.itemId, ctx.data.item, ctx.serviceInstance) : null;
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ static runDeleteDataProvider(ctx) {
107
+ if (typeof ctx.dataProvider !== 'undefined') {
108
+ const editorDataProvider = ctx.dataProvider;
109
+ if (typeof editorDataProvider.delete === 'function') {
110
+ return ctx.data?.itemId ? editorDataProvider.delete(ctx.data.itemId, ctx.data.item, ctx.serviceInstance) : null;
111
+ }
112
+ }
113
+ return null;
114
+ }
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWRhdGEtcHJvdmlkZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYWN0aW9uLWRhdGEtcHJvdmlkZXIudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQU0xRCxNQUFNLE9BQU8sc0JBQXNCO0lBQ3hCLE1BQU0sQ0FBQyxjQUFjLENBQXVDLEdBQWdDO1FBQy9GLE1BQU0sZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUUsSUFBSSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUNoQyxPQUFPLGdCQUFnQixDQUFDO1NBQzNCO1FBQ0QsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEUsT0FBTyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLFVBQVUsQ0FDTixHQUFHLEVBQUUsQ0FDRCxJQUFJLEtBQUssQ0FDTCw0RkFBNEYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FDdkwsQ0FDUixDQUFDO0lBQ1osQ0FBQztJQUVNLE1BQU0sQ0FBQyxlQUFlLENBQXVDLEdBQWdDO1FBQ2hHLE1BQU0sZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0UsSUFBSSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUNoQyxPQUFPLGdCQUFnQixDQUFDO1NBQzNCO1FBQ0QsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMs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TUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ25IO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFBTSxDQUFDLHFCQUFxQixDQUFPLEdBQWlEO1FBQ3ZGLElBQUksT0FBTyxHQUFHLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtZQUN6QyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxZQUEyQyxDQUFDO1lBQzNFLElBQUksT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO2dCQUNqRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDbkg7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZSwgaXNPYnNlcnZhYmxlLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtJTW5nQ3J1ZEFwaVNlcnZpY2V9IGZyb20gJy4uL2FwaS9zZXJ2aWNlcyc7XG5pbXBvcnQge0FjdGlvbkV4ZWNDb250ZXh0fSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyLCBJRWRpdG9yRGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsIHtcbiAgICBwdWJsaWMgc3RhdGljIHJ1bkZldGNoT3JGYWlsPFQsIFMsIERQIGV4dGVuZHMgSURhdGFQcm92aWRlcjxULCBTPj4oY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBEUD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyRXhlYyA9IEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuRmV0Y2hEYXRhUHJvdmlkZXIoY3R4KTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShkYXRhUHJvdmlkZXJFeGVjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQcm92aWRlckV4ZWM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VydmljZUV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkdldEJ5SWRTZXJ2aWNlKGN0eCk7XG4gICAgICAgIHJldHVybiBpc09ic2VydmFibGUoc2VydmljZUV4ZWMpXG4gICAgICAgICAgICA/IHNlcnZpY2VFeGVjXG4gICAgICAgICAgICA6IHRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYERhdGEgcHJvdmlkZXIgYW5kIHNlcnZpY2UgaW5zdGFuY2UgY291bGQgbm90IGV4dHJhY3QgZmV0Y2ggZnVuY3Rpb24gdG8gZXhlY3V0ZSBpbiBhY3Rpb24gJHtjdHguYWN0aW9uLmFjdGlvbk5hbWV9ICgke2N0eC5hY3Rpb24ubW9kZWw/LnR5cGVOYW1lfSkgZm9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfS5gXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuQ3JlYXRlT3JGYWlsPFQsIFMsIERQIGV4dGVuZHMgSURhdGFQcm92aWRlcjxULCBTPj4oY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBEUD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyRXhlYyA9IEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuQ3JlYXRlRGF0YVByb3ZpZGVyKGN0eCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUoZGF0YVByb3ZpZGVyRXhlYykpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXJFeGVjO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcnZpY2VFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5DcmVhdGVTZXJ2aWNlKGN0eCk7XG4gICAgICAgIHJldHVybiBpc09ic2VydmFibGUoc2VydmljZUV4ZWMpXG4gICAgICAgICAgICA/IHNlcnZpY2VFeGVjXG4gICAgICAgICAgICA6IHRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYERhdGEgcHJvdmlkZXIgYW5kIHNlcnZpY2UgaW5zdGFuY2UgY291bGQgbm90IGV4dHJhY3QgY3JlYXRlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgaW4gYWN0aW9uICR7Y3R4LmFjdGlvbi5hY3Rpb25OYW1lfSAoJHtjdHguYWN0aW9uLm1vZGVsPy50eXBlTmFtZX0pIGZvciBpdGVtICR7Y3R4LmRhdGE/Lml0ZW19LmBcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5VcGRhdGVPckZhaWw8VCwgUywgRFAgZXh0ZW5kcyBJRGF0YVByb3ZpZGVyPFQsIFM+PihjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIERQPik6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJFeGVjID0gQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5VcGRhdGVEYXRhUHJvdmlkZXIoY3R4KTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShkYXRhUHJvdmlkZXJFeGVjKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFQcm92aWRlckV4ZWM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VydmljZUV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1blVwZGF0ZVNlcnZpY2UoY3R4KTtcbiAgICAgICAgcmV0dXJuIGlzT2JzZXJ2YWJsZShzZXJ2aWNlRXhlYylcbiAgICAgICAgICAgID8gc2VydmljZUV4ZWNcbiAgICAgICAgICAgIDogdGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgRGF0YSBwcm92aWRlciBhbmQgc2VydmljZSBpbnN0YW5jZSBjb3VsZCBub3QgZXh0cmFjdCB1cGRhdGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBpbiBhY3Rpb24gJHtjdHguYWN0aW9uLmFjdGlvbk5hbWV9ICgke2N0eC5hY3Rpb24ubW9kZWw/LnR5cGVOYW1lfSkgZm9yIGl0ZW0gaWQgJHtjdHguZGF0YT8uaXRlbUlkfS5gXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuRGVsZXRlT3JGYWlsPFQsIFMsIERQIGV4dGVuZHMgSURhdGFQcm92aWRlcjxULCBTPj4oY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBTLCBEUD4pOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlckV4ZWMgPSBBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkRlbGV0ZURhdGFQcm92aWRlcihjdHgpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKGRhdGFQcm92aWRlckV4ZWMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YVByb3ZpZGVyRXhlYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXJ2aWNlRXhlYyA9IEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuRGVsZXRlU2VydmljZShjdHgpO1xuICAgICAgICByZXR1cm4gaXNPYnNlcnZhYmxlKHNlcnZpY2VFeGVjKVxuICAgICAgICAgICAgPyBzZXJ2aWNlRXhlY1xuICAgICAgICAgICAgOiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBEYXRhIHByb3ZpZGVyIGFuZCBzZXJ2aWNlIGluc3RhbmNlIGNvdWxkIG5vdCBleHRyYWN0IGRlbGV0ZSBmdW5jdGlvbiB0byBleGVjdXRlIGluIGFjdGlvbiAke2N0eC5hY3Rpb24uYWN0aW9uTmFtZX0gKCR7Y3R4LmFjdGlvbi5tb2RlbD8udHlwZU5hbWV9KSBmb3IgaXRlbSBpZCAke2N0eC5kYXRhPy5pdGVtSWR9LmBcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5HZXRCeUlkU2VydmljZTxULCBEUCBleHRlbmRzIElEYXRhUHJvdmlkZXI8VCwgdW5rbm93bj4+KGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgdW5rbm93biwgRFA+KTogT2JzZXJ2YWJsZTxUPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5zZXJ2aWNlSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBjcnVkU2VydmljZUluc3RhbmNlID0gY3R4LnNlcnZpY2VJbnN0YW5jZSBhcyBJTW5nQ3J1ZEFwaVNlcnZpY2U8VD47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNydWRTZXJ2aWNlSW5zdGFuY2UuZ2V0QnlJZEdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZGF0YT8uaXRlbUlkID8gY3J1ZFNlcnZpY2VJbnN0YW5jZS5nZXRCeUlkR2V0KGN0eC5kYXRhLml0ZW1JZCkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuQ3JlYXRlU2VydmljZTxULCBEUCBleHRlbmRzIElEYXRhUHJvdmlkZXI8VCwgdW5rbm93bj4+KGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgdW5rbm93biwgRFA+KTogT2JzZXJ2YWJsZTxUPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5zZXJ2aWNlSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBjcnVkU2VydmljZUluc3RhbmNlID0gY3R4LnNlcnZpY2VJbnN0YW5jZSBhcyBJTW5nQ3J1ZEFwaVNlcnZpY2U8VD47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNydWRTZXJ2aWNlSW5zdGFuY2UuY3JlYXRlUG9zdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZGF0YT8uaXRlbSA/IGNydWRTZXJ2aWNlSW5zdGFuY2UuY3JlYXRlUG9zdChjdHguZGF0YS5pdGVtKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5VcGRhdGVTZXJ2aWNlPFQsIERQIGV4dGVuZHMgSURhdGFQcm92aWRlcjxULCB1bmtub3duPj4oY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCB1bmtub3duLCBEUD4pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LnNlcnZpY2VJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGNydWRTZXJ2aWNlSW5zdGFuY2UgPSBjdHguc2VydmljZUluc3RhbmNlIGFzIElNbmdDcnVkQXBpU2VydmljZTxUPjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3J1ZFNlcnZpY2VJbnN0YW5jZS51cGRhdGVQdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmRhdGE/Lml0ZW1JZCAmJiBjdHguZGF0YS5pdGVtID8gY3J1ZFNlcnZpY2VJbnN0YW5jZS51cGRhdGVQdXQoY3R4LmRhdGEuaXRlbUlkLCBjdHguZGF0YS5pdGVtKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBydW5EZWxldGVTZXJ2aWNlPFQsIERQIGV4dGVuZHMgSURhdGFQcm92aWRlcjxULCB1bmtub3duPj4oY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCB1bmtub3duLCBEUD4pOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5zZXJ2aWNlSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBjcnVkU2VydmljZUluc3RhbmNlID0gY3R4LnNlcnZpY2VJbnN0YW5jZSBhcyBJTW5nQ3J1ZEFwaVNlcnZpY2U8VD47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNydWRTZXJ2aWNlSW5zdGFuY2UucmVtb3ZlRGVsZXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5kYXRhPy5pdGVtSWQgPyBjcnVkU2VydmljZUluc3RhbmNlLnJlbW92ZURlbGV0ZShjdHguZGF0YS5pdGVtSWQsIGN0eC5kYXRhLml0ZW0pIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJ1bkZldGNoRGF0YVByb3ZpZGVyPFQsIFM+KGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGFQcm92aWRlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckRhdGFQcm92aWRlciA9IGN0eC5kYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlZGl0b3JEYXRhUHJvdmlkZXIuZmV0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmRhdGE/Lml0ZW1JZCA/IGVkaXRvckRhdGFQcm92aWRlci5mZXRjaChjdHguZGF0YS5pdGVtSWQsIGN0eC5zZXJ2aWNlSW5zdGFuY2UpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJ1bkNyZWF0ZURhdGFQcm92aWRlcjxULCBTPihjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KTogT2JzZXJ2YWJsZTxUPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhUHJvdmlkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWRpdG9yRGF0YVByb3ZpZGVyLmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZGF0YT8uaXRlbSA/IGVkaXRvckRhdGFQcm92aWRlci5jcmVhdGUoY3R4LmRhdGEuaXRlbSwgY3R4LnNlcnZpY2VJbnN0YW5jZSkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuVXBkYXRlRGF0YVByb3ZpZGVyPFQsIFM+KGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pOiBPYnNlcnZhYmxlPFQ+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgY3R4LmRhdGFQcm92aWRlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckRhdGFQcm92aWRlciA9IGN0eC5kYXRhUHJvdmlkZXIgYXMgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlZGl0b3JEYXRhUHJvdmlkZXIudXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5kYXRhPy5pdGVtSWQgPyBlZGl0b3JEYXRhUHJvdmlkZXIudXBkYXRlKGN0eC5kYXRhLml0ZW1JZCwgY3R4LmRhdGEuaXRlbSwgY3R4LnNlcnZpY2VJbnN0YW5jZSkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcnVuRGVsZXRlRGF0YVByb3ZpZGVyPFQsIFM+KGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhUHJvdmlkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JEYXRhUHJvdmlkZXIgPSBjdHguZGF0YVByb3ZpZGVyIGFzIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgYW55PjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWRpdG9yRGF0YVByb3ZpZGVyLmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHguZGF0YT8uaXRlbUlkID8gZWRpdG9yRGF0YVByb3ZpZGVyLmRlbGV0ZShjdHguZGF0YS5pdGVtSWQsIGN0eC5kYXRhLml0ZW0sIGN0eC5zZXJ2aWNlSW5zdGFuY2UpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iXX0=