gamma-app-controller 1.1.27 → 1.1.28

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 (35) hide show
  1. package/esm2020/lib/template-module/bookmarked-template/bookmarked-dataset-call.service.mjs +364 -0
  2. package/esm2020/lib/template-module/bookmarked-template/bookmarked-layout.service.mjs +121 -0
  3. package/esm2020/lib/template-module/bookmarked-template/bookmarked-template.component.mjs +5 -5
  4. package/esm2020/lib/template-module/bookmarked-template/bookmarkedTemplate.module.mjs +5 -3
  5. package/esm2020/lib/template-module/defaulLandingComponent/defaultLandingComponent.module.mjs +5 -3
  6. package/esm2020/lib/template-module/defaulLandingComponent/landing-component.component.mjs +5 -5
  7. package/esm2020/lib/template-module/defaulLandingComponent/landing-component.service.mjs +121 -0
  8. package/esm2020/lib/template-module/defaulLandingComponent/landing-dataset-call.service.mjs +364 -0
  9. package/esm2020/lib/template-module/kpiWithMultiLayout/kpi-multi-layout.service.mjs +121 -0
  10. package/esm2020/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.mjs +5 -5
  11. package/esm2020/lib/template-module/kpiWithMultiLayout/kpiWithMultiayout.module.mjs +5 -3
  12. package/esm2020/lib/template-module/kpiWithMultiLayout/single-layout-dataset-call.service.mjs +364 -0
  13. package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-single-layout.service.mjs +121 -0
  14. package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +5 -5
  15. package/esm2020/lib/template-module/kpiWithSingleLayout/kpiWithSingleLayout.module.mjs +5 -3
  16. package/esm2020/lib/template-module/kpiWithSingleLayout/multi-layout-dataset-call.service.mjs +364 -0
  17. package/esm2020/public-api.mjs +9 -1
  18. package/fesm2015/gamma-app-controller.mjs +4362 -2458
  19. package/fesm2015/gamma-app-controller.mjs.map +1 -1
  20. package/fesm2020/gamma-app-controller.mjs +4330 -2442
  21. package/fesm2020/gamma-app-controller.mjs.map +1 -1
  22. package/lib/template-module/bookmarked-template/bookmarked-dataset-call.service.d.ts +24 -0
  23. package/lib/template-module/bookmarked-template/bookmarked-layout.service.d.ts +33 -0
  24. package/lib/template-module/bookmarked-template/bookmarked-template.component.d.ts +3 -3
  25. package/lib/template-module/defaulLandingComponent/landing-component.component.d.ts +3 -3
  26. package/lib/template-module/defaulLandingComponent/landing-component.service.d.ts +33 -0
  27. package/lib/template-module/defaulLandingComponent/landing-dataset-call.service.d.ts +24 -0
  28. package/lib/template-module/kpiWithMultiLayout/kpi-multi-layout.service.d.ts +33 -0
  29. package/lib/template-module/kpiWithMultiLayout/kpi-with-multilayout.component.d.ts +3 -3
  30. package/lib/template-module/kpiWithMultiLayout/single-layout-dataset-call.service.d.ts +24 -0
  31. package/lib/template-module/kpiWithSingleLayout/kpi-single-layout.service.d.ts +33 -0
  32. package/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.d.ts +3 -3
  33. package/lib/template-module/kpiWithSingleLayout/multi-layout-dataset-call.service.d.ts +24 -0
  34. package/package.json +1 -1
  35. package/public-api.d.ts +8 -0
@@ -10,6 +10,8 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
10
10
  import { LoadingModule } from '../../shared/loading/loadingModule';
11
11
  import { DynamicWidgetForMultilayoutComponent } from './dynamin-modal-multi.component';
12
12
  import { KpiWithMultilayoutSetTestComponent } from './kpi-with-multilayout.component';
13
+ import { KpiWithMultiLayoutService } from './kpi-multi-layout.service';
14
+ import { SingleLayoutApplicationDatssetsCall } from './single-layout-dataset-call.service';
13
15
  import * as i0 from "@angular/core";
14
16
  export class KpiWithMultiLayoutModule {
15
17
  }
@@ -56,7 +58,7 @@ KpiWithMultiLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0"
56
58
  MatIconModule,
57
59
  LoadingModule], exports: [KpiWithMultilayoutSetTestComponent,
58
60
  DynamicWidgetForMultilayoutComponent] });
59
- KpiWithMultiLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KpiWithMultiLayoutModule, imports: [CommonModule,
61
+ KpiWithMultiLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: KpiWithMultiLayoutModule, providers: [KpiWithMultiLayoutService, SingleLayoutApplicationDatssetsCall], imports: [CommonModule,
60
62
  LoadingModule,
61
63
  CommonModule,
62
64
  DevExtremeModule,
@@ -148,7 +150,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
148
150
  KpiWithMultilayoutSetTestComponent,
149
151
  DynamicWidgetForMultilayoutComponent
150
152
  ],
151
- providers: [],
153
+ providers: [KpiWithMultiLayoutService, SingleLayoutApplicationDatssetsCall],
152
154
  }]
