@onecx/angular-accelerator 4.33.2 → 4.34.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.
@@ -26,6 +26,12 @@ import { DynamicPipe } from './pipes/dynamic.pipe';
26
26
  import { OcxTimeAgoPipe } from './pipes/ocxtimeago.pipe';
27
27
  import { AppConfigService } from './services/app-config-service';
28
28
  import * as i0 from "@angular/core";
29
+ export class AngularAcceleratorMissingTranslationHandler {
30
+ handle(params) {
31
+ console.log(`Missing translation for ${params.key}`, params);
32
+ return params.key;
33
+ }
34
+ }
29
35
  export class AngularAcceleratorModule {
30
36
  }
31
37
  AngularAcceleratorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AngularAcceleratorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -151,4 +157,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
151
157
  ],
152
158
  }]
153
159
  }] });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hY2NlbGVyYXRvci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9hbmd1bGFyLWFjY2VsZXJhdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBRWxFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3RGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFBO0FBQ3BILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGtGQUFrRixDQUFBO0FBQ3JJLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFBO0FBQ2pILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNFQUFzRSxDQUFBO0FBQ25ILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFBO0FBQzVGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFBO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNF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LE9BQU8sRUFBRSxTQUFTOzRCQUNsQixVQUFVLEVBQUUsQ0FBQyxXQUF3QixFQUFFLEVBQUU7Z0NBQ3ZDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTs0QkFDckMsQ0FBQzs0QkFDRCxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7eUJBQ3BCO3dCQUNELGdCQUFnQjtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDZCQUE2Qjt3QkFDN0Isa0NBQWtDO3dCQUNsQyw0QkFBNEI7d0JBQzVCLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixpQkFBaUI7d0JBQ2pCLDRCQUE0Qjt3QkFDNUIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQiw0QkFBNEI7d0JBQzVCLHFCQUFxQjt3QkFDckIscUJBQXFCO3dCQUNyQixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixpQkFBaUI7cUJBQ2xCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTE9DQUxFX0lELCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcblxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICdAb25lY3gvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5cbmltcG9ydCB7IEFuZ3VsYXJBY2NlbGVyYXRvclByaW1lTmdNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItYWNjZWxlcmF0b3ItcHJpbWVuZy5tb2R1bGUnXG5pbXBvcnQgeyBDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uL2NvbHVtbi1ncm91cC1zZWxlY3Rpb24uY29tcG9uZW50J1xuaW1wb3J0IHsgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yL2N1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRhLWxheW91dC1zZWxlY3Rpb24vZGF0YS1sYXlvdXQtc2VsZWN0aW9uLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0YS1saXN0LWdyaWQtc29ydGluZy9kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFMaXN0R3JpZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRhLWxpc3QtZ3JpZC9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RhdGEtdmlldy9kYXRhLXZpZXcuY29tcG9uZW50J1xuaW1wb3J0IHsgRGlhZ3JhbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kaWFncmFtL2RpYWdyYW0uY29tcG9uZW50J1xuaW1wb3J0IHsgR3JvdXBCeUNvdW50RGlhZ3JhbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ncm91cC1ieS1jb3VudC1kaWFncmFtL2dyb3VwLWJ5LWNvdW50LWRpYWdyYW0uY29tcG9uZW50J1xuaW1wb3J0IHsgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcvaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudCdcbmltcG9ydCB7IFBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50J1xuaW1wb3J0IHsgU2VhcmNoQ29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlYXJjaC1jb25maWcvc2VhcmNoLWNvbmZpZy5jb21wb25lbnQnXG5pbXBvcnQgeyBTZWFyY2hIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2VhcmNoLWhlYWRlci9zZWFyY2gtaGVhZGVyLmNvbXBvbmVudCdcbmltcG9ydCB7IEFkdmFuY2VkRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2VkLmRpcmVjdGl2ZSdcbmltcG9ydCB7IElmQnJlYWtwb2ludERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pZi1icmVha3BvaW50LmRpcmVjdGl2ZSdcbmltcG9ydCB7IElmUGVybWlzc2lvbkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pZi1wZXJtaXNzaW9uLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFNyY0RpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zcmMuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRHluYW1pY1BpcGUgfSBmcm9tICcuL3BpcGVzL2R5bmFtaWMucGlwZSdcbmltcG9ydCB7IE9jeFRpbWVBZ29QaXBlIH0gZnJvbSAnLi9waXBlcy9vY3h0aW1lYWdvLnBpcGUnXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcHAtY29uZmlnLXNlcnZpY2UnXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQW5ndWxhckFjY2VsZXJhdG9yUHJpbWVOZ01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50LFxuICAgIEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnQsXG4gICAgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudCxcbiAgICBEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50LFxuICAgIERhdGFMaXN0R3JpZENvbXBvbmVudCxcbiAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgRGF0YVZpZXdDb21wb25lbnQsXG4gICAgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCxcbiAgICBTZWFyY2hDb25maWdDb21wb25lbnQsXG4gICAgUGFnZUhlYWRlckNvbXBvbmVudCxcbiAgICBEeW5hbWljUGlwZSxcbiAgICBTZWFyY2hIZWFkZXJDb21wb25lbnQsXG4gICAgRGlhZ3JhbUNvbXBvbmVudCxcbiAgICBHcm91cEJ5Q291bnREaWFncmFtQ29tcG9uZW50LFxuICAgIElmUGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgICBJZkJyZWFrcG9pbnREaXJlY3RpdmUsXG4gICAgU3JjRGlyZWN0aXZlLFxuICAgIE9jeFRpbWVBZ29QaXBlLFxuICAgIFNyY0RpcmVjdGl2ZSxcbiAgICBBZHZhbmNlZERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTE9DQUxFX0lELFxuICAgICAgdXNlRmFjdG9yeTogKFVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkgPT4ge1xuICAgICAgICByZXR1cm4gVXNlclNlcnZpY2UubGFuZyQuZ2V0VmFsdWUoKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFtVc2VyU2VydmljZV0sXG4gICAgfSxcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnQsXG4gICAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCxcbiAgICBEYXRhTGF5b3V0U2VsZWN0aW9uQ29tcG9uZW50LFxuICAgIERhdGFMaXN0R3JpZENvbXBvbmVudCxcbiAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgRGF0YVZpZXdDb21wb25lbnQsXG4gICAgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCxcbiAgICBTZWFyY2hDb25maWdDb21wb25lbnQsXG4gICAgUGFnZUhlYWRlckNvbXBvbmVudCxcbiAgICBTZWFyY2hIZWFkZXJDb21wb25lbnQsXG4gICAgRGlhZ3JhbUNvbXBvbmVudCxcbiAgICBHcm91cEJ5Q291bnREaWFncmFtQ29tcG9uZW50LFxuICAgIElmUGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgICBJZkJyZWFrcG9pbnREaXJlY3RpdmUsXG4gICAgU3JjRGlyZWN0aXZlLFxuICAgIE9jeFRpbWVBZ29QaXBlLFxuICAgIFNyY0RpcmVjdGl2ZSxcbiAgICBBZHZhbmNlZERpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckFjY2VsZXJhdG9yTW9kdWxlIHt9XG4iXX0=
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hY2NlbGVyYXRvci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9hbmd1bGFyLWFjY2VsZXJhdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQThELGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRWpILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUVsRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUN0RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQTtBQUNwSCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxrRkFBa0YsQ0FBQTtBQUNySSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQTtBQUNqSCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQTtBQUNuSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQTtBQUM1RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQTtBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxz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bUI7d0JBQ25CLFdBQVc7d0JBQ1gscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIscUJBQXFCO3dCQUNyQixxQkFBcUI7d0JBQ3JCLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGlCQUFpQjtxQkFDbEI7b0JBQ0QsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxTQUFTOzRCQUNsQixVQUFVLEVBQUUsQ0FBQyxXQUF3QixFQUFFLEVBQUU7Z0NBQ3ZDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTs0QkFDckMsQ0FBQzs0QkFDRCxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7eUJBQ3BCO3dCQUNELGdCQUFnQjtxQkFDakI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDZCQUE2Qjt3QkFDN0Isa0NBQWtDO3dCQUNsQyw0QkFBNEI7d0JBQzVCLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixpQkFBaUI7d0JBQ2pCLDRCQUE0Qjt3QkFDNUIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQiw0QkFBNEI7d0JBQzVCLHFCQUFxQjt3QkFDckIscUJBQXFCO3dCQUNyQixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixpQkFBaUI7cUJBQ2xCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTE9DQUxFX0lELCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlciwgTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlclBhcmFtcywgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcblxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICdAb25lY3gvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5cbmltcG9ydCB7IEFuZ3VsYXJBY2NlbGVyYXRvclByaW1lTmdNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItYWNjZWxlcmF0b3ItcHJpbWVuZy5tb2R1bGUnXG5pbXBvcnQgeyBDb2x1bW5Hcm91cFNlbGVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tZ3JvdXAtc2VsZWN0aW9uL2NvbHVtbi1ncm91cC1zZWxlY3Rpb24uY29tcG9uZW50J1xuaW1wb3J0IHsgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jdXN0b20tZ3JvdXAtY29sdW1uLXNlbGVjdG9yL2N1c3RvbS1ncm91cC1jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50J1xuaW1wb3J0IHsgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRhLWxheW91dC1zZWxlY3Rpb24vZGF0YS1sYXlvdXQtc2VsZWN0aW9uLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFMaXN0R3JpZFNvcnRpbmdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0YS1saXN0LWdyaWQtc29ydGluZy9kYXRhLWxpc3QtZ3JpZC1zb3J0aW5nLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFMaXN0R3JpZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kYXRhLWxpc3QtZ3JpZC9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGFWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RhdGEtdmlldy9kYXRhLXZpZXcuY29tcG9uZW50J1xuaW1wb3J0IHsgRGlhZ3JhbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kaWFncmFtL2RpYWdyYW0uY29tcG9uZW50J1xuaW1wb3J0IHsgR3JvdXBCeUNvdW50RGlhZ3JhbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ncm91cC1ieS1jb3VudC1kaWFncmFtL2dyb3VwLWJ5LWNvdW50LWRpYWdyYW0uY29tcG9uZW50J1xuaW1wb3J0IHsgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbnRlcmFjdGl2ZS1kYXRhLXZpZXcvaW50ZXJhY3RpdmUtZGF0YS12aWV3LmNvbXBvbmVudCdcbmltcG9ydCB7IFBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50J1xuaW1wb3J0IHsgU2VhcmNoQ29uZmlnQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlYXJjaC1jb25maWcvc2VhcmNoLWNvbmZpZy5jb21wb25lbnQnXG5pbXBvcnQgeyBTZWFyY2hIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2VhcmNoLWhlYWRlci9zZWFyY2gtaGVhZGVyLmNvbXBvbmVudCdcbmltcG9ydCB7IEFkdmFuY2VkRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2VkLmRpcmVjdGl2ZSdcbmltcG9ydCB7IElmQnJlYWtwb2ludERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pZi1icmVha3BvaW50LmRpcmVjdGl2ZSdcbmltcG9ydCB7IElmUGVybWlzc2lvbkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pZi1wZXJtaXNzaW9uLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFNyY0RpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zcmMuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRHluYW1pY1BpcGUgfSBmcm9tICcuL3BpcGVzL2R5bmFtaWMucGlwZSdcbmltcG9ydCB7IE9jeFRpbWVBZ29QaXBlIH0gZnJvbSAnLi9waXBlcy9vY3h0aW1lYWdvLnBpcGUnXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcHAtY29uZmlnLXNlcnZpY2UnXG5cbmV4cG9ydCBjbGFzcyBBbmd1bGFyQWNjZWxlcmF0b3JNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyIGltcGxlbWVudHMgTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlciB7XG4gIGhhbmRsZShwYXJhbXM6IE1pc3NpbmdUcmFuc2xhdGlvbkhhbmRsZXJQYXJhbXMpIHtcbiAgICBjb25zb2xlLmxvZyhgTWlzc2luZyB0cmFuc2xhdGlvbiBmb3IgJHtwYXJhbXMua2V5fWAsIHBhcmFtcylcbiAgICByZXR1cm4gcGFyYW1zLmtleVxuICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQW5ndWxhckFjY2VsZXJhdG9yUHJpbWVOZ01vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENvbHVtbkdyb3VwU2VsZWN0aW9uQ29tcG9uZW50LFxuICAgIEN1c3RvbUdyb3VwQ29sdW1uU2VsZWN0b3JDb21wb25lbnQsXG4gICAgRGF0YUxheW91dFNlbGVjdGlvbkNvbXBvbmVudCxcbiAgICBEYXRhTGlzdEdyaWRTb3J0aW5nQ29tcG9uZW50LFxuICAgIERhdGFMaXN0R3JpZENvbXBvbmVudCxcbiAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgRGF0YVZpZXdDb21wb25lbnQsXG4gICAgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCxcbiAgICBTZWFyY2hDb25maWdDb21wb25lbnQsXG4gICAgUGFnZUhlYWRlckNvbXBvbmVudCxcbiAgICBEeW5hbWljUGlwZSxcbiAgICBTZWFyY2hIZWFkZXJDb21wb25lbnQsXG4gICAgRGlhZ3JhbUNvbXBvbmVudCxcbiAgICBHcm91cEJ5Q291bnREaWFncmFtQ29tcG9uZW50LFxuICAgIElmUGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgICBJZkJyZWFrcG9pbnREaXJlY3RpdmUsXG4gICAgU3JjRGlyZWN0aXZlLFxuICAgIE9jeFRpbWVBZ29QaXBlLFxuICAgIFNyY0RpcmVjdGl2ZSxcbiAgICBBZHZhbmNlZERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTE9DQUxFX0lELFxuICAgICAgdXNlRmFjdG9yeTogKFVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkgPT4ge1xuICAgICAgICByZXR1cm4gVXNlclNlcnZpY2UubGFuZyQuZ2V0VmFsdWUoKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFtVc2VyU2VydmljZV0sXG4gICAgfSxcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgQ29sdW1uR3JvdXBTZWxlY3Rpb25Db21wb25lbnQsXG4gICAgQ3VzdG9tR3JvdXBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCxcbiAgICBEYXRhTGF5b3V0U2VsZWN0aW9uQ29tcG9uZW50LFxuICAgIERhdGFMaXN0R3JpZENvbXBvbmVudCxcbiAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgRGF0YVZpZXdDb21wb25lbnQsXG4gICAgSW50ZXJhY3RpdmVEYXRhVmlld0NvbXBvbmVudCxcbiAgICBTZWFyY2hDb25maWdDb21wb25lbnQsXG4gICAgUGFnZUhlYWRlckNvbXBvbmVudCxcbiAgICBTZWFyY2hIZWFkZXJDb21wb25lbnQsXG4gICAgRGlhZ3JhbUNvbXBvbmVudCxcbiAgICBHcm91cEJ5Q291bnREaWFncmFtQ29tcG9uZW50LFxuICAgIElmUGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgICBJZkJyZWFrcG9pbnREaXJlY3RpdmUsXG4gICAgU3JjRGlyZWN0aXZlLFxuICAgIE9jeFRpbWVBZ29QaXBlLFxuICAgIFNyY0RpcmVjdGl2ZSxcbiAgICBBZHZhbmNlZERpcmVjdGl2ZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckFjY2VsZXJhdG9yTW9kdWxlIHt9XG4iXX0=
@@ -251,10 +251,10 @@ export class DataListGridComponent extends DataSortBase {
251
251
  }
