application-sidebar 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +24 -0
  2. package/application-sidebar.theme.scss +44 -0
  3. package/assets/logos/Intentwise.svg +11 -0
  4. package/assets/logos/ProfitlogiQ_logo.png +0 -0
  5. package/assets/logos/bmc_logo.png +0 -0
  6. package/assets/logos/intentwise_logo.png +0 -0
  7. package/assets/logos/krooga_logo.png +0 -0
  8. package/assets/logos/opt_logo.png +0 -0
  9. package/assets/logos/optivations_logo.png +0 -0
  10. package/assets/logos/upstart_logo.png +0 -0
  11. package/assets/sidemenu-icons/Perf_Diagnostics_Detail.svg +15 -0
  12. package/assets/sidemenu-icons/Performance_Diagnostics.svg +12 -0
  13. package/assets/sidemenu-icons/account_management.svg +15 -0
  14. package/assets/sidemenu-icons/asin_overview.svg +18 -0
  15. package/assets/sidemenu-icons/audience.svg +22 -0
  16. package/assets/sidemenu-icons/auto_targeting.svg +16 -0
  17. package/assets/sidemenu-icons/automated_rule.svg +17 -0
  18. package/assets/sidemenu-icons/bookmark-archive.svg +15 -0
  19. package/assets/sidemenu-icons/calendar.svg +1 -0
  20. package/assets/sidemenu-icons/campaign_placement.svg +16 -0
  21. package/assets/sidemenu-icons/campaign_report.svg +13 -0
  22. package/assets/sidemenu-icons/cardboard-box.svg +13 -0
  23. package/assets/sidemenu-icons/category_reporting.svg +14 -0
  24. package/assets/sidemenu-icons/coins.svg +24 -0
  25. package/assets/sidemenu-icons/compettive_ad_tracking.svg +17 -0
  26. package/assets/sidemenu-icons/configuration-5968_94f8832d-fd0a-4001-9bf0-c5820072ab85.svg +16 -0
  27. package/assets/sidemenu-icons/creatives.svg +18 -0
  28. package/assets/sidemenu-icons/demand_forcasting.svg +27 -0
  29. package/assets/sidemenu-icons/document-error.svg +17 -0
  30. package/assets/sidemenu-icons/download-40586C.svg +1 -0
  31. package/assets/sidemenu-icons/favorite-window.svg +19 -0
  32. package/assets/sidemenu-icons/file-explorer.svg +12 -0
  33. package/assets/sidemenu-icons/help-circle.svg +1 -0
  34. package/assets/sidemenu-icons/help-icon.svg +1 -0
  35. package/assets/sidemenu-icons/help_icon.png +0 -0
  36. package/assets/sidemenu-icons/help_icon_white.png +0 -0
  37. package/assets/sidemenu-icons/high_level_metrics.svg +20 -0
  38. package/assets/sidemenu-icons/horizontal-mixer-158_fe655cc6-eb7e-4e44-af0f-0ce0830c9433.svg +19 -0
  39. package/assets/sidemenu-icons/inventory_forecast.svg +13 -0
  40. package/assets/sidemenu-icons/keyword_suggestion.svg +16 -0
  41. package/assets/sidemenu-icons/keywords.svg +18 -0
  42. package/assets/sidemenu-icons/line-item.svg +17 -0
  43. package/assets/sidemenu-icons/management.svg +14 -0
  44. package/assets/sidemenu-icons/maximize-40586C.svg +1 -0
  45. package/assets/sidemenu-icons/maximize.svg +1 -0
  46. package/assets/sidemenu-icons/mental-health.svg +16 -0
  47. package/assets/sidemenu-icons/minimize-40586C.svg +1 -0
  48. package/assets/sidemenu-icons/minimize.svg +1 -0
  49. package/assets/sidemenu-icons/new_product.svg +11 -0
  50. package/assets/sidemenu-icons/orders.svg +15 -0
  51. package/assets/sidemenu-icons/organic_ranking.svg +17 -0
  52. package/assets/sidemenu-icons/placement.svg +14 -0
  53. package/assets/sidemenu-icons/portfolio-grid.svg +17 -0
  54. package/assets/sidemenu-icons/pos_and_ams.svg +17 -0
  55. package/assets/sidemenu-icons/price-tag.svg +14 -0
  56. package/assets/sidemenu-icons/prime_day.svg +16 -0
  57. package/assets/sidemenu-icons/product_asin.svg +21 -0
  58. package/assets/sidemenu-icons/product_content.svg +13 -0
  59. package/assets/sidemenu-icons/product_overview_download.svg +15 -0
  60. package/assets/sidemenu-icons/purchase-order.svg +15 -0
  61. package/assets/sidemenu-icons/quit.svg +12 -0
  62. package/assets/sidemenu-icons/radar-signal.svg +15 -0
  63. package/assets/sidemenu-icons/report-download.svg +15 -0
  64. package/assets/sidemenu-icons/report.svg +18 -0
  65. package/assets/sidemenu-icons/ring-binders-3503_6f429b0c-3931-476a-b65e-ce5a4b9249de.svg +25 -0
  66. package/assets/sidemenu-icons/sales_overview.svg +19 -0
  67. package/assets/sidemenu-icons/sb_search_terms.svg +22 -0
  68. package/assets/sidemenu-icons/sc_order_report.svg +18 -0
  69. package/assets/sidemenu-icons/schedule_icon.png +0 -0
  70. package/assets/sidemenu-icons/search-place.svg +15 -0
  71. package/assets/sidemenu-icons/setting.svg +12 -0
  72. package/assets/sidemenu-icons/settings-2180_735e6b4c-49a9-4407-9ca1-5078e3c6eb1b.svg +20 -0
  73. package/assets/sidemenu-icons/signout_icon.png +0 -0
  74. package/assets/sidemenu-icons/sorting-149_8150e98a-647b-477d-a382-2ff46463a1fd.svg +16 -0
  75. package/assets/sidemenu-icons/sp_ad-groups.svg +16 -0
  76. package/assets/sidemenu-icons/sreenath_pic.jpg +0 -0
  77. package/assets/sidemenu-icons/targeting.svg +14 -0
  78. package/assets/sidemenu-icons/user-icon.svg +1 -0
  79. package/assets/sidemenu-icons/user.svg +1 -0
  80. package/assets/sidemenu-icons/user_icon.png +0 -0
  81. package/assets/sidemenu-icons/user_icon_white.png +0 -0
  82. package/assets/sidemenu-icons/vendor_charge_backs.svg +12 -0
  83. package/assets/sidemenu-icons/vendor_replenishment_code.svg +16 -0
  84. package/assets/sidemenu-icons/vendor_sales_alert.svg +20 -0
  85. package/assets/sidemenu-icons/vendor_sales_overivew.svg +14 -0
  86. package/assets/sidemenu-icons/video-icon.svg +1 -0
  87. package/assets/sidemenu-icons/video.svg +1 -0
  88. package/assets/sidemenu-icons/video_icon.png +0 -0
  89. package/assets/sidemenu-icons/video_icon_white.png +0 -0
  90. package/assets/sidemenu-icons/x-circle.svg +1 -0
  91. package/esm2022/application-sidebar.mjs +5 -0
  92. package/esm2022/lib/app-details.mjs +2 -0
  93. package/esm2022/lib/application-sidebar.component.mjs +473 -0
  94. package/esm2022/lib/application-sidebar.module.mjs +152 -0
  95. package/esm2022/lib/constants.mjs +1016 -0
  96. package/esm2022/lib/nav-menu-item.mjs +2 -0
  97. package/esm2022/lib/nav-menu.directive.mjs +32 -0
  98. package/esm2022/lib/nav-menus/nav-menus.component.mjs +264 -0
  99. package/esm2022/lib/services/application-sidebar.service.mjs +627 -0
  100. package/esm2022/lib/services/rest-api.services.mjs +98 -0
  101. package/esm2022/lib/services/url-context.service.mjs +104 -0
  102. package/esm2022/lib/translations/translations-en.mjs +33 -0
  103. package/esm2022/lib/translations/translations-ja.mjs +33 -0
  104. package/esm2022/public-api.mjs +7 -0
  105. package/fesm2022/application-sidebar.mjs +2778 -0
  106. package/fesm2022/application-sidebar.mjs.map +1 -0
  107. package/index.d.ts +5 -0
  108. package/lib/app-details.d.ts +13 -0
  109. package/lib/application-sidebar.component.d.ts +63 -0
  110. package/lib/application-sidebar.module.d.ts +44 -0
  111. package/lib/constants.d.ts +496 -0
  112. package/lib/nav-menu-item.d.ts +32 -0
  113. package/lib/nav-menu.directive.d.ts +17 -0
  114. package/lib/nav-menus/nav-menus.component.d.ts +41 -0
  115. package/lib/services/application-sidebar.service.d.ts +97 -0
  116. package/lib/services/rest-api.services.d.ts +22 -0
  117. package/lib/services/url-context.service.d.ts +15 -0
  118. package/lib/translations/translations-en.d.ts +32 -0
  119. package/lib/translations/translations-ja.d.ts +32 -0
  120. package/package.json +72 -0
  121. package/public-api.d.ts +3 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudS1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE5hdk1lbnVJdGVtIHtcbiAgICBpZDpzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6c3RyaW5nO1xuICAgIGxldmVsPzpzdHJpbmc7XG4gICAgbGluazogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgc3ltYm9sPzpzdHJpbmc7XG4gICAgYmFkZ2U/OnN0cmluZztcbiAgICBjb3VudEtleT86c3RyaW5nO1xuICAgIHJlY0NvdW50PzpzdHJpbmc7XG4gICAgcm91dGU6IHN0cmluZztcbiAgICBleHRlcm5hbF9saW5rPzpzdHJpbmc7XG4gICAgYWNjb3VudF90eXBlPzphbnlbXTtcbiAgICB2aXNpYmlsaXR5X3JvbGVzPzphbnlbXTtcbiAgICBhY2NvdW50X2lkcz86YW55W10sXG4gICAgYWNjb3VudF9pZHNfbm90X2luPzphbnlbXSxcbiAgICBvcmdhbml6YXRpb25faWRzPzphbnlbXSxcbiAgICBvcmdhbml6YXRpb25faWRzX25vdF9pbj86YW55W10sXG4gICAgb3JnYW5pemF0aW9uX3NldHRpbmc/OmFueVtdO1xuICAgIG9yZ2FuaXphdGlvbl9zZXR0aW5nX25vdF9pbj86YW55W10sXG4gICAgc3Vic2NyaXB0aW9uX3R5cGVzPzphbnlbXTtcbiAgICBjYW1wYWlnbl90eXBlcz86YW55W107XG4gICAgaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZz86YW55W107XG4gICAgaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZ193YWxtYXJ0PzphbnlbXTtcbiAgICBub3RfYWNjb3VudF9uYW1lPzphbnlbXTtcbiAgICB1c2VyX2VtYWlscz86YW55W107XG4gICAgc3R5bGVfY2xhc3Nlcz86c3RyaW5nO1xuICAgIGRlZmF1bHR1cmw/OnN0cmluZztcbiAgICBtYXRjaFJvdXRlcz86YW55W107XG4gICAgdmlzaWJpbGl0eV9yb2xlc19ub3RfaW4/OmFueVtdO1xuICB9XG4iXX0=
