@posiwise/smart-crm 0.0.36 → 0.0.37
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.
- package/esm2022/index.mjs +2 -3
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.mjs +26 -11
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +18 -9
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.mjs +14 -16
- package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-actions/smart-crm-actions.component.mjs +260 -0
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +20 -15
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +1 -1
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.mjs +1 -1
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +26 -9
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +1 -1
- package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.mjs +40 -9
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-analysis-insight/smart-crm-analysis.component.mjs +27 -53
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-contact-insight/smart-crm-contact-insight.component.mjs +21 -15
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-insight.component.mjs +4 -4
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-marketing-insight/smart-crm-marketing-insight.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-insight/smart-crm-opportunities-insight/smart-crm-opportunities-insight.component.mjs +30 -22
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +8 -5
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +49 -17
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +6 -3
- package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.mjs +3 -3
- package/esm2022/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.mjs +5 -5
- package/esm2022/lib/private/smart-crm-private.module.mjs +6 -11
- package/esm2022/lib/private/smart-crm-private.routing.module.mjs +18 -18
- package/esm2022/lib/shared/interface/smart-crm-module.interface.mjs +1 -1
- package/esm2022/lib/shared/models/smart-crm.model.mjs +3 -2
- package/esm2022/lib/shared/routers/routers.mjs +9 -8
- package/fesm2022/posiwise-smart-crm.mjs +325 -229
- package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
- package/index.d.ts +1 -2
- package/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.d.ts +1 -0
- package/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.d.ts +3 -2
- package/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.d.ts +1 -3
- package/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.d.ts +1 -0
- package/lib/private/components/{smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.d.ts → smart-crm-actions/smart-crm-actions.component.d.ts} +6 -4
- package/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.d.ts +1 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.d.ts +1 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.d.ts +1 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.d.ts +4 -0
- package/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.d.ts +1 -0
- package/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.d.ts +1 -0
- package/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.d.ts +1 -0
- package/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.d.ts +7 -1
- package/lib/private/components/smart-crm-insight/smart-crm-analysis-insight/smart-crm-analysis.component.d.ts +8 -8
- package/lib/private/components/smart-crm-insight/smart-crm-contact-insight/smart-crm-contact-insight.component.d.ts +7 -4
- package/lib/private/components/smart-crm-insight/smart-crm-marketing-insight/smart-crm-marketing-insight.component.d.ts +1 -0
- package/lib/private/components/smart-crm-insight/smart-crm-opportunities-insight/smart-crm-opportunities-insight.component.d.ts +7 -4
- package/lib/private/components/smart-crm-leads/smart-crm-leads.component.d.ts +1 -0
- package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.d.ts +1 -0
- package/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.d.ts +1 -0
- package/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.d.ts +3 -1
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.d.ts +11 -4
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.d.ts +1 -0
- package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.d.ts +2 -0
- package/lib/private/smart-crm-private.module.d.ts +60 -61
- package/lib/shared/interface/smart-crm-module.interface.d.ts +3 -1
- package/lib/shared/routers/routers.d.ts +1 -0
- package/package.json +1 -1
- package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary-actions/smart-crm-summary-actions.component.mjs +0 -256
- package/esm2022/lib/private/components/smart-crm-summary/smart-crm-summary.component.mjs +0 -14
- package/lib/private/components/smart-crm-summary/smart-crm-summary.component.d.ts +0 -5
package/esm2022/index.mjs
CHANGED
|
@@ -39,8 +39,7 @@ export * from './lib/private/components/smart-crm-opportunities/smart-crm-opport
|
|
|
39
39
|
export * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component';
|
|
40
40
|
export * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component';
|
|
41
41
|
export * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component';
|
|
42
|
-
export * from './lib/private/components/smart-crm-
|
|
43
|
-
export * from './lib/private/components/smart-crm-summary/smart-crm-summary.component';
|
|
42
|
+
export * from './lib/private/components/smart-crm-actions/smart-crm-actions.component';
|
|
44
43
|
export * from './lib/private/components/smart-crm-tabs/smart-crm-tabs.component';
|
|
45
44
|
export * from './lib/private/smart-crm-private.routing.module';
|
|
46
45
|
export * from './lib/private/smart-crm-private.module';
|
|
@@ -50,4 +49,4 @@ export * from './lib/public/components/smart-crm-newsletter-unsubscribe/smart-cr
|
|
|
50
49
|
export * from './lib/public/components/smart-crm-signup/smart-crm-signup.component';
|
|
51
50
|
export * from './lib/public/smart-crm-public.routing.module';
|
|
52
51
|
export * from './lib/public/smart-crm-public.module';
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBQ3JCLGNBQWMsMkdBQTJHLENBQUM7QUFDMUgsY0FBYyx1R0FBdUcsQ0FBQztBQUN0SCxjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMsMEVBQTBFLENBQUM7QUFDekYsY0FBYyxzR0FBc0csQ0FBQztBQUNySCxjQUFjLGtJQUFrSSxDQUFDO0FBQ2pKLGNBQWMsZ0dBQWdHLENBQUM7QUFDL0csY0FBYyxvRkFBb0YsQ0FBQztBQUNuRyxjQUFjLCtLQUErSyxDQUFDO0FBQzlMLGNBQWMsOEhBQThILENBQUM7QUFDN0ksY0FBYywrSEFBK0gsQ0FBQztBQUM5SSxjQUFjLDhGQUE4RixDQUFDO0FBQzdHLGNBQWMsNkhBQTZILENBQUM7QUFDNUksY0FBYyw4RkFBOEYsQ0FBQztBQUM3RyxjQUFjLGtJQUFrSSxDQUFDO0FBQ2pKLGNBQWMsZ0dBQWdHLENBQUM7QUFDL0csY0FBYywyR0FBMkcsQ0FBQztBQUMxSCxjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMsMEVBQTBFLENBQUM7QUFDekYsY0FBYyw2R0FBNkcsQ0FBQztBQUM1SCxjQUFjLGtHQUFrRyxDQUFDO0FBQ2pILGNBQWMsd0VBQXdFLENBQUM7QUFDdkYsY0FBYyw2R0FBNkcsQ0FBQztBQUM1SCxjQUFjLDBHQUEwRyxDQUFDO0FBQ3pILGNBQWMsMEdBQTBHLENBQUM7QUFDekgsY0FBYyxzSEFBc0gsQ0FBQztBQUNySSxjQUFjLG9HQUFvRyxDQUFDO0FBQ25ILGNBQWMsOEdBQThHLENBQUM7QUFDN0gsY0FBYyxvR0FBb0csQ0FBQztBQUNuSCxjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsMklBQTJJLENBQUM7QUFDMUosY0FBYyx5SUFBeUksQ0FBQztBQUN4SixjQUFjLDBHQUEwRyxDQUFDO0FBQ3pILGNBQWMsbUpBQW1KLENBQUM7QUFDbEssY0FBYyw0RUFBNEUsQ0FBQztBQUMzRixjQUFjLDRGQUE0RixDQUFDO0FBQzNHLGNBQWMseUpBQXlKLENBQUM7QUFDeEssY0FBYyxtSkFBbUosQ0FBQztBQUNsSyxjQUFjLHNIQUFzSCxDQUFDO0FBQ3JJLGNBQWMsb0ZBQW9GLENBQUM7QUFDbkcsY0FBYyx3RUFBd0UsQ0FBQztBQUN2RixjQUFjLGtFQUFrRSxDQUFDO0FBQ2pGLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxTQUFTO0FBQ1QsY0FBYyx1R0FBdUcsQ0FBQztBQUN0SCxjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMscUVBQXFFLENBQUM7QUFDcEYsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHNDQUFzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUHJpdmF0ZSBjb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWFjY291bnRzL3NtYXJ0LWNybS1hY2NvdW50LWRldGFpbHMvc21hcnQtY3JtLWFjY291bnQtZGV0YWlscy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1maWxlcy9zbWFydC1jcm0tYWNjb3VudC1maWxlcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1pbmZvL3NtYXJ0LWNybS1hY2NvdW50LWluZm8uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnRzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbXBldGl0aW9uL3NtYXJ0LWNybS1jb21wZXRpdGlvbi9zbWFydC1jcm0tY29tcGV0aXRpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tYWN0aW9ucy9zbWFydC1jcm0tYWN0aW9ucy1kZXRhaWxzL3NtYXJ0LWNybS1hY3Rpb25zLWRldGFpbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tYWN0aW9ucy9zbWFydC1jcm0tYWN0aW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMtZGV0YWlscy9zbWFydC1jcm0tb3Bwb3J0dW5pdHktY2F0ZWdvcmllcy1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tc291cmNlL3NtYXJ0LWNybS1zb3VyY2UtZGV0YWlscy9zbWFydC1jcm0tc291cmNlLWRldGFpbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tc291cmNlL3NtYXJ0LWNybS1zb3VyY2UuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tc3RhZ2VzL3NtYXJ0LWNybS1zdGFnZS1kZXRhaWxzL3NtYXJ0LWNybS1zdGFnZS1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXN0YWdlcy9zbWFydC1jcm0tc3RhZ2VzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXdpZGdldHMvc21hcnQtY3JtLXdpZGdldHMtZGV0YWlscy9zbWFydC1jcm0td2lkZ2V0cy1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXdpZGdldHMvc21hcnQtY3JtLXdpZGdldHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29udGFjdHMvc21hcnQtY3JtLWNvbnRhY3QtZGV0YWlscy9zbWFydC1jcm0tY29udGFjdC1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbnRhY3RzL3NtYXJ0LWNybS1jb250YWN0LWluZm8vc21hcnQtY3JtLWNvbnRhY3QtaW5mby5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1jb250YWN0cy9zbWFydC1jcm0tY29udGFjdHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY3VzdG9tZXIvc21hcnQtY3JtLWN1c3RvbWVyLXN1Y2Nlc3Mvc21hcnQtY3JtLWN1c3RvbWVyLXN1Y2Nlc3MuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tbWVkaWEvc21hcnQtY3JtLXNvY2lhbC1tZWRpYS9zbWFydC1jcm0tc29jaWFsLW1lZGlhLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWluc2lnaHQvc21hcnQtY3JtLWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtaW52b2ljZXMvc21hcnQtY3JtLWFjY291bnQtaW52b2ljZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tY29udGFjdC1pbnNpZ2h0L3NtYXJ0LWNybS1jb250YWN0LWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tYWNjb3VudC1pbnNpZ2h0L3NtYXJ0LWNybS1hY2NvdW50LWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1pbnNpZ2h0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tYW5hbHlzaXMtaW5zaWdodC9zbWFydC1jcm0tYW5hbHlzaXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tbWFya2V0aW5nLWluc2lnaHQvc21hcnQtY3JtLW1hcmtldGluZy1pbnNpZ2h0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWxlYWRzL3NtYXJ0LWNybS1sZWFkcy1kZXRhaWxzL3NtYXJ0LWNybS1sZWFkcy1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWxlYWRzL3NtYXJ0LWNybS1sZWFkcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctY29udGFjdHMvc21hcnQtY3JtLW1hcmtldGluZy1jb250YWN0cy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctZGV0YWlscy9zbWFydC1jcm0tbWFya2V0aW5nLWRldGFpbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC9zbWFydC1jcm0tbWFya2V0aW5nLXZpZXctZGV0YWlscy9zbWFydC1jcm0tbWFya2V0aW5nLXZpZXctZGV0YWlscy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1ib2FyZC9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWxpc3Qvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1pbmZvLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtbGlzdC9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWN0aW9ucy9zbWFydC1jcm0tYWN0aW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS10YWJzL3NtYXJ0LWNybS10YWJzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL3NtYXJ0LWNybS1wcml2YXRlLnJvdXRpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvc21hcnQtY3JtLXByaXZhdGUubW9kdWxlJztcblxuLy8gUHVibGljXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wdWJsaWMvY29tcG9uZW50cy9zbWFydC1jcm0tbmV3c2xldHRlci1jb25maXJtYXRpb24vc21hcnQtY3JtLW5ld3NsZXR0ZXItY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wdWJsaWMvY29tcG9uZW50cy9zbWFydC1jcm0tbmV3c2xldHRlci11bnN1YnNjcmliZS9zbWFydC1jcm0tbmV3c2xldHRlci11bnN1YnNjcmliZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHVibGljL2NvbXBvbmVudHMvc21hcnQtY3JtLXNpZ251cC9zbWFydC1jcm0tc2lnbnVwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wdWJsaWMvc21hcnQtY3JtLXB1YmxpYy5yb3V0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wdWJsaWMvc21hcnQtY3JtLXB1YmxpYy5tb2R1bGUnO1xuIl19
|
|
@@ -5,6 +5,7 @@ import { CrmService } from '@posiwise/smart-crm-shared';
|
|
|
5
5
|
import { PAGE_SIZE } from '@posiwise/common-utilities';
|
|
6
6
|
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
7
7
|
import { CommonService, GeoService, SubscriptionService } from '@posiwise/common-services';
|
|
8
|
+
import { HelperService } from '@posiwise/helper-service';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@posiwise/common-services";
|
|
10
11
|
import * as i2 from "@posiwise/smart-crm-shared";
|
|
@@ -37,16 +38,21 @@ export class SmartCrmCompanyDetailsComponent extends AppBaseComponent {
|
|
|
37
38
|
onSearchOwner(event) {
|
|
38
39
|
let values = [];
|
|
39
40
|
if (event.query) {
|
|
40
|
-
values = this.allSubscriptionMembers
|
|
41
|
+
values = this.allSubscriptionMembers?.filter((x) => {
|
|
41
42
|
return x.first_name.toLowerCase().includes(event.query.toLowerCase());
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
else {
|
|
45
|
-
this.allSubscriptionMembers
|
|
46
|
+
this.allSubscriptionMembers?.forEach(item => {
|
|
46
47
|
values.push(item);
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
|
-
this.filteredOwners = values
|
|
50
|
+
this.filteredOwners = values.map(owner => {
|
|
51
|
+
return {
|
|
52
|
+
...owner,
|
|
53
|
+
displayName: HelperService.formatDisplayName(owner)
|
|
54
|
+
};
|
|
55
|
+
});
|
|
50
56
|
}
|
|
51
57
|
ngOnInit() {
|
|
52
58
|
this.organizationTypes$ = this.commonService.getOrganizationTypes();
|
|
@@ -97,20 +103,26 @@ export class SmartCrmCompanyDetailsComponent extends AppBaseComponent {
|
|
|
97
103
|
}
|
|
98
104
|
if (this.id === 0) {
|
|
99
105
|
const currentUser = this.allSubscriptionMembers.find(x => x.id === this.user.id);
|
|
100
|
-
this.form.get('owner_id').setValue(
|
|
106
|
+
this.form.get('owner_id').setValue({
|
|
107
|
+
...currentUser,
|
|
108
|
+
displayName: HelperService.formatDisplayName(currentUser)
|
|
109
|
+
});
|
|
101
110
|
}
|
|
102
111
|
});
|
|
103
112
|
}
|
|
104
113
|
// /** Function to get user info */
|
|
105
114
|
getUserInfo(subscriptionId, hasAccess) {
|
|
106
115
|
this.userStore().subscribe(user => {
|
|
107
|
-
this.user =
|
|
116
|
+
this.user = {
|
|
117
|
+
...user,
|
|
118
|
+
displayName: HelperService.formatDisplayName(user)
|
|
119
|
+
};
|
|
108
120
|
if (hasAccess) {
|
|
109
|
-
this.form.get('owner_id').setValue(user);
|
|
121
|
+
this.form.get('owner_id').setValue(this.user);
|
|
110
122
|
this.getAllSubscriptionMembers(subscriptionId);
|
|
111
123
|
}
|
|
112
124
|
else {
|
|
113
|
-
this.form.get('owner_id').setValue(user);
|
|
125
|
+
this.form.get('owner_id').setValue(this.user);
|
|
114
126
|
}
|
|
115
127
|
});
|
|
116
128
|
}
|
|
@@ -150,7 +162,10 @@ export class SmartCrmCompanyDetailsComponent extends AppBaseComponent {
|
|
|
150
162
|
this.data = res;
|
|
151
163
|
this.allSubscriptionMembers.forEach(member => {
|
|
152
164
|
if (this.data.owner_id === member.id) {
|
|
153
|
-
this.form.get('owner_id').patchValue(
|
|
165
|
+
this.form.get('owner_id').patchValue({
|
|
166
|
+
...member,
|
|
167
|
+
displayName: HelperService.formatDisplayName(member)
|
|
168
|
+
});
|
|
154
169
|
}
|
|
155
170
|
});
|
|
156
171
|
this.countryNames.forEach(x => {
|
|
@@ -185,10 +200,10 @@ export class SmartCrmCompanyDetailsComponent extends AppBaseComponent {
|
|
|
185
200
|
super.ngOnDestroy();
|
|
186
201
|
}
|
|
187
202
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmCompanyDetailsComponent, deps: [{ token: i0.Injector }, { token: i1.SubscriptionService }, { token: i2.CrmService }, { token: i1.CommonService }, { token: i1.GeoService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
188
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmCompanyDetailsComponent, selector: "pw-company-details", usesInheritance: true, ngImport: i0, template: "<div class=\"me-auto col-xs-6\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountMessage.Account' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"p-2 mt-3\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'User.Account.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Country\">{{ 'Crm.AccountMessage.Country' | transloco }}</label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.AccountMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\"\n [class.d-none]=\"!hasAccess\">\n <label class=\"mb-2\" for=\"Owner\">{{ 'Crm.AccountMessage.Owner' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete formControlName=\"owner_id\"\n [suggestions]=\"filteredOwners\"\n (completeMethod)=\"onSearchOwner($event)\"\n dataKey=\"id\"\n field=\"first_name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Owner\"\n [dropdown]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"url\"\n class=\"form-control\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n *ngIf=\"organizationTypes$ | async as types\">\n <select class=\"form-select\"\n formControlName=\"organization_type_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\">\n <option *ngFor=\"let option of types['organization_types']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <select class=\"form-select\"\n formControlName=\"organization_industry_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\">\n <option *ngFor=\"let option of industries['organization_industries']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Size' | transloco\"\n name=\"organization_size_id\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <select class=\"form-select\"\n formControlName=\"organization_size_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\">\n <option *ngFor=\"let option of sizes['organization_sizes']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Status' | transloco\"\n name=\"status\">\n <select class=\"form-select\"\n formControlName=\"status\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\">\n <option *ngFor=\"let option of status\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Priority' | transloco\"\n name=\"priority\">\n <select class=\"form-select\"\n formControlName=\"priority\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\">\n <option *ngFor=\"let option of priority\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Source' | transloco\"\n name=\"crm_source_id\">\n <select class=\"form-select\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12 mt-2\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.NgxGpAutocompleteDirective, selector: "[ngx-gp-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i8.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i9.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslocoPipe, name: "transloco" }] }); }
|
|
203
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmCompanyDetailsComponent, selector: "pw-company-details", usesInheritance: true, ngImport: i0, template: "<div class=\"me-auto col-xs-6\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountMessage.Account' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"p-2 mt-3\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'User.Account.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Country\">{{ 'Crm.AccountMessage.Country' | transloco }}</label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.AccountMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\"\n [class.d-none]=\"!hasAccess\">\n <label class=\"mb-2\" for=\"Owner\">{{ 'Crm.AccountMessage.Owner' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete formControlName=\"owner_id\"\n [suggestions]=\"filteredOwners\"\n (completeMethod)=\"onSearchOwner($event)\"\n dataKey=\"id\"\n field=\"displayName\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Owner\"\n [dropdown]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"url\"\n class=\"form-control\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n *ngIf=\"organizationTypes$ | async as types\">\n <select class=\"form-select\"\n formControlName=\"organization_type_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\">\n <option *ngFor=\"let option of types['organization_types']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <select class=\"form-select\"\n formControlName=\"organization_industry_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\">\n <option *ngFor=\"let option of industries['organization_industries']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Size' | transloco\"\n name=\"organization_size_id\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <select class=\"form-select\"\n formControlName=\"organization_size_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\">\n <option *ngFor=\"let option of sizes['organization_sizes']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Status' | transloco\"\n name=\"status\">\n <select class=\"form-select\"\n formControlName=\"status\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\">\n <option *ngFor=\"let option of status\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Priority' | transloco\"\n name=\"priority\">\n <select class=\"form-select\"\n formControlName=\"priority\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\">\n <option *ngFor=\"let option of priority\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Source' | transloco\"\n name=\"crm_source_id\">\n <select class=\"form-select\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12 mt-2\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.user-info .label{color:#777;font-size:14px;text-transform:capitalize}.user-info .user-value{border:0;border-bottom:1px solid rgb(119,119,119)}.user-info .user-value:focus{box-shadow:none}.user-info .user-value.is-invalid{border-color:#ff586b}.control-btns{display:none}::ng-deep .p-overlay{width:100%!important;min-width:100%!important;max-width:100%!important;left:0!important}::ng-deep .p-autocomplete-items li{white-space:nowrap!important;overflow:auto!important;text-overflow:ellipsis!important}::ng-deep .p-autocomplete-items li:hover{text-overflow:clip!important}.name-block{width:85%}.comment-field{border:0;border-bottom:1px solid rgb(242,242,242);color:#1769e1;display:none;font-size:15px;min-height:100px;padding:2px 5px!important}.comment-field:focus{border:1px solid rgb(23,105,225)!important;border-bottom:0;box-shadow:none}p{max-width:85%;white-space:pre-wrap}.auto-complete{display:none;margin-top:10px}.show-controls .comment-field,.show-controls .auto-complete,.show-controls .control-btns{display:block}.show-controls p,.show-controls .edit-btn,.show-controls .action-owner{display:none}select{appearance:none}textarea{resize:none}.clear-both{clear:both}.isDisabled input[type=text],.isDisabled input,.isDisabled textarea,.isDisabled select{pointer-events:none}.isDisabled select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:none!important}.timeline-card.card{min-height:auto}@media (max-width: 768px){.completed-toggle{padding-top:10px}}.when-btn:focus{border:0;box-shadow:none}.no-actions{clear:both}.timeline-container{height:700px;overflow-y:scroll}.action-btn.active{color:#fff!important;background-color:var(--first)}.form-action-buttons{margin-bottom:14px;margin-top:15px}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.NgxGpAutocompleteDirective, selector: "[ngx-gp-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i8.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i9.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslocoPipe, name: "transloco" }] }); }
|
|
189
204
|
}
|
|
190
205
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmCompanyDetailsComponent, decorators: [{
|
|
191
206
|
type: Component,
|
|
192
|
-
args: [{ selector: 'pw-company-details', template: "<div class=\"me-auto col-xs-6\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountMessage.Account' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"p-2 mt-3\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'User.Account.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Country\">{{ 'Crm.AccountMessage.Country' | transloco }}</label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.AccountMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\"\n [class.d-none]=\"!hasAccess\">\n <label class=\"mb-2\" for=\"Owner\">{{ 'Crm.AccountMessage.Owner' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete formControlName=\"owner_id\"\n [suggestions]=\"filteredOwners\"\n (completeMethod)=\"onSearchOwner($event)\"\n dataKey=\"id\"\n field=\"first_name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Owner\"\n [dropdown]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"url\"\n class=\"form-control\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n *ngIf=\"organizationTypes$ | async as types\">\n <select class=\"form-select\"\n formControlName=\"organization_type_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\">\n <option *ngFor=\"let option of types['organization_types']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <select class=\"form-select\"\n formControlName=\"organization_industry_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\">\n <option *ngFor=\"let option of industries['organization_industries']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Size' | transloco\"\n name=\"organization_size_id\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <select class=\"form-select\"\n formControlName=\"organization_size_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\">\n <option *ngFor=\"let option of sizes['organization_sizes']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Status' | transloco\"\n name=\"status\">\n <select class=\"form-select\"\n formControlName=\"status\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\">\n <option *ngFor=\"let option of status\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Priority' | transloco\"\n name=\"priority\">\n <select class=\"form-select\"\n formControlName=\"priority\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\">\n <option *ngFor=\"let option of priority\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Source' | transloco\"\n name=\"crm_source_id\">\n <select class=\"form-select\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12 mt-2\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n" }]
|
|
207
|
+
args: [{ selector: 'pw-company-details', template: "<div class=\"me-auto col-xs-6\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountMessage.Account' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"p-2 mt-3\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'User.Account.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Country\">{{ 'Crm.AccountMessage.Country' | transloco }}</label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.AccountMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\"\n [class.d-none]=\"!hasAccess\">\n <label class=\"mb-2\" for=\"Owner\">{{ 'Crm.AccountMessage.Owner' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete formControlName=\"owner_id\"\n [suggestions]=\"filteredOwners\"\n (completeMethod)=\"onSearchOwner($event)\"\n dataKey=\"id\"\n field=\"displayName\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Owner\"\n [dropdown]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"url\"\n class=\"form-control\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n *ngIf=\"organizationTypes$ | async as types\">\n <select class=\"form-select\"\n formControlName=\"organization_type_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\">\n <option *ngFor=\"let option of types['organization_types']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <select class=\"form-select\"\n formControlName=\"organization_industry_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\">\n <option *ngFor=\"let option of industries['organization_industries']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Size' | transloco\"\n name=\"organization_size_id\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <select class=\"form-select\"\n formControlName=\"organization_size_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\">\n <option *ngFor=\"let option of sizes['organization_sizes']\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Status' | transloco\"\n name=\"status\">\n <select class=\"form-select\"\n formControlName=\"status\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\">\n <option *ngFor=\"let option of status\"\n [value]=\"option\">{{ option }}</option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Priority' | transloco\"\n name=\"priority\">\n <select class=\"form-select\"\n formControlName=\"priority\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\">\n <option *ngFor=\"let option of priority\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Source' | transloco\"\n name=\"crm_source_id\">\n <select class=\"form-select\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\">\n <option *ngFor=\"let option of source\"\n [value]=\"option.id\">\n {{ option.name }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12 mt-2\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.user-info .label{color:#777;font-size:14px;text-transform:capitalize}.user-info .user-value{border:0;border-bottom:1px solid rgb(119,119,119)}.user-info .user-value:focus{box-shadow:none}.user-info .user-value.is-invalid{border-color:#ff586b}.control-btns{display:none}::ng-deep .p-overlay{width:100%!important;min-width:100%!important;max-width:100%!important;left:0!important}::ng-deep .p-autocomplete-items li{white-space:nowrap!important;overflow:auto!important;text-overflow:ellipsis!important}::ng-deep .p-autocomplete-items li:hover{text-overflow:clip!important}.name-block{width:85%}.comment-field{border:0;border-bottom:1px solid rgb(242,242,242);color:#1769e1;display:none;font-size:15px;min-height:100px;padding:2px 5px!important}.comment-field:focus{border:1px solid rgb(23,105,225)!important;border-bottom:0;box-shadow:none}p{max-width:85%;white-space:pre-wrap}.auto-complete{display:none;margin-top:10px}.show-controls .comment-field,.show-controls .auto-complete,.show-controls .control-btns{display:block}.show-controls p,.show-controls .edit-btn,.show-controls .action-owner{display:none}select{appearance:none}textarea{resize:none}.clear-both{clear:both}.isDisabled input[type=text],.isDisabled input,.isDisabled textarea,.isDisabled select{pointer-events:none}.isDisabled select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:none!important}.timeline-card.card{min-height:auto}@media (max-width: 768px){.completed-toggle{padding-top:10px}}.when-btn:focus{border:0;box-shadow:none}.no-actions{clear:both}.timeline-container{height:700px;overflow-y:scroll}.action-btn.active{color:#fff!important;background-color:var(--first)}.form-action-buttons{margin-bottom:14px;margin-top:15px}\n"] }]
|
|
193
208
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.SubscriptionService }, { type: i2.CrmService }, { type: i1.CommonService }, { type: i1.GeoService }] });
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWFjY291bnQtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtZGV0YWlscy9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzL3NtYXJ0LWNybS1hY2NvdW50LWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3hELE9BQU8sRUFBRSxTQUFTLEVBQStCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWTNGLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxnQkFBZ0I7SUE2Q2pFLFlBQ0ksUUFBa0IsRUFDRCxtQkFBd0MsRUFDeEMsVUFBc0IsRUFDdEIsYUFBNEIsRUFDNUIsVUFBc0I7UUFFdkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFD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RGpMYSwrQkFBK0I7a0JBSjNDLFNBQVM7K0JBQ0ksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBcHBTbWFydENybSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvc21hcnQtY3JtLm1vZGVsJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcbmltcG9ydCB7IENybVNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2Uvc21hcnQtY3JtLXNoYXJlZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFBBR0VfU0laRSwgVXNlciwgU3Vic2NyaXB0aW9uLCBDb3VudHJ5IH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgQ3JtQWNjb3VudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2UvY3JtLWFjY291bnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UsIEdlb1NlcnZpY2UsIFN1YnNjcmlwdGlvblNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7XG4gICAgT3JnYW5pemF0aW9uSW5kdXN0cnksXG4gICAgT3JnYW5pemF0aW9uU2l6ZSxcbiAgICBPcmdhbml6YXRpb25UeXBlLFxuICAgIFN1YnNjcmlwdGlvbk1lbWJlclxufSBmcm9tICdsaWJzL3NtYXJ0LWNybS9zcmMvbGliL3NoYXJlZC9pbnRlcmZhY2Uvc21hcnQtY3JtLW1vZHVsZS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWNvbXBhbnktZGV0YWlscycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWNybS1hY2NvdW50LWRldGFpbHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q3JtQ29tcGFueURldGFpbHNDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICB1c2VyOiBVc2VyO1xuXG4gICAgaWQ6IG51bWJlcjtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcblxuICAgIGRhdGE6IENybUFjY291bnQ7XG4gICAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIG9uRWRpdCA9IGZhbHNlO1xuXG4gICAgc3Vic2NyaXB0aW9uTWVtYmVyczogW10gPSBbXTtcblxuICAgIG9yZ2FuaXphdGlvblNpemVzJDogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25TaXplW10+O1xuXG4gICAgb3JnYW5pemF0aW9uVHlwZXMkOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvblR5cGVbXT47XG5cbiAgICBvcmdhbml6YXRpb25JbmR1c3RyaWVzJDogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25JbmR1c3RyeVtdPjtcblxuICAgIHByaXZhdGUgY291bnRyaWVzJDogT2JzZXJ2YWJsZTxDb3VudHJ5W10+O1xuXG4gICAgYWxsU3Vic2NyaXB0aW9uTWVtYmVyczogU3Vic2NyaXB0aW9uTWVtYmVyW107XG5cbiAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyO1xuXG4gICAgaGFzQWNjZXNzOiBib29sZWFuO1xuXG4gICAgZmlsdGVyZWRPd25lcnM6IFN1YnNjcmlwdGlvbk1lbWJlcltdO1xuXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBzdGF0dXMgPSBbXTtcblxuICAgIHByaW9yaXR5ID0gW107XG5cbiAgICBzb3VyY2UgPSBbXTtcblxuICAgIHByaXZhdGUgY291bnRyeU5hbWVzID0gW107XG5cbiAgICBmaWx0ZXJlZENvdW50cmllczogQ291bnRyeVtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25TZXJ2aWNlOiBTdWJzY3JpcHRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNybVNlcnZpY2U6IENybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBnZW9TZXJ2aWNlOiBHZW9TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwU21hcnRDcm0uZ2V0QWNjb3VudHNGb3JtKCk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hPd25lcihldmVudCkge1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGlmIChldmVudC5xdWVyeSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5hbGxTdWJzY3JpcHRpb25NZW1iZXJzLmZpbHRlcigoeDogU3Vic2NyaXB0aW9uTWVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZmlyc3RfbmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsbFN1YnNjcmlwdGlvbk1lbWJlcnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPd25lcnMgPSB2YWx1ZXM7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uVHlwZXMkID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldE9yZ2FuaXphdGlvblR5cGVzKCk7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2l6ZXMkID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldE9yZ2FuaXphdGlvblNpemVzKCk7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uSW5kdXN0cmllcyQgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSW5kdXN0cmllcygpO1xuICAgICAgICB0aGlzLmNvdW50cmllcyQgPSB0aGlzLmdlb1NlcnZpY2UuZ2V0Q291bnRyaWVzKCk7XG4gICAgICAgIHRoaXMuY291bnRyaWVzJC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY291bnRyeU5hbWVzID0gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKE51bWJlcihkYXRhWydpZCddKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIoZGF0YVsnaWQnXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0FjY2VzcyA9IHRoaXMuaGFzQWRtaW5BY2Nlc3ModGhpcy5zdWJzY3JpcHRpb24/LmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgdGhpcy5oYXNBY2Nlc3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudERlZmF1bHRWYWx1ZXModGhpcy5zdWJzY3JpcHRpb24/LmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdzdWJzY3JpcHRpb25faWQnKS5zZXRWYWx1ZSh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCBhY2NvdW50IGRlZmF1bHQgdmFsdWVzICovXG4gICAgcHJpdmF0ZSBhY2NvdW50RGVmYXVsdFZhbHVlcyhpZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRDcm1BY2NvdW50RGVmYXVsdFZhbHVlcyhpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgICAgdGhpcy5wcmlvcml0eSA9IHJlc3BvbnNlLnByaW9yaXR5O1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSByZXNwb25zZS5zb3VyY2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgc3Vic2NyaXB0aW9uIG1lbWJlcnMgKi9cbiAgICBwcml2YXRlIGdldEFsbFN1YnNjcmlwdGlvbk1lbWJlcnMoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRFbnJvbGxlZFN1YnNjcmlwdGlvbihpZCwgeyBwYWdlX3NpemU6IFBBR0VfU0laRSB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxTdWJzY3JpcHRpb25NZW1iZXJzID0gcmVzcG9uc2UubWVtYmVycztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRWRpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWNjb3VudERldGFpbCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FZGl0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5hbGxTdWJzY3JpcHRpb25NZW1iZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0+IHguaWQgPT09IHRoaXMudXNlci5pZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdvd25lcl9pZCcpLnNldFZhbHVlKGN1cnJlbnRVc2VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAvKiogRnVuY3Rpb24gdG8gZ2V0IHVzZXIgaW5mbyAqL1xuICAgIHByaXZhdGUgZ2V0VXNlckluZm8oc3Vic2NyaXB0aW9uSWQ6IG51bWJlciwgaGFzQWNjZXNzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudXNlclN0b3JlKCkuc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICAgIGlmIChoYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdvd25lcl9pZCcpLnNldFZhbHVlKHVzZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsU3Vic2NyaXB0aW9uTWVtYmVycyhzdWJzY3JpcHRpb25JZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ293bmVyX2lkJykuc2V0VmFsdWUodXNlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgZm9ybSBjb250cm9scyAqL1xuICAgIGdldCBmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIG9uIGZvcm0gc3VibWl0ICovXG4gICAgb25TYXZlKCkge1xuICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ293bmVyX2lkJykuc2V0VmFsdWUodGhpcy5mb3JtLmdldCgnb3duZXJfaWQnKS52YWx1ZS5pZCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjb3VudHJ5Jykuc2V0VmFsdWUodGhpcy5mb3JtLmdldCgnY291bnRyeScpLnZhbHVlPy5jb2RlIHx8IG51bGwpO1xuICAgICAgICAgICAgY29uc3Qgc3ViJCA9IHRoaXMuaWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuY3JtU2VydmljZS51cGRhdGVBY2NvdW50KHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgdGhpcy5pZCwgdGhpcy5mb3JtLnZhbHVlKVxuICAgICAgICAgICAgICAgIDogdGhpcy5jcm1TZXJ2aWNlLnBvc3RBY2NvdW50KHRoaXMuZm9ybS52YWx1ZSwgdGhpcy5zdWJzY3JpcHRpb24/LmlkKTtcbiAgICAgICAgICAgIHN1YiQuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0NybS5BY2NvdW50TWVzc2FnZS5VcGRhdGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXG4gICAgICAgICAgICAgICAgICAgIGAvJHt0aGlzLnN1YnNjcmlwdGlvbj8uc2x1Z30ke1JPVVRFUlMuYWNjb3VudEluZm99JHtyZXNwb25zZS5pZH1gXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9KS5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBsb2NhdGlvbiBzZWxlY3QgKi9cbiAgICBoYW5kbGVBZGRyZXNzQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9ybS5nZXQoJ2xvY2F0aW9uJykuc2V0VmFsdWUoZXZlbnQuZm9ybWF0dGVkX2FkZHJlc3MpO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgYWNjb3VudCBkZXRhaWwgb24gZWRpdCBmb3JtICovXG4gICAgcHJpdmF0ZSBnZXRBY2NvdW50RGV0YWlsKCkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRBY2NvdW50RGV0YWlsKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgdGhpcy5pZCkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShyZXMpO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gcmVzO1xuICAgICAgICAgICAgdGhpcy5hbGxTdWJzY3JpcHRpb25NZW1iZXJzLmZvckVhY2gobWVtYmVyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLm93bmVyX2lkID09PSBtZW1iZXIuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnb3duZXJfaWQnKS5wYXRjaFZhbHVlKG1lbWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvdW50cnlOYW1lcy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIGlmICh4Wydjb2RlJ10gPT09IHJlc1snY291bnRyeSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NvdW50cnknKS5wYXRjaFZhbHVlKHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRFbnJvbGxlZFN1YnNjcmlwdGlvbih0aGlzLnN1YnNjcmlwdGlvbj8uaWQsIHsgcGFnZV9zaXplOiBQQUdFX1NJWkUgfSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25NZW1iZXJzID0gcmVzcG9uc2UubWVtYmVycztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHRoaXMudG9hc3Quc2hvd1RvYXN0KGVycm9yKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblNlYXJjaENvdW50cnkoZXZlbnQpIHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAoZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMuY291bnRyeU5hbWVzLmZpbHRlcigoeDogQ291bnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB4Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb3VudHJ5TmFtZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvdW50cmllcyA9IHZhbHVlcztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWUtYXV0byBjb2wteHMtNlwiPlxuICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAoY2xpY2spPVwiYmFjaygpXCJcbiAgICBjbGFzcz1cInByZXZpb3VzXCI+PGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICA8aDMgY2xhc3M9XCJtLXN1YmhlYWRlcl9fdGl0bGUgbS1zdWJoZWFkZXJfX3RpdGxlLS1zZXBhcmF0b3JcIj5cbiAgICA8c3Bhbj57eyAnQ3JtLkFjY291bnRNZXNzYWdlLkFjY291bnQnIHwgdHJhbnNsb2NvIH19OlxuICAgICAge3sgZGF0YT8ubmFtZSA/IGRhdGE/Lm5hbWUgOiAoJ0xhYmVsLkFkZE5ldycgfCB0cmFuc2xvY28pIH19PC9zcGFuPlxuICA8L2gzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidy0xMDAgdGV4dC1jZW50ZXIgbXQtM1wiXG4gICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInAtMiBtdC0zXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKG5nU3VibWl0KT1cIm9uU2F2ZSgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLk5hbWUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgW2Vycm9yTXNnXT1cIidVc2VyLkFjY291bnQuVmFsaWRhdGlvbi5OYW1lJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgIGlkPVwibmFtZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ25hbWUnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuTG9jYXRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5Mb2NhdGlvbkVycm9yTWVzc2FnZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJsb2NhdGlvblwiPlxuICAgICAgICAgIDxpbnB1dCBuZ3gtZ3AtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAjcGxhY2VzPVwibmd4LXBsYWNlc1wiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAob25BZGRyZXNzQ2hhbmdlKT1cImhhbmRsZUFkZHJlc3NDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2xvY2F0aW9uJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInVpLWZsdWlkIHNraWxscy1tb2RhbCBjb2wtc20tNFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yXCIgZm9yPVwiQ291bnRyeVwiPnt7ICdDcm0uQWNjb3VudE1lc3NhZ2UuQ291bnRyeScgfCB0cmFuc2xvY28gfX08L2xhYmVsPlxuICAgICAgICA8cC1hdXRvQ29tcGxldGUgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeVwiXG4gICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImZpbHRlcmVkQ291bnRyaWVzXCJcbiAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwib25TZWFyY2hDb3VudHJ5KCRldmVudClcIlxuICAgICAgICAgIGRhdGFLZXk9XCJjb2RlXCJcbiAgICAgICAgICBmaWVsZD1cIm5hbWVcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBDb3VudHJ5XCJcbiAgICAgICAgICBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiYgZlsnY291bnRyeSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogeyBib3JkZXI6ICcxcHggc29saWQgZ3JheScgfVxuICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLlRlbCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJ0ZWxcIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInQ3JtLkFjY291bnRNZXNzYWdlLlRlbEVycm9yTWVzc2FnZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGVsXCJcbiAgICAgICAgICAgIGlkPVwidGVsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndGVsJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInVpLWZsdWlkIHNraWxscy1tb2RhbCBjb2wtc20tNFwiXG4gICAgICAgIFtjbGFzcy5kLW5vbmVdPVwiIWhhc0FjY2Vzc1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJtYi0yXCIgZm9yPVwiT3duZXJcIj57eyAnQ3JtLkFjY291bnRNZXNzYWdlLk93bmVyJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgcmVxdWlyZWQtaWNvblwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPHAtYXV0b0NvbXBsZXRlIGZvcm1Db250cm9sTmFtZT1cIm93bmVyX2lkXCJcbiAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRPd25lcnNcIlxuICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJvblNlYXJjaE93bmVyKCRldmVudClcIlxuICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgZmllbGQ9XCJmaXJzdF9uYW1lXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggT3duZXJcIlxuICAgICAgICAgIFtkcm9wZG93bl09XCJ0cnVlXCI+XG4gICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5Db21wYW55VXJsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImNvbXBhbnlfdXJsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGFueV91cmxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjb21wYW55X3VybCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ09yZ2FuaXphdGlvbi5Pcmdhbml6YXRpb25UeXBlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cIm9yZ2FuaXphdGlvbl90eXBlX2lkXCJcbiAgICAgICAgICAqbmdJZj1cIm9yZ2FuaXphdGlvblR5cGVzJCB8IGFzeW5jIGFzIHR5cGVzXCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXphdGlvbl90eXBlX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnb3JnYW5pemF0aW9uX3R5cGVfaWQnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHR5cGVzWydvcmdhbml6YXRpb25fdHlwZXMnXVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIj5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInT3JnYW5pemF0aW9uLk9yZ2FuaXphdGlvbkluZHVzdHJ5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cIm9yZ2FuaXphdGlvbl9pbmR1c3RyeV9pZFwiXG4gICAgICAgICAgKm5nSWY9XCJvcmdhbml6YXRpb25JbmR1c3RyaWVzJCB8IGFzeW5jIGFzIGluZHVzdHJpZXNcIj5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib3JnYW5pemF0aW9uX2luZHVzdHJ5X2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnb3JnYW5pemF0aW9uX2luZHVzdHJ5X2lkJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBpbmR1c3RyaWVzWydvcmdhbml6YXRpb25faW5kdXN0cmllcyddXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPlxuICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00IGNvbC1sZy00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuU2l6ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJvcmdhbml6YXRpb25fc2l6ZV9pZFwiXG4gICAgICAgICAgKm5nSWY9XCJvcmdhbml6YXRpb25TaXplcyQgfCBhc3luYyBhcyBzaXplc1wiPlxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbml6YXRpb25fc2l6ZV9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ29yZ2FuaXphdGlvbl9zaXplX2lkJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzaXplc1snb3JnYW5pemF0aW9uX3NpemVzJ11cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5TdGF0dXMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwic3RhdHVzXCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0YXR1c1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3N0YXR1cyddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc3RhdHVzXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLlByaW9yaXR5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cInByaW9yaXR5XCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaW9yaXR5XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncHJpb3JpdHknXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByaW9yaXR5XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLlNvdXJjZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJjcm1fc291cmNlX2lkXCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNybV9zb3VyY2VfaWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjcm1fc291cmNlX2lkJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzb3VyY2VcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTEyIG10LTJcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiNVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBpZD1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnZGVzY3JpcHRpb24nXS5lcnJvcnMgfVwiPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kIG10LTNcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAgIChjbGljayk9XCJiYWNrKClcIj5cbiAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj5cbiAgICAgICAgICB7eyAnQnV0dG9uLlN1Ym1pdCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWFjY291bnQtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtZGV0YWlscy9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzL3NtYXJ0LWNybS1hY2NvdW50LWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3hELE9BQU8sRUFBRSxTQUFTLEVBQStCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU8zRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7OztBQU96RCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsZ0JBQWdCO0lBNkNqRSxZQUNJLFFBQWtCLEVBQ0QsbUJBQXdDLEVBQ3hDLFVBQXNCLEVBQ3RCLGFBQTRC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RTtnQkFDN0MsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7SUFDcEMsQ0FBQztJQUVRLFdBQVc7UUFDaEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBcE9RLCtCQUErQjttR0FBL0IsK0JBQStCLGlGQ3hCNUMsaTFRQXVNQTs7NEZEL0thLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDSSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFwcFNtYXJ0Q3JtIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL21vZGVscy9zbWFydC1jcm0ubW9kZWwnO1xuaW1wb3J0IHsgUk9VVEVSUyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9yb3V0ZXJzL3JvdXRlcnMnO1xuaW1wb3J0IHsgQ3JtU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9zbWFydC1jcm0tc2hhcmVkJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUEFHRV9TSVpFLCBVc2VyLCBTdWJzY3JpcHRpb24sIENvdW50cnkgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5pbXBvcnQgeyBDcm1BY2NvdW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9jcm0tYWNjb3VudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSwgR2VvU2VydmljZSwgU3Vic2NyaXB0aW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgICBPcmdhbml6YXRpb25JbmR1c3RyeSxcbiAgICBPcmdhbml6YXRpb25TaXplLFxuICAgIE9yZ2FuaXphdGlvblR5cGUsXG4gICAgU3Vic2NyaXB0aW9uTWVtYmVyXG59IGZyb20gJ2xpYnMvc21hcnQtY3JtL3NyYy9saWIvc2hhcmVkL2ludGVyZmFjZS9zbWFydC1jcm0tbW9kdWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2hlbHBlci1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1jb21wYW55LWRldGFpbHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi4vc21hcnQtY3JtLWFjY291bnQtaW5mby9zbWFydC1jcm0tYWNjb3VudC1pbmZvLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRDcm1Db21wYW55RGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHVzZXI6IFVzZXI7XG5cbiAgICBpZDogbnVtYmVyO1xuXG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgYnV0dG9uQnVzeSA9IGZhbHNlO1xuXG4gICAgZGF0YTogQ3JtQWNjb3VudDtcbiAgICBpc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgb25FZGl0ID0gZmFsc2U7XG5cbiAgICBzdWJzY3JpcHRpb25NZW1iZXJzOiBbXSA9IFtdO1xuXG4gICAgb3JnYW5pemF0aW9uU2l6ZXMkOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvblNpemVbXT47XG5cbiAgICBvcmdhbml6YXRpb25UeXBlcyQ6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uVHlwZVtdPjtcblxuICAgIG9yZ2FuaXphdGlvbkluZHVzdHJpZXMkOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvbkluZHVzdHJ5W10+O1xuXG4gICAgcHJpdmF0ZSBjb3VudHJpZXMkOiBPYnNlcnZhYmxlPENvdW50cnlbXT47XG5cbiAgICBhbGxTdWJzY3JpcHRpb25NZW1iZXJzOiBTdWJzY3JpcHRpb25NZW1iZXJbXTtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBoYXNBY2Nlc3M6IGJvb2xlYW47XG5cbiAgICBmaWx0ZXJlZE93bmVyczogU3Vic2NyaXB0aW9uTWVtYmVyW107XG5cbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHN0YXR1cyA9IFtdO1xuXG4gICAgcHJpb3JpdHkgPSBbXTtcblxuICAgIHNvdXJjZSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBjb3VudHJ5TmFtZXMgPSBbXTtcblxuICAgIGZpbHRlcmVkQ291bnRyaWVzOiBDb3VudHJ5W107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY3JtU2VydmljZTogQ3JtU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGdlb1NlcnZpY2U6IEdlb1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmZvcm0gPSBBcHBTbWFydENybS5nZXRBY2NvdW50c0Zvcm0oKTtcbiAgICB9XG5cbiAgICBvblNlYXJjaE93bmVyKGV2ZW50KSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKGV2ZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmFsbFN1YnNjcmlwdGlvbk1lbWJlcnM/LmZpbHRlcigoeDogU3Vic2NyaXB0aW9uTWVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZmlyc3RfbmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFsbFN1YnNjcmlwdGlvbk1lbWJlcnM/LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcmVkT3duZXJzID0gdmFsdWVzLm1hcChvd25lciA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLm93bmVyLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBIZWxwZXJTZXJ2aWNlLmZvcm1hdERpc3BsYXlOYW1lKG93bmVyKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uVHlwZXMkID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldE9yZ2FuaXphdGlvblR5cGVzKCk7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2l6ZXMkID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldE9yZ2FuaXphdGlvblNpemVzKCk7XG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uSW5kdXN0cmllcyQgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSW5kdXN0cmllcygpO1xuICAgICAgICB0aGlzLmNvdW50cmllcyQgPSB0aGlzLmdlb1NlcnZpY2UuZ2V0Q291bnRyaWVzKCk7XG4gICAgICAgIHRoaXMuY291bnRyaWVzJC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY291bnRyeU5hbWVzID0gcmVzO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKE51bWJlcihkYXRhWydpZCddKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSBOdW1iZXIoZGF0YVsnaWQnXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldFVzZXJTdWJzY3JpcHRpb24oKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0FjY2VzcyA9IHRoaXMuaGFzQWRtaW5BY2Nlc3ModGhpcy5zdWJzY3JpcHRpb24/LmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgdGhpcy5oYXNBY2Nlc3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudERlZmF1bHRWYWx1ZXModGhpcy5zdWJzY3JpcHRpb24/LmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdzdWJzY3JpcHRpb25faWQnKS5zZXRWYWx1ZSh0aGlzLnN1YnNjcmlwdGlvbj8uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCBhY2NvdW50IGRlZmF1bHQgdmFsdWVzICovXG4gICAgcHJpdmF0ZSBhY2NvdW50RGVmYXVsdFZhbHVlcyhpZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY3JtU2VydmljZS5nZXRDcm1BY2NvdW50RGVmYXVsdFZhbHVlcyhpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgICAgdGhpcy5wcmlvcml0eSA9IHJlc3BvbnNlLnByaW9yaXR5O1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSByZXNwb25zZS5zb3VyY2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBnZXQgc3Vic2NyaXB0aW9uIG1lbWJlcnMgKi9cbiAgICBwcml2YXRlIGdldEFsbFN1YnNjcmlwdGlvbk1lbWJlcnMoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRFbnJvbGxlZFN1YnNjcmlwdGlvbihpZCwgeyBwYWdlX3NpemU6IFBBR0VfU0laRSB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxTdWJzY3JpcHRpb25NZW1iZXJzID0gcmVzcG9uc2UubWVtYmVycztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRWRpdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWNjb3VudERldGFpbCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FZGl0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5hbGxTdWJzY3JpcHRpb25NZW1iZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0+IHguaWQgPT09IHRoaXMudXNlci5pZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdvd25lcl9pZCcpLnNldFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRVc2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IEhlbHBlclNlcnZpY2UuZm9ybWF0RGlzcGxheU5hbWUoY3VycmVudFVzZXIpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC8qKiBGdW5jdGlvbiB0byBnZXQgdXNlciBpbmZvICovXG4gICAgcHJpdmF0ZSBnZXRVc2VySW5mbyhzdWJzY3JpcHRpb25JZDogbnVtYmVyLCBoYXNBY2Nlc3M6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy51c2VyU3RvcmUoKS5zdWJzY3JpYmUodXNlciA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXIgPSB7XG4gICAgICAgICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogSGVscGVyU2VydmljZS5mb3JtYXREaXNwbGF5TmFtZSh1c2VyKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChoYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdvd25lcl9pZCcpLnNldFZhbHVlKHRoaXMudXNlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxTdWJzY3JpcHRpb25NZW1iZXJzKHN1YnNjcmlwdGlvbklkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnb3duZXJfaWQnKS5zZXRWYWx1ZSh0aGlzLnVzZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ2V0IGZvcm0gY29udHJvbHMgKi9cbiAgICBnZXQgZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBmb3JtIHN1Ym1pdCAqL1xuICAgIG9uU2F2ZSgpIHtcbiAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdvd25lcl9pZCcpLnNldFZhbHVlKHRoaXMuZm9ybS5nZXQoJ293bmVyX2lkJykudmFsdWUuaWQpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY291bnRyeScpLnNldFZhbHVlKHRoaXMuZm9ybS5nZXQoJ2NvdW50cnknKS52YWx1ZT8uY29kZSB8fCBudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YiQgPSB0aGlzLmlkXG4gICAgICAgICAgICAgICAgPyB0aGlzLmNybVNlcnZpY2UudXBkYXRlQWNjb3VudCh0aGlzLnN1YnNjcmlwdGlvbj8uaWQsIHRoaXMuaWQsIHRoaXMuZm9ybS52YWx1ZSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuY3JtU2VydmljZS5wb3N0QWNjb3VudCh0aGlzLmZvcm0udmFsdWUsIHRoaXMuc3Vic2NyaXB0aW9uPy5pZCk7XG4gICAgICAgICAgICBzdWIkLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdDcm0uQWNjb3VudE1lc3NhZ2UuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1xuICAgICAgICAgICAgICAgICAgICBgLyR7dGhpcy5zdWJzY3JpcHRpb24/LnNsdWd9JHtST1VURVJTLmFjY291bnRJbmZvfSR7cmVzcG9uc2UuaWR9YFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSkuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gbG9jYXRpb24gc2VsZWN0ICovXG4gICAgaGFuZGxlQWRkcmVzc0NoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdsb2NhdGlvbicpLnNldFZhbHVlKGV2ZW50LmZvcm1hdHRlZF9hZGRyZXNzKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ2V0IGFjY291bnQgZGV0YWlsIG9uIGVkaXQgZm9ybSAqL1xuICAgIHByaXZhdGUgZ2V0QWNjb3VudERldGFpbCgpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0QWNjb3VudERldGFpbCh0aGlzLnN1YnNjcmlwdGlvbj8uaWQsIHRoaXMuaWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUocmVzKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlcztcbiAgICAgICAgICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uTWVtYmVycy5mb3JFYWNoKG1lbWJlciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5vd25lcl9pZCA9PT0gbWVtYmVyLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ293bmVyX2lkJykucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5tZW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogSGVscGVyU2VydmljZS5mb3JtYXREaXNwbGF5TmFtZShtZW1iZXIpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb3VudHJ5TmFtZXMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoeFsnY29kZSddID09PSByZXNbJ2NvdW50cnknXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdjb3VudHJ5JykucGF0Y2hWYWx1ZSh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0RW5yb2xsZWRTdWJzY3JpcHRpb24odGhpcy5zdWJzY3JpcHRpb24/LmlkLCB7IHBhZ2Vfc2l6ZTogUEFHRV9TSVpFIH0pXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uTWVtYmVycyA9IHJlc3BvbnNlLm1lbWJlcnM7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB0aGlzLnRvYXN0LnNob3dUb2FzdChlcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hDb3VudHJ5KGV2ZW50KSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKGV2ZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmNvdW50cnlOYW1lcy5maWx0ZXIoKHg6IENvdW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQucXVlcnkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY291bnRyeU5hbWVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb3VudHJpZXMgPSB2YWx1ZXM7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1lLWF1dG8gY29sLXhzLTZcIj5cbiAgPGEgYXJpYS1sYWJlbD1cIk5hdmlnYXRlIHRvIFRhcmdldFwiXG4gICAgKGNsaWNrKT1cImJhY2soKVwiXG4gICAgY2xhc3M9XCJwcmV2aW91c1wiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctYWx0LWNpcmNsZS1sZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cbiAgPGgzIGNsYXNzPVwibS1zdWJoZWFkZXJfX3RpdGxlIG0tc3ViaGVhZGVyX190aXRsZS0tc2VwYXJhdG9yXCI+XG4gICAgPHNwYW4+e3sgJ0NybS5BY2NvdW50TWVzc2FnZS5BY2NvdW50JyB8IHRyYW5zbG9jbyB9fTpcbiAgICAgIHt7IGRhdGE/Lm5hbWUgPyBkYXRhPy5uYW1lIDogKCdMYWJlbC5BZGROZXcnIHwgdHJhbnNsb2NvKSB9fTwvc3Bhbj5cbiAgPC9oMz5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwLTIgbXQtM1wiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgIChuZ1N1Ym1pdCk9XCJvblNhdmUoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5OYW1lJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cIm5hbWVcIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInVXNlci5BY2NvdW50LlZhbGlkYXRpb24uTmFtZScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXG4gICAgICAgICAgICBpZD1cIm5hbWVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyduYW1lJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLkxvY2F0aW9uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgW2Vycm9yTXNnXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuTG9jYXRpb25FcnJvck1lc3NhZ2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwibG9jYXRpb25cIj5cbiAgICAgICAgICA8aW5wdXQgbmd4LWdwLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgI3BsYWNlcz1cIm5neC1wbGFjZXNcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgKG9uQWRkcmVzc0NoYW5nZSk9XCJoYW5kbGVBZGRyZXNzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydsb2NhdGlvbiddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mbHVpZCBza2lsbHMtbW9kYWwgY29sLXNtLTRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibWItMlwiIGZvcj1cIkNvdW50cnlcIj57eyAnQ3JtLkFjY291bnRNZXNzYWdlLkNvdW50cnknIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgPHAtYXV0b0NvbXBsZXRlIGZvcm1Db250cm9sTmFtZT1cImNvdW50cnlcIlxuICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJmaWx0ZXJlZENvdW50cmllc1wiXG4gICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cIm9uU2VhcmNoQ291bnRyeSgkZXZlbnQpXCJcbiAgICAgICAgICBkYXRhS2V5PVwiY29kZVwiXG4gICAgICAgICAgZmllbGQ9XCJuYW1lXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggQ291bnRyeVwiXG4gICAgICAgICAgW2Ryb3Bkb3duXT1cInRydWVcIlxuICAgICAgICAgIFtpbnB1dFN0eWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0dGVkICYmIGZbJ2NvdW50cnknXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHsgYm9yZGVyOiAnMXB4IHNvbGlkICNmZjU4NmInIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgYm9yZGVyOiAnMXB4IHNvbGlkIGdyYXknIH1cbiAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5UZWwnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwidGVsXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5UZWxFcnJvck1lc3NhZ2UnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRlbFwiXG4gICAgICAgICAgICBpZD1cInRlbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RlbCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mbHVpZCBza2lsbHMtbW9kYWwgY29sLXNtLTRcIlxuICAgICAgICBbY2xhc3MuZC1ub25lXT1cIiFoYXNBY2Nlc3NcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibWItMlwiIGZvcj1cIk93bmVyXCI+e3sgJ0NybS5BY2NvdW50TWVzc2FnZS5Pd25lcicgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHJlcXVpcmVkLWljb25cIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgIDxwLWF1dG9Db21wbGV0ZSBmb3JtQ29udHJvbE5hbWU9XCJvd25lcl9pZFwiXG4gICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImZpbHRlcmVkT3duZXJzXCJcbiAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwib25TZWFyY2hPd25lcigkZXZlbnQpXCJcbiAgICAgICAgICBkYXRhS2V5PVwiaWRcIlxuICAgICAgICAgIGZpZWxkPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBPd25lclwiXG4gICAgICAgICAgW2Ryb3Bkb3duXT1cInRydWVcIj5cbiAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLkNvbXBhbnlVcmwnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiY29tcGFueV91cmxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInVybFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb21wYW55X3VybFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NvbXBhbnlfdXJsJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInT3JnYW5pemF0aW9uLk9yZ2FuaXphdGlvblR5cGUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwib3JnYW5pemF0aW9uX3R5cGVfaWRcIlxuICAgICAgICAgICpuZ0lmPVwib3JnYW5pemF0aW9uVHlwZXMkIHwgYXN5bmMgYXMgdHlwZXNcIj5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib3JnYW5pemF0aW9uX3R5cGVfaWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydvcmdhbml6YXRpb25fdHlwZV9pZCddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdHlwZXNbJ29yZ2FuaXphdGlvbl90eXBlcyddXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPlxuICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00IGNvbC1sZy00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidPcmdhbml6YXRpb24uT3JnYW5pemF0aW9uSW5kdXN0cnknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwib3JnYW5pemF0aW9uX2luZHVzdHJ5X2lkXCJcbiAgICAgICAgICAqbmdJZj1cIm9yZ2FuaXphdGlvbkluZHVzdHJpZXMkIHwgYXN5bmMgYXMgaW5kdXN0cmllc1wiPlxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbml6YXRpb25faW5kdXN0cnlfaWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydvcmdhbml6YXRpb25faW5kdXN0cnlfaWQnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGluZHVzdHJpZXNbJ29yZ2FuaXphdGlvbl9pbmR1c3RyaWVzJ11cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5TaXplJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cIm9yZ2FuaXphdGlvbl9zaXplX2lkXCJcbiAgICAgICAgICAqbmdJZj1cIm9yZ2FuaXphdGlvblNpemVzJCB8IGFzeW5jIGFzIHNpemVzXCI+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXphdGlvbl9zaXplX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnb3JnYW5pemF0aW9uX3NpemVfaWQnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNpemVzWydvcmdhbml6YXRpb25fc2l6ZXMnXVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIj5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLlN0YXR1cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJzdGF0dXNcIj5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhdHVzXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnc3RhdHVzJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzdGF0dXNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00IGNvbC1sZy00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuUHJpb3JpdHknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwicHJpb3JpdHlcIj5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJpb3JpdHlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydwcmlvcml0eSddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJpb3JpdHlcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbiB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00IGNvbC1sZy00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuU291cmNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImNybV9zb3VyY2VfaWRcIj5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JtX3NvdXJjZV9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2NybV9zb3VyY2VfaWQnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNvdXJjZVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIj5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tMTIgbXQtMlwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLkRlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCI1XCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIGlkPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydkZXNjcmlwdGlvbiddLmVycm9ycyB9XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGV4dC1lbmQgbXQtM1wiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPlxuICAgICAgICAgIHt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
|