252
252
  }
253
253
  DataListGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DataListGridComponent, deps: [{ token: LOCALE_ID }, { token: i1.TranslateService }, { token: i2.UserService }, { token: i3.Router }, { token: i0.Injector }, { token: i2.AppStateService }], target: i0.ɵɵFactoryTarget.Component });
254
- DataListGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DataListGridComponent, selector: "ocx-data-list-grid", inputs: { titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", emptyResultsMessage: "emptyResultsMessage", fallbackImage: "fallbackImage", layout: "layout", viewPermission: "viewPermission", editPermission: "editPermission", deletePermission: "deletePermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", viewMenuItemKey: "viewMenuItemKey", editMenuItemKey: "editMenuItemKey", deleteMenuItemKey: "deleteMenuItemKey", paginator: "paginator", page: "page", columns: "columns", name: "name", totalRecordsOnServer: "totalRecordsOnServer", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", data: "data", filters: "filters", sortDirection: "sortDirection", sortField: "sortField", gridItemSubtitleLinesTemplate: "gridItemSubtitleLinesTemplate", listItemSubtitleLinesTemplate: "listItemSubtitleLinesTemplate", listItemTemplate: "listItemTemplate", gridItemTemplate: "gridItemTemplate", additionalActions: "additionalActions" }, outputs: { viewItem: "viewItem", editItem: "editItem", deleteItem: "deleteItem", pageChanged: "pageChanged" }, queries: [{ propertyName: "gridItemSubtitleLinesChildTemplate", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLinesChildTemplate", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "listItemChildTemplate", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "gridItemChildTemplate", first: true, predicate: ["gridItem"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-dataView\n [value]=\"(displayedItems$ | async) || []\"\n [paginator]=\"paginator\"\n [first]=\"page * pageSize\"\n (onPage)=\"onPageChange($event)\"\n [rows]=\"pageSize\"\n [layout]=\"layout\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{{ (totalRecordsOnServer ? currentPageShowingWithTotalOnServerKey : currentPageShowingKey) | translate:params }}\"\n [rowsPerPageOptions]=\"[10, 25, 50, data?.length]\"\n id=\"dataListGrid_{{name}}\"\n>\n <ng-template let-item pTemplate=\"paginatordropdownitem\">\n {{ item.value === data?.length ? (\"OCX_DATA_TABLE.ALL\" | translate) : item.value }}\n </ng-template>\n <ng-template #gridItem let-item pTemplate=\"gridItem\">\n <ng-container\n [ngTemplateOutlet]=\"_gridItem ? _gridItem : defaultGridItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n\n <ng-template #listItem let-item pTemplate=\"listItem\">\n <ng-container\n [ngTemplateOutlet]=\"_listItem ? _listItem : defaultListItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n <ng-template pTemplate=\"empty\">\n <span>{{ emptyResultsMessage || (\"OCX_DATA_LIST_GRID.EMPTY_RESULT\" | translate) }}</span>\n </ng-template>\n</p-dataView>\n\n<ng-template #defaultGridItem let-item>\n <div class=\"col-12 lg:col-6 xl:col-4 flex\">\n <div class=\"data-grid-item card flex flex-column justify-content-between w-12 lg:w-11 mb-4 mt-4 align-self-stretch\">\n <div class=\"flex justify-content-center mb-3\">\n <img\n class=\"image\"\n src=\"{{ item.imagePath || (fallbackImagePath$ | async) }}\"\n (error)=\"imgError(item)\"\n alt=\"{{resolveFieldData(item, titleLineId)|| ''}}\"\n />\n </div>\n <div class=\"flex flex-row justify-content-between align-items-center\">\n <div class=\"data-grid-items flex-row\">\n <div class=\"item-name font-medium mr-3 text-2xl\">\n <a [routerLink]=\"\" (click)=\"onViewRow\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"_gridItemSubtitleLines ? _gridItemSubtitleLines : defaultGridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div>\n <p-menu #menu [model]=\"gridMenuItems\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n (click)=\"setSelectedItem(item); updateGridMenuItems(true); menu.toggle($event)\"\n icon=\"pi pi-ellipsis-v\"\n [ariaLabel]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS' | translate\"\n class=\"more-actions-menu-button menu-btn\"\n [attr.name]=\"'data-grid-item-menu-button'\"\n ></button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultGridItemSubtitleLines let-item>\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine edit-time text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n<ng-template #defaultListItem let-item>\n <div class=\"col-12\">\n <div class=\"flex flex-1 align-items-center p-3 w-full\">\n <div class=\"data-list-items flex-1\">\n <div class=\"item-name-row flex flex-row justify-content-between\">\n <div class=\"item-name mr-3 text-2xl font-medium\">\n <a [routerLink]=\"\" (click)=\"onViewRow(item)\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <div class=\"flex flex-column md:flex-row md:justify-content-between\">\n <ng-container *ngIf=\"viewItemObserved && (!viewActionVisibleField || fieldIsTruthy(item, viewActionVisibleField))\">\n <button\n type=\"button\"\n icon=\"pi pi-eye\"\n pButton\n class=\"p-button-rounded p-button-text mb-1 mr-2 viewListItemButton\"\n title=\"{{ (viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate }}\"\n [attr.aria-label]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n (click)=\"onViewRow(item)\"\n *ocxIfPermission=\"viewPermission\"\n [disabled]=\"!!viewActionEnabledField && !fieldIsTruthy(item, viewActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"editItemObserved && (!editActionVisibleField || fieldIsTruthy(item, editActionVisibleField))\">\n <button\n type=\"button\"\n class=\"p-button-rounded p-button-text mb-1 mr-2 editListItemButton\"\n icon=\"pi pi-pencil\"\n pButton\n title=\"{{ (editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate }}\"\n [attr.aria-label]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n (click)=\"onEditRow(item)\"\n *ocxIfPermission=\"editPermission\"\n [disabled]=\"!!editActionEnabledField && !fieldIsTruthy(item, editActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"deleteItemObserved && (!deleteActionVisibleField || fieldIsTruthy(item, deleteActionVisibleField))\">\n <button\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-text p-button-danger mb-1 mr-2 deleteListItemButton\"\n pButton\n title=\"{{ (deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate }}\"\n [attr.aria-label]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n (click)=\"onDeleteRow(item)\"\n *ocxIfPermission=\"deletePermission\"\n [disabled]=\"!!deleteActionEnabledField && !fieldIsTruthy(item, deleteActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngFor=\"let action of additionalActions\">\n <button\n *ocxIfPermission=\"action.permission\"\n pButton\n class=\"p-button-rounded p-button-text\"\n [ngClass]=\"action.classes\"\n [icon]=\"action.icon || ''\"\n (click)=\"action.callback(item)\"\n [title]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [attr.aria-label]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [disabled]=\"action.disabled\"\n ></button>\n </ng-container>\n </div>\n </div>\n <div class=\"text-base font-light my-1\">\n <ng-container\n [ngTemplateOutlet]=\"_listItemSubtitleLines ? _listItemSubtitleLines : defaultListItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultListItemSubtitleLines let-item=\"$implicit\">\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine text-xl my-3\">{{ resolveFieldData(item, subtitleLineId) }}</div>\n</ng-template>\n", styles: [".image{width:100%;height:100%}.menu-btn{color:var(--primary-text-color);background-color:var(--primary-color);border:var(--button-border);border-radius:var(--border-radius);padding:var(--button-padding);cursor:pointer;min-width:4rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i7.DataView, selector: "p-dataView", inputs: ["paginator", "rows", "totalRecords", "pageLinks", "rowsPerPageOptions", "paginatorPosition", "alwaysShowPaginator", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "lazy", "emptyMessage", "style", "styleClass", "gridStyleClass", "trackBy", "filterBy", "filterLocale", "loading", "loadingIcon", "first", "sortField", "sortOrder", "value", "layout"], outputs: ["onLazyLoad", "onPage", "onSort", "onChangeLayout"] }, { kind: "component", type: i8.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i9.IfPermissionDirective, selector: "[ocxIfPermission], [ocxIfNotPermission]", inputs: ["ocxIfPermission", "ocxIfNotPermission", "onMissingPermission", "ocxIfPermissionPermissions", "ocxIfNotPermissionPermissions"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
254
+ DataListGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DataListGridComponent, selector: "ocx-data-list-grid", inputs: { titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", emptyResultsMessage: "emptyResultsMessage", fallbackImage: "fallbackImage", layout: "layout", viewPermission: "viewPermission", editPermission: "editPermission", deletePermission: "deletePermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", viewMenuItemKey: "viewMenuItemKey", editMenuItemKey: "editMenuItemKey", deleteMenuItemKey: "deleteMenuItemKey", paginator: "paginator", page: "page", columns: "columns", name: "name", totalRecordsOnServer: "totalRecordsOnServer", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", data: "data", filters: "filters", sortDirection: "sortDirection", sortField: "sortField", gridItemSubtitleLinesTemplate: "gridItemSubtitleLinesTemplate", listItemSubtitleLinesTemplate: "listItemSubtitleLinesTemplate", listItemTemplate: "listItemTemplate", gridItemTemplate: "gridItemTemplate", additionalActions: "additionalActions" }, outputs: { viewItem: "viewItem", editItem: "editItem", deleteItem: "deleteItem", pageChanged: "pageChanged" }, queries: [{ propertyName: "gridItemSubtitleLinesChildTemplate", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLinesChildTemplate", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "listItemChildTemplate", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "gridItemChildTemplate", first: true, predicate: ["gridItem"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-dataView\n [value]=\"(displayedItems$ | async) || []\"\n [paginator]=\"paginator\"\n [first]=\"page * pageSize\"\n (onPage)=\"onPageChange($event)\"\n [rows]=\"pageSize\"\n [layout]=\"layout\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{{ (totalRecordsOnServer ? currentPageShowingWithTotalOnServerKey : currentPageShowingKey) | translate:params }}\"\n [rowsPerPageOptions]=\"[10, 25, 50, data?.length]\"\n id=\"dataListGrid_{{name}}\"\n paginatorDropdownAppendTo=\"body\"\n>\n <ng-template let-item pTemplate=\"paginatordropdownitem\">\n {{ item.value === data?.length ? (\"OCX_DATA_TABLE.ALL\" | translate) : item.value }}\n </ng-template>\n <ng-template #gridItem let-item pTemplate=\"gridItem\">\n <ng-container\n [ngTemplateOutlet]=\"_gridItem ? _gridItem : defaultGridItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n\n <ng-template #listItem let-item pTemplate=\"listItem\">\n <ng-container\n [ngTemplateOutlet]=\"_listItem ? _listItem : defaultListItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n <ng-template pTemplate=\"empty\">\n <span>{{ emptyResultsMessage || (\"OCX_DATA_LIST_GRID.EMPTY_RESULT\" | translate) }}</span>\n </ng-template>\n</p-dataView>\n\n<ng-template #defaultGridItem let-item>\n <div class=\"col-12 lg:col-6 xl:col-4 flex\">\n <div class=\"data-grid-item card flex flex-column justify-content-between w-12 lg:w-11 mb-4 mt-4 align-self-stretch\">\n <div class=\"flex justify-content-center mb-3\">\n <img\n class=\"image\"\n src=\"{{ item.imagePath || (fallbackImagePath$ | async) }}\"\n (error)=\"imgError(item)\"\n alt=\"{{resolveFieldData(item, titleLineId)|| ''}}\"\n />\n </div>\n <div class=\"flex flex-row justify-content-between align-items-center\">\n <div class=\"data-grid-items flex-row\">\n <div class=\"item-name font-medium mr-3 text-2xl\">\n <a [routerLink]=\"\" (click)=\"onViewRow\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"_gridItemSubtitleLines ? _gridItemSubtitleLines : defaultGridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div>\n <p-menu #menu [model]=\"gridMenuItems\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n (click)=\"setSelectedItem(item); updateGridMenuItems(true); menu.toggle($event)\"\n icon=\"pi pi-ellipsis-v\"\n [ariaLabel]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS' | translate\"\n class=\"more-actions-menu-button menu-btn\"\n [attr.name]=\"'data-grid-item-menu-button'\"\n ></button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultGridItemSubtitleLines let-item>\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine edit-time text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n<ng-template #defaultListItem let-item>\n <div class=\"col-12\">\n <div class=\"flex flex-1 align-items-center p-3 w-full\">\n <div class=\"data-list-items flex-1\">\n <div class=\"item-name-row flex flex-row justify-content-between\">\n <div class=\"item-name mr-3 text-2xl font-medium\">\n <a [routerLink]=\"\" (click)=\"onViewRow(item)\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <div class=\"flex flex-column md:flex-row md:justify-content-between\">\n <ng-container *ngIf=\"viewItemObserved && (!viewActionVisibleField || fieldIsTruthy(item, viewActionVisibleField))\">\n <button\n type=\"button\"\n icon=\"pi pi-eye\"\n pButton\n class=\"p-button-rounded p-button-text mb-1 mr-2 viewListItemButton\"\n title=\"{{ (viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate }}\"\n [attr.aria-label]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n (click)=\"onViewRow(item)\"\n *ocxIfPermission=\"viewPermission\"\n [disabled]=\"!!viewActionEnabledField && !fieldIsTruthy(item, viewActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"editItemObserved && (!editActionVisibleField || fieldIsTruthy(item, editActionVisibleField))\">\n <button\n type=\"button\"\n class=\"p-button-rounded p-button-text mb-1 mr-2 editListItemButton\"\n icon=\"pi pi-pencil\"\n pButton\n title=\"{{ (editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate }}\"\n [attr.aria-label]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n (click)=\"onEditRow(item)\"\n *ocxIfPermission=\"editPermission\"\n [disabled]=\"!!editActionEnabledField && !fieldIsTruthy(item, editActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"deleteItemObserved && (!deleteActionVisibleField || fieldIsTruthy(item, deleteActionVisibleField))\">\n <button\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-text p-button-danger mb-1 mr-2 deleteListItemButton\"\n pButton\n title=\"{{ (deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate }}\"\n [attr.aria-label]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n (click)=\"onDeleteRow(item)\"\n *ocxIfPermission=\"deletePermission\"\n [disabled]=\"!!deleteActionEnabledField && !fieldIsTruthy(item, deleteActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngFor=\"let action of additionalActions\">\n <button\n *ocxIfPermission=\"action.permission\"\n pButton\n class=\"p-button-rounded p-button-text\"\n [ngClass]=\"action.classes\"\n [icon]=\"action.icon || ''\"\n (click)=\"action.callback(item)\"\n [title]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [attr.aria-label]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [disabled]=\"action.disabled\"\n ></button>\n </ng-container>\n </div>\n </div>\n <div class=\"text-base font-light my-1\">\n <ng-container\n [ngTemplateOutlet]=\"_listItemSubtitleLines ? _listItemSubtitleLines : defaultListItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultListItemSubtitleLines let-item=\"$implicit\">\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine text-xl my-3\">{{ resolveFieldData(item, subtitleLineId) }}</div>\n</ng-template>\n", styles: [".image{width:100%;height:100%}.menu-btn{color:var(--primary-text-color);background-color:var(--primary-color);border:var(--button-border);border-radius:var(--border-radius);padding:var(--button-padding);cursor:pointer;min-width:4rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i7.DataView, selector: "p-dataView", inputs: ["paginator", "rows", "totalRecords", "pageLinks", "rowsPerPageOptions", "paginatorPosition", "alwaysShowPaginator", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "lazy", "emptyMessage", "style", "styleClass", "gridStyleClass", "trackBy", "filterBy", "filterLocale", "loading", "loadingIcon", "first", "sortField", "sortOrder", "value", "layout"], outputs: ["onLazyLoad", "onPage", "onSort", "onChangeLayout"] }, { kind: "component", type: i8.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i9.IfPermissionDirective, selector: "[ocxIfPermission], [ocxIfNotPermission]", inputs: ["ocxIfPermission", "ocxIfNotPermission", "onMissingPermission", "ocxIfPermissionPermissions", "ocxIfNotPermissionPermissions"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
255
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DataListGridComponent, decorators: [{
256
256
  type: Component,
257
- args: [{ selector: 'ocx-data-list-grid', template: "<p-dataView\n [value]=\"(displayedItems$ | async) || []\"\n [paginator]=\"paginator\"\n [first]=\"page * pageSize\"\n (onPage)=\"onPageChange($event)\"\n [rows]=\"pageSize\"\n [layout]=\"layout\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{{ (totalRecordsOnServer ? currentPageShowingWithTotalOnServerKey : currentPageShowingKey) | translate:params }}\"\n [rowsPerPageOptions]=\"[10, 25, 50, data?.length]\"\n id=\"dataListGrid_{{name}}\"\n>\n <ng-template let-item pTemplate=\"paginatordropdownitem\">\n {{ item.value === data?.length ? (\"OCX_DATA_TABLE.ALL\" | translate) : item.value }}\n </ng-template>\n <ng-template #gridItem let-item pTemplate=\"gridItem\">\n <ng-container\n [ngTemplateOutlet]=\"_gridItem ? _gridItem : defaultGridItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n\n <ng-template #listItem let-item pTemplate=\"listItem\">\n <ng-container\n [ngTemplateOutlet]=\"_listItem ? _listItem : defaultListItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n <ng-template pTemplate=\"empty\">\n <span>{{ emptyResultsMessage || (\"OCX_DATA_LIST_GRID.EMPTY_RESULT\" | translate) }}</span>\n </ng-template>\n</p-dataView>\n\n<ng-template #defaultGridItem let-item>\n <div class=\"col-12 lg:col-6 xl:col-4 flex\">\n <div class=\"data-grid-item card flex flex-column justify-content-between w-12 lg:w-11 mb-4 mt-4 align-self-stretch\">\n <div class=\"flex justify-content-center mb-3\">\n <img\n class=\"image\"\n src=\"{{ item.imagePath || (fallbackImagePath$ | async) }}\"\n (error)=\"imgError(item)\"\n alt=\"{{resolveFieldData(item, titleLineId)|| ''}}\"\n />\n </div>\n <div class=\"flex flex-row justify-content-between align-items-center\">\n <div class=\"data-grid-items flex-row\">\n <div class=\"item-name font-medium mr-3 text-2xl\">\n <a [routerLink]=\"\" (click)=\"onViewRow\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"_gridItemSubtitleLines ? _gridItemSubtitleLines : defaultGridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div>\n <p-menu #menu [model]=\"gridMenuItems\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n (click)=\"setSelectedItem(item); updateGridMenuItems(true); menu.toggle($event)\"\n icon=\"pi pi-ellipsis-v\"\n [ariaLabel]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS' | translate\"\n class=\"more-actions-menu-button menu-btn\"\n [attr.name]=\"'data-grid-item-menu-button'\"\n ></button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultGridItemSubtitleLines let-item>\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine edit-time text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n<ng-template #defaultListItem let-item>\n <div class=\"col-12\">\n <div class=\"flex flex-1 align-items-center p-3 w-full\">\n <div class=\"data-list-items flex-1\">\n <div class=\"item-name-row flex flex-row justify-content-between\">\n <div class=\"item-name mr-3 text-2xl font-medium\">\n <a [routerLink]=\"\" (click)=\"onViewRow(item)\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <div class=\"flex flex-column md:flex-row md:justify-content-between\">\n <ng-container *ngIf=\"viewItemObserved && (!viewActionVisibleField || fieldIsTruthy(item, viewActionVisibleField))\">\n <button\n type=\"button\"\n icon=\"pi pi-eye\"\n pButton\n class=\"p-button-rounded p-button-text mb-1 mr-2 viewListItemButton\"\n title=\"{{ (viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate }}\"\n [attr.aria-label]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n (click)=\"onViewRow(item)\"\n *ocxIfPermission=\"viewPermission\"\n [disabled]=\"!!viewActionEnabledField && !fieldIsTruthy(item, viewActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"editItemObserved && (!editActionVisibleField || fieldIsTruthy(item, editActionVisibleField))\">\n <button\n type=\"button\"\n class=\"p-button-rounded p-button-text mb-1 mr-2 editListItemButton\"\n icon=\"pi pi-pencil\"\n pButton\n title=\"{{ (editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate }}\"\n [attr.aria-label]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n (click)=\"onEditRow(item)\"\n *ocxIfPermission=\"editPermission\"\n [disabled]=\"!!editActionEnabledField && !fieldIsTruthy(item, editActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"deleteItemObserved && (!deleteActionVisibleField || fieldIsTruthy(item, deleteActionVisibleField))\">\n <button\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-text p-button-danger mb-1 mr-2 deleteListItemButton\"\n pButton\n title=\"{{ (deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate }}\"\n [attr.aria-label]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n (click)=\"onDeleteRow(item)\"\n *ocxIfPermission=\"deletePermission\"\n [disabled]=\"!!deleteActionEnabledField && !fieldIsTruthy(item, deleteActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngFor=\"let action of additionalActions\">\n <button\n *ocxIfPermission=\"action.permission\"\n pButton\n class=\"p-button-rounded p-button-text\"\n [ngClass]=\"action.classes\"\n [icon]=\"action.icon || ''\"\n (click)=\"action.callback(item)\"\n [title]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [attr.aria-label]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [disabled]=\"action.disabled\"\n ></button>\n </ng-container>\n </div>\n </div>\n <div class=\"text-base font-light my-1\">\n <ng-container\n [ngTemplateOutlet]=\"_listItemSubtitleLines ? _listItemSubtitleLines : defaultListItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultListItemSubtitleLines let-item=\"$implicit\">\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine text-xl my-3\">{{ resolveFieldData(item, subtitleLineId) }}</div>\n</ng-template>\n", styles: [".image{width:100%;height:100%}.menu-btn{color:var(--primary-text-color);background-color:var(--primary-color);border:var(--button-border);border-radius:var(--border-radius);padding:var(--button-padding);cursor:pointer;min-width:4rem}\n"] }]
257
+ args: [{ selector: 'ocx-data-list-grid', template: "<p-dataView\n [value]=\"(displayedItems$ | async) || []\"\n [paginator]=\"paginator\"\n [first]=\"page * pageSize\"\n (onPage)=\"onPageChange($event)\"\n [rows]=\"pageSize\"\n [layout]=\"layout\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{{ (totalRecordsOnServer ? currentPageShowingWithTotalOnServerKey : currentPageShowingKey) | translate:params }}\"\n [rowsPerPageOptions]=\"[10, 25, 50, data?.length]\"\n id=\"dataListGrid_{{name}}\"\n paginatorDropdownAppendTo=\"body\"\n>\n <ng-template let-item pTemplate=\"paginatordropdownitem\">\n {{ item.value === data?.length ? (\"OCX_DATA_TABLE.ALL\" | translate) : item.value }}\n </ng-template>\n <ng-template #gridItem let-item pTemplate=\"gridItem\">\n <ng-container\n [ngTemplateOutlet]=\"_gridItem ? _gridItem : defaultGridItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n\n <ng-template #listItem let-item pTemplate=\"listItem\">\n <ng-container\n [ngTemplateOutlet]=\"_listItem ? _listItem : defaultListItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n <ng-template pTemplate=\"empty\">\n <span>{{ emptyResultsMessage || (\"OCX_DATA_LIST_GRID.EMPTY_RESULT\" | translate) }}</span>\n </ng-template>\n</p-dataView>\n\n<ng-template #defaultGridItem let-item>\n <div class=\"col-12 lg:col-6 xl:col-4 flex\">\n <div class=\"data-grid-item card flex flex-column justify-content-between w-12 lg:w-11 mb-4 mt-4 align-self-stretch\">\n <div class=\"flex justify-content-center mb-3\">\n <img\n class=\"image\"\n src=\"{{ item.imagePath || (fallbackImagePath$ | async) }}\"\n (error)=\"imgError(item)\"\n alt=\"{{resolveFieldData(item, titleLineId)|| ''}}\"\n />\n </div>\n <div class=\"flex flex-row justify-content-between align-items-center\">\n <div class=\"data-grid-items flex-row\">\n <div class=\"item-name font-medium mr-3 text-2xl\">\n <a [routerLink]=\"\" (click)=\"onViewRow\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"_gridItemSubtitleLines ? _gridItemSubtitleLines : defaultGridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div>\n <p-menu #menu [model]=\"gridMenuItems\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n (click)=\"setSelectedItem(item); updateGridMenuItems(true); menu.toggle($event)\"\n icon=\"pi pi-ellipsis-v\"\n [ariaLabel]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS' | translate\"\n class=\"more-actions-menu-button menu-btn\"\n [attr.name]=\"'data-grid-item-menu-button'\"\n ></button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultGridItemSubtitleLines let-item>\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine edit-time text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n<ng-template #defaultListItem let-item>\n <div class=\"col-12\">\n <div class=\"flex flex-1 align-items-center p-3 w-full\">\n <div class=\"data-list-items flex-1\">\n <div class=\"item-name-row flex flex-row justify-content-between\">\n <div class=\"item-name mr-3 text-2xl font-medium\">\n <a [routerLink]=\"\" (click)=\"onViewRow(item)\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <div class=\"flex flex-column md:flex-row md:justify-content-between\">\n <ng-container *ngIf=\"viewItemObserved && (!viewActionVisibleField || fieldIsTruthy(item, viewActionVisibleField))\">\n <button\n type=\"button\"\n icon=\"pi pi-eye\"\n pButton\n class=\"p-button-rounded p-button-text mb-1 mr-2 viewListItemButton\"\n title=\"{{ (viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate }}\"\n [attr.aria-label]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n (click)=\"onViewRow(item)\"\n *ocxIfPermission=\"viewPermission\"\n [disabled]=\"!!viewActionEnabledField && !fieldIsTruthy(item, viewActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"editItemObserved && (!editActionVisibleField || fieldIsTruthy(item, editActionVisibleField))\">\n <button\n type=\"button\"\n class=\"p-button-rounded p-button-text mb-1 mr-2 editListItemButton\"\n icon=\"pi pi-pencil\"\n pButton\n title=\"{{ (editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate }}\"\n [attr.aria-label]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n (click)=\"onEditRow(item)\"\n *ocxIfPermission=\"editPermission\"\n [disabled]=\"!!editActionEnabledField && !fieldIsTruthy(item, editActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngIf=\"deleteItemObserved && (!deleteActionVisibleField || fieldIsTruthy(item, deleteActionVisibleField))\">\n <button\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-text p-button-danger mb-1 mr-2 deleteListItemButton\"\n pButton\n title=\"{{ (deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate }}\"\n [attr.aria-label]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n (click)=\"onDeleteRow(item)\"\n *ocxIfPermission=\"deletePermission\"\n [disabled]=\"!!deleteActionEnabledField && !fieldIsTruthy(item, deleteActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngFor=\"let action of additionalActions\">\n <button\n *ocxIfPermission=\"action.permission\"\n pButton\n class=\"p-button-rounded p-button-text\"\n [ngClass]=\"action.classes\"\n [icon]=\"action.icon || ''\"\n (click)=\"action.callback(item)\"\n [title]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [attr.aria-label]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [disabled]=\"action.disabled\"\n ></button>\n </ng-container>\n </div>\n </div>\n <div class=\"text-base font-light my-1\">\n <ng-container\n [ngTemplateOutlet]=\"_listItemSubtitleLines ? _listItemSubtitleLines : defaultListItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultListItemSubtitleLines let-item=\"$implicit\">\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine text-xl my-3\">{{ resolveFieldData(item, subtitleLineId) }}</div>\n</ng-template>\n", styles: [".image{width:100%;height:100%}.menu-btn{color:var(--primary-text-color);background-color:var(--primary-color);border:var(--button-border);border-radius:var(--border-radius);padding:var(--button-padding);cursor:pointer;min-width:4rem}\n"] }]
258
258
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
259
259
  type: Inject,
260
260
  args: [LOCALE_ID]
@@ -355,4 +355,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
355
355
  }], pageChanged: [{
356
356
  type: Output
357
357
  }] } });
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWFjY2VsZXJhdG9yL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWxpc3QtZ3JpZC9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBRVQsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN0RCxPQUFPLEVBQVksVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUlsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBOzs7Ozs7Ozs7OztBQW9CL0QsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFlBQVk7SUEyQnJELElBQ0ksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxz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O2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFPRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csc0NBQXNDO3NCQUE5QyxLQUFLO2dCQVlGLElBQUk7c0JBRFAsS0FBSztnQkFVRixPQUFPO3NCQURWLEtBQUs7Z0JBVUYsYUFBYTtzQkFEaEIsS0FBSztnQkFZRixTQUFTO3NCQURaLEtBQUs7Z0JBUUcsNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNpQyxrQ0FBa0M7c0JBQXhFLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUs1Qiw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ2lDLGtDQUFrQztzQkFBeEUsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSzVCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDb0IscUJBQXFCO3NCQUE5QyxZQUFZO3VCQUFDLFVBQVU7Z0JBS2YsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNvQixxQkFBcUI7c0JBQTlDLFlBQVk7dUJBQUMsVUFBVTtnQkFPcEIsaUJBQWlCO3NCQURwQixLQUFLO2dCQVNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRG9DaGVjayxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgTE9DQUxFX0lELFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IE1lbnVJdGVtLCBQcmltZUljb25zIH0gZnJvbSAncHJpbWVuZy9hcGknXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgTWZlSW5mbyB9IGZyb20gJ0BvbmVjeC9pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICdAb25lY3gvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJ0BvbmVjeC9hbmd1bGFyLWludGVncmF0aW9uLWludGVyZmFjZSdcbmltcG9ydCB7IERhdGFBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLWFjdGlvbidcbmltcG9ydCB7IERhdGFTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1zb3J0LWRpcmVjdGlvbidcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtdGFibGUtY29sdW1uLm1vZGVsJ1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3R1dGlscydcbmltcG9ydCB7IERhdGFTb3J0QmFzZSB9IGZyb20gJy4uL2RhdGEtc29ydC1iYXNlL2RhdGEtc29ydC1iYXNlJ1xuaW1wb3J0IHsgRmlsdGVyLCBSb3cgfSBmcm9tICcuLi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50J1xuXG5leHBvcnQgdHlwZSBMaXN0R3JpZERhdGEgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgaW1hZ2VQYXRoOiBzdHJpbmcgfCBudW1iZXJcbiAgW2NvbHVtbklkOiBzdHJpbmddOiB1bmtub3duXG59XG5cbnR5cGUgUm93TGlzdEdyaWREYXRhID0gTGlzdEdyaWREYXRhICYgUm93XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEdyaWREYXRhTWVudUl0ZW0gZXh0ZW5kcyBNZW51SXRlbSB7XG4gIHBlcm1pc3Npb246IHN0cmluZ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvY3gtZGF0YS1saXN0LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1saXN0LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhTGlzdEdyaWRDb21wb25lbnQgZXh0ZW5kcyBEYXRhU29ydEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2sge1xuICBASW5wdXQoKSB0aXRsZUxpbmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHN1YnRpdGxlTGluZUlkczogc3RyaW5nW10gPSBbXVxuICBASW5wdXQoKSBjbGllbnRTaWRlU29ydGluZyA9IHRydWVcbiAgQElucHV0KCkgY2xpZW50U2lkZUZpbHRlcmluZyA9IHRydWVcbiAgQElucHV0KCkgc29ydFN0YXRlczogRGF0YVNvcnREaXJlY3Rpb25bXSA9IFtdXG4gIEBJbnB1dCgpIHBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDI1LCA1MF1cbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IHRoaXMucGFnZVNpemVzWzBdIHx8IDUwXG4gIEBJbnB1dCgpIGVtcHR5UmVzdWx0c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBmYWxsYmFja0ltYWdlID0gJ3BsYWNlaG9sZGVyLnBuZydcbiAgQElucHV0KCkgbGF5b3V0OiAnZ3JpZCcgfCAnbGlzdCcgPSAnZ3JpZCdcbiAgQElucHV0KCkgdmlld1Blcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0UGVybWlzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGRlbGV0ZVBlcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB2aWV3QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld01lbnVJdGVtS2V5OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdE1lbnVJdGVtS2V5OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlTWVudUl0ZW1LZXk6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBwYWdpbmF0b3IgPSB0cnVlXG4gIEBJbnB1dCgpIHBhZ2UgPSAwXG4gIEBJbnB1dCgpIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdID0gW11cbiAgQElucHV0KCkgbmFtZSA9ICcnXG4gIEBJbnB1dCgpXG4gIGdldCB0b3RhbFJlY29yZHNPblNlcnZlcigpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBhcmFtc1sndG90YWxSZWNvcmRzT25TZXJ2ZXInXSA/IE51bWJlcih0aGlzLnBhcmFtc1sndG90YWxSZWNvcmRzT25TZXJ2ZXInXSkgOiB1bmRlZmluZWRcbiAgfVxuICBzZXQgdG90YWxSZWNvcmRzT25TZXJ2ZXIodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucGFyYW1zWyd0b3RhbFJlY29yZHNPblNlcnZlciddID0gdmFsdWU/LnRvU3RyaW5nKCkgPz8gJzAnXG4gIH1cbiAgQElucHV0KCkgY3VycmVudFBhZ2VTaG93aW5nS2V5ID0gJ09DWF9EQVRBX1RBQkxFLlNIT1dJTkcnXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5ID0gJ09DWF9EQVRBX1RBQkxFLlNIT1dJTkdfV0lUSF9UT1RBTF9PTl9TRVJWRVInXG4gIHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBjdXJyZW50UGFnZTogJ3tjdXJyZW50UGFnZX0nLFxuICAgIHRvdGFsUGFnZXM6ICd7dG90YWxQYWdlc30nLFxuICAgIHJvd3M6ICd7cm93c30nLFxuICAgIGZpcnN0OiAne2ZpcnN0fScsXG4gICAgbGFzdDogJ3tsYXN0fScsXG4gICAgdG90YWxSZWNvcmRzOiAne3RvdGFsUmVjb3Jkc30nLFxuICB9XG5cbiAgX2RhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSb3dMaXN0R3JpZERhdGFbXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBkYXRhKCk6IFJvd0xpc3RHcmlkRGF0YVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBkYXRhKHZhbHVlOiBSb3dMaXN0R3JpZERhdGFbXSkge1xuICAgIHRoaXMuX29yaWdpbmFsRGF0YSA9IFsuLi52YWx1ZV1cbiAgICB0aGlzLl9kYXRhJC5uZXh0KFsuLi52YWx1ZV0pXG4gIH1cbiAgX2ZpbHRlcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJbXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBmaWx0ZXJzKCk6IEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVycyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBmaWx0ZXJzKHZhbHVlOiBGaWx0ZXJbXSkge1xuICAgIHRoaXMuX2ZpbHRlcnMkLm5leHQodmFsdWUpXG4gIH1cbiAgX29yaWdpbmFsRGF0YTogUm93TGlzdEdyaWREYXRhW10gPSBbXVxuICBfc29ydERpcmVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3J0RGlyZWN0aW9uPihEYXRhU29ydERpcmVjdGlvbi5OT05FKVxuICBASW5wdXQoKVxuICBnZXQgc29ydERpcmVjdGlvbigpOiBEYXRhU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnREaXJlY3Rpb24kLmdldFZhbHVlKClcbiAgfVxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogRGF0YVNvcnREaXJlY3Rpb24pIHtcbiAgICBpZiAodmFsdWUgPT09IERhdGFTb3J0RGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgIHRoaXMuX2RhdGEkLm5leHQoWy4uLnRoaXMuX29yaWdpbmFsRGF0YV0pXG4gICAgfVxuICAgIHRoaXMuX3NvcnREaXJlY3Rpb24kLm5leHQodmFsdWUpXG4gIH1cbiAgX3NvcnRGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0RmllbGQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcz8uX3NvcnRGaWVsZCQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBzb3J0RmllbGQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NvcnRGaWVsZCQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtU3VidGl0bGVMaW5lcycpIGdyaWRJdGVtU3VidGl0bGVMaW5lc0NoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGUgfHwgdGhpcy5ncmlkSXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbVN1YnRpdGxlTGluZXMnKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlIHx8IHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgbGlzdEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbScpIGxpc3RJdGVtQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX2xpc3RJdGVtKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtVGVtcGxhdGUgfHwgdGhpcy5saXN0SXRlbUNoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZ3JpZEl0ZW0nKSBncmlkSXRlbUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVRlbXBsYXRlIHx8IHRoaXMuZ3JpZEl0ZW1DaGlsZFRlbXBsYXRlXG4gIH1cblxuICBfYWRkaXRpb25hbEFjdGlvbnM6IERhdGFBY3Rpb25bXSA9IFtdXG4gIEBJbnB1dCgpXG4gIGdldCBhZGRpdGlvbmFsQWN0aW9ucygpOiBEYXRhQWN0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9hZGRpdGlvbmFsQWN0aW9uc1xuICB9XG4gIHNldCBhZGRpdGlvbmFsQWN0aW9ucyh2YWx1ZTogRGF0YUFjdGlvbltdKSB7XG4gICAgdGhpcy5fYWRkaXRpb25hbEFjdGlvbnMgPSB2YWx1ZVxuICAgIHRoaXMudXBkYXRlR3JpZE1lbnVJdGVtcygpXG4gIH1cblxuICBAT3V0cHV0KCkgdmlld0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZWRpdEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZGVsZXRlSXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdEdyaWREYXRhPigpXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpXG5cbiAgZ2V0IHZpZXdJdGVtT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZHYgPSB0aGlzLmluamVjdG9yLmdldCgnRGF0YVZpZXdDb21wb25lbnQnLCBudWxsKVxuICAgIHJldHVybiBkdj8udmlld0l0ZW1PYnNlcnZlZCB8fCBkdj8udmlld0l0ZW0ub2JzZXJ2ZWQgfHwgdGhpcy52aWV3SXRlbS5vYnNlcnZlZFxuICB9XG4gIGdldCBlZGl0SXRlbU9ic2VydmVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGR2ID0gdGhpcy5pbmplY3Rvci5nZXQoJ0RhdGFWaWV3Q29tcG9uZW50JywgbnVsbClcbiAgICByZXR1cm4gZHY/LmVkaXRJdGVtT2JzZXJ2ZWQgfHwgZHY/LmVkaXRJdGVtLm9ic2VydmVkIHx8IHRoaXMuZWRpdEl0ZW0ub2JzZXJ2ZWRcbiAgfVxuICBnZXQgZGVsZXRlSXRlbU9ic2VydmVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGR2ID0gdGhpcy5pbmplY3Rvci5nZXQoJ0RhdGFWaWV3Q29tcG9uZW50JywgbnVsbClcbiAgICByZXR1cm4gZHY/LmRlbGV0ZUl0ZW1PYnNlcnZlZCB8fCBkdj8uZGVsZXRlSXRlbS5vYnNlcnZlZCB8fCB0aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWRcbiAgfVxuXG4gIGdldCBzb3J0RGlyZWN0aW9uTnVtYmVyKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbiA9PT0gRGF0YVNvcnREaXJlY3Rpb24uQVNDRU5ESU5HKSByZXR1cm4gMVxuICAgIGlmICh0aGlzLnNvcnREaXJlY3Rpb24gPT09IERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkcpIHJldHVybiAtMVxuICAgIHJldHVybiAwXG4gIH1cblxuICBzaG93TWVudSA9IGZhbHNlXG4gIGdyaWRNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXVxuICBzZWxlY3RlZEl0ZW06IExpc3RHcmlkRGF0YSB8IHVuZGVmaW5lZFxuICBvYnNlcnZlZE91dHB1dHMgPSAwXG5cbiAgZGlzcGxheWVkSXRlbXMkOiBPYnNlcnZhYmxlPHVua25vd25bXT4gfCB1bmRlZmluZWRcbiAgZmFsbGJhY2tJbWFnZVBhdGgkITogT2JzZXJ2YWJsZTxzdHJpbmc+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nLFxuICAgIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxvY2FsZSwgdHJhbnNsYXRlU2VydmljZSlcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUgfHwgdGhpcy5yb3V0ZXIudXJsLnJlcGxhY2UoL1teQS1aYS16MC05XS8sICdfJylcbiAgICB0aGlzLmZhbGxiYWNrSW1hZ2VQYXRoJCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRNZmUkLnBpcGUoXG4gICAgICBtYXAoKGN1cnJlbnRNZmUpID0+IHRoaXMuZ2V0RmFsbGJhY2tJbWFnZVBhdGgoY3VycmVudE1mZSkpXG4gICAgKVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IG9ic2VydmVkT3V0cHV0cyA9IDxhbnk+dGhpcy52aWV3SXRlbS5vYnNlcnZlZCArIDxhbnk+dGhpcy5kZWxldGVJdGVtLm9ic2VydmVkICsgPGFueT50aGlzLmVkaXRJdGVtLm9ic2VydmVkXG4gICAgaWYgKHRoaXMub2JzZXJ2ZWRPdXRwdXRzICE9PSBvYnNlcnZlZE91dHB1dHMpIHtcbiAgICAgIHRoaXMudXBkYXRlR3JpZE1lbnVJdGVtcygpXG4gICAgICB0aGlzLm9ic2VydmVkT3V0cHV0cyA9IG9ic2VydmVkT3V0cHV0c1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheWVkSXRlbXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5fZGF0YSQsIHRoaXMuX2ZpbHRlcnMkLCB0aGlzLl9zb3J0RmllbGQkLCB0aGlzLl9zb3J0RGlyZWN0aW9uJF0pLnBpcGUoXG4gICAgICBtZXJnZU1hcCgocGFyYW1zKSA9PiB0aGlzLnRyYW5zbGF0ZUl0ZW1zKHBhcmFtcywgdGhpcy5jb2x1bW5zLCB0aGlzLmNsaWVudFNpZGVGaWx0ZXJpbmcsIHRoaXMuY2xpZW50U2lkZVNvcnRpbmcpKSxcbiAgICAgIG1hcCgocGFyYW1zKSA9PiB0aGlzLmZpbHRlckl0ZW1zKHBhcmFtcywgdGhpcy5jbGllbnRTaWRlRmlsdGVyaW5nKSksXG4gICAgICBtYXAoKHBhcmFtcykgPT4gdGhpcy5zb3J0SXRlbXMocGFyYW1zLCB0aGlzLmNvbHVtbnMsIHRoaXMuY2xpZW50U2lkZVNvcnRpbmcpKSxcbiAgICAgIG1hcCgoW2l0ZW1zXSkgPT4gaXRlbXMpXG4gICAgKVxuXG4gICAgdGhpcy5zaG93TWVudSA9XG4gICAgICAoISF0aGlzLnZpZXdQZXJtaXNzaW9uICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLnZpZXdQZXJtaXNzaW9uKSkgfHxcbiAgICAgICghIXRoaXMuZWRpdFBlcm1pc3Npb24gJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMuZWRpdFBlcm1pc3Npb24pKSB8fFxuICAgICAgKCEhdGhpcy5kZWxldGVQZXJtaXNzaW9uICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLmRlbGV0ZVBlcm1pc3Npb24pKVxuICB9XG5cbiAgb25EZWxldGVSb3coZWxlbWVudDogTGlzdEdyaWREYXRhKSB7XG4gICAgdGhpcy5kZWxldGVJdGVtLmVtaXQoZWxlbWVudClcbiAgfVxuXG4gIG9uVmlld1JvdyhlbGVtZW50OiBMaXN0R3JpZERhdGEpIHtcbiAgICBpZiAoISF0aGlzLnZpZXdQZXJtaXNzaW9uICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLnZpZXdQZXJtaXNzaW9uKSkge1xuICAgICAgdGhpcy52aWV3SXRlbS5lbWl0KGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgb25FZGl0Um93KGVsZW1lbnQ6IExpc3RHcmlkRGF0YSkge1xuICAgIHRoaXMuZWRpdEl0ZW0uZW1pdChlbGVtZW50KVxuICB9XG5cbiAgaW1nRXJyb3IoaXRlbTogTGlzdEdyaWREYXRhKSB7XG4gICAgaXRlbS5pbWFnZVBhdGggPSAnJ1xuICB9XG5cbiAgZ2V0RmFsbGJhY2tJbWFnZVBhdGgobWZlSW5mbzogTWZlSW5mbykge1xuICAgIHJldHVybiBtZmVJbmZvPy5yZW1vdGVCYXNlVXJsXG4gICAgICA/IGAke21mZUluZm8ucmVtb3RlQmFzZVVybH0vb25lY3gtcG9ydGFsLWxpYi9hc3NldHMvaW1hZ2VzLyR7dGhpcy5mYWxsYmFja0ltYWdlfWBcbiAgICAgIDogYC4vb25lY3gtcG9ydGFsLWxpYi9hc3NldHMvaW1hZ2VzLyR7dGhpcy5mYWxsYmFja0ltYWdlfWBcbiAgfVxuXG4gIHVwZGF0ZUdyaWRNZW51SXRlbXModXNlU2VsZWN0ZWRJdGVtID0gZmFsc2UpOiB2b2lkIHtcbiAgICBsZXQgZGVsZXRlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBsZXQgZWRpdERpc2FibGVkID0gZmFsc2U7XG4gICAgbGV0IHZpZXdEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgbGV0IGRlbGV0ZVZpc2libGUgPSB0cnVlO1xuICAgIGxldCBlZGl0VmlzaWJsZSA9IHRydWU7XG4gICAgbGV0IHZpZXdWaXNpYmxlID0gdHJ1ZTtcblxuICAgIGlmKHVzZVNlbGVjdGVkSXRlbSAmJiB0aGlzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgdmlld0Rpc2FibGVkID0gISF0aGlzLnZpZXdBY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy52aWV3QWN0aW9uRW5hYmxlZEZpZWxkKTtcbiAgICAgIGVkaXREaXNhYmxlZCA9ICEhdGhpcy5lZGl0QWN0aW9uRW5hYmxlZEZpZWxkICYmICF0aGlzLmZpZWxkSXNUcnV0aHkodGhpcy5zZWxlY3RlZEl0ZW0sIHRoaXMuZWRpdEFjdGlvbkVuYWJsZWRGaWVsZCk7XG4gICAgICBkZWxldGVEaXNhYmxlZCA9ICEhdGhpcy5kZWxldGVBY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy5kZWxldGVBY3Rpb25FbmFibGVkRmllbGQpO1xuXG4gICAgICB2aWV3VmlzaWJsZSA9ICghdGhpcy52aWV3QWN0aW9uVmlzaWJsZUZpZWxkIHx8IHRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy52aWV3QWN0aW9uVmlzaWJsZUZpZWxkKSlcbiAgICAgIGVkaXRWaXNpYmxlID0gKCF0aGlzLmVkaXRBY3Rpb25WaXNpYmxlRmllbGQgfHwgdGhpcy5maWVsZElzVHJ1dGh5KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLmVkaXRBY3Rpb25WaXNpYmxlRmllbGQpKVxuICAgICAgZGVsZXRlVmlzaWJsZSA9ICghdGhpcy5kZWxldGVBY3Rpb25WaXNpYmxlRmllbGQgfHwgdGhpcy5maWVsZElzVHJ1dGh5KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLmRlbGV0ZUFjdGlvblZpc2libGVGaWVsZCkpXG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAuZ2V0KFtcbiAgICAgICAgdGhpcy52aWV3TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLlZJRVcnLFxuICAgICAgICB0aGlzLmVkaXRNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuRURJVCcsXG4gICAgICAgIHRoaXMuZGVsZXRlTWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkRFTEVURScsXG4gICAgICAgIC4uLnRoaXMuYWRkaXRpb25hbEFjdGlvbnMubWFwKChhKSA9PiBhLmxhYmVsS2V5IHx8ICcnKSxcbiAgICAgIF0pXG4gICAgICAuc3Vic2NyaWJlKCh0cmFuc2xhdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdXG4gICAgICAgIGNvbnN0IGF1dG9tYXRpb25JZCA9ICdkYXRhLWdyaWQtYWN0aW9uLWJ1dHRvbidcbiAgICAgICAgY29uc3QgYXV0b21hdGlvbklkSGlkZGVuID0gJ2RhdGEtZ3JpZC1hY3Rpb24tYnV0dG9uLWhpZGRlbidcbiAgICAgICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQgJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMudmlld1Blcm1pc3Npb24gfHwgJycpKSB7XG4gICAgICAgICAgbWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1t0aGlzLnZpZXdNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuVklFVyddLFxuICAgICAgICAgICAgaWNvbjogUHJpbWVJY29ucy5FWUUsXG4gICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnZpZXdJdGVtLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW0pLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHZpZXdEaXNhYmxlZCxcbiAgICAgICAgICAgIHZpc2libGU6IHZpZXdWaXNpYmxlLFxuICAgICAgICAgICAgYXV0b21hdGlvbklkOiB2aWV3VmlzaWJsZSA/IGF1dG9tYXRpb25JZCA6IGF1dG9tYXRpb25JZEhpZGRlbiBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLmVkaXRQZXJtaXNzaW9uIHx8ICcnKSkge1xuICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGlvbnNbdGhpcy5lZGl0TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkVESVQnXSxcbiAgICAgICAgICAgIGljb246IFByaW1lSWNvbnMuUEVOQ0lMLFxuICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5lZGl0SXRlbS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBlZGl0RGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiBlZGl0VmlzaWJsZSxcbiAgICAgICAgICAgIGF1dG9tYXRpb25JZDogZWRpdFZpc2libGUgPyBhdXRvbWF0aW9uSWQgOiBhdXRvbWF0aW9uSWRIaWRkZW5cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWQgJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMuZGVsZXRlUGVybWlzc2lvbiB8fCAnJykpIHtcbiAgICAgICAgICBtZW51SXRlbXMucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogdHJhbnNsYXRpb25zW3RoaXMuZGVsZXRlTWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkRFTEVURSddLFxuICAgICAgICAgICAgaWNvbjogUHJpbWVJY29ucy5UUkFTSCxcbiAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZGVsZXRlSXRlbS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBkZWxldGVEaXNhYmxlZCxcbiAgICAgICAgICAgIHZpc2libGU6IGRlbGV0ZVZpc2libGUsXG4gICAgICAgICAgICBhdXRvbWF0aW9uSWQ6IGRlbGV0ZVZpc2libGUgPyBhdXRvbWF0aW9uSWQgOiBhdXRvbWF0aW9uSWRIaWRkZW4gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBtZW51SXRlbXMgPSBtZW51SXRlbXMuY29uY2F0KFxuICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEFjdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGEpID0+IHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbihhLnBlcm1pc3Npb24pKVxuICAgICAgICAgICAgLm1hcCgoYSkgPT4gKHtcbiAgICAgICAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1thLmxhYmVsS2V5IHx8ICcnXSxcbiAgICAgICAgICAgICAgaWNvbjogYS5pY29uLFxuICAgICAgICAgICAgICBzdHlsZUNsYXNzOiAoYS5jbGFzc2VzIHx8IFtdKS5qb2luKCcgJyksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBhLmRpc2FibGVkLFxuICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiBhLmNhbGxiYWNrKHRoaXMuc2VsZWN0ZWRJdGVtKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICAgIHRoaXMuZ3JpZE1lbnVJdGVtcyA9IG1lbnVJdGVtc1xuICAgICAgfSlcbiAgfVxuXG4gIHNldFNlbGVjdGVkSXRlbShpdGVtOiBMaXN0R3JpZERhdGEpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW1cbiAgfVxuXG4gIHJlc29sdmVGaWVsZERhdGEob2JqZWN0OiBhbnksIGtleTogYW55KSB7XG4gICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEob2JqZWN0LCBrZXkpXG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHBhZ2UgPSBldmVudC5maXJzdCAvIGV2ZW50LnJvd3NcbiAgICB0aGlzLnBhZ2UgPSBwYWdlXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHBhZ2UpXG4gIH1cblxuICBmaWVsZElzVHJ1dGh5KG9iamVjdDogYW55LCBrZXk6IGFueSkge1xuICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZUZpZWxkRGF0YShvYmplY3QsIGtleSlcbiAgfVxufVxuIiwiPHAtZGF0YVZpZXdcbiAgW3ZhbHVlXT1cIihkaXNwbGF5ZWRJdGVtcyQgfCBhc3luYykgfHwgW11cIlxuICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gIFtmaXJzdF09XCJwYWdlICogcGFnZVNpemVcIlxuICAob25QYWdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgW3Jvd3NdPVwicGFnZVNpemVcIlxuICBbbGF5b3V0XT1cImxheW91dFwiXG4gIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7eyAodG90YWxSZWNvcmRzT25TZXJ2ZXIgPyBjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleSA6IGN1cnJlbnRQYWdlU2hvd2luZ0tleSkgfCB0cmFuc2xhdGU6cGFyYW1zIH19XCJcbiAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMTAsIDI1LCA1MCwgZGF0YT8ubGVuZ3RoXVwiXG4gIGlkPVwiZGF0YUxpc3RHcmlkX3t7bmFtZX19XCJcbj5cbiAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmRyb3Bkb3duaXRlbVwiPlxuICAgIHt7IGl0ZW0udmFsdWUgPT09IGRhdGE/Lmxlbmd0aCA/IChcIk9DWF9EQVRBX1RBQkxFLkFMTFwiIHwgdHJhbnNsYXRlKSA6IGl0ZW0udmFsdWUgfX1cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNncmlkSXRlbSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJncmlkSXRlbVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbSA/IF9ncmlkSXRlbSA6IGRlZmF1bHRHcmlkSXRlbVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW0gbGV0LWl0ZW0gcFRlbXBsYXRlPVwibGlzdEl0ZW1cIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdEl0ZW0gPyBfbGlzdEl0ZW0gOiBkZWZhdWx0TGlzdEl0ZW1cIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5XCI+XG4gICAgPHNwYW4+e3sgZW1wdHlSZXN1bHRzTWVzc2FnZSB8fCAoXCJPQ1hfREFUQV9MSVNUX0dSSUQuRU1QVFlfUkVTVUxUXCIgfCB0cmFuc2xhdGUpIH19PC9zcGFuPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRhdGFWaWV3PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRHcmlkSXRlbSBsZXQtaXRlbT5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBsZzpjb2wtNiB4bDpjb2wtNCBmbGV4XCI+XG4gICAgPGRpdiBjbGFzcz1cImRhdGEtZ3JpZC1pdGVtIGNhcmQgZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEyIGxnOnctMTEgbWItNCBtdC00IGFsaWduLXNlbGYtc3RyZXRjaFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBtYi0zXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICBjbGFzcz1cImltYWdlXCJcbiAgICAgICAgICBzcmM9XCJ7eyBpdGVtLmltYWdlUGF0aCB8fCAoZmFsbGJhY2tJbWFnZVBhdGgkIHwgYXN5bmMpIH19XCJcbiAgICAgICAgICAoZXJyb3IpPVwiaW1nRXJyb3IoaXRlbSlcIlxuICAgICAgICAgIGFsdD1cInt7cmVzb2x2ZUZpZWxkRGF0YShpdGVtLCB0aXRsZUxpbmVJZCl8fCAnJ319XCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWdyaWQtaXRlbXMgZmxleC1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1uYW1lIGZvbnQtbWVkaXVtIG1yLTMgdGV4dC0yeGxcIj5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlwiIChjbGljayk9XCJvblZpZXdSb3dcIj57eyByZXNvbHZlRmllbGREYXRhKGl0ZW0sIHRpdGxlTGluZUlkKSB8fCAnJyB9fTwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzID8gX2dyaWRJdGVtU3VidGl0bGVMaW5lcyA6IGRlZmF1bHRHcmlkSXRlbVN1YnRpdGxlTGluZXNcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwiZ3JpZE1lbnVJdGVtc1wiIFtwb3B1cF09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCI+PC9wLW1lbnU+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInNldFNlbGVjdGVkSXRlbShpdGVtKTsgdXBkYXRlR3JpZE1lbnVJdGVtcyh0cnVlKTsgbWVudS50b2dnbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBpY29uPVwicGkgcGktZWxsaXBzaXMtdlwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidPQ1hfREFUQV9MSVNUX0dSSUQuTU9SRV9BQ1RJT05TJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vcmUtYWN0aW9ucy1tZW51LWJ1dHRvbiBtZW51LWJ0blwiXG4gICAgICAgICAgICBbYXR0ci5uYW1lXT1cIidkYXRhLWdyaWQtaXRlbS1tZW51LWJ1dHRvbidcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JpZEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJ0aXRsZUxpbmVJZCBvZiBzdWJ0aXRsZUxpbmVJZHNcIiBjbGFzcz1cInN1YnRpdGxlTGluZSBlZGl0LXRpbWUgdGV4dC14bCBteS0zXCI+XG4gICAge3sgcmVzb2x2ZUZpZWxkRGF0YShpdGVtLCBzdWJ0aXRsZUxpbmVJZCkgfX1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TGlzdEl0ZW0gbGV0LWl0ZW0+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEgYWxpZ24taXRlbXMtY2VudGVyIHAtMyB3LWZ1bGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWxpc3QtaXRlbXMgZmxleC0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW5hbWUtcm93IGZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1uYW1lIG1yLTMgdGV4dC0yeGwgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlwiIChjbGljayk9XCJvblZpZXdSb3coaXRlbSlcIj57eyByZXNvbHZlRmllbGREYXRhKGl0ZW0sIHRpdGxlTGluZUlkKSB8fCAnJyB9fTwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBtZDpmbGV4LXJvdyBtZDpqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdJdGVtT2JzZXJ2ZWQgJiYgKCF2aWV3QWN0aW9uVmlzaWJsZUZpZWxkIHx8IGZpZWxkSXNUcnV0aHkoaXRlbSwgdmlld0FjdGlvblZpc2libGVGaWVsZCkpXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktZXllXCJcbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbWItMSBtci0yIHZpZXdMaXN0SXRlbUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAodmlld01lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5WSUVXJykgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKHZpZXdNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuVklFVycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25WaWV3Um93KGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAqb2N4SWZQZXJtaXNzaW9uPVwidmlld1Blcm1pc3Npb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhIXZpZXdBY3Rpb25FbmFibGVkRmllbGQgJiYgIWZpZWxkSXNUcnV0aHkoaXRlbSwgdmlld0FjdGlvbkVuYWJsZWRGaWVsZClcIlxuICAgICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiJ2RhdGEtbGlzdC1hY3Rpb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRJdGVtT2JzZXJ2ZWQgJiYgKCFlZGl0QWN0aW9uVmlzaWJsZUZpZWxkIHx8IGZpZWxkSXNUcnV0aHkoaXRlbSwgZWRpdEFjdGlvblZpc2libGVGaWVsZCkpXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBtYi0xIG1yLTIgZWRpdExpc3RJdGVtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktcGVuY2lsXCJcbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAoZWRpdE1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5FRElUJykgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGVkaXRNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuRURJVCcpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FZGl0Um93KGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAqb2N4SWZQZXJtaXNzaW9uPVwiZWRpdFBlcm1pc3Npb25cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhIWVkaXRBY3Rpb25FbmFibGVkRmllbGQgJiYgIWZpZWxkSXNUcnV0aHkoaXRlbSwgZWRpdEFjdGlvbkVuYWJsZWRGaWVsZClcIlxuICAgICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiJ2RhdGEtbGlzdC1hY3Rpb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRlbGV0ZUl0ZW1PYnNlcnZlZCAmJiAoIWRlbGV0ZUFjdGlvblZpc2libGVGaWVsZCB8fCBmaWVsZElzVHJ1dGh5KGl0ZW0sIGRlbGV0ZUFjdGlvblZpc2libGVGaWVsZCkpXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLWRhbmdlciBtYi0xIG1yLTIgZGVsZXRlTGlzdEl0ZW1CdXR0b25cIlxuICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IChkZWxldGVNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuREVMRVRFJykgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGRlbGV0ZU1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5ERUxFVEUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlUm93KGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAqb2N4SWZQZXJtaXNzaW9uPVwiZGVsZXRlUGVybWlzc2lvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkICYmICFmaWVsZElzVHJ1dGh5KGl0ZW0sIGRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZClcIlxuICAgICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiJ2RhdGEtbGlzdC1hY3Rpb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFkZGl0aW9uYWxBY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqb2N4SWZQZXJtaXNzaW9uPVwiYWN0aW9uLnBlcm1pc3Npb25cIlxuICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYWN0aW9uLmNsYXNzZXNcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cImFjdGlvbi5pY29uIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiYWN0aW9uLmxhYmVsS2V5ID8gKGFjdGlvbi5sYWJlbEtleSB8IHRyYW5zbGF0ZSkgOiAnJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY3Rpb24ubGFiZWxLZXkgPyAoYWN0aW9uLmxhYmVsS2V5IHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtbGlnaHQgbXktMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9saXN0SXRlbVN1YnRpdGxlTGluZXMgPyBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIDogZGVmYXVsdExpc3RJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRMaXN0SXRlbVN1YnRpdGxlTGluZXMgbGV0LWl0ZW09XCIkaW1wbGljaXRcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgc3VidGl0bGVMaW5lSWQgb2Ygc3VidGl0bGVMaW5lSWRzXCIgY2xhc3M9XCJzdWJ0aXRsZUxpbmUgdGV4dC14bCBteS0zXCI+e3sgcmVzb2x2ZUZpZWxkRGF0YShpdGVtLCBzdWJ0aXRsZUxpbmVJZCkgfX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
358
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWFjY2VsZXJhdG9yL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWxpc3QtZ3JpZC9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBRVQsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN0RCxPQUFPLEVBQVksVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQTtBQUlsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBOzs7Ozs7Ozs7OztBQW9CL0QsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFlBQVk7SUEyQnJELElBQ0ksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxz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O2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFPRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csc0NBQXNDO3NCQUE5QyxLQUFLO2dCQVlGLElBQUk7c0JBRFAsS0FBSztnQkFVRixPQUFPO3NCQURWLEtBQUs7Z0JBVUYsYUFBYTtzQkFEaEIsS0FBSztnQkFZRixTQUFTO3NCQURaLEtBQUs7Z0JBUUcsNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNpQyxrQ0FBa0M7c0JBQXhFLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUs1Qiw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ2lDLGtDQUFrQztzQkFBeEUsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSzVCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDb0IscUJBQXFCO3NCQUE5QyxZQUFZO3VCQUFDLFVBQVU7Z0JBS2YsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNvQixxQkFBcUI7c0JBQTlDLFlBQVk7dUJBQUMsVUFBVTtnQkFPcEIsaUJBQWlCO3NCQURwQixLQUFLO2dCQVNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRG9DaGVjayxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgTE9DQUxFX0lELFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IE1lbnVJdGVtLCBQcmltZUljb25zIH0gZnJvbSAncHJpbWVuZy9hcGknXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIG1hcCwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgTWZlSW5mbyB9IGZyb20gJ0BvbmVjeC9pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICdAb25lY3gvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJ0BvbmVjeC9hbmd1bGFyLWludGVncmF0aW9uLWludGVyZmFjZSdcbmltcG9ydCB7IERhdGFBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLWFjdGlvbidcbmltcG9ydCB7IERhdGFTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1zb3J0LWRpcmVjdGlvbidcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtdGFibGUtY29sdW1uLm1vZGVsJ1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3R1dGlscydcbmltcG9ydCB7IERhdGFTb3J0QmFzZSB9IGZyb20gJy4uL2RhdGEtc29ydC1iYXNlL2RhdGEtc29ydC1iYXNlJ1xuaW1wb3J0IHsgRmlsdGVyLCBSb3cgfSBmcm9tICcuLi9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50J1xuXG5leHBvcnQgdHlwZSBMaXN0R3JpZERhdGEgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgaW1hZ2VQYXRoOiBzdHJpbmcgfCBudW1iZXJcbiAgW2NvbHVtbklkOiBzdHJpbmddOiB1bmtub3duXG59XG5cbnR5cGUgUm93TGlzdEdyaWREYXRhID0gTGlzdEdyaWREYXRhICYgUm93XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEdyaWREYXRhTWVudUl0ZW0gZXh0ZW5kcyBNZW51SXRlbSB7XG4gIHBlcm1pc3Npb246IHN0cmluZ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvY3gtZGF0YS1saXN0LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1saXN0LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhTGlzdEdyaWRDb21wb25lbnQgZXh0ZW5kcyBEYXRhU29ydEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2sge1xuICBASW5wdXQoKSB0aXRsZUxpbmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHN1YnRpdGxlTGluZUlkczogc3RyaW5nW10gPSBbXVxuICBASW5wdXQoKSBjbGllbnRTaWRlU29ydGluZyA9IHRydWVcbiAgQElucHV0KCkgY2xpZW50U2lkZUZpbHRlcmluZyA9IHRydWVcbiAgQElucHV0KCkgc29ydFN0YXRlczogRGF0YVNvcnREaXJlY3Rpb25bXSA9IFtdXG4gIEBJbnB1dCgpIHBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDI1LCA1MF1cbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IHRoaXMucGFnZVNpemVzWzBdIHx8IDUwXG4gIEBJbnB1dCgpIGVtcHR5UmVzdWx0c01lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBmYWxsYmFja0ltYWdlID0gJ3BsYWNlaG9sZGVyLnBuZydcbiAgQElucHV0KCkgbGF5b3V0OiAnZ3JpZCcgfCAnbGlzdCcgPSAnZ3JpZCdcbiAgQElucHV0KCkgdmlld1Blcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0UGVybWlzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGRlbGV0ZVBlcm1pc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBkZWxldGVBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSB2aWV3QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRBY3Rpb25WaXNpYmxlRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld01lbnVJdGVtS2V5OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdE1lbnVJdGVtS2V5OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlTWVudUl0ZW1LZXk6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBwYWdpbmF0b3IgPSB0cnVlXG4gIEBJbnB1dCgpIHBhZ2UgPSAwXG4gIEBJbnB1dCgpIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdID0gW11cbiAgQElucHV0KCkgbmFtZSA9ICcnXG4gIEBJbnB1dCgpXG4gIGdldCB0b3RhbFJlY29yZHNPblNlcnZlcigpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBhcmFtc1sndG90YWxSZWNvcmRzT25TZXJ2ZXInXSA/IE51bWJlcih0aGlzLnBhcmFtc1sndG90YWxSZWNvcmRzT25TZXJ2ZXInXSkgOiB1bmRlZmluZWRcbiAgfVxuICBzZXQgdG90YWxSZWNvcmRzT25TZXJ2ZXIodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucGFyYW1zWyd0b3RhbFJlY29yZHNPblNlcnZlciddID0gdmFsdWU/LnRvU3RyaW5nKCkgPz8gJzAnXG4gIH1cbiAgQElucHV0KCkgY3VycmVudFBhZ2VTaG93aW5nS2V5ID0gJ09DWF9EQVRBX1RBQkxFLlNIT1dJTkcnXG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2hvd2luZ1dpdGhUb3RhbE9uU2VydmVyS2V5ID0gJ09DWF9EQVRBX1RBQkxFLlNIT1dJTkdfV0lUSF9UT1RBTF9PTl9TRVJWRVInXG4gIHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBjdXJyZW50UGFnZTogJ3tjdXJyZW50UGFnZX0nLFxuICAgIHRvdGFsUGFnZXM6ICd7dG90YWxQYWdlc30nLFxuICAgIHJvd3M6ICd7cm93c30nLFxuICAgIGZpcnN0OiAne2ZpcnN0fScsXG4gICAgbGFzdDogJ3tsYXN0fScsXG4gICAgdG90YWxSZWNvcmRzOiAne3RvdGFsUmVjb3Jkc30nLFxuICB9XG5cbiAgX2RhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSb3dMaXN0R3JpZERhdGFbXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBkYXRhKCk6IFJvd0xpc3RHcmlkRGF0YVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBkYXRhKHZhbHVlOiBSb3dMaXN0R3JpZERhdGFbXSkge1xuICAgIHRoaXMuX29yaWdpbmFsRGF0YSA9IFsuLi52YWx1ZV1cbiAgICB0aGlzLl9kYXRhJC5uZXh0KFsuLi52YWx1ZV0pXG4gIH1cbiAgX2ZpbHRlcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJbXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBmaWx0ZXJzKCk6IEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVycyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBmaWx0ZXJzKHZhbHVlOiBGaWx0ZXJbXSkge1xuICAgIHRoaXMuX2ZpbHRlcnMkLm5leHQodmFsdWUpXG4gIH1cbiAgX29yaWdpbmFsRGF0YTogUm93TGlzdEdyaWREYXRhW10gPSBbXVxuICBfc29ydERpcmVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3J0RGlyZWN0aW9uPihEYXRhU29ydERpcmVjdGlvbi5OT05FKVxuICBASW5wdXQoKVxuICBnZXQgc29ydERpcmVjdGlvbigpOiBEYXRhU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnREaXJlY3Rpb24kLmdldFZhbHVlKClcbiAgfVxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogRGF0YVNvcnREaXJlY3Rpb24pIHtcbiAgICBpZiAodmFsdWUgPT09IERhdGFTb3J0RGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgIHRoaXMuX2RhdGEkLm5leHQoWy4uLnRoaXMuX29yaWdpbmFsRGF0YV0pXG4gICAgfVxuICAgIHRoaXMuX3NvcnREaXJlY3Rpb24kLm5leHQodmFsdWUpXG4gIH1cbiAgX3NvcnRGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0RmllbGQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcz8uX3NvcnRGaWVsZCQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBzb3J0RmllbGQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NvcnRGaWVsZCQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtU3VidGl0bGVMaW5lcycpIGdyaWRJdGVtU3VidGl0bGVMaW5lc0NoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGUgfHwgdGhpcy5ncmlkSXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbVN1YnRpdGxlTGluZXMnKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlIHx8IHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgbGlzdEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbScpIGxpc3RJdGVtQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX2xpc3RJdGVtKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtVGVtcGxhdGUgfHwgdGhpcy5saXN0SXRlbUNoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZ3JpZEl0ZW0nKSBncmlkSXRlbUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVRlbXBsYXRlIHx8IHRoaXMuZ3JpZEl0ZW1DaGlsZFRlbXBsYXRlXG4gIH1cblxuICBfYWRkaXRpb25hbEFjdGlvbnM6IERhdGFBY3Rpb25bXSA9IFtdXG4gIEBJbnB1dCgpXG4gIGdldCBhZGRpdGlvbmFsQWN0aW9ucygpOiBEYXRhQWN0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9hZGRpdGlvbmFsQWN0aW9uc1xuICB9XG4gIHNldCBhZGRpdGlvbmFsQWN0aW9ucyh2YWx1ZTogRGF0YUFjdGlvbltdKSB7XG4gICAgdGhpcy5fYWRkaXRpb25hbEFjdGlvbnMgPSB2YWx1ZVxuICAgIHRoaXMudXBkYXRlR3JpZE1lbnVJdGVtcygpXG4gIH1cblxuICBAT3V0cHV0KCkgdmlld0l0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZWRpdEl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgZGVsZXRlSXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdEdyaWREYXRhPigpXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpXG5cbiAgZ2V0IHZpZXdJdGVtT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZHYgPSB0aGlzLmluamVjdG9yLmdldCgnRGF0YVZpZXdDb21wb25lbnQnLCBudWxsKVxuICAgIHJldHVybiBkdj8udmlld0l0ZW1PYnNlcnZlZCB8fCBkdj8udmlld0l0ZW0ub2JzZXJ2ZWQgfHwgdGhpcy52aWV3SXRlbS5vYnNlcnZlZFxuICB9XG4gIGdldCBlZGl0SXRlbU9ic2VydmVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGR2ID0gdGhpcy5pbmplY3Rvci5nZXQoJ0RhdGFWaWV3Q29tcG9uZW50JywgbnVsbClcbiAgICByZXR1cm4gZHY/LmVkaXRJdGVtT2JzZXJ2ZWQgfHwgZHY/LmVkaXRJdGVtLm9ic2VydmVkIHx8IHRoaXMuZWRpdEl0ZW0ub2JzZXJ2ZWRcbiAgfVxuICBnZXQgZGVsZXRlSXRlbU9ic2VydmVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGR2ID0gdGhpcy5pbmplY3Rvci5nZXQoJ0RhdGFWaWV3Q29tcG9uZW50JywgbnVsbClcbiAgICByZXR1cm4gZHY/LmRlbGV0ZUl0ZW1PYnNlcnZlZCB8fCBkdj8uZGVsZXRlSXRlbS5vYnNlcnZlZCB8fCB0aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWRcbiAgfVxuXG4gIGdldCBzb3J0RGlyZWN0aW9uTnVtYmVyKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbiA9PT0gRGF0YVNvcnREaXJlY3Rpb24uQVNDRU5ESU5HKSByZXR1cm4gMVxuICAgIGlmICh0aGlzLnNvcnREaXJlY3Rpb24gPT09IERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkcpIHJldHVybiAtMVxuICAgIHJldHVybiAwXG4gIH1cblxuICBzaG93TWVudSA9IGZhbHNlXG4gIGdyaWRNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXVxuICBzZWxlY3RlZEl0ZW06IExpc3RHcmlkRGF0YSB8IHVuZGVmaW5lZFxuICBvYnNlcnZlZE91dHB1dHMgPSAwXG5cbiAgZGlzcGxheWVkSXRlbXMkOiBPYnNlcnZhYmxlPHVua25vd25bXT4gfCB1bmRlZmluZWRcbiAgZmFsbGJhY2tJbWFnZVBhdGgkITogT2JzZXJ2YWJsZTxzdHJpbmc+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nLFxuICAgIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxvY2FsZSwgdHJhbnNsYXRlU2VydmljZSlcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUgfHwgdGhpcy5yb3V0ZXIudXJsLnJlcGxhY2UoL1teQS1aYS16MC05XS8sICdfJylcbiAgICB0aGlzLmZhbGxiYWNrSW1hZ2VQYXRoJCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRNZmUkLnBpcGUoXG4gICAgICBtYXAoKGN1cnJlbnRNZmUpID0+IHRoaXMuZ2V0RmFsbGJhY2tJbWFnZVBhdGgoY3VycmVudE1mZSkpXG4gICAgKVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IG9ic2VydmVkT3V0cHV0cyA9IDxhbnk+dGhpcy52aWV3SXRlbS5vYnNlcnZlZCArIDxhbnk+dGhpcy5kZWxldGVJdGVtLm9ic2VydmVkICsgPGFueT50aGlzLmVkaXRJdGVtLm9ic2VydmVkXG4gICAgaWYgKHRoaXMub2JzZXJ2ZWRPdXRwdXRzICE9PSBvYnNlcnZlZE91dHB1dHMpIHtcbiAgICAgIHRoaXMudXBkYXRlR3JpZE1lbnVJdGVtcygpXG4gICAgICB0aGlzLm9ic2VydmVkT3V0cHV0cyA9IG9ic2VydmVkT3V0cHV0c1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheWVkSXRlbXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5fZGF0YSQsIHRoaXMuX2ZpbHRlcnMkLCB0aGlzLl9zb3J0RmllbGQkLCB0aGlzLl9zb3J0RGlyZWN0aW9uJF0pLnBpcGUoXG4gICAgICBtZXJnZU1hcCgocGFyYW1zKSA9PiB0aGlzLnRyYW5zbGF0ZUl0ZW1zKHBhcmFtcywgdGhpcy5jb2x1bW5zLCB0aGlzLmNsaWVudFNpZGVGaWx0ZXJpbmcsIHRoaXMuY2xpZW50U2lkZVNvcnRpbmcpKSxcbiAgICAgIG1hcCgocGFyYW1zKSA9PiB0aGlzLmZpbHRlckl0ZW1zKHBhcmFtcywgdGhpcy5jbGllbnRTaWRlRmlsdGVyaW5nKSksXG4gICAgICBtYXAoKHBhcmFtcykgPT4gdGhpcy5zb3J0SXRlbXMocGFyYW1zLCB0aGlzLmNvbHVtbnMsIHRoaXMuY2xpZW50U2lkZVNvcnRpbmcpKSxcbiAgICAgIG1hcCgoW2l0ZW1zXSkgPT4gaXRlbXMpXG4gICAgKVxuXG4gICAgdGhpcy5zaG93TWVudSA9XG4gICAgICAoISF0aGlzLnZpZXdQZXJtaXNzaW9uICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLnZpZXdQZXJtaXNzaW9uKSkgfHxcbiAgICAgICghIXRoaXMuZWRpdFBlcm1pc3Npb24gJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMuZWRpdFBlcm1pc3Npb24pKSB8fFxuICAgICAgKCEhdGhpcy5kZWxldGVQZXJtaXNzaW9uICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLmRlbGV0ZVBlcm1pc3Npb24pKVxuICB9XG5cbiAgb25EZWxldGVSb3coZWxlbWVudDogTGlzdEdyaWREYXRhKSB7XG4gICAgdGhpcy5kZWxldGVJdGVtLmVtaXQoZWxlbWVudClcbiAgfVxuXG4gIG9uVmlld1JvdyhlbGVtZW50OiBMaXN0R3JpZERhdGEpIHtcbiAgICBpZiAoISF0aGlzLnZpZXdQZXJtaXNzaW9uICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLnZpZXdQZXJtaXNzaW9uKSkge1xuICAgICAgdGhpcy52aWV3SXRlbS5lbWl0KGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgb25FZGl0Um93KGVsZW1lbnQ6IExpc3RHcmlkRGF0YSkge1xuICAgIHRoaXMuZWRpdEl0ZW0uZW1pdChlbGVtZW50KVxuICB9XG5cbiAgaW1nRXJyb3IoaXRlbTogTGlzdEdyaWREYXRhKSB7XG4gICAgaXRlbS5pbWFnZVBhdGggPSAnJ1xuICB9XG5cbiAgZ2V0RmFsbGJhY2tJbWFnZVBhdGgobWZlSW5mbzogTWZlSW5mbykge1xuICAgIHJldHVybiBtZmVJbmZvPy5yZW1vdGVCYXNlVXJsXG4gICAgICA/IGAke21mZUluZm8ucmVtb3RlQmFzZVVybH0vb25lY3gtcG9ydGFsLWxpYi9hc3NldHMvaW1hZ2VzLyR7dGhpcy5mYWxsYmFja0ltYWdlfWBcbiAgICAgIDogYC4vb25lY3gtcG9ydGFsLWxpYi9hc3NldHMvaW1hZ2VzLyR7dGhpcy5mYWxsYmFja0ltYWdlfWBcbiAgfVxuXG4gIHVwZGF0ZUdyaWRNZW51SXRlbXModXNlU2VsZWN0ZWRJdGVtID0gZmFsc2UpOiB2b2lkIHtcbiAgICBsZXQgZGVsZXRlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBsZXQgZWRpdERpc2FibGVkID0gZmFsc2U7XG4gICAgbGV0IHZpZXdEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgbGV0IGRlbGV0ZVZpc2libGUgPSB0cnVlO1xuICAgIGxldCBlZGl0VmlzaWJsZSA9IHRydWU7XG4gICAgbGV0IHZpZXdWaXNpYmxlID0gdHJ1ZTtcblxuICAgIGlmKHVzZVNlbGVjdGVkSXRlbSAmJiB0aGlzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgdmlld0Rpc2FibGVkID0gISF0aGlzLnZpZXdBY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy52aWV3QWN0aW9uRW5hYmxlZEZpZWxkKTtcbiAgICAgIGVkaXREaXNhYmxlZCA9ICEhdGhpcy5lZGl0QWN0aW9uRW5hYmxlZEZpZWxkICYmICF0aGlzLmZpZWxkSXNUcnV0aHkodGhpcy5zZWxlY3RlZEl0ZW0sIHRoaXMuZWRpdEFjdGlvbkVuYWJsZWRGaWVsZCk7XG4gICAgICBkZWxldGVEaXNhYmxlZCA9ICEhdGhpcy5kZWxldGVBY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy5kZWxldGVBY3Rpb25FbmFibGVkRmllbGQpO1xuXG4gICAgICB2aWV3VmlzaWJsZSA9ICghdGhpcy52aWV3QWN0aW9uVmlzaWJsZUZpZWxkIHx8IHRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy52aWV3QWN0aW9uVmlzaWJsZUZpZWxkKSlcbiAgICAgIGVkaXRWaXNpYmxlID0gKCF0aGlzLmVkaXRBY3Rpb25WaXNpYmxlRmllbGQgfHwgdGhpcy5maWVsZElzVHJ1dGh5KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLmVkaXRBY3Rpb25WaXNpYmxlRmllbGQpKVxuICAgICAgZGVsZXRlVmlzaWJsZSA9ICghdGhpcy5kZWxldGVBY3Rpb25WaXNpYmxlRmllbGQgfHwgdGhpcy5maWVsZElzVHJ1dGh5KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLmRlbGV0ZUFjdGlvblZpc2libGVGaWVsZCkpXG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAuZ2V0KFtcbiAgICAgICAgdGhpcy52aWV3TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLlZJRVcnLFxuICAgICAgICB0aGlzLmVkaXRNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuRURJVCcsXG4gICAgICAgIHRoaXMuZGVsZXRlTWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkRFTEVURScsXG4gICAgICAgIC4uLnRoaXMuYWRkaXRpb25hbEFjdGlvbnMubWFwKChhKSA9PiBhLmxhYmVsS2V5IHx8ICcnKSxcbiAgICAgIF0pXG4gICAgICAuc3Vic2NyaWJlKCh0cmFuc2xhdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdXG4gICAgICAgIGNvbnN0IGF1dG9tYXRpb25JZCA9ICdkYXRhLWdyaWQtYWN0aW9uLWJ1dHRvbidcbiAgICAgICAgY29uc3QgYXV0b21hdGlvbklkSGlkZGVuID0gJ2RhdGEtZ3JpZC1hY3Rpb24tYnV0dG9uLWhpZGRlbidcbiAgICAgICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQgJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMudmlld1Blcm1pc3Npb24gfHwgJycpKSB7XG4gICAgICAgICAgbWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1t0aGlzLnZpZXdNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuVklFVyddLFxuICAgICAgICAgICAgaWNvbjogUHJpbWVJY29ucy5FWUUsXG4gICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnZpZXdJdGVtLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW0pLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHZpZXdEaXNhYmxlZCxcbiAgICAgICAgICAgIHZpc2libGU6IHZpZXdWaXNpYmxlLFxuICAgICAgICAgICAgYXV0b21hdGlvbklkOiB2aWV3VmlzaWJsZSA/IGF1dG9tYXRpb25JZCA6IGF1dG9tYXRpb25JZEhpZGRlbiBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLmVkaXRQZXJtaXNzaW9uIHx8ICcnKSkge1xuICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGlvbnNbdGhpcy5lZGl0TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkVESVQnXSxcbiAgICAgICAgICAgIGljb246IFByaW1lSWNvbnMuUEVOQ0lMLFxuICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5lZGl0SXRlbS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBlZGl0RGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiBlZGl0VmlzaWJsZSxcbiAgICAgICAgICAgIGF1dG9tYXRpb25JZDogZWRpdFZpc2libGUgPyBhdXRvbWF0aW9uSWQgOiBhdXRvbWF0aW9uSWRIaWRkZW5cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWQgJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMuZGVsZXRlUGVybWlzc2lvbiB8fCAnJykpIHtcbiAgICAgICAgICBtZW51SXRlbXMucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogdHJhbnNsYXRpb25zW3RoaXMuZGVsZXRlTWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkRFTEVURSddLFxuICAgICAgICAgICAgaWNvbjogUHJpbWVJY29ucy5UUkFTSCxcbiAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuZGVsZXRlSXRlbS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBkZWxldGVEaXNhYmxlZCxcbiAgICAgICAgICAgIHZpc2libGU6IGRlbGV0ZVZpc2libGUsXG4gICAgICAgICAgICBhdXRvbWF0aW9uSWQ6IGRlbGV0ZVZpc2libGUgPyBhdXRvbWF0aW9uSWQgOiBhdXRvbWF0aW9uSWRIaWRkZW4gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBtZW51SXRlbXMgPSBtZW51SXRlbXMuY29uY2F0KFxuICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEFjdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGEpID0+IHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbihhLnBlcm1pc3Npb24pKVxuICAgICAgICAgICAgLm1hcCgoYSkgPT4gKHtcbiAgICAgICAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1thLmxhYmVsS2V5IHx8ICcnXSxcbiAgICAgICAgICAgICAgaWNvbjogYS5pY29uLFxuICAgICAgICAgICAgICBzdHlsZUNsYXNzOiAoYS5jbGFzc2VzIHx8IFtdKS5qb2luKCcgJyksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBhLmRpc2FibGVkLFxuICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiBhLmNhbGxiYWNrKHRoaXMuc2VsZWN0ZWRJdGVtKSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICAgIHRoaXMuZ3JpZE1lbnVJdGVtcyA9IG1lbnVJdGVtc1xuICAgICAgfSlcbiAgfVxuXG4gIHNldFNlbGVjdGVkSXRlbShpdGVtOiBMaXN0R3JpZERhdGEpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW1cbiAgfVxuXG4gIHJlc29sdmVGaWVsZERhdGEob2JqZWN0OiBhbnksIGtleTogYW55KSB7XG4gICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEob2JqZWN0LCBrZXkpXG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHBhZ2UgPSBldmVudC5maXJzdCAvIGV2ZW50LnJvd3NcbiAgICB0aGlzLnBhZ2UgPSBwYWdlXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHBhZ2UpXG4gIH1cblxuICBmaWVsZElzVHJ1dGh5KG9iamVjdDogYW55LCBrZXk6IGFueSkge1xuICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZUZpZWxkRGF0YShvYmplY3QsIGtleSlcbiAgfVxufVxuIiwiPHAtZGF0YVZpZXdcbiAgW3ZhbHVlXT1cIihkaXNwbGF5ZWRJdGVtcyQgfCBhc3luYykgfHwgW11cIlxuICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gIFtmaXJzdF09XCJwYWdlICogcGFnZVNpemVcIlxuICAob25QYWdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgW3Jvd3NdPVwicGFnZVNpemVcIlxuICBbbGF5b3V0XT1cImxheW91dFwiXG4gIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7eyAodG90YWxSZWNvcmRzT25TZXJ2ZXIgPyBjdXJyZW50UGFnZVNob3dpbmdXaXRoVG90YWxPblNlcnZlcktleSA6IGN1cnJlbnRQYWdlU2hvd2luZ0tleSkgfCB0cmFuc2xhdGU6cGFyYW1zIH19XCJcbiAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMTAsIDI1LCA1MCwgZGF0YT8ubGVuZ3RoXVwiXG4gIGlkPVwiZGF0YUxpc3RHcmlkX3t7bmFtZX19XCJcbiAgcGFnaW5hdG9yRHJvcGRvd25BcHBlbmRUbz1cImJvZHlcIlxuPlxuICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwicGFnaW5hdG9yZHJvcGRvd25pdGVtXCI+XG4gICAge3sgaXRlbS52YWx1ZSA9PT0gZGF0YT8ubGVuZ3RoID8gKFwiT0NYX0RBVEFfVEFCTEUuQUxMXCIgfCB0cmFuc2xhdGUpIDogaXRlbS52YWx1ZSB9fVxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI2dyaWRJdGVtIGxldC1pdGVtIHBUZW1wbGF0ZT1cImdyaWRJdGVtXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2dyaWRJdGVtID8gX2dyaWRJdGVtIDogZGVmYXVsdEdyaWRJdGVtXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNsaXN0SXRlbSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJsaXN0SXRlbVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9saXN0SXRlbSA/IF9saXN0SXRlbSA6IGRlZmF1bHRMaXN0SXRlbVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHlcIj5cbiAgICA8c3Bhbj57eyBlbXB0eVJlc3VsdHNNZXNzYWdlIHx8IChcIk9DWF9EQVRBX0xJU1RfR1JJRC5FTVBUWV9SRVNVTFRcIiB8IHRyYW5zbGF0ZSkgfX08L3NwYW4+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGF0YVZpZXc+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyaWRJdGVtIGxldC1pdGVtPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGxnOmNvbC02IHhsOmNvbC00IGZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0YS1ncmlkLWl0ZW0gY2FyZCBmbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTIgbGc6dy0xMSBtYi00IG10LTQgYWxpZ24tc2VsZi1zdHJldGNoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzPVwiaW1hZ2VcIlxuICAgICAgICAgIHNyYz1cInt7IGl0ZW0uaW1hZ2VQYXRoIHx8IChmYWxsYmFja0ltYWdlUGF0aCQgfCBhc3luYykgfX1cIlxuICAgICAgICAgIChlcnJvcik9XCJpbWdFcnJvcihpdGVtKVwiXG4gICAgICAgICAgYWx0PVwie3tyZXNvbHZlRmllbGREYXRhKGl0ZW0sIHRpdGxlTGluZUlkKXx8ICcnfX1cIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEtZ3JpZC1pdGVtcyBmbGV4LXJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW5hbWUgZm9udC1tZWRpdW0gbXItMyB0ZXh0LTJ4bFwiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiXCIgKGNsaWNrKT1cIm9uVmlld1Jvd1wiPnt7IHJlc29sdmVGaWVsZERhdGEoaXRlbSwgdGl0bGVMaW5lSWQpIHx8ICcnIH19PC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbVN1YnRpdGxlTGluZXMgPyBfZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzIDogZGVmYXVsdEdyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJncmlkTWVudUl0ZW1zXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWRJdGVtKGl0ZW0pOyB1cGRhdGVHcmlkTWVudUl0ZW1zKHRydWUpOyBtZW51LnRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1lbGxpcHNpcy12XCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ09DWF9EQVRBX0xJU1RfR1JJRC5NT1JFX0FDVElPTlMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwibW9yZS1hY3Rpb25zLW1lbnUtYnV0dG9uIG1lbnUtYnRuXCJcbiAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiJ2RhdGEtZ3JpZC1pdGVtLW1lbnUtYnV0dG9uJ1wiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRHcmlkSXRlbVN1YnRpdGxlTGluZXMgbGV0LWl0ZW0+XG4gIDxkaXYgKm5nRm9yPVwibGV0IHN1YnRpdGxlTGluZUlkIG9mIHN1YnRpdGxlTGluZUlkc1wiIGNsYXNzPVwic3VidGl0bGVMaW5lIGVkaXQtdGltZSB0ZXh0LXhsIG15LTNcIj5cbiAgICB7eyByZXNvbHZlRmllbGREYXRhKGl0ZW0sIHN1YnRpdGxlTGluZUlkKSB9fVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRMaXN0SXRlbSBsZXQtaXRlbT5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBhbGlnbi1pdGVtcy1jZW50ZXIgcC0zIHctZnVsbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGEtbGlzdC1pdGVtcyBmbGV4LTFcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbmFtZS1yb3cgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW5hbWUgbXItMyB0ZXh0LTJ4bCBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiXCIgKGNsaWNrKT1cIm9uVmlld1JvdyhpdGVtKVwiPnt7IHJlc29sdmVGaWVsZERhdGEoaXRlbSwgdGl0bGVMaW5lSWQpIHx8ICcnIH19PC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIG1kOmZsZXgtcm93IG1kOmp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld0l0ZW1PYnNlcnZlZCAmJiAoIXZpZXdBY3Rpb25WaXNpYmxlRmllbGQgfHwgZmllbGRJc1RydXRoeShpdGVtLCB2aWV3QWN0aW9uVmlzaWJsZUZpZWxkKSlcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1leWVcIlxuICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBtYi0xIG1yLTIgdmlld0xpc3RJdGVtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICh2aWV3TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLlZJRVcnKSB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIodmlld01lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5WSUVXJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblZpZXdSb3coaXRlbSlcIlxuICAgICAgICAgICAgICAgICpvY3hJZlBlcm1pc3Npb249XCJ2aWV3UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhdmlld0FjdGlvbkVuYWJsZWRGaWVsZCAmJiAhZmllbGRJc1RydXRoeShpdGVtLCB2aWV3QWN0aW9uRW5hYmxlZEZpZWxkKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCInZGF0YS1saXN0LWFjdGlvbi1idXR0b24nXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEl0ZW1PYnNlcnZlZCAmJiAoIWVkaXRBY3Rpb25WaXNpYmxlRmllbGQgfHwgZmllbGRJc1RydXRoeShpdGVtLCBlZGl0QWN0aW9uVmlzaWJsZUZpZWxkKSlcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IG1iLTEgbXItMiBlZGl0TGlzdEl0ZW1CdXR0b25cIlxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wZW5jaWxcIlxuICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IChlZGl0TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkVESVQnKSB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZWRpdE1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5FRElUJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXRSb3coaXRlbSlcIlxuICAgICAgICAgICAgICAgICpvY3hJZlBlcm1pc3Npb249XCJlZGl0UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhZWRpdEFjdGlvbkVuYWJsZWRGaWVsZCAmJiAhZmllbGRJc1RydXRoeShpdGVtLCBlZGl0QWN0aW9uRW5hYmxlZEZpZWxkKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCInZGF0YS1saXN0LWFjdGlvbi1idXR0b24nXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGVsZXRlSXRlbU9ic2VydmVkICYmICghZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkIHx8IGZpZWxkSXNUcnV0aHkoaXRlbSwgZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkKSlcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyIG1iLTEgbXItMiBkZWxldGVMaXN0SXRlbUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgKGRlbGV0ZU1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5ERUxFVEUnKSB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIoZGVsZXRlTWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkRFTEVURScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVSb3coaXRlbSlcIlxuICAgICAgICAgICAgICAgICpvY3hJZlBlcm1pc3Npb249XCJkZWxldGVQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFkZWxldGVBY3Rpb25FbmFibGVkRmllbGQgJiYgIWZpZWxkSXNUcnV0aHkoaXRlbSwgZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCInZGF0YS1saXN0LWFjdGlvbi1idXR0b24nXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWRkaXRpb25hbEFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpvY3hJZlBlcm1pc3Npb249XCJhY3Rpb24ucGVybWlzc2lvblwiXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhY3Rpb24uY2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiYWN0aW9uLmljb24gfHwgJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb24uY2FsbGJhY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJhY3Rpb24ubGFiZWxLZXkgPyAoYWN0aW9uLmxhYmVsS2V5IHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFjdGlvbi5sYWJlbEtleSA/IChhY3Rpb24ubGFiZWxLZXkgfCB0cmFuc2xhdGUpIDogJydcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1saWdodCBteS0xXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2xpc3RJdGVtU3VidGl0bGVMaW5lcyA/IF9saXN0SXRlbVN1YnRpdGxlTGluZXMgOiBkZWZhdWx0TGlzdEl0ZW1TdWJ0aXRsZUxpbmVzXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Oml0ZW19XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdExpc3RJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT1cIiRpbXBsaWNpdFwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJ0aXRsZUxpbmVJZCBvZiBzdWJ0aXRsZUxpbmVJZHNcIiBjbGFzcz1cInN1YnRpdGxlTGluZSB0ZXh0LXhsIG15LTNcIj57eyByZXNvbHZlRmllbGREYXRhKGl0ZW0sIHN1YnRpdGxlTGluZUlkKSB9fTwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==