153
155
  }] });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpV2l0aE11bHRpYXlvdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi90ZW1wbGF0ZS1tb2R1bGUva3BpV2l0aE11bHRpTGF5b3V0L2twaVdpdGhNdWx0aWF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsYUFBYSxFQUNiLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFFbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUs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d0JBQ2hCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLGdCQUFnQjt3QkFFaEIsZ0JBQWdCO3dCQUNoQixhQUFhLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQjt3QkFDbkUsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixhQUFhO3FCQUVkO29CQUNELE9BQU8sRUFBRTt3QkFDUCxrQ0FBa0M7d0JBQ2xDLG9DQUFvQztxQkFDckM7b0JBQ0QsU0FBUyxFQUFFLEVBQUU7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleGNlcHRpb24tb3BlcmF0aW9uLm1vZHVsZS50c1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cblxuaW1wb3J0IHtcbiAgRGV2RXh0cmVtZU1vZHVsZSxcbiAgRHhBY2NvcmRpb25Nb2R1bGUsXG4gIER4QnV0dG9uTW9kdWxlLFxuICBEeENoZWNrQm94TW9kdWxlLFxuICBEeERhdGFHcmlkTW9kdWxlLFxuICBEeERyb3BEb3duQm94TW9kdWxlLFxuICBEeEZvcm1Nb2R1bGUsXG4gIER4SHRtbEVkaXRvck1vZHVsZSxcbiAgRHhOdW1iZXJCb3hNb2R1bGUsXG4gIER4UG9wdXBNb2R1bGUsXG4gIER4U2VsZWN0Qm94TW9kdWxlLFxuICBEeFRhZ0JveE1vZHVsZSxcbiAgRHhUZXh0Qm94TW9kdWxlLFxuICBEeFRyZWVWaWV3TW9kdWxlLFxuICBEeEJ1bGxldE1vZHVsZSxcbiAgRHhDaGFydE1vZHVsZSxcbiAgRHhEYXRlQm94TW9kdWxlLFxuICBEeExvYWRQYW5lbE1vZHVsZSxcbiAgRHhMb29rdXBNb2R1bGUsXG4gIER4UGl2b3RHcmlkTW9kdWxlLFxuICBEeFRlbXBsYXRlTW9kdWxlLFxuICBEeFRleHRBcmVhTW9kdWxlLFxuICBEeFZhbGlkYXRpb25TdW1tYXJ5TW9kdWxlLFxuICBEeFZhbGlkYXRvck1vZHVsZSxcbiAgRHhDYWxlbmRhck1vZHVsZSxcbiAgRHhUb29sdGlwTW9kdWxlLFxuICBEeENvbnRleHRNZW51TW9kdWxlLFxuICBEeExvYWRJbmRpY2F0b3JNb2R1bGUsXG4gIER4UGllQ2hhcnRNb2R1bGUsXG4gIER4U2Nyb2xsVmlld01vZHVsZVxuXG59IGZyb20gXCJkZXZleHRyZW1lLWFuZ3VsYXJcIjtcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvYWRpbmdNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9hZGluZy9sb2FkaW5nTW9kdWxlJztcbmltcG9ydCB7IER5bmFtaWNXaWRnZXRGb3JNdWx0aWxheW91dENvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pbi1tb2RhbC1tdWx0aS5jb21wb25lbnQnO1xuaW1wb3J0IHsgS3BpV2l0aE11bHRpbGF5b3V0U2V0VGVzdENvbXBvbmVudCB9IGZyb20gJy4va3BpLXdpdGgtbXVsdGlsYXlvdXQuY29tcG9uZW50JztcblxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBLcGlXaXRoTXVsdGlsYXlvdXRTZXRUZXN0Q29tcG9uZW50LFxuICAgIER5bmFtaWNXaWRnZXRGb3JNdWx0aWxheW91dENvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLFxuICAgIExvYWRpbmdNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIERldkV4dHJlbWVNb2R1bGUsXG4gICAgRHhCdXR0b25Nb2R1bGUsXG4gICAgRHhDaGVja0JveE1vZHVsZSxcbiAgICBEeE51bWJlckJveE1vZHVsZSxcbiAgICBEeERhdGFHcmlkTW9kdWxlLFxuICAgIER4RHJvcERvd25Cb3hNb2R1bGUsXG4gICAgRHhUcmVlVmlld01vZHVsZSxcbiAgICBEeFNjcm9sbFZpZXdNb2R1bGUsXG4gICAgRHhGb3JtTW9kdWxlLFxuICAgIER4QWNjb3JkaW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIER4VGFnQm94TW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBEeEh0bWxFZGl0b3JNb2R1bGUsXG4gICAgRHhCdWxsZXRNb2R1bGUsXG4gICAgRHhDaGFydE1vZHVsZSxcbiAgICBEeERhdGVCb3hNb2R1bGUsXG4gICAgRHhMb2FkUGFuZWxNb2R1bGUsXG4gICAgRHhMb29rdXBNb2R1bGUsXG4gICAgRHhQaXZvdEdyaWRNb2R1bGUsXG4gICAgRHhUZW1wbGF0ZU1vZHVsZSxcbiAgICBEeFRleHRBcmVhTW9kdWxlLFxuICAgIER4VmFsaWRhdGlvblN1bW1hcnlNb2R1bGUsXG4gICAgRHhWYWxpZGF0b3JNb2R1bGUsXG4gICAgRHhDYWxlbmRhck1vZHVsZSxcbiAgICBEeFRvb2x0aXBNb2R1bGUsXG4gICAgRHhDb250ZXh0TWVudU1vZHVsZSxcbiAgICBEeExvYWRJbmRpY2F0b3JNb2R1bGUsXG4gICAgRHhQaWVDaGFydE1vZHVsZSxcbiAgICAvLyBTdHJ1Y3R1cmVLcGlNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBEeFBvcHVwTW9kdWxlLCBEeFNlbGVjdEJveE1vZHVsZSwgRHhUZXh0Qm94TW9kdWxlLCBEeFRyZWVWaWV3TW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBMb2FkaW5nTW9kdWxlLFxuICAgIFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgS3BpV2l0aE11bHRpbGF5b3V0U2V0VGVzdENvbXBvbmVudCxcbiAgICBEeW5hbWljV2lkZ2V0Rm9yTXVsdGlsYXlvdXRDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgS3BpV2l0aE11bHRpTGF5b3V0TW9kdWxlIHsgfSJdfQ==
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3BpV2l0aE11bHRpYXlvdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2FtbWEtYXBwLWNvbnRyb2xsZXIvc3JjL2xpYi90ZW1wbGF0ZS1tb2R1bGUva3BpV2l0aE11bHRpTGF5b3V0L2twaVdpdGhNdWx0aWF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixjQUFjLEVBQ2QsYUFBYSxFQUNiLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFFbkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUs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LGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIseUJBQXlCO3dCQUN6QixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUVoQixnQkFBZ0I7d0JBQ2hCLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCO3dCQUNuRSxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGFBQWE7cUJBRWQ7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGtDQUFrQzt3QkFDbEMsb0NBQW9DO3FCQUNyQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxtQ0FBbUMsQ0FBQztpQkFDNUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleGNlcHRpb24tb3BlcmF0aW9uLm1vZHVsZS50c1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cblxuaW1wb3J0IHtcbiAgRGV2RXh0cmVtZU1vZHVsZSxcbiAgRHhBY2NvcmRpb25Nb2R1bGUsXG4gIER4QnV0dG9uTW9kdWxlLFxuICBEeENoZWNrQm94TW9kdWxlLFxuICBEeERhdGFHcmlkTW9kdWxlLFxuICBEeERyb3BEb3duQm94TW9kdWxlLFxuICBEeEZvcm1Nb2R1bGUsXG4gIER4SHRtbEVkaXRvck1vZHVsZSxcbiAgRHhOdW1iZXJCb3hNb2R1bGUsXG4gIER4UG9wdXBNb2R1bGUsXG4gIER4U2VsZWN0Qm94TW9kdWxlLFxuICBEeFRhZ0JveE1vZHVsZSxcbiAgRHhUZXh0Qm94TW9kdWxlLFxuICBEeFRyZWVWaWV3TW9kdWxlLFxuICBEeEJ1bGxldE1vZHVsZSxcbiAgRHhDaGFydE1vZHVsZSxcbiAgRHhEYXRlQm94TW9kdWxlLFxuICBEeExvYWRQYW5lbE1vZHVsZSxcbiAgRHhMb29rdXBNb2R1bGUsXG4gIER4UGl2b3RHcmlkTW9kdWxlLFxuICBEeFRlbXBsYXRlTW9kdWxlLFxuICBEeFRleHRBcmVhTW9kdWxlLFxuICBEeFZhbGlkYXRpb25TdW1tYXJ5TW9kdWxlLFxuICBEeFZhbGlkYXRvck1vZHVsZSxcbiAgRHhDYWxlbmRhck1vZHVsZSxcbiAgRHhUb29sdGlwTW9kdWxlLFxuICBEeENvbnRleHRNZW51TW9kdWxlLFxuICBEeExvYWRJbmRpY2F0b3JNb2R1bGUsXG4gIER4UGllQ2hhcnRNb2R1bGUsXG4gIER4U2Nyb2xsVmlld01vZHVsZVxuXG59IGZyb20gXCJkZXZleHRyZW1lLWFuZ3VsYXJcIjtcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvYWRpbmdNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9hZGluZy9sb2FkaW5nTW9kdWxlJztcbmltcG9ydCB7IER5bmFtaWNXaWRnZXRGb3JNdWx0aWxheW91dENvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pbi1tb2RhbC1tdWx0aS5jb21wb25lbnQnO1xuaW1wb3J0IHsgS3BpV2l0aE11bHRpbGF5b3V0U2V0VGVzdENvbXBvbmVudCB9IGZyb20gJy4va3BpLXdpdGgtbXVsdGlsYXlvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEtwaVdpdGhNdWx0aUxheW91dFNlcnZpY2UgfSBmcm9tICcuL2twaS1tdWx0aS1sYXlvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBTaW5nbGVMYXlvdXRBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbCB9IGZyb20gJy4vc2luZ2xlLWxheW91dC1kYXRhc2V0LWNhbGwuc2VydmljZSc7XG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgS3BpV2l0aE11bHRpbGF5b3V0U2V0VGVzdENvbXBvbmVudCxcbiAgICBEeW5hbWljV2lkZ2V0Rm9yTXVsdGlsYXlvdXRDb21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSxcbiAgICBMb2FkaW5nTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEZXZFeHRyZW1lTW9kdWxlLFxuICAgIER4QnV0dG9uTW9kdWxlLFxuICAgIER4Q2hlY2tCb3hNb2R1bGUsXG4gICAgRHhOdW1iZXJCb3hNb2R1bGUsXG4gICAgRHhEYXRhR3JpZE1vZHVsZSxcbiAgICBEeERyb3BEb3duQm94TW9kdWxlLFxuICAgIER4VHJlZVZpZXdNb2R1bGUsXG4gICAgRHhTY3JvbGxWaWV3TW9kdWxlLFxuICAgIER4Rm9ybU1vZHVsZSxcbiAgICBEeEFjY29yZGlvbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEeFRhZ0JveE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgRHhIdG1sRWRpdG9yTW9kdWxlLFxuICAgIER4QnVsbGV0TW9kdWxlLFxuICAgIER4Q2hhcnRNb2R1bGUsXG4gICAgRHhEYXRlQm94TW9kdWxlLFxuICAgIER4TG9hZFBhbmVsTW9kdWxlLFxuICAgIER4TG9va3VwTW9kdWxlLFxuICAgIER4UGl2b3RHcmlkTW9kdWxlLFxuICAgIER4VGVtcGxhdGVNb2R1bGUsXG4gICAgRHhUZXh0QXJlYU1vZHVsZSxcbiAgICBEeFZhbGlkYXRpb25TdW1tYXJ5TW9kdWxlLFxuICAgIER4VmFsaWRhdG9yTW9kdWxlLFxuICAgIER4Q2FsZW5kYXJNb2R1bGUsXG4gICAgRHhUb29sdGlwTW9kdWxlLFxuICAgIER4Q29udGV4dE1lbnVNb2R1bGUsXG4gICAgRHhMb2FkSW5kaWNhdG9yTW9kdWxlLFxuICAgIER4UGllQ2hhcnRNb2R1bGUsXG4gICAgLy8gU3RydWN0dXJlS3BpTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgRHhQb3B1cE1vZHVsZSwgRHhTZWxlY3RCb3hNb2R1bGUsIER4VGV4dEJveE1vZHVsZSwgRHhUcmVlVmlld01vZHVsZSxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBNYXRNZW51TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTG9hZGluZ01vZHVsZSxcbiAgICBcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEtwaVdpdGhNdWx0aWxheW91dFNldFRlc3RDb21wb25lbnQsXG4gICAgRHluYW1pY1dpZGdldEZvck11bHRpbGF5b3V0Q29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW0twaVdpdGhNdWx0aUxheW91dFNlcnZpY2UsIFNpbmdsZUxheW91dEFwcGxpY2F0aW9uRGF0c3NldHNDYWxsXSxcbn0pXG5leHBvcnQgY2xhc3MgS3BpV2l0aE11bHRpTGF5b3V0TW9kdWxlIHsgfSJdfQ==
@@ -0,0 +1,364 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import moment from '../../application-controller/moment-helper';
3
+ import { APP_ENVIRONMENT } from '../../application-controller/environment';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./kpi-multi-layout.service";
6
+ import * as i2 from "../../application-controller/kpi-service";
7
+ import * as i3 from "ngx-toastr";
8
+ export class SingleLayoutApplicationDatssetsCall {
9
+ constructor(service, kpiService, toastr, environment) {
10
+ this.service = service;
11
+ this.kpiService = kpiService;
12
+ this.toastr = toastr;
13
+ this.environment = environment;
14
+ this.uniqueDataSetObject = {};
15
+ }
16
+ getDataFromDataSet(dataset, datasetId, filters) {
17
+ if (dataset.datasetType == "mongo") {
18
+ return this.getDataSetForMongo(dataset, datasetId);
19
+ }
20
+ else if (dataset.datasetType == "querybuilder") {
21
+ return this.getDatasetForImpala(dataset, datasetId, filters);
22
+ }
23
+ else if (dataset.datasetType == "simpleApi") {
24
+ return this.getDatasetForSimpleApiImpala(dataset, datasetId, filters);
25
+ }
26
+ else if (dataset.datasetType == "plainjson") {
27
+ return this.getDatasetForPlainJson(dataset, datasetId, filters);
28
+ }
29
+ else if (dataset.datasetType == "sqlQuery") {
30
+ return this.getDatasetForSqlTemplate(dataset, datasetId, filters);
31
+ }
32
+ else {
33
+ return Promise.resolve();
34
+ }
35
+ }
36
+ getDataSetForMongo(dataset, datasetId) {
37
+ return new Promise((resolve, reject) => {
38
+ let apiJsonObject = {
39
+ requestId: dataset.config.serviceId,
40
+ };
41
+ if (dataset.config.fixOperationLevles && dataset.config.fixOperationLevles.length != 0) {
42
+ for (const item of dataset.config.fixOperationLevles) {
43
+ Object.assign(apiJsonObject, item);
44
+ }
45
+ }
46
+ const mon_config = this.kpiService.getAllSeviceApiJson(apiJsonObject);
47
+ this.service.getData(mon_config, dataset.config.api).subscribe({
48
+ next: (data) => {
49
+ const payload = data["Payload"] || data;
50
+ this.uniqueDataSetObject[datasetId] = payload;
51
+ resolve();
52
+ },
53
+ error: (err) => {
54
+ console.error('Error:', err);
55
+ reject(err);
56
+ }
57
+ });
58
+ });
59
+ }
60
+ getDatasetForImpala(dataset, datasetId, filters) {
61
+ return new Promise((resolve, reject) => {
62
+ let request = dataset.config.queryConfig;
63
+ let transformedObject = {};
64
+ for (let item of request.reqFields) {
65
+ const key = Object.keys(item)[0];
66
+ const value = Object.values(item)[0];
67
+ if (key === 'startDate') {
68
+ transformedObject.recordDate = value;
69
+ }
70
+ else {
71
+ transformedObject[key] = value;
72
+ }
73
+ }
74
+ const operator = (filters && filters.length !== 0) ? Object.keys(filters.operationFilter).map(key => ({ [key]: filters.operationFilter[key] })) : [];
75
+ transformedObject['filters'] = this.transformDataForMFilter(operator, request.mapedFilters);
76
+ transformedObject['sorters'] = request.sorters;
77
+ transformedObject["paginationRequired"] = false;
78
+ if (dataset.config.api == "/kpi/genericAggregatePaginatedKpiServiceResponse") {
79
+ transformedObject['measures'] = request.measures;
80
+ transformedObject['dimensions'] = request.dimensions;
81
+ }
82
+ else {
83
+ transformedObject['columns'] = this.getFormatObjectForColumn(request.columns);
84
+ }
85
+ if (request.havings && request.havings.length !== 0) {
86
+ transformedObject['havings'] = request.havings;
87
+ }
88
+ this.service.getData(transformedObject, dataset.config.api).subscribe({
89
+ next: (data) => {
90
+ const payload = data['dataset'];
91
+ this.uniqueDataSetObject[datasetId] = payload;
92
+ resolve();
93
+ },
94
+ error: (err) => {
95
+ console.error('Error:', err);
96
+ this.toastr.error(err.message);
97
+ reject(err);
98
+ }
99
+ });
100
+ });
101
+ }
102
+ getFormatObjectForColumn(columns) {
103
+ let columnData = [];
104
+ columns.forEach(element => {
105
+ const { advancedColumn, columnName, enrichFunction, dataField } = element;
106
+ columnData.push({
107
+ "advancedColumn": advancedColumn,
108
+ "columnName": columnName,
109
+ "enrichFunction": enrichFunction,
110
+ "aliasName": dataField
111
+ });
112
+ });
113
+ return columnData;
114
+ }
115
+ transformDataForMFilter(filterdata, mapData) {
116
+ let result = [];
117
+ mapData.forEach(mapping => {
118
+ let resultObj = {
119
+ columnName: mapping.serverColumn,
120
+ dataType: mapping.dataType,
121
+ operator: mapping.operatorName,
122
+ value: mapping.defaultValue
123
+ };
124
+ if (mapping.serverColumn.includes('date') && typeof resultObj.value === 'string') {
125
+ if (mapping.formatter && mapping.formatter !== "") {
126
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(mapping.formatter);
127
+ }
128
+ else {
129
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
130
+ }
131
+ }
132
+ const filter = filterdata.find(f => f.hasOwnProperty(mapping.localColumn));
133
+ if (filter) {
134
+ if (mapping.defaultValue === "") {
135
+ const value = filter[mapping.localColumn];
136
+ if (Array.isArray(value)) {
137
+ resultObj.operator = "in";
138
+ resultObj.value = value.join(",");
139
+ }
140
+ else {
141
+ resultObj.value = value;
142
+ }
143
+ if (mapping.serverColumn.includes('date') && typeof resultObj.value === 'string') {
144
+ if (mapping.formatter && mapping.formatter !== "") {
145
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(mapping.formatter);
146
+ }
147
+ else {
148
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ else if (mapping.defaultValue === "") {
154
+ return;
155
+ }
156
+ result.push(resultObj);
157
+ });
158
+ filterdata = filterdata.filter(obj => {
159
+ const key = Object.keys(obj)[0];
160
+ return key !== 'startDate' && key !== 'endDate';
161
+ });
162
+ filterdata.forEach(filter => {
163
+ const filterKey = Object.keys(filter)[0];
164
+ const existingMapping = mapData.find(mapping => mapping.localColumn === filterKey);
165
+ if (!existingMapping) {
166
+ let resultObj = {
167
+ columnName: filterKey,
168
+ dataType: "string",
169
+ operator: "eq",
170
+ value: filter[filterKey]
171
+ };
172
+ if (Array.isArray(filter[filterKey])) {
173
+ resultObj.operator = "in";
174
+ resultObj.value = filter[filterKey].join(",");
175
+ }
176
+ else {
177
+ resultObj.value = filter[filterKey];
178
+ }
179
+ if (filterKey == 'operator_key') {
180
+ resultObj.operator = "eq";
181
+ }
182
+ result.push(resultObj);
183
+ }
184
+ });
185
+ result = result.filter(obj => obj.value !== null && obj.value !== "");
186
+ return result;
187
+ }
188
+ getDatasetForSimpleApiImpala(dataset, datasetId, filters) {
189
+ return new Promise((resolve, reject) => {
190
+ dataset.config.queryConfig.mapedFilters.forEach(filter => {
191
+ if (filters.operationFilter.hasOwnProperty(filter.localColumn)) {
192
+ filter.defaultValue = filters.operationFilter[filter.localColumn];
193
+ }
194
+ });
195
+ if (dataset.config.apiType === "post") {
196
+ let serviceJson = {};
197
+ dataset.config.queryConfig.mapedFilters.forEach((filter) => {
198
+ let datecolumn = filter.serverColumn.toLowerCase();
199
+ if (datecolumn.includes('date') && typeof filter.dataType === 'string') {
200
+ serviceJson[filter.serverColumn] = moment(filter.defaultValue, "YYYY-MM-DD").format(this.environment.dataFormat);
201
+ }
202
+ else {
203
+ serviceJson[filter.serverColumn] = filter.defaultValue;
204
+ }
205
+ });
206
+ this.service.getSimpleApiPostRequest(dataset.config.api, serviceJson).subscribe({
207
+ next: (data) => {
208
+ const payload = data["Payload"] || data;
209
+ this.uniqueDataSetObject[datasetId] = payload;
210
+ resolve();
211
+ },
212
+ error: (err) => {
213
+ console.error('Error:', err);
214
+ this.toastr.error(err.message);
215
+ reject(err);
216
+ }
217
+ });
218
+ }
219
+ else if (dataset.config.apiType === "get") {
220
+ let requestUrl = dataset.config.api + "?";
221
+ dataset.config.queryConfig.mapedFilters.forEach((filter, index) => {
222
+ requestUrl += `${filter.serverColumn}=${filter.defaultValue}`;
223
+ if (index < dataset.config.queryConfig.mapedFilters.length - 1) {
224
+ requestUrl += "&";
225
+ }
226
+ });
227
+ this.service.getSimpleApiGetRequest(requestUrl).subscribe({
228
+ next: (data) => {
229
+ const payload = data["Payload"] || data;
230
+ this.uniqueDataSetObject[datasetId] = payload;
231
+ resolve();
232
+ },
233
+ error: (err) => {
234
+ console.error('Error:', err);
235
+ this.toastr.error(err.message);
236
+ reject(err);
237
+ }
238
+ });
239
+ }
240
+ });
241
+ }
242
+ getDatasetForPlainJson(dataset, datasetId, filter) {
243
+ return new Promise((resolve, reject) => {
244
+ let requestapi = dataset.config.api + '?datasetId=' + dataset.datasetId;
245
+ this.service.getJsonDatasetPayload(requestapi).subscribe({
246
+ next: (data) => {
247
+ const payload = data["Payload"] || data;
248
+ this.uniqueDataSetObject[datasetId] = payload;
249
+ resolve();
250
+ },
251
+ error: (err) => {
252
+ console.error('Error:', err);
253
+ reject(err);
254
+ }
255
+ });
256
+ });
257
+ }
258
+ getDatasetForSqlTemplate(dataset, datasetId, filters) {
259
+ return new Promise((resolve, reject) => {
260
+ const operator = (filters && filters.length !== 0) ? Object.keys(filters.operationFilter).map(key => ({ [key]: filters.operationFilter[key] })) : [];
261
+ let requestAp = dataset.config.api;
262
+ let request_params = {
263
+ 'dbConfig': dataset.config.queryConfig.dbConfig,
264
+ 'databaseName': dataset.config.queryConfig.databaseName,
265
+ 'filters': this.transformDataForMFilterForSQl(operator, dataset.config.queryConfig.mapedFilters),
266
+ 'templateQuery': dataset.config.queryConfig.templateQuery,
267
+ 'enrichments': dataset.config.queryConfig.enrichments,
268
+ };
269
+ this.service.genericSqlQueryResponse(requestAp, request_params).subscribe({
270
+ next: (data) => {
271
+ const payload = data["Payload"] || data;
272
+ this.uniqueDataSetObject[datasetId] = payload;
273
+ resolve();
274
+ },
275
+ error: (err) => {
276
+ console.error('Error:', err);
277
+ this.toastr.error(err.message);
278
+ reject(err);
279
+ }
280
+ });
281
+ });
282
+ }
283
+ transformDataForMFilterForSQl(filterdata, mapData) {
284
+ let result = [];
285
+ mapData.forEach(mapping => {
286
+ let resultObj = {
287
+ columnName: mapping.serverColumn,
288
+ dataType: mapping.dataType,
289
+ operator: mapping.operatorName,
290
+ value: mapping.defaultValue,
291
+ aliasColumnName: mapping.localColumn,
292
+ };
293
+ if (mapping.serverColumn.includes('date') && typeof resultObj.value === 'string') {
294
+ if (mapping.formatter && mapping.formatter !== "") {
295
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(mapping.formatter);
296
+ }
297
+ else {
298
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
299
+ }
300
+ }
301
+ const filter = filterdata.find(f => f.hasOwnProperty(mapping.localColumn));
302
+ if (filter) {
303
+ if (mapping.defaultValue === "") {
304
+ const value = filter[mapping.localColumn];
305
+ if (Array.isArray(value)) {
306
+ resultObj.operator = "in";
307
+ resultObj.value = value.join(",");
308
+ }
309
+ else {
310
+ resultObj.value = value;
311
+ }
312
+ if (mapping.serverColumn.includes('date') && typeof resultObj.value === 'string') {
313
+ resultObj.value = moment(resultObj.value, "YYYY-MM-DD").format(this.environment.dataFormat);
314
+ }
315
+ }
316
+ }
317
+ else if (mapping.defaultValue === "") {
318
+ return;
319
+ }
320
+ result.push(resultObj);
321
+ });
322
+ filterdata = filterdata.filter(obj => {
323
+ const key = Object.keys(obj)[0];
324
+ return key !== 'startDate' && key !== 'endDate';
325
+ });
326
+ filterdata.forEach(filter => {
327
+ const filterKey = Object.keys(filter)[0];
328
+ const existingMapping = mapData.find(mapping => mapping.localColumn === filterKey);
329
+ if (!existingMapping) {
330
+ let resultObj = {
331
+ columnName: filterKey,
332
+ dataType: "string",
333
+ operator: "eq",
334
+ value: filter[filterKey]
335
+ };
336
+ if (Array.isArray(filter[filterKey])) {
337
+ resultObj.operator = "in";
338
+ resultObj.value = filter[filterKey].join(",");
339
+ }
340
+ else {
341
+ resultObj.value = filter[filterKey];
342
+ }
343
+ if (filterKey == 'operator_key') {
344
+ resultObj.operator = "eq";
345
+ }
346
+ result.push(resultObj);
347
+ }
348
+ });
349
+ return result;
350
+ }
351
+ getUniqueDataSetObject() {
352
+ return this.uniqueDataSetObject;
353
+ }
354
+ }
355
+ SingleLayoutApplicationDatssetsCall.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SingleLayoutApplicationDatssetsCall, deps: [{ token: i1.KpiWithMultiLayoutService }, { token: i2.kpicommonService }, { token: i3.ToastrService }, { token: APP_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable });
356
+ SingleLayoutApplicationDatssetsCall.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SingleLayoutApplicationDatssetsCall, providedIn: "root" });
357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SingleLayoutApplicationDatssetsCall, decorators: [{
358
+ type: Injectable,
359
+ args: [{ providedIn: "root" }]
360
+ }], ctorParameters: function () { return [{ type: i1.KpiWithMultiLayoutService }, { type: i2.kpicommonService }, { type: i3.ToastrService }, { type: undefined, decorators: [{
361
+ type: Inject,
362
+ args: [APP_ENVIRONMENT]
363
+ }] }]; } });
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLWxheW91dC1kYXRhc2V0LWNhbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvdGVtcGxhdGUtbW9kdWxlL2twaVdpdGhNdWx0aUxheW91dC9zaW5nbGUtbGF5b3V0LWRhdGFzZXQtY2FsbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sTUFBTSxNQUFNLDRDQUE0QyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7QUFLM0UsTUFBTSxPQUFPLG1DQUFtQztJQUk1QyxZQUFvQixPQUFrQyxFQUMxQyxVQUE0QixFQUM1QixNQUFxQixFQUNJLFdBQWdCO1FBSGpDLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQzFDLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDSSxnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQUxyRCx3QkFBbUIsR0FBRyxFQUFFLENBQUM7SUFRekIsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTztRQUMxQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RDthQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxjQUFjLEVBQUU7WUFDOUMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRTthQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxXQUFXLEVBQUU7WUFDM0Ms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Q0QsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMxQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBSUgsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUdELHNCQUFzQjtRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDOztnSUF0WVEsbUNBQW1DLHdIQU9oQyxlQUFlO29JQVBsQixtQ0FBbUMsY0FEdEIsTUFBTTsyRkFDbkIsbUNBQW1DO2tCQUQvQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBUXpCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2Vudmlyb25tZW50JztcbmltcG9ydCB7IGtwaWNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2twaS1zZXJ2aWNlJztcbmltcG9ydCB7IEtwaVdpdGhNdWx0aUxheW91dFNlcnZpY2UgfSBmcm9tICcuL2twaS1tdWx0aS1sYXlvdXQuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBTaW5nbGVMYXlvdXRBcHBsaWNhdGlvbkRhdHNzZXRzQ2FsbCB7XG5cbiAgICB1bmlxdWVEYXRhU2V0T2JqZWN0ID0ge307XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IEtwaVdpdGhNdWx0aUxheW91dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUga3BpU2VydmljZToga3BpY29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoQVBQX0VOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgICApIHtcblxuICAgIH1cblxuICAgIGdldERhdGFGcm9tRGF0YVNldChkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcnMpIHtcbiAgICAgICAgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT0gXCJtb25nb1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhU2V0Rm9yTW9uZ28oZGF0YXNldCwgZGF0YXNldElkKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09IFwicXVlcnlidWlsZGVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFzZXRGb3JJbXBhbGEoZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09IFwic2ltcGxlQXBpXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFzZXRGb3JTaW1wbGVBcGlJbXBhbGEoZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09IFwicGxhaW5qc29uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFzZXRGb3JQbGFpbkpzb24oZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09IFwic3FsUXVlcnlcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YXNldEZvclNxbFRlbXBsYXRlKGRhdGFzZXQsIGRhdGFzZXRJZCwgZmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGdldERhdGFTZXRGb3JNb25nbyhkYXRhc2V0LCBkYXRhc2V0SWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCBhcGlKc29uT2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogZGF0YXNldC5jb25maWcuc2VydmljZUlkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMgJiYgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcykge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGFwaUpzb25PYmplY3QsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vbl9jb25maWcgPSB0aGlzLmtwaVNlcnZpY2UuZ2V0QWxsU2V2aWNlQXBpSnNvbihhcGlKc29uT2JqZWN0KTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5nZXREYXRhKG1vbl9jb25maWcsIGRhdGFzZXQuY29uZmlnLmFwaSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQuc2xpY2UoMCwgMjApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldERhdGFzZXRGb3JJbXBhbGEoZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnO1xuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkT2JqZWN0OiBhbnkgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgcmVxdWVzdC5yZXFGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhpdGVtKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3N0YXJ0RGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3QucmVjb3JkRGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IChmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoICE9PSAwKSA/IE9iamVjdC5rZXlzKGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyKS5tYXAoa2V5ID0+ICh7IFtrZXldOiBmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltrZXldIH0pKSA6IFtdO1xuXG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydmaWx0ZXJzJ10gPSB0aGlzLnRyYW5zZm9ybURhdGFGb3JNRmlsdGVyKG9wZXJhdG9yLCByZXF1ZXN0Lm1hcGVkRmlsdGVycyk7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsnc29ydGVycyddID0gcmVxdWVzdC5zb3J0ZXJzO1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbXCJwYWdpbmF0aW9uUmVxdWlyZWRcIl0gPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGRhdGFzZXQuY29uZmlnLmFwaSA9PSBcIi9rcGkvZ2VuZXJpY0FnZ3JlZ2F0ZVBhZ2luYXRlZEtwaVNlcnZpY2VSZXNwb25zZVwiKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ21lYXN1cmVzJ10gPSByZXF1ZXN0Lm1lYXN1cmVzO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydkaW1lbnNpb25zJ10gPSByZXF1ZXN0LmRpbWVuc2lvbnM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydjb2x1bW5zJ10gPSB0aGlzLmdldEZvcm1hdE9iamVjdEZvckNvbHVtbihyZXF1ZXN0LmNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QuaGF2aW5ncyAmJiByZXF1ZXN0LmhhdmluZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ2hhdmluZ3MnXSA9IHJlcXVlc3QuaGF2aW5ncztcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0RGF0YSh0cmFuc2Zvcm1lZE9iamVjdCwgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbJ2RhdGFzZXQnXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkLnNsaWNlKDAsIDMwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBnZXRGb3JtYXRPYmplY3RGb3JDb2x1bW4oY29sdW1ucykge1xuICAgICAgICBsZXQgY29sdW1uRGF0YSA9IFtdO1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkdmFuY2VkQ29sdW1uLCBjb2x1bW5OYW1lLCBlbnJpY2hGdW5jdGlvbiwgZGF0YUZpZWxkIH0gPSBlbGVtZW50O1xuICAgICAgICAgICAgY29sdW1uRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBcImFkdmFuY2VkQ29sdW1uXCI6IGFkdmFuY2VkQ29sdW1uLFxuICAgICAgICAgICAgICAgIFwiY29sdW1uTmFtZVwiOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIFwiZW5yaWNoRnVuY3Rpb25cIjogZW5yaWNoRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgXCJhbGlhc05hbWVcIjogZGF0YUZpZWxkXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbkRhdGE7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIoZmlsdGVyZGF0YSwgbWFwRGF0YSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIG1hcERhdGEuZm9yRWFjaChtYXBwaW5nID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHRPYmogPSB7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZTogbWFwcGluZy5zZXJ2ZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IG1hcHBpbmcub3BlcmF0b3JOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcmRhdGEuZmluZChmID0+IGYuaGFzT3duUHJvcGVydHkobWFwcGluZy5sb2NhbENvbHVtbikpO1xuICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlclttYXBwaW5nLmxvY2FsQ29sdW1uXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVyZGF0YSA9IGZpbHRlcmRhdGEuZmlsdGVyKG9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhvYmopWzBdO1xuICAgICAgICAgICAgcmV0dXJuIGtleSAhPT0gJ3N0YXJ0RGF0ZScgJiYga2V5ICE9PSAnZW5kRGF0ZSc7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXJkYXRhLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcktleSA9IE9iamVjdC5rZXlzKGZpbHRlcilbMF07XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ01hcHBpbmcgPSBtYXBEYXRhLmZpbmQobWFwcGluZyA9PiBtYXBwaW5nLmxvY2FsQ29sdW1uID09PSBmaWx0ZXJLZXkpO1xuXG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nTWFwcGluZykge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHRPYmogPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGZpbHRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJbZmlsdGVyS2V5XVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbZmlsdGVyS2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJpblwiO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBmb3IgbWNpdCBvbmx5XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PSAnb3BlcmF0b3Jfa2V5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImVxXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihvYmogPT4gb2JqLnZhbHVlICE9PSBudWxsICYmIG9iai52YWx1ZSAhPT0gXCJcIik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cblxuXG4gICAgZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYShkYXRhc2V0OiBhbnksIGRhdGFzZXRJZDogc3RyaW5nLCBmaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmhhc093blByb3BlcnR5KGZpbHRlci5sb2NhbENvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRlZmF1bHRWYWx1ZSA9IGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyW2ZpbHRlci5sb2NhbENvbHVtbl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJwb3N0XCIpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzZXJ2aWNlSnNvbjogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlY29sdW1uID0gZmlsdGVyLnNlcnZlckNvbHVtbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZWNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiBmaWx0ZXIuZGF0YVR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlSnNvbltmaWx0ZXIuc2VydmVyQ29sdW1uXSA9IG1vbWVudChmaWx0ZXIuZGVmYXVsdFZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlSnNvbltmaWx0ZXIuc2VydmVyQ29sdW1uXSA9IGZpbHRlci5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0U2ltcGxlQXBpUG9zdFJlcXVlc3QoZGF0YXNldC5jb25maWcuYXBpLCBzZXJ2aWNlSnNvbikuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJnZXRcIikge1xuXG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RVcmwgPSBkYXRhc2V0LmNvbmZpZy5hcGkgKyBcIj9cIjtcbiAgICAgICAgICAgICAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVybCArPSBgJHtmaWx0ZXIuc2VydmVyQ29sdW1ufT0ke2ZpbHRlci5kZWZhdWx0VmFsdWV9YDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmwgKz0gXCImXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5nZXRTaW1wbGVBcGlHZXRSZXF1ZXN0KHJlcXVlc3RVcmwpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgZ2V0RGF0YXNldEZvclBsYWluSnNvbihkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcikge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICBsZXQgcmVxdWVzdGFwaSA9IGRhdGFzZXQuY29uZmlnLmFwaSArICc/ZGF0YXNldElkPScgKyBkYXRhc2V0LmRhdGFzZXRJZDtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5nZXRKc29uRGF0YXNldFBheWxvYWQocmVxdWVzdGFwaSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBnZXREYXRhc2V0Rm9yU3FsVGVtcGxhdGUoZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKSB7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuXG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IChmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoICE9PSAwKSA/IE9iamVjdC5rZXlzKGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyKS5tYXAoa2V5ID0+ICh7IFtrZXldOiBmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltrZXldIH0pKSA6IFtdO1xuXG4gICAgICAgICAgICBsZXQgcmVxdWVzdEFwID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RfcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICdkYkNvbmZpZyc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRiQ29uZmlnLFxuICAgICAgICAgICAgICAgICdkYXRhYmFzZU5hbWUnOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbHRlcnMnOiB0aGlzLnRyYW5zZm9ybURhdGFGb3JNRmlsdGVyRm9yU1FsKG9wZXJhdG9yLCBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMpLFxuICAgICAgICAgICAgICAgICd0ZW1wbGF0ZVF1ZXJ5JzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcudGVtcGxhdGVRdWVyeSxcbiAgICAgICAgICAgICAgICAnZW5yaWNobWVudHMnOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5lbnJpY2htZW50cyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5nZW5lcmljU3FsUXVlcnlSZXNwb25zZShyZXF1ZXN0QXAsIHJlcXVlc3RfcGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcblxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1EYXRhRm9yTUZpbHRlckZvclNRbChmaWx0ZXJkYXRhLCBtYXBEYXRhKSB7XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0T2JqID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IG1hcHBpbmcuc2VydmVyQ29sdW1uLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBtYXBwaW5nLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWFwcGluZy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgYWxpYXNDb2x1bW5OYW1lOiBtYXBwaW5nLmxvY2FsQ29sdW1uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcmRhdGEuZmluZChmID0+IGYuaGFzT3duUHJvcGVydHkobWFwcGluZy5sb2NhbENvbHVtbikpO1xuICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlclttYXBwaW5nLmxvY2FsQ29sdW1uXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVyZGF0YSA9IGZpbHRlcmRhdGEuZmlsdGVyKG9iaiA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhvYmopWzBdO1xuICAgICAgICAgICAgcmV0dXJuIGtleSAhPT0gJ3N0YXJ0RGF0ZScgJiYga2V5ICE9PSAnZW5kRGF0ZSc7XG4gICAgICAgIH0pOyBmaWx0ZXJkYXRhLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcktleSA9IE9iamVjdC5rZXlzKGZpbHRlcilbMF07XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ01hcHBpbmcgPSBtYXBEYXRhLmZpbmQobWFwcGluZyA9PiBtYXBwaW5nLmxvY2FsQ29sdW1uID09PSBmaWx0ZXJLZXkpO1xuXG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nTWFwcGluZykge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHRPYmogPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGZpbHRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJbZmlsdGVyS2V5XVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbZmlsdGVyS2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJpblwiO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBmb3IgbWNpdCBvbmx5XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PSAnb3BlcmF0b3Jfa2V5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImVxXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgLy8gcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihvYmogPT4gb2JqLnZhbHVlICE9PSBudWxsICYmIG9iai52YWx1ZSAhPT0gXCJcIik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cbiAgICBnZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0O1xuICAgIH1cblxuXG59XG4iXX0=