@@ -0,0 +1,32 @@
1
+ import { Directive, ElementRef, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class OffsetTopDirective {
4
+ _el;
5
+ constructor(_el) {
6
+ this._el = _el;
7
+ }
8
+ isActiveItem;
9
+ get offsetTop() { return this._el.nativeElement.offsetTop; }
10
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OffsetTopDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
11
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: OffsetTopDirective, selector: "[appOffsetTop]", inputs: { isActiveItem: "isActiveItem" }, ngImport: i0 });
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OffsetTopDirective, decorators: [{
14
+ type: Directive,
15
+ args: [{ selector: '[appOffsetTop]' }]
16
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { isActiveItem: [{
17
+ type: Input
18
+ }] } });
19
+ export class ScrollableDirective {
20
+ _el;
21
+ constructor(_el) {
22
+ this._el = _el;
23
+ }
24
+ set scrollTop(value) { this._el.nativeElement.scrollTop = value; }
25
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ScrollableDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
26
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ScrollableDirective, selector: "[appScrollable]", ngImport: i0 });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ScrollableDirective, decorators: [{
29
+ type: Directive,
30
+ args: [{ selector: '[appScrollable]' }]
31
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwbGljYXRpb24tc2lkZWJhci9zcmMvbGliL25hdi1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzdELE1BQU0sT0FBTyxrQkFBa0I7SUFDVDtJQUFwQixZQUFvQixHQUFlO1FBQWYsUUFBRyxHQUFILEdBQUcsQ0FBWTtJQUFJLENBQUM7SUFDL0IsWUFBWSxDQUFVO0lBQy9CLElBQUksU0FBUyxLQUFhLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzsySEFIekQsa0JBQWtCOytHQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUM7aUdBRzdCLFlBQVk7c0JBQXBCLEtBQUs7O0FBS1IsTUFBTSxPQUFPLG1CQUFtQjtJQUNWO0lBQXBCLFlBQW9CLEdBQWU7UUFBZixRQUFHLEdBQUgsR0FBRyxDQUFZO0lBQUcsQ0FBQztJQUN2QyxJQUFJLFNBQVMsQ0FBQyxLQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7MkhBRi9ELG1CQUFtQjsrR0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUQvQixTQUFTO21CQUFDLEVBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbYXBwT2Zmc2V0VG9wXSd9KVxuZXhwb3J0IGNsYXNzIE9mZnNldFRvcERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsOiBFbGVtZW50UmVmKSB7IH1cbiAgQElucHV0KCkgaXNBY3RpdmVJdGVtOiBib29sZWFuO1xuICBnZXQgb2Zmc2V0VG9wKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDsgfVxufVxuXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ1thcHBTY3JvbGxhYmxlXSd9KVxuZXhwb3J0IGNsYXNzIFNjcm9sbGFibGVEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbDogRWxlbWVudFJlZikge31cbiAgc2V0IHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdmFsdWU7IH1cbn0iXX0=
@@ -0,0 +1,264 @@
1
+ import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
2
+ import { Router, ActivatedRoute } from '@angular/router';
3
+ import { ApplicationSidebarService } from '../services/application-sidebar.service';
4
+ import { UrlContextService } from '../services/url-context.service';
5
+ import { CookieService } from 'ngx-cookie-service';
6
+ import { MatMenuTrigger } from '@angular/material/menu';
7
+ import { EN_LABELS } from '../translations/translations-en';
8
+ import { JA_LABELS } from '../translations/translations-ja';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../services/application-sidebar.service";
11
+ import * as i2 from "@angular/router";
12
+ import * as i3 from "../services/url-context.service";
13
+ import * as i4 from "ngx-cookie-service";
14
+ import * as i5 from "@angular/material/menu";
15
+ import * as i6 from "@angular/material/list";
16
+ import * as i7 from "@angular/material/divider";
17
+ import * as i8 from "@angular/material/core";
18
+ import * as i9 from "@angular/common";
19
+ import * as i10 from "@angular/flex-layout/extended";
20
+ import * as i11 from "../nav-menu.directive";
21
+ export class NavMenusComponent {
22
+ ApplicationSidebarService;
23
+ router;
24
+ activatedRoute;
25
+ urlContextService;
26
+ cookie;
27
+ menuClicked = new EventEmitter();
28
+ item;
29
+ applicationId;
30
+ parentMenuId;
31
+ parentPanelId;
32
+ isActiveItem;
33
+ expanded;
34
+ queryParams;
35
+ contextMenu;
36
+ contextMenuPosition = { x: '0px', y: '0px' };
37
+ translation;
38
+ constructor(ApplicationSidebarService, router, activatedRoute, urlContextService, cookie) {
39
+ this.ApplicationSidebarService = ApplicationSidebarService;
40
+ this.router = router;
41
+ this.activatedRoute = activatedRoute;
42
+ this.urlContextService = urlContextService;
43
+ this.cookie = cookie;
44
+ this.activatedRoute.queryParams.subscribe(params => {
45
+ this.queryParams = Object.assign({}, params);
46
+ });
47
+ if (this.cookie.get('selectedLanguage') && this.cookie.get('selectedLanguage') == 'ja') {
48
+ this.translation = JA_LABELS;
49
+ }
50
+ else {
51
+ this.translation = EN_LABELS;
52
+ }
53
+ }
54
+ ngOnInit() {
55
+ // @HostBinding('attr.aria-expanded') ariaExpanded = this.expanded;
56
+ }
57
+ hasIcon(item) {
58
+ return (item.icon != undefined && item.icon != '');
59
+ }
60
+ getSpecifiedValue(key) {
61
+ return this.ApplicationSidebarService.fetchKeyValue(key);
62
+ }
63
+ onSelectMenu(event, listMenu, appId) {
64
+ var promise = new Promise(async (resolve, reject) => {
65
+ console.log('appId', this.parentPanelId, this.applicationId);
66
+ // on shift+click open url in new tab along with context params
67
+ if (this.parentMenuId === 'app_global_settings' || appId === 'app_global_settings') {
68
+ if (listMenu.id === 'ads_account_mgmt') {
69
+ const url = listMenu.link;
70
+ if (this.applicationId == "ads_amazon_content") {
71
+ this.applicationId = this.ApplicationSidebarService.getApplicationID();
72
+ }
73
+ if (this.urlContextService.validateKeyStroke(event)) {
74
+ this.openInNewTab(url, false, { appId: this.applicationId });
75
+ resolve();
76
+ }
77
+ else {
78
+ this.showLoader();
79
+ this.ApplicationSidebarService.getHostOriginAndNavigate(url, { appId: this.applicationId });
80
+ resolve();
81
+ }
82
+ }
83
+ else {
84
+ if (listMenu.route != '') {
85
+ if (this.urlContextService.validateKeyStroke(event)) {
86
+ this.openInNewTab(listMenu.route, true);
87
+ resolve();
88
+ }
89
+ else {
90
+ console.log("Query Params = ", this.queryParams.length);
91
+ this.router.navigate([listMenu.route]);
92
+ this.menuClicked.emit({ activePanel: this.parentPanelId });
93
+ resolve();
94
+ }
95
+ }
96
+ else {
97
+ alert('no route to navigate');
98
+ resolve();
99
+ }
100
+ }
101
+ }
102
+ else if (listMenu.defaulturl) {
103
+ const url = listMenu.defaulturl;
104
+ if (this.urlContextService.validateKeyStroke(event)) {
105
+ this.openInNewTab(url, false);
106
+ resolve();
107
+ }
108
+ else {
109
+ this.showLoader();
110
+ this.ApplicationSidebarService.getHostOriginAndNavigate(url);
111
+ resolve();
112
+ }
113
+ }
114
+ else {
115
+ if (listMenu.external_link && listMenu.external_link != '') {
116
+ window.open(`${listMenu.external_link}`, '_blank');
117
+ resolve();
118
+ }
119
+ if ((this.parentMenuId.indexOf(this.applicationId) >= 0 && !appId) || (appId && appId.indexOf(this.applicationId) >= 0)) {
120
+ if (listMenu.route != '') {
121
+ if (this.urlContextService.validateKeyStroke(event)) {
122
+ this.openInNewTab(listMenu.route, true);
123
+ resolve();
124
+ }
125
+ else {
126
+ console.log("Length = ", this.queryParams.length);
127
+ if (Object.keys(this.queryParams).length != 0) {
128
+ await this.router.navigate([listMenu.route], { queryParams: this.queryParams });
129
+ this.menuClicked.emit({ activePanel: this.parentPanelId });
130
+ resolve();
131
+ }
132
+ else {
133
+ await this.router.navigate([listMenu.route]);
134
+ this.menuClicked.emit({ activePanel: this.parentPanelId });
135
+ resolve();
136
+ }
137
+ }
138
+ }
139
+ else {
140
+ alert('no route to navigate');
141
+ resolve();
142
+ }
143
+ }
144
+ else {
145
+ const url = listMenu.link;
146
+ if (this.urlContextService.validateKeyStroke(event)) {
147
+ this.openInNewTab(url, false);
148
+ resolve();
149
+ }
150
+ else {
151
+ this.showLoader();
152
+ this.ApplicationSidebarService.getHostOriginAndNavigate(url);
153
+ resolve();
154
+ }
155
+ }
156
+ }
157
+ });
158
+ }
159
+ onContextMenu(event, item) {
160
+ event.preventDefault();
161
+ this.contextMenuPosition.x = event.clientX + 'px';
162
+ this.contextMenuPosition.y = event.clientY + 'px';
163
+ this.contextMenu.menuData = { 'item': item };
164
+ this.contextMenu.menu.focusFirstItem('mouse');
165
+ this.contextMenu.openMenu();
166
+ }
167
+ onContextMenuAction(item) {
168
+ if (this.parentMenuId === 'app_global_settings') {
169
+ if (item.id === 'ads_account_mgmt') {
170
+ const url = item.link;
171
+ this.openInNewTab(url, false, { appId: this.applicationId });
172
+ }
173
+ else if (item.route != '') {
174
+ this.openInNewTab(item.route, true);
175
+ }
176
+ }
177
+ else {
178
+ if (item.external_link && item.external_link != '') {
179
+ window.open(`${item.external_link}`, '_blank');
180
+ return;
181
+ }
182
+ else if (this.parentMenuId.indexOf(this.applicationId) >= 0) {
183
+ if (item.route != '') {
184
+ this.openInNewTab(item.route, true);
185
+ }
186
+ }
187
+ else {
188
+ const url = item.link;
189
+ this.openInNewTab(url, false);
190
+ }
191
+ }
192
+ }
193
+ openInNewTab(link, isRouterLink, applicationId = undefined) {
194
+ let dateTitle = this.fetchDateRange();
195
+ let dateRangeVal = this.urlContextService.setDateRangeUrlVal(dateTitle);
196
+ if (this.ApplicationSidebarService.appDetails.currentAccount == undefined) {
197
+ let queryParams = {
198
+ oid: this.ApplicationSidebarService.appDetails.currentOrganization.organizationId,
199
+ dr: dateRangeVal,
200
+ };
201
+ if (applicationId) {
202
+ queryParams = { ...queryParams, ...applicationId };
203
+ }
204
+ this.urlContextService.setUrlAndOpenTab(link, queryParams, isRouterLink);
205
+ return;
206
+ }
207
+ else {
208
+ let queryParams = {
209
+ aid: this.ApplicationSidebarService.appDetails.currentAccount.amsAccountId,
210
+ bid: this.ApplicationSidebarService.appDetails.currentAccount.businessGroupId,
211
+ oid: this.ApplicationSidebarService.appDetails.currentAccount.organizationId,
212
+ dr: dateRangeVal,
213
+ };
214
+ if (applicationId) {
215
+ queryParams = { ...queryParams, ...applicationId };
216
+ }
217
+ this.urlContextService.setUrlAndOpenTab(link, queryParams, isRouterLink);
218
+ return;
219
+ }
220
+ }
221
+ fetchDateRange() {
222
+ if (this.queryParams.hasOwnProperty('tid') && this.queryParams.hasOwnProperty('dr')) {
223
+ return this.queryParams['dr'];
224
+ }
225
+ else {
226
+ const loggedInUser = JSON.parse(this.cookie.get('loggedInUser'));
227
+ console.log('Logged = ', loggedInUser);
228
+ return loggedInUser.dateRange;
229
+ }
230
+ }
231
+ showLoader() {
232
+ let loader_div = document.getElementById('loader_sov');
233
+ if (loader_div) {
234
+ loader_div.style.display = "block";
235
+ }
236
+ setTimeout(function () {
237
+ if (loader_div) {
238
+ loader_div.style.display = "none";
239
+ }
240
+ }, 5000);
241
+ }
242
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavMenusComponent, deps: [{ token: i1.ApplicationSidebarService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.UrlContextService }, { token: i4.CookieService }], target: i0.ɵɵFactoryTarget.Component });
243
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NavMenusComponent, selector: "lnc-nav-menus", inputs: { item: "item", applicationId: "applicationId", parentMenuId: "parentMenuId", parentPanelId: "parentPanelId", isActiveItem: "isActiveItem" }, outputs: { menuClicked: "menuClicked" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<a appOffsetTop class=\"sidemenu-option {{item.style_classes}}\" mat-list-item (click)=\"onSelectMenu($event,item)\"\n *ngIf=\"item.type === 'leaf'\" [ngClass]=\"{'active': isActiveItem}\" (contextmenu)=\"onContextMenu($event, item)\">\n <!-- <span class=\"{{item.id}}_icon\" *ngIf=\"item.id == 'ads_account_mgmt'\"></span> -->\n <h3 matLine class=\"sidemenu-text font-color-black navMenus applicationMenu\" [ngClass]=\"{'margin-left-10': item.level == 'two', \n 'margin-left-36': item.level != 'two'}\">\n {{translation[item.name] ? translation[item.name] : item.name}}\n <span id=\"activeCount\" *ngIf=\"item.countKey && getSpecifiedValue(item.countKey)\" class=\"ng-binding ng-scope\">\n {{ getSpecifiedValue(item.countKey) }}\n </span>\n <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> \n <span *ngIf=\"item.badge\" class=\"badge-text sov-beta-position\" [innerHTML]=\"item.badge\"></span>\n <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> \n </h3>\n</a>\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n<mat-menu #contextMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item class=\"newTabMenu\"></button>\n <button mat-menu-item (click)=\"onContextMenuAction(item)\" class=\"newTabMenu\" id=\"newTabActionBtn\">Open in new\n tab</button>\n <button mat-menu-item class=\"newTabMenu\"></button>\n </ng-template>\n</mat-menu>\n<mat-divider *ngIf=\"item.type === 'separator'\" class=\"separator\"></mat-divider>", styles: [".separator{z-index:1;position:relative;width:170px;border-top:1px solid #dce0e7;margin-left:40px;display:block}.sidemenu-option{display:flex;align-items:center;box-sizing:border-box;position:relative;height:40px}.badge-text{position:relative;font-size:10px;color:#ff273e;font-family:Lato!important;top:-5px;right:0;letter-spacing:.5px;padding-left:2px}.activeRecCount{color:#fff;font-size:14px!important;font-weight:700!important;padding:5px;display:inline-block;border-radius:22px;line-height:17px;height:25px;min-width:41px;text-align:center;vertical-align:super;background-color:#ff273e;position:absolute!important;right:8px;top:8px}.sidemenu-text{font-size:13px!important;line-height:36px;color:#202b37}.font-color-red{color:#ff3e3e}.font-color-black{color:#000!important}.margin-left-10{margin-left:10px!important}.margin-left-36{margin-left:36px!important}:host ::ng-deep .mat-mdc-list-base .mat-mdc-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:40px}:host ::ng-deep .mat-list-item-content{flex-direction:row-reverse!important;display:flex!important;padding:0 10px 0 14px!important;width:100%}:host ::ng-deep a:not([class^=active]) mat-list-item-content:hover{border-right:3px solid #ff273e!important}a:hover{text-decoration:none}a:hover h3{color:#ff273e!important}.active{text-decoration:none;background-color:#fdeeec;border-right:3px solid #ff273e!important}.active h3{color:#ff273e!important}#activeCount{background-color:#ff273e;color:#fff;font-size:11px!important;font-weight:600!important;padding:5px;display:inline-block;border-radius:22px;line-height:11px;margin:auto 5px;height:10px;min-width:20px;top:0;text-align:center;vertical-align:text-bottom}button.newTabMenu{display:block;padding:0 20px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap;min-height:15px;height:20px;font-size:14px;background-color:#efefef;cursor:default}button#newTabActionBtn:hover{background-color:#efefef}button#newTabActionBtn{cursor:pointer}button#newTabActionBtn:hover{background-color:#2995e8;color:#fff!important}\n"], dependencies: [{ kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i6.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i7.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i8.MatLine, selector: "[mat-line], [matLine]" }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i11.OffsetTopDirective, selector: "[appOffsetTop]", inputs: ["isActiveItem"] }] });
244
+ }
245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavMenusComponent, decorators: [{
246
+ type: Component,
247
+ args: [{ selector: 'lnc-nav-menus', template: "<a appOffsetTop class=\"sidemenu-option {{item.style_classes}}\" mat-list-item (click)=\"onSelectMenu($event,item)\"\n *ngIf=\"item.type === 'leaf'\" [ngClass]=\"{'active': isActiveItem}\" (contextmenu)=\"onContextMenu($event, item)\">\n <!-- <span class=\"{{item.id}}_icon\" *ngIf=\"item.id == 'ads_account_mgmt'\"></span> -->\n <h3 matLine class=\"sidemenu-text font-color-black navMenus applicationMenu\" [ngClass]=\"{'margin-left-10': item.level == 'two', \n 'margin-left-36': item.level != 'two'}\">\n {{translation[item.name] ? translation[item.name] : item.name}}\n <span id=\"activeCount\" *ngIf=\"item.countKey && getSpecifiedValue(item.countKey)\" class=\"ng-binding ng-scope\">\n {{ getSpecifiedValue(item.countKey) }}\n </span>\n <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> \n <span *ngIf=\"item.badge\" class=\"badge-text sov-beta-position\" [innerHTML]=\"item.badge\"></span>\n <span id=\"activeRecCount\" *ngIf=\"item.name == 'Recommendations' && item.recCount != '' && item.recCount != '0' && item.recCount != null\" class=\"activeRecCount\">{{item.recCount}}</span> \n </h3>\n</a>\n<div style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\"\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\">\n</div>\n<mat-menu #contextMenu=\"matMenu\">\n <ng-template matMenuContent let-item=\"item\">\n <button mat-menu-item class=\"newTabMenu\"></button>\n <button mat-menu-item (click)=\"onContextMenuAction(item)\" class=\"newTabMenu\" id=\"newTabActionBtn\">Open in new\n tab</button>\n <button mat-menu-item class=\"newTabMenu\"></button>\n </ng-template>\n</mat-menu>\n<mat-divider *ngIf=\"item.type === 'separator'\" class=\"separator\"></mat-divider>", styles: [".separator{z-index:1;position:relative;width:170px;border-top:1px solid #dce0e7;margin-left:40px;display:block}.sidemenu-option{display:flex;align-items:center;box-sizing:border-box;position:relative;height:40px}.badge-text{position:relative;font-size:10px;color:#ff273e;font-family:Lato!important;top:-5px;right:0;letter-spacing:.5px;padding-left:2px}.activeRecCount{color:#fff;font-size:14px!important;font-weight:700!important;padding:5px;display:inline-block;border-radius:22px;line-height:17px;height:25px;min-width:41px;text-align:center;vertical-align:super;background-color:#ff273e;position:absolute!important;right:8px;top:8px}.sidemenu-text{font-size:13px!important;line-height:36px;color:#202b37}.font-color-red{color:#ff3e3e}.font-color-black{color:#000!important}.margin-left-10{margin-left:10px!important}.margin-left-36{margin-left:36px!important}:host ::ng-deep .mat-mdc-list-base .mat-mdc-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:40px}:host ::ng-deep .mat-list-item-content{flex-direction:row-reverse!important;display:flex!important;padding:0 10px 0 14px!important;width:100%}:host ::ng-deep a:not([class^=active]) mat-list-item-content:hover{border-right:3px solid #ff273e!important}a:hover{text-decoration:none}a:hover h3{color:#ff273e!important}.active{text-decoration:none;background-color:#fdeeec;border-right:3px solid #ff273e!important}.active h3{color:#ff273e!important}#activeCount{background-color:#ff273e;color:#fff;font-size:11px!important;font-weight:600!important;padding:5px;display:inline-block;border-radius:22px;line-height:11px;margin:auto 5px;height:10px;min-width:20px;top:0;text-align:center;vertical-align:text-bottom}button.newTabMenu{display:block;padding:0 20px;clear:both;font-weight:400;line-height:1.42857143;white-space:nowrap;min-height:15px;height:20px;font-size:14px;background-color:#efefef;cursor:default}button#newTabActionBtn:hover{background-color:#efefef}button#newTabActionBtn{cursor:pointer}button#newTabActionBtn:hover{background-color:#2995e8;color:#fff!important}\n"] }]
248
+ }], ctorParameters: function () { return [{ type: i1.ApplicationSidebarService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.UrlContextService }, { type: i4.CookieService }]; }, propDecorators: { menuClicked: [{
249
+ type: Output
250
+ }], item: [{
251
+ type: Input
252
+ }], applicationId: [{
253
+ type: Input
254
+ }], parentMenuId: [{
255
+ type: Input
256
+ }], parentPanelId: [{
257
+ type: Input
258
+ }], isActiveItem: [{
259
+ type: Input
260
+ }], contextMenu: [{
261
+ type: ViewChild,
262
+ args: [MatMenuTrigger]
263
+ }] } });
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FwcGxpY2F0aW9uLXNpZGViYXIvc3JjL2xpYi9uYXYtbWVudXMvbmF2LW1lbnVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTJCLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUFDLE1BQU0sRUFBQyxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPNUQsTUFBTSxPQUFPLGlCQUFpQjtJQWlCVDtJQUErRDtJQUF1QjtJQUFzQztJQUE2QztJQWhCbEwsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDMUMsSUFBSSxDQUFjO0lBQ2xCLGFBQWEsQ0FBUTtJQUNyQixZQUFZLENBQVE7SUFDcEIsYUFBYSxDQUFRO0lBQ3JCLFlBQVksQ0FBUTtJQUM3QixRQUFRLENBQVU7SUFFbEIsV0FBVyxDQUFNO0lBRWpCLFdBQVcsQ0FBaUI7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ImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2TWVudUl0ZW0gfSBmcm9tICcuLi9uYXYtbWVudS1pdGVtJztcbmltcG9ydCB7Um91dGVyLEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi1zaWRlYmFyLnNlcnZpY2UnXG5pbXBvcnQgeyBVcmxDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VybC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgRU5fTEFCRUxTIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy1lbic7XG5pbXBvcnQgeyBKQV9MQUJFTFMgfSBmcm9tICcuLi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLWphJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbG5jLW5hdi1tZW51cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYXYtbWVudXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uYXYtbWVudXMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOYXZNZW51c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBtZW51Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBASW5wdXQoKSBpdGVtOiBOYXZNZW51SXRlbTtcbiAgQElucHV0KCkgYXBwbGljYXRpb25JZDpzdHJpbmc7XG4gIEBJbnB1dCgpIHBhcmVudE1lbnVJZDpzdHJpbmc7XG4gIEBJbnB1dCgpIHBhcmVudFBhbmVsSWQ6c3RyaW5nO1xuICBASW5wdXQoKSBpc0FjdGl2ZUl0ZW06Ym9vbGVhblxuICBleHBhbmRlZDogYm9vbGVhbjtcblxuICBxdWVyeVBhcmFtczogYW55O1xuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKVxuICBjb250ZXh0TWVudTogTWF0TWVudVRyaWdnZXI7XG5cbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogJzBweCcsIHk6ICcwcHgnIH07XG5cbiAgdHJhbnNsYXRpb246IGFueTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgQXBwbGljYXRpb25TaWRlYmFyU2VydmljZTogQXBwbGljYXRpb25TaWRlYmFyU2VydmljZSAsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIscHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTpBY3RpdmF0ZWRSb3V0ZSxwcml2YXRlIHVybENvbnRleHRTZXJ2aWNlOiBVcmxDb250ZXh0U2VydmljZSxwcml2YXRlIGNvb2tpZTogQ29va2llU2VydmljZSxcbiAgICApIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyk7XG4gICAgfSk7XG4gICAgaWYodGhpcy5jb29raWUuZ2V0KCdzZWxlY3RlZExhbmd1YWdlJykgJiYgdGhpcy5jb29raWUuZ2V0KCdzZWxlY3RlZExhbmd1YWdlJykgPT0gJ2phJykge1xuICAgICAgdGhpcy50cmFuc2xhdGlvbiA9IEpBX0xBQkVMUztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2xhdGlvbiA9IEVOX0xBQkVMUztcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpIGFyaWFFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gIH1cblxuICBwdWJsaWMgaGFzSWNvbihpdGVtOk5hdk1lbnVJdGVtKXtcbiAgICByZXR1cm4gKGl0ZW0uaWNvbiAhPSB1bmRlZmluZWQgJiYgaXRlbS5pY29uICE9ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTcGVjaWZpZWRWYWx1ZShrZXk6c3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5BcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlLmZldGNoS2V5VmFsdWUoa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdE1lbnUoZXZlbnQ6YW55LGxpc3RNZW51Ok5hdk1lbnVJdGVtLCBhcHBJZD86YW55KSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnYXBwSWQnICwgdGhpcy5wYXJlbnRQYW5lbElkICwgdGhpcy5hcHBsaWNhdGlvbklkKTtcbiAgICAgIC8vIG9uIHNoaWZ0K2NsaWNrIG9wZW4gdXJsIGluIG5ldyB0YWIgYWxvbmcgd2l0aCBjb250ZXh0IHBhcmFtc1xuICAgICAgaWYodGhpcy5wYXJlbnRNZW51SWQgPT09ICdhcHBfZ2xvYmFsX3NldHRpbmdzJyB8fCBhcHBJZCA9PT0gJ2FwcF9nbG9iYWxfc2V0dGluZ3MnKXtcbiAgICAgICAgaWYobGlzdE1lbnUuaWQgPT09ICdhZHNfYWNjb3VudF9tZ210Jyl7XG4gICAgICAgICAgY29uc3QgdXJsID0gbGlzdE1lbnUubGluaztcbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWNhdGlvbklkID09IFwiYWRzX2FtYXpvbl9jb250ZW50XCIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25JZCA9IHRoaXMuQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5nZXRBcHBsaWNhdGlvbklEKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYih1cmwsZmFsc2UseyBhcHBJZCA6IHRoaXMuYXBwbGljYXRpb25JZH0pXG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICB0aGlzLnNob3dMb2FkZXIoKTtcbiAgICAgICAgICAgIHRoaXMuQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodXJsICwgeyBhcHBJZCA6IHRoaXMuYXBwbGljYXRpb25JZH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgaWYgKGxpc3RNZW51LnJvdXRlICE9ICcnKSB7XG4gICAgICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIobGlzdE1lbnUucm91dGUsdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJRdWVyeSBQYXJhbXMgPSBcIiAsdGhpcy5xdWVyeVBhcmFtcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpc3RNZW51LnJvdXRlXSlcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVudUNsaWNrZWQuZW1pdCh7YWN0aXZlUGFuZWwgOiB0aGlzLnBhcmVudFBhbmVsSWR9KTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGFsZXJ0KCdubyByb3V0ZSB0byBuYXZpZ2F0ZScpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfWVsc2UgaWYobGlzdE1lbnUuZGVmYXVsdHVybCl7XG4gICAgICAgIGNvbnN0IHVybCA9IGxpc3RNZW51LmRlZmF1bHR1cmw7XG4gICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIodXJsLGZhbHNlKVxuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMuc2hvd0xvYWRlcigpO1xuICAgICAgICAgIHRoaXMuQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5nZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUodXJsKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICBpZihsaXN0TWVudS5leHRlcm5hbF9saW5rICYmIGxpc3RNZW51LmV4dGVybmFsX2xpbmsgIT0gJycpe1xuICAgICAgICAgIHdpbmRvdy5vcGVuKGAke2xpc3RNZW51LmV4dGVybmFsX2xpbmt9YCwgJ19ibGFuaycpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZigodGhpcy5wYXJlbnRNZW51SWQuaW5kZXhPZih0aGlzLmFwcGxpY2F0aW9uSWQpID49IDAgJiYgIWFwcElkKSB8fCAoYXBwSWQgJiYgYXBwSWQuaW5kZXhPZih0aGlzLmFwcGxpY2F0aW9uSWQpID49IDApICl7XG4gICAgICAgICAgaWYgKGxpc3RNZW51LnJvdXRlICE9ICcnKSB7XG4gICAgICAgICAgICAgIGlmKHRoaXMudXJsQ29udGV4dFNlcnZpY2UudmFsaWRhdGVLZXlTdHJva2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIobGlzdE1lbnUucm91dGUsdHJ1ZSlcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTGVuZ3RoID0gXCIgLHRoaXMucXVlcnlQYXJhbXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5UGFyYW1zKS5sZW5ndGggIT0gMCl7XG4gIFxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpc3RNZW51LnJvdXRlXSwgeyBxdWVyeVBhcmFtcyA6IHRoaXMucXVlcnlQYXJhbXMgfSlcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVudUNsaWNrZWQuZW1pdCh7YWN0aXZlUGFuZWwgOiB0aGlzLnBhcmVudFBhbmVsSWR9KTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFtsaXN0TWVudS5yb3V0ZV0pXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lbnVDbGlja2VkLmVtaXQoe2FjdGl2ZVBhbmVsIDogdGhpcy5wYXJlbnRQYW5lbElkfSk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gXG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGFsZXJ0KCdubyByb3V0ZSB0byBuYXZpZ2F0ZScpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgY29uc3QgdXJsID0gbGlzdE1lbnUubGluaztcbiAgICAgICAgICBpZih0aGlzLnVybENvbnRleHRTZXJ2aWNlLnZhbGlkYXRlS2V5U3Ryb2tlKGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIodXJsLGZhbHNlKVxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgdGhpcy5zaG93TG9hZGVyKCk7XG4gICAgICAgICAgICB0aGlzLkFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UuZ2V0SG9zdE9yaWdpbkFuZE5hdmlnYXRlKHVybCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Db250ZXh0TWVudShldmVudDogTW91c2VFdmVudCwgaXRlbTogTmF2TWVudUl0ZW0pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54ID0gZXZlbnQuY2xpZW50WCArICdweCc7XG4gICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnkgPSBldmVudC5jbGllbnRZICsgJ3B4JztcbiAgICB0aGlzLmNvbnRleHRNZW51Lm1lbnVEYXRhID0geyAnaXRlbSc6IGl0ZW0gfTtcbiAgICB0aGlzLmNvbnRleHRNZW51Lm1lbnUuZm9jdXNGaXJzdEl0ZW0oJ21vdXNlJyk7XG4gICAgdGhpcy5jb250ZXh0TWVudS5vcGVuTWVudSgpO1xuICB9XG5cbiAgb25Db250ZXh0TWVudUFjdGlvbihpdGVtOiBOYXZNZW51SXRlbSkge1xuXG4gICAgaWYodGhpcy5wYXJlbnRNZW51SWQgPT09ICdhcHBfZ2xvYmFsX3NldHRpbmdzJyl7XG4gICAgICBpZihpdGVtLmlkID09PSAnYWRzX2FjY291bnRfbWdtdCcpe1xuICAgICAgICBjb25zdCB1cmwgPSBpdGVtLmxpbms7XG4gICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHVybCxmYWxzZSx7IGFwcElkIDogdGhpcy5hcHBsaWNhdGlvbklkfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoaXRlbS5yb3V0ZSAhPSAnJykge1xuICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYihpdGVtLnJvdXRlLHRydWUpXG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBpZihpdGVtLmV4dGVybmFsX2xpbmsgJiYgaXRlbS5leHRlcm5hbF9saW5rICE9ICcnKXtcbiAgICAgICAgd2luZG93Lm9wZW4oYCR7aXRlbS5leHRlcm5hbF9saW5rfWAsICdfYmxhbmsnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0aGlzLnBhcmVudE1lbnVJZC5pbmRleE9mKHRoaXMuYXBwbGljYXRpb25JZCkgPj0gMCAgKXtcbiAgICAgICAgaWYgKGl0ZW0ucm91dGUgIT0gJycpIHtcbiAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYihpdGVtLnJvdXRlLHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgICBlbHNle1xuICAgICAgICAgIGNvbnN0IHVybCA9IGl0ZW0ubGluaztcbiAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYih1cmwsZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5Jbk5ld1RhYihsaW5rLGlzUm91dGVyTGluayxhcHBsaWNhdGlvbklkID0gdW5kZWZpbmVkKXtcbiAgICBsZXQgZGF0ZVRpdGxlID0gdGhpcy5mZXRjaERhdGVSYW5nZSgpO1xuICAgIGxldCBkYXRlUmFuZ2VWYWwgPSB0aGlzLnVybENvbnRleHRTZXJ2aWNlLnNldERhdGVSYW5nZVVybFZhbChkYXRlVGl0bGUpO1xuICAgIFxuICAgIGlmICh0aGlzLkFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCA9PSB1bmRlZmluZWQpe1xuICAgICAgbGV0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICBvaWQgOiB0aGlzLkFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkLFxuICAgICAgICBkciA6IGRhdGVSYW5nZVZhbCxcbiAgICAgIH1cbiAgICAgIGlmKGFwcGxpY2F0aW9uSWQpe1xuICAgICAgICBxdWVyeVBhcmFtcyA9IHsuLi5xdWVyeVBhcmFtcywgLi4uYXBwbGljYXRpb25JZH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXJsQ29udGV4dFNlcnZpY2Uuc2V0VXJsQW5kT3BlblRhYihsaW5rLHF1ZXJ5UGFyYW1zLGlzUm91dGVyTGluayk7XG4gICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgYWlkIDogdGhpcy5BcHBsaWNhdGlvblNpZGViYXJTZXJ2aWNlLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkLFxuICAgICAgICBiaWQgOiB0aGlzLkFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2UuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5idXNpbmVzc0dyb3VwSWQsXG4gICAgICAgIG9pZCA6IHRoaXMuQXBwbGljYXRpb25TaWRlYmFyU2VydmljZS5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkLFxuICAgICAgICBkciA6IGRhdGVSYW5nZVZhbCxcbiAgICAgIH1cbiAgICAgIGlmKGFwcGxpY2F0aW9uSWQpe1xuICAgICAgICBxdWVyeVBhcmFtcyA9IHsuLi5xdWVyeVBhcmFtcywgLi4uYXBwbGljYXRpb25JZH1cbiAgICAgIH1cbiAgICAgIHRoaXMudXJsQ29udGV4dFNlcnZpY2Uuc2V0VXJsQW5kT3BlblRhYihsaW5rLHF1ZXJ5UGFyYW1zLGlzUm91dGVyTGluayk7XG4gICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmZXRjaERhdGVSYW5nZSgpe1xuICAgIGlmKHRoaXMucXVlcnlQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3RpZCcpICYmIHRoaXMucXVlcnlQYXJhbXMuaGFzT3duUHJvcGVydHkoJ2RyJykpe1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbXNbJ2RyJ107XG4gICAgfWVsc2V7XG4gICAgICBjb25zdCBsb2dnZWRJblVzZXIgPSBKU09OLnBhcnNlKHRoaXMuY29va2llLmdldCgnbG9nZ2VkSW5Vc2VyJykpO1xuICAgICAgY29uc29sZS5sb2coJ0xvZ2dlZCA9ICcsbG9nZ2VkSW5Vc2VyKTtcbiAgICAgIHJldHVybiBsb2dnZWRJblVzZXIuZGF0ZVJhbmdlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93TG9hZGVyKCl7XG4gICAgbGV0IGxvYWRlcl9kaXY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvYWRlcl9zb3YnKTtcbiAgICAgIGlmKGxvYWRlcl9kaXYpe1xuICAgICAgICBsb2FkZXJfZGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB9XG4gICBcbiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmKGxvYWRlcl9kaXYpe1xuICAgICAgICAgbG9hZGVyX2Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICB9XG4gICAgIH0sIDUwMDApO1xuICB9XG5cbn1cbiIsIjxhIGFwcE9mZnNldFRvcCBjbGFzcz1cInNpZGVtZW51LW9wdGlvbiB7e2l0ZW0uc3R5bGVfY2xhc3Nlc319XCIgbWF0LWxpc3QtaXRlbSAoY2xpY2spPVwib25TZWxlY3RNZW51KCRldmVudCxpdGVtKVwiXG4gICpuZ0lmPVwiaXRlbS50eXBlID09PSAnbGVhZidcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzQWN0aXZlSXRlbX1cIiAoY29udGV4dG1lbnUpPVwib25Db250ZXh0TWVudSgkZXZlbnQsIGl0ZW0pXCI+XG4gIDwhLS0gPHNwYW4gY2xhc3M9XCJ7e2l0ZW0uaWR9fV9pY29uXCIgKm5nSWY9XCJpdGVtLmlkID09ICdhZHNfYWNjb3VudF9tZ210J1wiPjwvc3Bhbj4gLS0+XG4gIDxoMyBtYXRMaW5lIGNsYXNzPVwic2lkZW1lbnUtdGV4dCBmb250LWNvbG9yLWJsYWNrIG5hdk1lbnVzIGFwcGxpY2F0aW9uTWVudVwiIFtuZ0NsYXNzXT1cInsnbWFyZ2luLWxlZnQtMTAnOiBpdGVtLmxldmVsID09ICd0d28nLCBcbiAgICAnbWFyZ2luLWxlZnQtMzYnOiBpdGVtLmxldmVsICE9ICd0d28nfVwiPlxuICAgIHt7dHJhbnNsYXRpb25baXRlbS5uYW1lXSA/IHRyYW5zbGF0aW9uW2l0ZW0ubmFtZV0gOiBpdGVtLm5hbWV9fVxuICAgIDxzcGFuIGlkPVwiYWN0aXZlQ291bnRcIiAqbmdJZj1cIml0ZW0uY291bnRLZXkgJiYgZ2V0U3BlY2lmaWVkVmFsdWUoaXRlbS5jb3VudEtleSlcIiBjbGFzcz1cIm5nLWJpbmRpbmcgbmctc2NvcGVcIj5cbiAgICAgIHt7IGdldFNwZWNpZmllZFZhbHVlKGl0ZW0uY291bnRLZXkpIH19XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIGlkPVwiYWN0aXZlUmVjQ291bnRcIiAqbmdJZj1cIml0ZW0ubmFtZSA9PSAnUmVjb21tZW5kYXRpb25zJyAmJiBpdGVtLnJlY0NvdW50ICE9ICcnICYmIGl0ZW0ucmVjQ291bnQgIT0gJzAnICYmIGl0ZW0ucmVjQ291bnQgIT0gbnVsbFwiIGNsYXNzPVwiYWN0aXZlUmVjQ291bnRcIj57e2l0ZW0ucmVjQ291bnR9fTwvc3Bhbj4gXG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLmJhZGdlXCIgY2xhc3M9XCJiYWRnZS10ZXh0IHNvdi1iZXRhLXBvc2l0aW9uXCIgW2lubmVySFRNTF09XCJpdGVtLmJhZGdlXCI+PC9zcGFuPlxuICAgIDxzcGFuIGlkPVwiYWN0aXZlUmVjQ291bnRcIiAqbmdJZj1cIml0ZW0ubmFtZSA9PSAnUmVjb21tZW5kYXRpb25zJyAmJiBpdGVtLnJlY0NvdW50ICE9ICcnICYmIGl0ZW0ucmVjQ291bnQgIT0gJzAnICYmIGl0ZW0ucmVjQ291bnQgIT0gbnVsbFwiIGNsYXNzPVwiYWN0aXZlUmVjQ291bnRcIj57e2l0ZW0ucmVjQ291bnR9fTwvc3Bhbj4gXG4gIDwvaDM+XG48L2E+XG48ZGl2IHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogZml4ZWRcIiBbc3R5bGUubGVmdF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnhcIlxuICBbc3R5bGUudG9wXT1cImNvbnRleHRNZW51UG9zaXRpb24ueVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiPlxuPC9kaXY+XG48bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwibmV3VGFiTWVudVwiPjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25Db250ZXh0TWVudUFjdGlvbihpdGVtKVwiIGNsYXNzPVwibmV3VGFiTWVudVwiIGlkPVwibmV3VGFiQWN0aW9uQnRuXCI+T3BlbiBpbiBuZXdcbiAgICAgIHRhYjwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cIm5ld1RhYk1lbnVcIj48L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG48bWF0LWRpdmlkZXIgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzZXBhcmF0b3InXCIgY2xhc3M9XCJzZXBhcmF0b3JcIj48L21hdC1kaXZpZGVyPiJdfQ==