@cqa-lib/cqa-ui 1.1.185 → 1.1.186

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.
@@ -10,6 +10,8 @@ export class MainStepCollapseComponent {
10
10
  this.viewStepsAsRedirect = false;
11
11
  /** When redirecting, open link in new tab. Default true */
12
12
  this.viewStepsOpenInNewTab = true;
13
+ /** Optional initial item id to expand (e.g. first failed prerequisite). When set and present in items, that item is expanded on load. */
14
+ this.initialExpandedItemId = null;
13
15
  this.viewSteps = new EventEmitter();
14
16
  this.headerButtonClick = new EventEmitter();
15
17
  this.expandedChange = new EventEmitter();
@@ -18,11 +20,24 @@ export class MainStepCollapseComponent {
18
20
  }
19
21
  ngOnInit() {
20
22
  this.isExpanded = this.expanded;
23
+ this.applyInitialExpandedItemId();
21
24
  }
22
25
  ngOnChanges(changes) {
23
26
  if (changes['expanded']) {
24
27
  this.isExpanded = this.expanded;
25
28
  }
29
+ if (changes['initialExpandedItemId'] || changes['items']) {
30
+ this.applyInitialExpandedItemId();
31
+ }
32
+ }
33
+ applyInitialExpandedItemId() {
34
+ if (this.initialExpandedItemId == null || !this.items?.length) {
35
+ return;
36
+ }
37
+ const match = this.items.find((item) => item.id == this.initialExpandedItemId);
38
+ if (match) {
39
+ this.expandedItemId = match.id;
40
+ }
26
41
  }
27
42
  toggle() {
28
43
  this.isExpanded = !this.isExpanded;
@@ -74,7 +89,7 @@ export class MainStepCollapseComponent {
74
89
  this.viewSteps.emit(item);
75
90
  }
76
91
  isItemExpanded(itemId) {
77
- return this.expandedItemId === itemId;
92
+ return this.expandedItemId == itemId;
78
93
  }
79
94
  getDisplayCount() {
80
95
  // If items is empty/undefined and count is provided, use count
@@ -102,7 +117,7 @@ export class MainStepCollapseComponent {
102
117
  }
103
118
  }
104
119
  MainStepCollapseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MainStepCollapseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
105
- MainStepCollapseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MainStepCollapseComponent, selector: "cqa-main-step-collapse", inputs: { title: "title", items: "items", expanded: "expanded", icon: "icon", count: "count", itemContentTemplate: "itemContentTemplate", headerButtons: "headerButtons", viewStepsAsRedirect: "viewStepsAsRedirect", getViewStepsUrl: "getViewStepsUrl", viewStepsOpenInNewTab: "viewStepsOpenInNewTab" }, outputs: { viewSteps: "viewSteps", headerButtonClick: "headerButtonClick", expandedChange: "expandedChange" }, host: { classAttribute: "cqa-ui-root" }, queries: [{ propertyName: "itemContentTpl", first: true, predicate: ["itemContent"], descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<!-- Header -->\n<div\n class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid\"\n (click)=\"toggle()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n <!-- Chevron Icon (Left) -->\n <!-- <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <div><svg [class.cqa-rotate-180]=\"isExpanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></div>\n\n <!-- Chain-Link Icon (if configured, otherwise default) -->\n <!-- <div *ngIf=\"icon && icon.type === 'folder'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#3F51B5\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'loop'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/>\n <path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div> -->\n <!-- Bar Icon (Bulleted List) -->\n <div *ngIf=\"icon && icon.type === 'bar'\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <!-- First bullet and line -->\n <circle cx=\"3\" cy=\"5\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"5\" x2=\"17\" y2=\"5\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Second bullet and line -->\n <circle cx=\"3\" cy=\"10\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"10\" x2=\"17\" y2=\"10\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Third bullet and line -->\n <circle cx=\"3\" cy=\"15\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"15\" x2=\"17\" y2=\"15\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <!-- Default Chain-Link Icon (when no icon or icon type is not specified) -->\n <div *ngIf=\"!icon || (icon.type !== 'bar' && icon.type !== 'folder' && icon.type !== 'loop' && icon.type !== 'custom')\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.50033 14.1663H5.83366C4.72859 14.1663 3.66878 13.7274 2.88738 12.946C2.10598 12.1646 1.66699 11.1047 1.66699 9.99967C1.66699 8.89461 2.10598 7.8348 2.88738 7.0534C3.66878 6.27199 4.72859 5.83301 5.83366 5.83301H7.50033\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5 5.83301H14.1667C15.2717 5.83301 16.3315 6.27199 17.1129 7.0534C17.8943 7.8348 18.3333 8.89461 18.3333 9.99967C18.3333 11.1047 17.8943 12.1646 17.1129 12.946C16.3315 13.7274 15.2717 14.1663 14.1667 14.1663H12.5\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Custom Icon -->\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div>\n\n <!-- Title -->\n <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n {{ title }}\n </span>\n\n <!-- Badge and dynamic header buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngFor=\"let btn of headerButtons; let i = index\">\n <cqa-button\n [text]=\"btn.text\"\n [icon]=\"btn.icon\"\n [variant]=\"btn.variant || 'outlined'\"\n [disabled]=\"btn.disabled\"\n [tooltip]=\"btn.tooltip\"\n [customClass]=\"btn.customClass\"\n [btnSize]=\"btn.btnSize || 'sm'\"\n (clicked)=\"onHeaderButtonClick(btn, i, $event)\">\n </cqa-button>\n </ng-container>\n <span\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ getDisplayCount() }}\n </span>\n </div>\n </div>\n</div>\n\n<!-- Expanded Content -->\n<div *ngIf=\"isExpanded\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n <!-- When there are no items, display ng-content directly -->\n <ng-container *ngIf=\"!items || items.length === 0\">\n <ng-content></ng-content>\n </ng-container>\n\n <!-- When items exist, display them -->\n <div *ngFor=\"let item of items\">\n\n <!-- Item Header -->\n <div class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-overflow-hidden\">\n <div class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <!-- Left side: Status and Title -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Status Icon (Filled Green Circle with Checkmark) -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"item.status === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_48_121)\">\n <path\n d=\"M10.0003 18.3337C14.6027 18.3337 18.3337 14.6027 18.3337 10.0003C18.3337 5.39795 14.6027 1.66699 10.0003 1.66699C5.39795 1.66699 1.66699 5.39795 1.66699 10.0003C1.66699 14.6027 5.39795 18.3337 10.0003 18.3337Z\"\n stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_48_121\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#EF4444\" />\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#9CA3AF\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Running -->\n <svg *ngIf=\"item.status === 'running'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#3B82F6\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n \n <!-- Title -->\n <span class=\"cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ item.title }}\n </span>\n </div>\n \n <!-- Right side: Duration and View Steps Link -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <!-- Duration with Clock Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\n stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#6A7282]\">\n {{ formatDuration(item.duration) }}\n </span>\n </div>\n \n <!-- View Steps Link: redirect mode (navigates to URL) or inline mode (toggle expand) -->\n <a *ngIf=\"hasViewStepsRedirectUrl(item)\"\n [href]=\"getItemViewStepsUrl(item)\"\n [attr.target]=\"viewStepsOpenInNewTab ? '_blank' : null\"\n [attr.rel]=\"viewStepsOpenInNewTab ? 'noopener noreferrer' : null\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>View steps</span>\n <svg class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n <a *ngIf=\"!hasViewStepsRedirectUrl(item)\" href=\"#\" (click)=\"onViewSteps(item, $event)\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>{{ isItemExpanded(item.id) ? 'Hide steps' : 'View steps' }}</span>\n <svg [class.cqa-rotate-90]=\"isItemExpanded(item.id)\" class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n <!-- Steps Content (shown when item is expanded) -->\n <div *ngIf=\"isItemExpanded(item.id)\">\n <!-- Custom template via TemplateRef (from @ContentChild or @Input) - passes item as context -->\n <ng-container *ngIf=\"itemContentTpl || itemContentTemplate\">\n <div class=\"cqa-p-3\">\n <ng-container\n *ngTemplateOutlet=\"(itemContentTpl || itemContentTemplate)!; context: { $implicit: item, item: item }\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Custom content projection via ng-content - displayed for all expanded items -->\n <ng-content select=\"[itemContent]\"></ng-content>\n </div>\n </div>\n</div>\n\n<!-- Custom content projection after all items - for steps loaded after API call -->\n<ng-content select=\"[afterItems]\"></ng-content>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
120
+ MainStepCollapseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MainStepCollapseComponent, selector: "cqa-main-step-collapse", inputs: { title: "title", items: "items", expanded: "expanded", icon: "icon", count: "count", itemContentTemplate: "itemContentTemplate", headerButtons: "headerButtons", viewStepsAsRedirect: "viewStepsAsRedirect", getViewStepsUrl: "getViewStepsUrl", viewStepsOpenInNewTab: "viewStepsOpenInNewTab", initialExpandedItemId: "initialExpandedItemId" }, outputs: { viewSteps: "viewSteps", headerButtonClick: "headerButtonClick", expandedChange: "expandedChange" }, host: { classAttribute: "cqa-ui-root" }, queries: [{ propertyName: "itemContentTpl", first: true, predicate: ["itemContent"], descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<!-- Header -->\n<div\n class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid\"\n (click)=\"toggle()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n <!-- Chevron Icon (Left) -->\n <!-- <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <div><svg [class.cqa-rotate-180]=\"isExpanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></div>\n\n <!-- Chain-Link Icon (if configured, otherwise default) -->\n <!-- <div *ngIf=\"icon && icon.type === 'folder'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#3F51B5\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'loop'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/>\n <path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div> -->\n <!-- Bar Icon (Bulleted List) -->\n <div *ngIf=\"icon && icon.type === 'bar'\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <!-- First bullet and line -->\n <circle cx=\"3\" cy=\"5\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"5\" x2=\"17\" y2=\"5\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Second bullet and line -->\n <circle cx=\"3\" cy=\"10\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"10\" x2=\"17\" y2=\"10\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Third bullet and line -->\n <circle cx=\"3\" cy=\"15\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"15\" x2=\"17\" y2=\"15\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <!-- Default Chain-Link Icon (when no icon or icon type is not specified) -->\n <div *ngIf=\"!icon || (icon.type !== 'bar' && icon.type !== 'folder' && icon.type !== 'loop' && icon.type !== 'custom')\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.50033 14.1663H5.83366C4.72859 14.1663 3.66878 13.7274 2.88738 12.946C2.10598 12.1646 1.66699 11.1047 1.66699 9.99967C1.66699 8.89461 2.10598 7.8348 2.88738 7.0534C3.66878 6.27199 4.72859 5.83301 5.83366 5.83301H7.50033\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5 5.83301H14.1667C15.2717 5.83301 16.3315 6.27199 17.1129 7.0534C17.8943 7.8348 18.3333 8.89461 18.3333 9.99967C18.3333 11.1047 17.8943 12.1646 17.1129 12.946C16.3315 13.7274 15.2717 14.1663 14.1667 14.1663H12.5\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Custom Icon -->\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div>\n\n <!-- Title -->\n <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n {{ title }}\n </span>\n\n <!-- Badge and dynamic header buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngFor=\"let btn of headerButtons; let i = index\">\n <cqa-button\n [text]=\"btn.text\"\n [icon]=\"btn.icon\"\n [variant]=\"btn.variant || 'outlined'\"\n [disabled]=\"btn.disabled\"\n [tooltip]=\"btn.tooltip\"\n [customClass]=\"btn.customClass\"\n [btnSize]=\"btn.btnSize || 'sm'\"\n (clicked)=\"onHeaderButtonClick(btn, i, $event)\">\n </cqa-button>\n </ng-container>\n <span\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ getDisplayCount() }}\n </span>\n </div>\n </div>\n</div>\n\n<!-- Expanded Content -->\n<div *ngIf=\"isExpanded\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n <!-- When there are no items, display ng-content directly -->\n <ng-container *ngIf=\"!items || items.length === 0\">\n <ng-content></ng-content>\n </ng-container>\n\n <!-- When items exist, display them -->\n <div *ngFor=\"let item of items\">\n\n <!-- Item Header -->\n <div class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-overflow-hidden\">\n <div class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <!-- Left side: Status and Title -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Status Icon (Filled Green Circle with Checkmark) -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"item.status === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_48_121)\">\n <path\n d=\"M10.0003 18.3337C14.6027 18.3337 18.3337 14.6027 18.3337 10.0003C18.3337 5.39795 14.6027 1.66699 10.0003 1.66699C5.39795 1.66699 1.66699 5.39795 1.66699 10.0003C1.66699 14.6027 5.39795 18.3337 10.0003 18.3337Z\"\n stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_48_121\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#EF4444\" />\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#9CA3AF\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Running -->\n <svg *ngIf=\"item.status === 'running'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#3B82F6\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n \n <!-- Title -->\n <span class=\"cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ item.title }}\n </span>\n </div>\n \n <!-- Right side: Duration and View Steps Link -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <!-- Duration with Clock Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\n stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#6A7282]\">\n {{ formatDuration(item.duration) }}\n </span>\n </div>\n \n <!-- View Steps Link: redirect mode (navigates to URL) or inline mode (toggle expand) -->\n <a *ngIf=\"hasViewStepsRedirectUrl(item)\"\n [href]=\"getItemViewStepsUrl(item)\"\n [attr.target]=\"viewStepsOpenInNewTab ? '_blank' : null\"\n [attr.rel]=\"viewStepsOpenInNewTab ? 'noopener noreferrer' : null\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>View steps</span>\n <svg class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n <a *ngIf=\"!hasViewStepsRedirectUrl(item)\" href=\"#\" (click)=\"onViewSteps(item, $event)\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>{{ isItemExpanded(item.id) ? 'Hide steps' : 'View steps' }}</span>\n <svg [class.cqa-rotate-90]=\"isItemExpanded(item.id)\" class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n <!-- Steps Content (shown when item is expanded) -->\n <div *ngIf=\"isItemExpanded(item.id)\">\n <!-- Custom template via TemplateRef (from @ContentChild or @Input) - passes item as context -->\n <ng-container *ngIf=\"itemContentTpl || itemContentTemplate\">\n <div class=\"cqa-p-3\">\n <ng-container\n *ngTemplateOutlet=\"(itemContentTpl || itemContentTemplate)!; context: { $implicit: item, item: item }\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Custom content projection via ng-content - displayed for all expanded items -->\n <ng-content select=\"[itemContent]\"></ng-content>\n </div>\n </div>\n</div>\n\n<!-- Custom content projection after all items - for steps loaded after API call -->\n<ng-content select=\"[afterItems]\"></ng-content>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }] });
106
121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MainStepCollapseComponent, decorators: [{
107
122
  type: Component,
108
123
  args: [{ selector: 'cqa-main-step-collapse', host: { class: 'cqa-ui-root' }, template: "<!-- Header -->\n<div\n class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid\"\n (click)=\"toggle()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n <!-- Chevron Icon (Left) -->\n <!-- <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <div><svg [class.cqa-rotate-180]=\"isExpanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></div>\n\n <!-- Chain-Link Icon (if configured, otherwise default) -->\n <!-- <div *ngIf=\"icon && icon.type === 'folder'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#3F51B5\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div *ngIf=\"icon && icon.type === 'loop'\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/>\n <path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div> -->\n <!-- Bar Icon (Bulleted List) -->\n <div *ngIf=\"icon && icon.type === 'bar'\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <!-- First bullet and line -->\n <circle cx=\"3\" cy=\"5\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"5\" x2=\"17\" y2=\"5\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Second bullet and line -->\n <circle cx=\"3\" cy=\"10\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"10\" x2=\"17\" y2=\"10\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <!-- Third bullet and line -->\n <circle cx=\"3\" cy=\"15\" r=\"2\" fill=\"#4F39F6\"/>\n <line x1=\"7\" y1=\"15\" x2=\"17\" y2=\"15\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <!-- Default Chain-Link Icon (when no icon or icon type is not specified) -->\n <div *ngIf=\"!icon || (icon.type !== 'bar' && icon.type !== 'folder' && icon.type !== 'loop' && icon.type !== 'custom')\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M7.50033 14.1663H5.83366C4.72859 14.1663 3.66878 13.7274 2.88738 12.946C2.10598 12.1646 1.66699 11.1047 1.66699 9.99967C1.66699 8.89461 2.10598 7.8348 2.88738 7.0534C3.66878 6.27199 4.72859 5.83301 5.83366 5.83301H7.50033\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5 5.83301H14.1667C15.2717 5.83301 16.3315 6.27199 17.1129 7.0534C17.8943 7.8348 18.3333 8.89461 18.3333 9.99967C18.3333 11.1047 17.8943 12.1646 17.1129 12.946C16.3315 13.7274 15.2717 14.1663 14.1667 14.1663H12.5\"\n stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Custom Icon -->\n <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div>\n\n <!-- Title -->\n <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n {{ title }}\n </span>\n\n <!-- Badge and dynamic header buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" (click)=\"$event.stopPropagation()\">\n <ng-container *ngFor=\"let btn of headerButtons; let i = index\">\n <cqa-button\n [text]=\"btn.text\"\n [icon]=\"btn.icon\"\n [variant]=\"btn.variant || 'outlined'\"\n [disabled]=\"btn.disabled\"\n [tooltip]=\"btn.tooltip\"\n [customClass]=\"btn.customClass\"\n [btnSize]=\"btn.btnSize || 'sm'\"\n (clicked)=\"onHeaderButtonClick(btn, i, $event)\">\n </cqa-button>\n </ng-container>\n <span\n class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7]\">\n {{ getDisplayCount() }}\n </span>\n </div>\n </div>\n</div>\n\n<!-- Expanded Content -->\n<div *ngIf=\"isExpanded\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n <!-- When there are no items, display ng-content directly -->\n <ng-container *ngIf=\"!items || items.length === 0\">\n <ng-content></ng-content>\n </ng-container>\n\n <!-- When items exist, display them -->\n <div *ngFor=\"let item of items\">\n\n <!-- Item Header -->\n <div class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-overflow-hidden\">\n <div class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n <!-- Left side: Status and Title -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <!-- Status Icon (Filled Green Circle with Checkmark) -->\n <div>\n <!-- Success -->\n <svg *ngIf=\"item.status === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_48_121)\">\n <path\n d=\"M10.0003 18.3337C14.6027 18.3337 18.3337 14.6027 18.3337 10.0003C18.3337 5.39795 14.6027 1.66699 10.0003 1.66699C5.39795 1.66699 1.66699 5.39795 1.66699 10.0003C1.66699 14.6027 5.39795 18.3337 10.0003 18.3337Z\"\n stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_48_121\">\n <rect width=\"20\" height=\"20\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <!-- Failed -->\n <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#EF4444\" />\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <!-- Pending -->\n <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#9CA3AF\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <!-- Running -->\n <svg *ngIf=\"item.status === 'running'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#3B82F6\" />\n <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n \n <!-- Title -->\n <span class=\"cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ item.title }}\n </span>\n </div>\n \n <!-- Right side: Duration and View Steps Link -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <!-- Duration with Clock Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\n stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#6A7282]\">\n {{ formatDuration(item.duration) }}\n </span>\n </div>\n \n <!-- View Steps Link: redirect mode (navigates to URL) or inline mode (toggle expand) -->\n <a *ngIf=\"hasViewStepsRedirectUrl(item)\"\n [href]=\"getItemViewStepsUrl(item)\"\n [attr.target]=\"viewStepsOpenInNewTab ? '_blank' : null\"\n [attr.rel]=\"viewStepsOpenInNewTab ? 'noopener noreferrer' : null\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>View steps</span>\n <svg class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n <a *ngIf=\"!hasViewStepsRedirectUrl(item)\" href=\"#\" (click)=\"onViewSteps(item, $event)\"\n class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n <span>{{ isItemExpanded(item.id) ? 'Hide steps' : 'View steps' }}</span>\n <svg [class.cqa-rotate-90]=\"isItemExpanded(item.id)\" class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n <!-- Steps Content (shown when item is expanded) -->\n <div *ngIf=\"isItemExpanded(item.id)\">\n <!-- Custom template via TemplateRef (from @ContentChild or @Input) - passes item as context -->\n <ng-container *ngIf=\"itemContentTpl || itemContentTemplate\">\n <div class=\"cqa-p-3\">\n <ng-container\n *ngTemplateOutlet=\"(itemContentTpl || itemContentTemplate)!; context: { $implicit: item, item: item }\"></ng-container>\n </div>\n </ng-container>\n\n <!-- Custom content projection via ng-content - displayed for all expanded items -->\n <ng-content select=\"[itemContent]\"></ng-content>\n </div>\n </div>\n</div>\n\n<!-- Custom content projection after all items - for steps loaded after API call -->\n<ng-content select=\"[afterItems]\"></ng-content>", styles: [] }]
@@ -126,6 +141,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
126
141
  type: Input
127
142
  }], viewStepsOpenInNewTab: [{
128
143
  type: Input
144
+ }], initialExpandedItemId: [{
145
+ type: Input
129
146
  }], itemContentTpl: [{
130
147
  type: ContentChild,
131
148
  args: ['itemContent', { read: TemplateRef }]
@@ -136,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
136
153
  }], expandedChange: [{
137
154
  type: Output
138
155
  }] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9tYWluLXN0ZXAtY29sbGFwc2UvbWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9tYWluLXN0ZXAtY29sbGFwc2UvbWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUE4QnBJLE1BQU0sT0FBTyx5QkFBeUI7SUFOdEM7UUFPVyxVQUFLLEdBQVcsZUFBZSxDQUFDO1FBRWhDLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFLbEMsdUlBQXVJO1FBQzlILHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUc5QywyREFBMkQ7UUFDbEQsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBRXJDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUNqRCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBaUQsQ0FBQztRQUN0RixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFdkQsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixtQkFBYyxHQUFrQixJQUFJLENBQUMsQ0FBQyxtREFBbUQ7S0FxRzFGO0lBbkdDLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FB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QUksRUFBRSxXQUFXLEVBQUU7Z0JBQ3hDLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByZXJlcXVpc2l0ZUl0ZW0sIFN0ZXBTdGF0dXMgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQnV0dG9uVmFyaWFudCB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgSWNvblR5cGUgPSAnZm9sZGVyJyB8ICdsb29wJyB8ICdiYXInIHwgJ2N1c3RvbSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNvbkNvbmZpZyB7XG4gIHR5cGU6IEljb25UeXBlO1xuICBzdmc/OiBzdHJpbmc7IC8vIEN1c3RvbSBTVkcgc3RyaW5nIHdoZW4gdHlwZSBpcyAnY3VzdG9tJ1xufVxuXG4vKiogQ29uZmlnIGZvciBkeW5hbWljIGhlYWRlciBidXR0b25zIHNob3duIGJlc2lkZSB0aGUgaXRlbXMgY291bnQgYmFkZ2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyQnV0dG9uQ29uZmlnIHtcbiAgdGV4dD86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgdmFyaWFudD86IEJ1dHRvblZhcmlhbnQ7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdG9vbHRpcD86IHN0cmluZztcbiAgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XG4gIGJ0blNpemU/OiAnc20nIHwgJ21kJyB8ICdsZyc7XG4gIC8qKiBPcHRpb25hbCBpZCB0byBpZGVudGlmeSB0aGUgYnV0dG9uIGluIGhlYWRlckJ1dHRvbkNsaWNrIGV2ZW50ICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbWFpbi1zdGVwLWNvbGxhcHNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tc3RlcC1jb2xsYXBzZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBNYWluU3RlcENvbGxhcHNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ1ByZXJlcXVpc2l0ZXMnO1xuICBASW5wdXQoKSBpdGVtcyE6IFByZXJlcXVpc2l0ZUl0ZW1bXTtcbiAgQElucHV0KCkgZXhwYW5kZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBpY29uPzogSWNvbkNvbmZpZztcbiAgQElucHV0KCkgY291bnQ/OiBudW1iZXI7IC8vIENvdW50IHRvIGRpc3BsYXkgd2hlbiBpdGVtcyBhcnJheSBpcyBlbXB0eVxuICBASW5wdXQoKSBpdGVtQ29udGVudFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjsgLy8gVGVtcGxhdGUgZm9yIGN1c3RvbSBjb250ZW50IHVuZGVyIHN0ZXBzIChwcm9ncmFtbWF0aWMpXG4gIEBJbnB1dCgpIGhlYWRlckJ1dHRvbnM/OiBIZWFkZXJCdXR0b25Db25maWdbXTsgLy8gRHluYW1pYyBidXR0b25zIHRvIHNob3cgYmVzaWRlIHRoZSBpdGVtcyBjb3VudCBiYWRnZVxuICAvKiogV2hlbiB0cnVlLCBcIlZpZXcgc3RlcHNcIiByZWRpcmVjdHMgdG8gVVJMIGluc3RlYWQgb2YgZXhwYW5kaW5nIGlubGluZS4gVVJMIGNvbWVzIGZyb20gaXRlbS52aWV3U3RlcHNVcmwgb3IgZ2V0Vmlld1N0ZXBzVXJsKGl0ZW0pLiAqL1xuICBASW5wdXQoKSB2aWV3U3RlcHNBc1JlZGlyZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBPcHRpb25hbCBmdW5jdGlvbiB0byBnZXQgcmVkaXJlY3QgVVJMIHBlciBpdGVtLiBVc2VkIHdoZW4gaXRlbS52aWV3U3RlcHNVcmwgaXMgbm90IHNldC4gKi9cbiAgQElucHV0KCkgZ2V0Vmlld1N0ZXBzVXJsPzogKGl0ZW06IFByZXJlcXVpc2l0ZUl0ZW0pID0+IHN0cmluZztcbiAgLyoqIFdoZW4gcmVkaXJlY3RpbmcsIG9wZW4gbGluayBpbiBuZXcgdGFiLiBEZWZhdWx0IHRydWUgKi9cbiAgQElucHV0KCkgdmlld1N0ZXBzT3BlbkluTmV3VGFiOiBib29sZWFuID0gdHJ1ZTtcbiAgQENvbnRlbnRDaGlsZCgnaXRlbUNvbnRlbnQnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGl0ZW1Db250ZW50VHBsPzogVGVtcGxhdGVSZWY8YW55PjsgLy8gVGVtcGxhdGUgcmVmZXJlbmNlIGZyb20gbmctdGVtcGxhdGVcbiAgQE91dHB1dCgpIHZpZXdTdGVwcyA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcmVxdWlzaXRlSXRlbT4oKTtcbiAgQE91dHB1dCgpIGhlYWRlckJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbmZpZzogSGVhZGVyQnV0dG9uQ29uZmlnOyBpbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBpc0V4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgZXhwYW5kZWRJdGVtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB3aGljaCBpdGVtJ3Mgc3RlcHMgYXJlIGN1cnJlbnRseSBkaXNwbGF5ZWRcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydleHBhbmRlZCddKSB7XG4gICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmlzRXhwYW5kZWQpO1xuICB9XG5cbiAgZm9ybWF0RHVyYXRpb24oc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoc2Vjb25kcyA8IDEpIHtcbiAgICAgIHJldHVybiBgJHsoc2Vjb25kcyAqIDEwMDApLnRvRml4ZWQoMCl9bXNgO1xuICAgIH1cblxuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHNlY29uZHMgJSAzNjAwKSAvIDYwKTtcbiAgICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihzZWNvbmRzICUgNjApO1xuXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke2hvdXJzfWhgKTtcbiAgICB9XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIH1cbiAgICBpZiAoc2VjcyA+IDAgfHwgKGhvdXJzID09PSAwICYmIG1pbnV0ZXMgPT09IDApKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3NlY3N9c2ApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG4gIH1cbiAgZ2V0U3RhdHVzSWNvbihzdGF0dXM6IFN0ZXBTdGF0dXMpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuICdjaGVja19jaXJjbGUnO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuICdjYW5jZWwnO1xuICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgIHJldHVybiAnc2NoZWR1bGUnO1xuICAgICAgY2FzZSAncnVubmluZyc6XG4gICAgICAgIHJldHVybiAnc3luYyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2hlbHBfb3V0bGluZSc7XG4gICAgfVxuICB9XG5cblxuICBvblZpZXdTdGVwcyhpdGVtOiBQcmVyZXF1aXNpdGVJdGVtLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIC8vIEFjY29yZGlvbiBiZWhhdmlvcjogaWYgY2xpY2tpbmcgdGhlIHNhbWUgaXRlbSwgY2xvc2UgaXQ7IG90aGVyd2lzZSwgY2xvc2UgcHJldmlvdXMgYW5kIG9wZW4gbmV3IG9uZVxuICAgIGlmICh0aGlzLmV4cGFuZGVkSXRlbUlkID09PSBpdGVtLmlkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkSXRlbUlkID0gbnVsbDsgLy8gQ2xvc2UgaWYgYWxyZWFkeSBvcGVuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRJdGVtSWQgPSBpdGVtLmlkOyAvLyBPcGVuIHRoZSBjbGlja2VkIGl0ZW0gKGNsb3NlcyBwcmV2aW91cyBhdXRvbWF0aWNhbGx5KVxuICAgIH1cbiAgICBcbiAgICB0aGlzLnZpZXdTdGVwcy5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgaXNJdGVtRXhwYW5kZWQoaXRlbUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZEl0ZW1JZCA9PT0gaXRlbUlkO1xuICB9XG5cbiAgZ2V0RGlzcGxheUNvdW50KCk6IG51bWJlciB7XG4gICAgLy8gSWYgaXRlbXMgaXMgZW1wdHkvdW5kZWZpbmVkIGFuZCBjb3VudCBpcyBwcm92aWRlZCwgdXNlIGNvdW50XG4gICAgaWYgKCghdGhpcy5pdGVtcyB8fCB0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCkgJiYgdGhpcy5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb3VudDtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlIHVzZSBpdGVtcyBsZW5ndGhcbiAgICByZXR1cm4gdGhpcy5pdGVtcz8ubGVuZ3RoIHx8IDA7XG4gIH1cblxuICBvbkhlYWRlckJ1dHRvbkNsaWNrKGNvbmZpZzogSGVhZGVyQnV0dG9uQ29uZmlnLCBpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5oZWFkZXJCdXR0b25DbGljay5lbWl0KHsgY29uZmlnLCBpbmRleCB9KTtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlcyB0aGUgcmVkaXJlY3QgVVJMIGZvciBhbiBpdGVtOiBpdGVtLnZpZXdTdGVwc1VybCB0YWtlcyBwcmVjZWRlbmNlLCBlbHNlIGdldFZpZXdTdGVwc1VybChpdGVtKSAqL1xuICBnZXRJdGVtVmlld1N0ZXBzVXJsKGl0ZW06IFByZXJlcXVpc2l0ZUl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChpdGVtLnZpZXdTdGVwc1VybCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmlld1N0ZXBzVXJsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRWaWV3U3RlcHNVcmw/LihpdGVtKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHJlZGlyZWN0IG1vZGUgaXMgYWN0aXZlIGFuZCB3ZSBoYXZlIGEgVVJMIGZvciB0aGlzIGl0ZW0gKi9cbiAgaGFzVmlld1N0ZXBzUmVkaXJlY3RVcmwoaXRlbTogUHJlcmVxdWlzaXRlSXRlbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudmlld1N0ZXBzQXNSZWRpcmVjdCAmJiAhIXRoaXMuZ2V0SXRlbVZpZXdTdGVwc1VybChpdGVtKTtcbiAgfVxufVxuIiwiPCEtLSBIZWFkZXIgLS0+XG48ZGl2XG4gIGNsYXNzPVwiY3FhLW10LTIgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMyBjcWEtcHgtMyBjcWEtcHktMiBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWJnLVsjRUVGMkZGXSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNDNkQyRkZdIGNxYS1ib3JkZXItc29saWRcIlxuICAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS13LWZ1bGxcIj5cbiAgICA8IS0tIENoZXZyb24gSWNvbiAoTGVmdCkgLS0+XG4gICAgPCEtLSA8c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgPC9zdmc+IC0tPlxuICAgIDxkaXY+PHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNFeHBhbmRlZFwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICA8L3N2Zz48L2Rpdj5cblxuICAgIDwhLS0gQ2hhaW4tTGluayBJY29uIChpZiBjb25maWd1cmVkLCBvdGhlcndpc2UgZGVmYXVsdCkgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaWNvbiAmJiBpY29uLnR5cGUgPT09ICdmb2xkZXInXCI+XG4gICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICA8cGF0aCBkPVwiTTExLjY2NjYgMTEuNjY2N0MxMS45NzYgMTEuNjY2NyAxMi4yNzI4IDExLjU0MzcgMTIuNDkxNiAxMS4zMjVDMTIuNzEwNCAxMS4xMDYyIDEyLjgzMzMgMTAuODA5NCAxMi44MzMzIDEwLjVWNC42NjY2N0MxMi44MzMzIDQuMzU3MjUgMTIuNzEwNCA0LjA2MDUgMTIuNDkxNiAzLjg0MTcxQzEyLjI3MjggMy42MjI5MiAxMS45NzYgMy41IDExLjY2NjYgMy41SDcuMDU4MjlDNi44NjMxOCAzLjUwMTkxIDYuNjcwNjkgMy40NTQ4NiA2LjQ5ODQ3IDMuMzYzMTRDNi4zMjYyNCAzLjI3MTQyIDYuMTc5NzcgMy4xMzc5NyA2LjA3MjQ2IDIuOTc1TDUuNTk5OTYgMi4yNzVDNS40OTM3MyAyLjExMzY5IDUuMzQ5MTEgMS45ODEyOCA1LjE3OTA4IDEuODg5NjVDNS4wMDkwNiAxLjc5ODAyIDQuODE4OTQgMS43NTAwMyA0LjYyNTc5IDEuNzVIMi4zMzMyOUMyLjAyMzg3IDEuNzUgMS43MjcxMyAxLjg3MjkyIDEuNTA4MzMgMi4wOTE3MUMxLjI4OTU0IDIuMzEwNSAxLjE2NjYzIDIuNjA3MjUgMS4xNjY2MyAyLjkxNjY3VjEwLjVDMS4xNjY2MyAxMC44MDk0IDEuMjg5NTQgMTEuMTA2MiAxLjUwODMzIDExLjMyNUMxLjcyNzEzIDExLjU0MzcgMi4wMjM4NyAxMS42NjY3IDIuMzMzMjkgMTEuNjY2N0gxMS42NjY2WlwiIGZpbGw9XCIjRUZGNkZGXCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgPC9zdmc+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiaWNvbiAmJiBpY29uLnR5cGUgPT09ICdsb29wJ1wiPlxuICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgcng9XCI0XCIgZmlsbD1cIiNFQkVDRkRcIi8+XG4gICAgICA8cGF0aCBkPVwiTTkuNjY2NjMgNC42NjY2NkwxMSA1Ljk5OTk5TDkuNjY2NjMgNy4zMzMzMlwiIHN0cm9rZT1cIiMzRjUxQjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8cGF0aCBkPVwiTTUgNy42NjY2N1Y3LjMzMzMzQzUgNi45Nzk3MSA1LjE0MDQ4IDYuNjQwNTcgNS4zOTA1MiA2LjM5MDUyQzUuNjQwNTcgNi4xNDA0OCA1Ljk3OTcxIDYgNi4zMzMzMyA2SDExXCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDxwYXRoIGQ9XCJNNi4zMzMzMyAxMS4zMzMzTDUgOS45OTk5OUw2LjMzMzMzIDguNjY2NjZcIiBzdHJva2U9XCIjM0Y1MUI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgPHBhdGggZD1cIk0xMSA4LjMzMzM0VjguNjY2NjhDMTEgOS4wMjAzIDEwLjg1OTUgOS4zNTk0NCAxMC42MDk1IDkuNjA5NDlDMTAuMzU5NCA5Ljg1OTUzIDEwLjAyMDMgMTAgOS42NjY2NyAxMEg1XCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+IC0tPlxuICAgIDwhLS0gQmFyIEljb24gKEJ1bGxldGVkIExpc3QpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpY29uICYmIGljb24udHlwZSA9PT0gJ2JhcidcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8IS0tIEZpcnN0IGJ1bGxldCBhbmQgbGluZSAtLT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjVcIiByPVwiMlwiIGZpbGw9XCIjNEYzOUY2XCIvPlxuICAgICAgICA8bGluZSB4MT1cIjdcIiB5MT1cIjVcIiB4Mj1cIjE3XCIgeTI9XCI1XCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgIDwhLS0gU2Vjb25kIGJ1bGxldCBhbmQgbGluZSAtLT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjEwXCIgcj1cIjJcIiBmaWxsPVwiIzRGMzlGNlwiLz5cbiAgICAgICAgPGxpbmUgeDE9XCI3XCIgeTE9XCIxMFwiIHgyPVwiMTdcIiB5Mj1cIjEwXCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgIDwhLS0gVGhpcmQgYnVsbGV0IGFuZCBsaW5lIC0tPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiMTVcIiByPVwiMlwiIGZpbGw9XCIjNEYzOUY2XCIvPlxuICAgICAgICA8bGluZSB4MT1cIjdcIiB5MT1cIjE1XCIgeDI9XCIxN1wiIHkyPVwiMTVcIiBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEZWZhdWx0IENoYWluLUxpbmsgSWNvbiAod2hlbiBubyBpY29uIG9yIGljb24gdHlwZSBpcyBub3Qgc3BlY2lmaWVkKSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWljb24gfHwgKGljb24udHlwZSAhPT0gJ2JhcicgJiYgaWNvbi50eXBlICE9PSAnZm9sZGVyJyAmJiBpY29uLnR5cGUgIT09ICdsb29wJyAmJiBpY29uLnR5cGUgIT09ICdjdXN0b20nKVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk03LjUwMDMzIDE0LjE2NjNINS44MzM2NkM0LjcyODU5IDE0LjE2NjMgMy42Njg3OCAxMy43Mjc0IDIuODg3MzggMTIuOTQ2QzIuMTA1OTggMTIuMTY0NiAxLjY2Njk5IDExLjEwNDcgMS42NjY5OSA5Ljk5OTY3QzEuNjY2OTkgOC44OTQ2MSAyLjEwNTk4IDcuODM0OCAyLjg4NzM4IDcuMDUzNEMzLjY2ODc4IDYuMjcxOTkgNC43Mjg1OSA1LjgzMzAxIDUuODMzNjYgNS44MzMwMUg3LjUwMDMzXCJcbiAgICAgICAgICBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZD1cIk0xMi41IDUuODMzMDFIMTQuMTY2N0MxNS4yNzE3IDUuODMzMDEgMTYuMzMxNSA2LjI3MTk5IDE3LjExMjkgNy4wNTM0QzE3Ljg5NDMgNy44MzQ4IDE4LjMzMzMgOC44OTQ2MSAxOC4zMzMzIDkuOTk5NjdDMTguMzMzMyAxMS4xMDQ3IDE3Ljg5NDMgMTIuMTY0NiAxNy4xMTI5IDEyLjk0NkMxNi4zMzE1IDEzLjcyNzQgMTUuMjcxNyAxNC4xNjYzIDE0LjE2NjcgMTQuMTY2M0gxMi41XCJcbiAgICAgICAgICBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNNi42NjY5OSAxMEgxMy4zMzM3XCIgc3Ryb2tlPVwiIzRGMzlGNlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ3VzdG9tIEljb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImljb24gJiYgaWNvbi50eXBlID09PSAnY3VzdG9tJyAmJiBpY29uLnN2Z1wiIFtpbm5lckhUTUxdPVwiaWNvbi5zdmdcIj48L2Rpdj5cblxuICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE3cHhdIGNxYS10ZXh0LVsjMzEyQzg1XSBjcWEtZmxleC0xXCI+XG4gICAgICB7eyB0aXRsZSB9fVxuICAgIDwvc3Bhbj5cblxuICAgIDwhLS0gQmFkZ2UgYW5kIGR5bmFtaWMgaGVhZGVyIGJ1dHRvbnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIGhlYWRlckJ1dHRvbnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICBbdGV4dF09XCJidG4udGV4dFwiXG4gICAgICAgICAgW2ljb25dPVwiYnRuLmljb25cIlxuICAgICAgICAgIFt2YXJpYW50XT1cImJ0bi52YXJpYW50IHx8ICdvdXRsaW5lZCdcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4uZGlzYWJsZWRcIlxuICAgICAgICAgIFt0b29sdGlwXT1cImJ0bi50b29sdGlwXCJcbiAgICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiYnRuLmN1c3RvbUNsYXNzXCJcbiAgICAgICAgICBbYnRuU2l6ZV09XCJidG4uYnRuU2l6ZSB8fCAnc20nXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJvbkhlYWRlckJ1dHRvbkNsaWNrKGJ0biwgaSwgJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiY3FhLXB4LTIgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1iZy1bI0M2RDJGRl0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNnB4XSBjcWEtdGV4dC1bIzQzMkREN11cIj5cbiAgICAgICAge3sgZ2V0RGlzcGxheUNvdW50KCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBFeHBhbmRlZCBDb250ZW50IC0tPlxuPGRpdiAqbmdJZj1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLXB4LTIuNVwiPlxuICA8IS0tIFdoZW4gdGhlcmUgYXJlIG5vIGl0ZW1zLCBkaXNwbGF5IG5nLWNvbnRlbnQgZGlyZWN0bHkgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gV2hlbiBpdGVtcyBleGlzdCwgZGlzcGxheSB0aGVtIC0tPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCI+XG5cbiAgICA8IS0tIEl0ZW0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU1RTVdIGNxYS1yb3VuZGVkLW1kIGNxYS1vdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0zXCI+XG4gICAgICAgIDwhLS0gTGVmdCBzaWRlOiBTdGF0dXMgYW5kIFRpdGxlIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLWZsZXgtMVwiPlxuICAgICAgICAgIDwhLS0gU3RhdHVzIEljb24gKEZpbGxlZCBHcmVlbiBDaXJjbGUgd2l0aCBDaGVja21hcmspIC0tPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8IS0tIFN1Y2Nlc3MgLS0+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09ICdzdWNjZXNzJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80OF8xMjEpXCI+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuMDAwMyAxOC4zMzM3QzE0LjYwMjcgMTguMzMzNyAxOC4zMzM3IDE0LjYwMjcgMTguMzMzNyAxMC4wMDAzQzE4LjMzMzcgNS4zOTc5NSAxNC42MDI3IDEuNjY2OTkgMTAuMDAwMyAxLjY2Njk5QzUuMzk3OTUgMS42NjY5OSAxLjY2Njk5IDUuMzk3OTUgMS42NjY5OSAxMC4wMDAzQzEuNjY2OTkgMTQuNjAyNyA1LjM5Nzk1IDE4LjMzMzcgMTAuMDAwMyAxOC4zMzM3WlwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBNjNFXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk03LjUgOS45OTk2N0w5LjE2NjY3IDExLjY2NjNMMTIuNSA4LjMzMzAxXCIgc3Ryb2tlPVwiIzAwQTYzRVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OF8xMjFcIj5cbiAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8IS0tIEZhaWxlZCAtLT5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiOFwiIGZpbGw9XCIjRUY0NDQ0XCIgLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDdMMTMgMTNNMTMgN0w3IDEzXCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8IS0tIFBlbmRpbmcgLS0+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09ICdwZW5kaW5nJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI4XCIgZmlsbD1cIiM5Q0EzQUZcIiAvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDZWMTBMMTMgMTJcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8IS0tIFJ1bm5pbmcgLS0+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09ICdydW5uaW5nJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI4XCIgZmlsbD1cIiMzQjgyRjZcIiAvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDZWMTBMMTMgMTJcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE4cHhdXCIgc3R5bGU9XCJ3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiPlxuICAgICAgICAgICAge3sgaXRlbS50aXRsZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICA8IS0tIFJpZ2h0IHNpZGU6IER1cmF0aW9uIGFuZCBWaWV3IFN0ZXBzIExpbmsgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtM1wiPlxuICAgICAgICAgIDwhLS0gRHVyYXRpb24gd2l0aCBDbG9jayBJY29uIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzZBNzI4MlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzZBNzI4MlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsyMHB4XSBjcWEtdGV4dC1bIzZBNzI4Ml1cIj5cbiAgICAgICAgICAgICAge3sgZm9ybWF0RHVyYXRpb24oaXRlbS5kdXJhdGlvbikgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgICAgPCEtLSBWaWV3IFN0ZXBzIExpbms6IHJlZGlyZWN0IG1vZGUgKG5hdmlnYXRlcyB0byBVUkwpIG9yIGlubGluZSBtb2RlICh0b2dnbGUgZXhwYW5kKSAtLT5cbiAgICAgICAgICA8YSAqbmdJZj1cImhhc1ZpZXdTdGVwc1JlZGlyZWN0VXJsKGl0ZW0pXCJcbiAgICAgICAgICAgIFtocmVmXT1cImdldEl0ZW1WaWV3U3RlcHNVcmwoaXRlbSlcIlxuICAgICAgICAgICAgW2F0dHIudGFyZ2V0XT1cInZpZXdTdGVwc09wZW5Jbk5ld1RhYiA/ICdfYmxhbmsnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5yZWxdPVwidmlld1N0ZXBzT3BlbkluTmV3VGFiID8gJ25vb3BlbmVyIG5vcmVmZXJyZXInIDogbnVsbFwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS1uby11bmRlcmxpbmUgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgaG92ZXI6Y3FhLXVuZGVybGluZVwiPlxuICAgICAgICAgICAgPHNwYW4+VmlldyBzdGVwczwvc3Bhbj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTVcIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk04LjY1NTIgMTIuODE4NEw3LjU1NDEzIDExLjc2NjhMMTAuODUyIDguNTg2NEgyLjgzOTg0VjcuMDUwMzJIMTAuODUyTDcuNTU0MTMgMy44NzUwNkw4LjY1NTIgMi44MTgzNkwxMy44Mzk4IDcuODE4MzZMOC42NTUyIDEyLjgxODRaXCJcbiAgICAgICAgICAgICAgICBmaWxsPVwiIzNGNDNFRVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGEgKm5nSWY9XCIhaGFzVmlld1N0ZXBzUmVkaXJlY3RVcmwoaXRlbSlcIiBocmVmPVwiI1wiIChjbGljayk9XCJvblZpZXdTdGVwcyhpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLW5vLXVuZGVybGluZSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBob3ZlcjpjcWEtdW5kZXJsaW5lXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBpc0l0ZW1FeHBhbmRlZChpdGVtLmlkKSA/ICdIaWRlIHN0ZXBzJyA6ICdWaWV3IHN0ZXBzJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdmcgW2NsYXNzLmNxYS1yb3RhdGUtOTBdPVwiaXNJdGVtRXhwYW5kZWQoaXRlbS5pZClcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNVwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTguNjU1MiAxMi44MTg0TDcuNTU0MTMgMTEuNzY2OEwxMC44NTIgOC41ODY0SDIuODM5ODRWNy4wNTAzMkgxMC44NTJMNy41NTQxMyAzLjg3NTA2TDguNjU1MiAyLjgxODM2TDEzLjgzOTggNy44MTgzNkw4LjY1NTIgMTIuODE4NFpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjM0Y0M0VFXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU3RlcHMgQ29udGVudCAoc2hvd24gd2hlbiBpdGVtIGlzIGV4cGFuZGVkKSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNJdGVtRXhwYW5kZWQoaXRlbS5pZClcIj5cbiAgICAgIDwhLS0gQ3VzdG9tIHRlbXBsYXRlIHZpYSBUZW1wbGF0ZVJlZiAoZnJvbSBAQ29udGVudENoaWxkIG9yIEBJbnB1dCkgLSBwYXNzZXMgaXRlbSBhcyBjb250ZXh0IC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1Db250ZW50VHBsIHx8IGl0ZW1Db250ZW50VGVtcGxhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIihpdGVtQ29udGVudFRwbCB8fCBpdGVtQ29udGVudFRlbXBsYXRlKSE7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBpdGVtOiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDdXN0b20gY29udGVudCBwcm9qZWN0aW9uIHZpYSBuZy1jb250ZW50IC0gZGlzcGxheWVkIGZvciBhbGwgZXhwYW5kZWQgaXRlbXMgLS0+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaXRlbUNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEN1c3RvbSBjb250ZW50IHByb2plY3Rpb24gYWZ0ZXIgYWxsIGl0ZW1zIC0gZm9yIHN0ZXBzIGxvYWRlZCBhZnRlciBBUEkgY2FsbCAtLT5cbjxuZy1jb250ZW50IHNlbGVjdD1cIlthZnRlckl0ZW1zXVwiPjwvbmctY29udGVudD4iXX0=
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9tYWluLXN0ZXAtY29sbGFwc2UvbWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9tYWluLXN0ZXAtY29sbGFwc2UvbWFpbi1zdGVwLWNvbGxhcHNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUE4QnBJLE1BQU0sT0FBTyx5QkFBeUI7SUFOdEM7UUFPVyxVQUFLLEdBQVcsZUFBZSxDQUFDO1FBRWhDLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFLbEMsdUlBQXVJO1FBQzlILHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUc5QywyREFBMkQ7UUFDbEQsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBQy9DLHlJQUF5STtRQUNoSSwwQkFBcUIsR0FBMkIsSUFBSSxDQUFDO1FBRXBELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBb0IsQ0FBQztRQUNqRCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBaUQsQ0FBQztRQUN0RixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFdkQsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixtQkFBYyxHQUEyQixJQUFJLENBQUMsQ0FBQyxtREFBbUQ7S0FtSG5HO0lBakhDLFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDakM7UUFDRCxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4RCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDN0QsT0FBTztTQUNSO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0UsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWU7UUFDNUIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsT0FBTyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQzNDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV0QyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFFM0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDekI7UUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUU7WUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUNELElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO1FBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxhQUFhLENBQUMsTUFBa0I7UUFDOUIsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxjQUFjLENBQUM7WUFDeEIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssU0FBUztnQkFDWixPQUFPLFVBQVUsQ0FBQztZQUNwQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxNQUFNLENBQUM7WUFDaEI7Z0JBQ0UsT0FBTyxjQUFjLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBR0QsV0FBVyxDQUFDLElBQXNCLEVBQUUsS0FBWTtRQUM5QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLHNHQUFzRztRQUN0RyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLHdCQUF3QjtTQUNyRDthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsd0RBQXdEO1NBQ3hGO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUF1QjtRQUNwQyxPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlO1FBQ2IsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDeEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25CO1FBQ0QsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUEwQixFQUFFLEtBQWEsRUFBRSxLQUFpQjtRQUM5RSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsNEdBQTRHO0lBQzVHLG1CQUFtQixDQUFDLElBQXNCO1FBQ3hDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDMUI7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLHVCQUF1QixDQUFDLElBQXNCO1FBQzVDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7O3NIQXhJVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qix3b0JBZ0JDLFdBQVcsa0RDOUNsRCxnMFpBaU4rQzsyRkRuTGxDLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSx3QkFBd0IsUUFHNUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUdyQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUM4QyxjQUFjO3NCQUFqRSxZQUFZO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ3hDLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByZXJlcXVpc2l0ZUl0ZW0sIFN0ZXBTdGF0dXMgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQnV0dG9uVmFyaWFudCB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgSWNvblR5cGUgPSAnZm9sZGVyJyB8ICdsb29wJyB8ICdiYXInIHwgJ2N1c3RvbSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNvbkNvbmZpZyB7XG4gIHR5cGU6IEljb25UeXBlO1xuICBzdmc/OiBzdHJpbmc7IC8vIEN1c3RvbSBTVkcgc3RyaW5nIHdoZW4gdHlwZSBpcyAnY3VzdG9tJ1xufVxuXG4vKiogQ29uZmlnIGZvciBkeW5hbWljIGhlYWRlciBidXR0b25zIHNob3duIGJlc2lkZSB0aGUgaXRlbXMgY291bnQgYmFkZ2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhZGVyQnV0dG9uQ29uZmlnIHtcbiAgdGV4dD86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgdmFyaWFudD86IEJ1dHRvblZhcmlhbnQ7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdG9vbHRpcD86IHN0cmluZztcbiAgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XG4gIGJ0blNpemU/OiAnc20nIHwgJ21kJyB8ICdsZyc7XG4gIC8qKiBPcHRpb25hbCBpZCB0byBpZGVudGlmeSB0aGUgYnV0dG9uIGluIGhlYWRlckJ1dHRvbkNsaWNrIGV2ZW50ICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbWFpbi1zdGVwLWNvbGxhcHNlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21haW4tc3RlcC1jb2xsYXBzZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBNYWluU3RlcENvbGxhcHNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ1ByZXJlcXVpc2l0ZXMnO1xuICBASW5wdXQoKSBpdGVtcyE6IFByZXJlcXVpc2l0ZUl0ZW1bXTtcbiAgQElucHV0KCkgZXhwYW5kZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBpY29uPzogSWNvbkNvbmZpZztcbiAgQElucHV0KCkgY291bnQ/OiBudW1iZXI7IC8vIENvdW50IHRvIGRpc3BsYXkgd2hlbiBpdGVtcyBhcnJheSBpcyBlbXB0eVxuICBASW5wdXQoKSBpdGVtQ29udGVudFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjsgLy8gVGVtcGxhdGUgZm9yIGN1c3RvbSBjb250ZW50IHVuZGVyIHN0ZXBzIChwcm9ncmFtbWF0aWMpXG4gIEBJbnB1dCgpIGhlYWRlckJ1dHRvbnM/OiBIZWFkZXJCdXR0b25Db25maWdbXTsgLy8gRHluYW1pYyBidXR0b25zIHRvIHNob3cgYmVzaWRlIHRoZSBpdGVtcyBjb3VudCBiYWRnZVxuICAvKiogV2hlbiB0cnVlLCBcIlZpZXcgc3RlcHNcIiByZWRpcmVjdHMgdG8gVVJMIGluc3RlYWQgb2YgZXhwYW5kaW5nIGlubGluZS4gVVJMIGNvbWVzIGZyb20gaXRlbS52aWV3U3RlcHNVcmwgb3IgZ2V0Vmlld1N0ZXBzVXJsKGl0ZW0pLiAqL1xuICBASW5wdXQoKSB2aWV3U3RlcHNBc1JlZGlyZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBPcHRpb25hbCBmdW5jdGlvbiB0byBnZXQgcmVkaXJlY3QgVVJMIHBlciBpdGVtLiBVc2VkIHdoZW4gaXRlbS52aWV3U3RlcHNVcmwgaXMgbm90IHNldC4gKi9cbiAgQElucHV0KCkgZ2V0Vmlld1N0ZXBzVXJsPzogKGl0ZW06IFByZXJlcXVpc2l0ZUl0ZW0pID0+IHN0cmluZztcbiAgLyoqIFdoZW4gcmVkaXJlY3RpbmcsIG9wZW4gbGluayBpbiBuZXcgdGFiLiBEZWZhdWx0IHRydWUgKi9cbiAgQElucHV0KCkgdmlld1N0ZXBzT3BlbkluTmV3VGFiOiBib29sZWFuID0gdHJ1ZTtcbiAgLyoqIE9wdGlvbmFsIGluaXRpYWwgaXRlbSBpZCB0byBleHBhbmQgKGUuZy4gZmlyc3QgZmFpbGVkIHByZXJlcXVpc2l0ZSkuIFdoZW4gc2V0IGFuZCBwcmVzZW50IGluIGl0ZW1zLCB0aGF0IGl0ZW0gaXMgZXhwYW5kZWQgb24gbG9hZC4gKi9cbiAgQElucHV0KCkgaW5pdGlhbEV4cGFuZGVkSXRlbUlkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQENvbnRlbnRDaGlsZCgnaXRlbUNvbnRlbnQnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGl0ZW1Db250ZW50VHBsPzogVGVtcGxhdGVSZWY8YW55PjsgLy8gVGVtcGxhdGUgcmVmZXJlbmNlIGZyb20gbmctdGVtcGxhdGVcbiAgQE91dHB1dCgpIHZpZXdTdGVwcyA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlcmVxdWlzaXRlSXRlbT4oKTtcbiAgQE91dHB1dCgpIGhlYWRlckJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbmZpZzogSGVhZGVyQnV0dG9uQ29uZmlnOyBpbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBpc0V4cGFuZGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgZXhwYW5kZWRJdGVtSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB3aGljaCBpdGVtJ3Mgc3RlcHMgYXJlIGN1cnJlbnRseSBkaXNwbGF5ZWRcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkO1xuICAgIHRoaXMuYXBwbHlJbml0aWFsRXhwYW5kZWRJdGVtSWQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSkge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxFeHBhbmRlZEl0ZW1JZCddIHx8IGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgIHRoaXMuYXBwbHlJbml0aWFsRXhwYW5kZWRJdGVtSWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5pdGlhbEV4cGFuZGVkSXRlbUlkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxFeHBhbmRlZEl0ZW1JZCA9PSBudWxsIHx8ICF0aGlzLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gdGhpcy5pbml0aWFsRXhwYW5kZWRJdGVtSWQpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgdGhpcy5leHBhbmRlZEl0ZW1JZCA9IG1hdGNoLmlkO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmlzRXhwYW5kZWQpO1xuICB9XG5cbiAgZm9ybWF0RHVyYXRpb24oc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoc2Vjb25kcyA8IDEpIHtcbiAgICAgIHJldHVybiBgJHsoc2Vjb25kcyAqIDEwMDApLnRvRml4ZWQoMCl9bXNgO1xuICAgIH1cblxuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHNlY29uZHMgJSAzNjAwKSAvIDYwKTtcbiAgICBjb25zdCBzZWNzID0gTWF0aC5mbG9vcihzZWNvbmRzICUgNjApO1xuXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke2hvdXJzfWhgKTtcbiAgICB9XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIH1cbiAgICBpZiAoc2VjcyA+IDAgfHwgKGhvdXJzID09PSAwICYmIG1pbnV0ZXMgPT09IDApKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3NlY3N9c2ApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcgJyk7XG4gIH1cbiAgZ2V0U3RhdHVzSWNvbihzdGF0dXM6IFN0ZXBTdGF0dXMpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgcmV0dXJuICdjaGVja19jaXJjbGUnO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuICdjYW5jZWwnO1xuICAgICAgY2FzZSAncGVuZGluZyc6XG4gICAgICAgIHJldHVybiAnc2NoZWR1bGUnO1xuICAgICAgY2FzZSAncnVubmluZyc6XG4gICAgICAgIHJldHVybiAnc3luYyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2hlbHBfb3V0bGluZSc7XG4gICAgfVxuICB9XG5cblxuICBvblZpZXdTdGVwcyhpdGVtOiBQcmVyZXF1aXNpdGVJdGVtLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIC8vIEFjY29yZGlvbiBiZWhhdmlvcjogaWYgY2xpY2tpbmcgdGhlIHNhbWUgaXRlbSwgY2xvc2UgaXQ7IG90aGVyd2lzZSwgY2xvc2UgcHJldmlvdXMgYW5kIG9wZW4gbmV3IG9uZVxuICAgIGlmICh0aGlzLmV4cGFuZGVkSXRlbUlkID09PSBpdGVtLmlkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkSXRlbUlkID0gbnVsbDsgLy8gQ2xvc2UgaWYgYWxyZWFkeSBvcGVuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRJdGVtSWQgPSBpdGVtLmlkOyAvLyBPcGVuIHRoZSBjbGlja2VkIGl0ZW0gKGNsb3NlcyBwcmV2aW91cyBhdXRvbWF0aWNhbGx5KVxuICAgIH1cbiAgICBcbiAgICB0aGlzLnZpZXdTdGVwcy5lbWl0KGl0ZW0pO1xuICB9XG5cbiAgaXNJdGVtRXhwYW5kZWQoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZEl0ZW1JZCA9PSBpdGVtSWQ7XG4gIH1cblxuICBnZXREaXNwbGF5Q291bnQoKTogbnVtYmVyIHtcbiAgICAvLyBJZiBpdGVtcyBpcyBlbXB0eS91bmRlZmluZWQgYW5kIGNvdW50IGlzIHByb3ZpZGVkLCB1c2UgY291bnRcbiAgICBpZiAoKCF0aGlzLml0ZW1zIHx8IHRoaXMuaXRlbXMubGVuZ3RoID09PSAwKSAmJiB0aGlzLmNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvdW50O1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UgdXNlIGl0ZW1zIGxlbmd0aFxuICAgIHJldHVybiB0aGlzLml0ZW1zPy5sZW5ndGggfHwgMDtcbiAgfVxuXG4gIG9uSGVhZGVyQnV0dG9uQ2xpY2soY29uZmlnOiBIZWFkZXJCdXR0b25Db25maWcsIGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmhlYWRlckJ1dHRvbkNsaWNrLmVtaXQoeyBjb25maWcsIGluZGV4IH0pO1xuICB9XG5cbiAgLyoqIFJlc29sdmVzIHRoZSByZWRpcmVjdCBVUkwgZm9yIGFuIGl0ZW06IGl0ZW0udmlld1N0ZXBzVXJsIHRha2VzIHByZWNlZGVuY2UsIGVsc2UgZ2V0Vmlld1N0ZXBzVXJsKGl0ZW0pICovXG4gIGdldEl0ZW1WaWV3U3RlcHNVcmwoaXRlbTogUHJlcmVxdWlzaXRlSXRlbSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGl0ZW0udmlld1N0ZXBzVXJsKSB7XG4gICAgICByZXR1cm4gaXRlbS52aWV3U3RlcHNVcmw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFZpZXdTdGVwc1VybD8uKGl0ZW0pO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgcmVkaXJlY3QgbW9kZSBpcyBhY3RpdmUgYW5kIHdlIGhhdmUgYSBVUkwgZm9yIHRoaXMgaXRlbSAqL1xuICBoYXNWaWV3U3RlcHNSZWRpcmVjdFVybChpdGVtOiBQcmVyZXF1aXNpdGVJdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy52aWV3U3RlcHNBc1JlZGlyZWN0ICYmICEhdGhpcy5nZXRJdGVtVmlld1N0ZXBzVXJsKGl0ZW0pO1xuICB9XG59XG4iLCI8IS0tIEhlYWRlciAtLT5cbjxkaXZcbiAgY2xhc3M9XCJjcWEtbXQtMiBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0zIGNxYS1weC0zIGNxYS1weS0yIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtYmctWyNFRUYyRkZdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0M2RDJGRl0gY3FhLWJvcmRlci1zb2xpZFwiXG4gIChjbGljayk9XCJ0b2dnbGUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLXctZnVsbFwiPlxuICAgIDwhLS0gQ2hldnJvbiBJY29uIChMZWZ0KSAtLT5cbiAgICA8IS0tIDxzdmcgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cGF0aCBkPVwiTTQgNkw4IDEwTDEyIDZcIiBzdHJva2U9XCIjM0Y1MUI1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICA8L3N2Zz4gLS0+XG4gICAgPGRpdj48c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aCBkPVwiTTQgNkw4IDEwTDEyIDZcIiBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgIDwvc3ZnPjwvZGl2PlxuXG4gICAgPCEtLSBDaGFpbi1MaW5rIEljb24gKGlmIGNvbmZpZ3VyZWQsIG90aGVyd2lzZSBkZWZhdWx0KSAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJpY29uICYmIGljb24udHlwZSA9PT0gJ2ZvbGRlcidcIj5cbiAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgIDxwYXRoIGQ9XCJNMTEuNjY2NiAxMS42NjY3QzExLjk3NiAxMS42NjY3IDEyLjI3MjggMTEuNTQzNyAxMi40OTE2IDExLjMyNUMxMi43MTA0IDExLjEwNjIgMTIuODMzMyAxMC44MDk0IDEyLjgzMzMgMTAuNVY0LjY2NjY3QzEyLjgzMzMgNC4zNTcyNSAxMi43MTA0IDQuMDYwNSAxMi40OTE2IDMuODQxNzFDMTIuMjcyOCAzLjYyMjkyIDExLjk3NiAzLjUgMTEuNjY2NiAzLjVINy4wNTgyOUM2Ljg2MzE4IDMuNTAxOTEgNi42NzA2OSAzLjQ1NDg2IDYuNDk4NDcgMy4zNjMxNEM2LjMyNjI0IDMuMjcxNDIgNi4xNzk3NyAzLjEzNzk3IDYuMDcyNDYgMi45NzVMNS41OTk5NiAyLjI3NUM1LjQ5MzczIDIuMTEzNjkgNS4zNDkxMSAxLjk4MTI4IDUuMTc5MDggMS44ODk2NUM1LjAwOTA2IDEuNzk4MDIgNC44MTg5NCAxLjc1MDAzIDQuNjI1NzkgMS43NUgyLjMzMzI5QzIuMDIzODcgMS43NSAxLjcyNzEzIDEuODcyOTIgMS41MDgzMyAyLjA5MTcxQzEuMjg5NTQgMi4zMTA1IDEuMTY2NjMgMi42MDcyNSAxLjE2NjYzIDIuOTE2NjdWMTAuNUMxLjE2NjYzIDEwLjgwOTQgMS4yODk1NCAxMS4xMDYyIDEuNTA4MzMgMTEuMzI1QzEuNzI3MTMgMTEuNTQzNyAyLjAyMzg3IDExLjY2NjcgMi4zMzMyOSAxMS42NjY3SDExLjY2NjZaXCIgZmlsbD1cIiNFRkY2RkZcIiBzdHJva2U9XCIjM0Y1MUI1XCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICA8L3N2Zz5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJpY29uICYmIGljb24udHlwZSA9PT0gJ2xvb3AnXCI+XG4gICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiByeD1cIjRcIiBmaWxsPVwiI0VCRUNGRFwiLz5cbiAgICAgIDxwYXRoIGQ9XCJNOS42NjY2MyA0LjY2NjY2TDExIDUuOTk5OTlMOS42NjY2MyA3LjMzMzMyXCIgc3Ryb2tlPVwiIzNGNTFCNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDxwYXRoIGQ9XCJNNSA3LjY2NjY3VjcuMzMzMzNDNSA2Ljk3OTcxIDUuMTQwNDggNi42NDA1NyA1LjM5MDUyIDYuMzkwNTJDNS42NDA1NyA2LjE0MDQ4IDUuOTc5NzEgNiA2LjMzMzMzIDZIMTFcIiBzdHJva2U9XCIjM0Y1MUI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgPHBhdGggZD1cIk02LjMzMzMzIDExLjMzMzNMNSA5Ljk5OTk5TDYuMzMzMzMgOC42NjY2NlwiIHN0cm9rZT1cIiMzRjUxQjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8cGF0aCBkPVwiTTExIDguMzMzMzRWOC42NjY2OEMxMSA5LjAyMDMgMTAuODU5NSA5LjM1OTQ0IDEwLjYwOTUgOS42MDk0OUMxMC4zNTk0IDkuODU5NTMgMTAuMDIwMyAxMCA5LjY2NjY3IDEwSDVcIiBzdHJva2U9XCIjM0Y1MUI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgIDwvc3ZnPlxuICA8L2Rpdj4gLS0+XG4gICAgPCEtLSBCYXIgSWNvbiAoQnVsbGV0ZWQgTGlzdCkgLS0+XG4gICAgPGRpdiAqbmdJZj1cImljb24gJiYgaWNvbi50eXBlID09PSAnYmFyJ1wiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDwhLS0gRmlyc3QgYnVsbGV0IGFuZCBsaW5lIC0tPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiNVwiIHI9XCIyXCIgZmlsbD1cIiM0RjM5RjZcIi8+XG4gICAgICAgIDxsaW5lIHgxPVwiN1wiIHkxPVwiNVwiIHgyPVwiMTdcIiB5Mj1cIjVcIiBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgPCEtLSBTZWNvbmQgYnVsbGV0IGFuZCBsaW5lIC0tPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiMTBcIiByPVwiMlwiIGZpbGw9XCIjNEYzOUY2XCIvPlxuICAgICAgICA8bGluZSB4MT1cIjdcIiB5MT1cIjEwXCIgeDI9XCIxN1wiIHkyPVwiMTBcIiBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgPCEtLSBUaGlyZCBidWxsZXQgYW5kIGxpbmUgLS0+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCIxNVwiIHI9XCIyXCIgZmlsbD1cIiM0RjM5RjZcIi8+XG4gICAgICAgIDxsaW5lIHgxPVwiN1wiIHkxPVwiMTVcIiB4Mj1cIjE3XCIgeTI9XCIxNVwiIHN0cm9rZT1cIiM0RjM5RjZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERlZmF1bHQgQ2hhaW4tTGluayBJY29uICh3aGVuIG5vIGljb24gb3IgaWNvbiB0eXBlIGlzIG5vdCBzcGVjaWZpZWQpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhaWNvbiB8fCAoaWNvbi50eXBlICE9PSAnYmFyJyAmJiBpY29uLnR5cGUgIT09ICdmb2xkZXInICYmIGljb24udHlwZSAhPT0gJ2xvb3AnICYmIGljb24udHlwZSAhPT0gJ2N1c3RvbScpXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTcuNTAwMzMgMTQuMTY2M0g1LjgzMzY2QzQuNzI4NTkgMTQuMTY2MyAzLjY2ODc4IDEzLjcyNzQgMi44ODczOCAxMi45NDZDMi4xMDU5OCAxMi4xNjQ2IDEuNjY2OTkgMTEuMTA0NyAxLjY2Njk5IDkuOTk5NjdDMS42NjY5OSA4Ljg5NDYxIDIuMTA1OTggNy44MzQ4IDIuODg3MzggNy4wNTM0QzMuNjY4NzggNi4yNzE5OSA0LjcyODU5IDUuODMzMDEgNS44MzM2NiA1LjgzMzAxSDcuNTAwMzNcIlxuICAgICAgICAgIHN0cm9rZT1cIiM0RjM5RjZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyLjUgNS44MzMwMUgxNC4xNjY3QzE1LjI3MTcgNS44MzMwMSAxNi4zMzE1IDYuMjcxOTkgMTcuMTEyOSA3LjA1MzRDMTcuODk0MyA3LjgzNDggMTguMzMzMyA4Ljg5NDYxIDE4LjMzMzMgOS45OTk2N0MxOC4zMzMzIDExLjEwNDcgMTcuODk0MyAxMi4xNjQ2IDE3LjExMjkgMTIuOTQ2QzE2LjMzMTUgMTMuNzI3NCAxNS4yNzE3IDE0LjE2NjMgMTQuMTY2NyAxNC4xNjYzSDEyLjVcIlxuICAgICAgICAgIHN0cm9rZT1cIiM0RjM5RjZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk02LjY2Njk5IDEwSDEzLjMzMzdcIiBzdHJva2U9XCIjNEYzOUY2XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDdXN0b20gSWNvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaWNvbiAmJiBpY29uLnR5cGUgPT09ICdjdXN0b20nICYmIGljb24uc3ZnXCIgW2lubmVySFRNTF09XCJpY29uLnN2Z1wiPjwvZGl2PlxuXG4gICAgPCEtLSBUaXRsZSAtLT5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLXRleHQtWyMzMTJDODVdIGNxYS1mbGV4LTFcIj5cbiAgICAgIHt7IHRpdGxlIH19XG4gICAgPC9zcGFuPlxuXG4gICAgPCEtLSBCYWRnZSBhbmQgZHluYW1pYyBoZWFkZXIgYnV0dG9ucyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgaGVhZGVyQnV0dG9uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgIFt0ZXh0XT1cImJ0bi50ZXh0XCJcbiAgICAgICAgICBbaWNvbl09XCJidG4uaWNvblwiXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiYnRuLnZhcmlhbnQgfHwgJ291dGxpbmVkJ1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bi5kaXNhYmxlZFwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiYnRuLnRvb2x0aXBcIlxuICAgICAgICAgIFtjdXN0b21DbGFzc109XCJidG4uY3VzdG9tQ2xhc3NcIlxuICAgICAgICAgIFtidG5TaXplXT1cImJ0bi5idG5TaXplIHx8ICdzbSdcIlxuICAgICAgICAgIChjbGlja2VkKT1cIm9uSGVhZGVyQnV0dG9uQ2xpY2soYnRuLCBpLCAkZXZlbnQpXCI+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtWzRweF0gY3FhLWJnLVsjQzZEMkZGXSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE2cHhdIGNxYS10ZXh0LVsjNDMyREQ3XVwiPlxuICAgICAgICB7eyBnZXREaXNwbGF5Q291bnQoKSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG48ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLW10LTIgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtcHgtMi41XCI+XG4gIDwhLS0gV2hlbiB0aGVyZSBhcmUgbm8gaXRlbXMsIGRpc3BsYXkgbmctY29udGVudCBkaXJlY3RseSAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBXaGVuIGl0ZW1zIGV4aXN0LCBkaXNwbGF5IHRoZW0gLS0+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cblxuICAgIDwhLS0gSXRlbSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTVFNV0gY3FhLXJvdW5kZWQtbWQgY3FhLW92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1weS0yIGNxYS1weC0zIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTNcIj5cbiAgICAgICAgPCEtLSBMZWZ0IHNpZGU6IFN0YXR1cyBhbmQgVGl0bGUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC0xXCI+XG4gICAgICAgICAgPCEtLSBTdGF0dXMgSWNvbiAoRmlsbGVkIEdyZWVuIENpcmNsZSB3aXRoIENoZWNrbWFyaykgLS0+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDwhLS0gU3VjY2VzcyAtLT5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ4XzEyMSlcIj5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0xMC4wMDAzIDE4LjMzMzdDMTQuNjAyNyAxOC4zMzM3IDE4LjMzMzcgMTQuNjAyNyAxOC4zMzM3IDEwLjAwMDNDMTguMzMzNyA1LjM5Nzk1IDE0LjYwMjcgMS42NjY5OSAxMC4wMDAzIDEuNjY2OTlDNS4zOTc5NSAxLjY2Njk5IDEuNjY2OTkgNS4zOTc5NSAxLjY2Njk5IDEwLjAwMDNDMS42NjY5OSAxNC42MDI3IDUuMzk3OTUgMTguMzMzNyAxMC4wMDAzIDE4LjMzMzdaXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEE2M0VcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuNSA5Ljk5OTY3TDkuMTY2NjcgMTEuNjY2M0wxMi41IDguMzMzMDFcIiBzdHJva2U9XCIjMDBBNjNFXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQ4XzEyMVwiPlxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwhLS0gRmFpbGVkIC0tPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSAnZmFpbGVkJ1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI4XCIgZmlsbD1cIiNFRjQ0NDRcIiAvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgN0wxMyAxM00xMyA3TDcgMTNcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwhLS0gUGVuZGluZyAtLT5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gJ3BlbmRpbmcnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjhcIiBmaWxsPVwiIzlDQTNBRlwiIC8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNlYxMEwxMyAxMlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwhLS0gUnVubmluZyAtLT5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjhcIiBmaWxsPVwiIzNCODJGNlwiIC8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgNlYxMEwxMyAxMlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgICAgPCEtLSBUaXRsZSAtLT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMThweF1cIiBzdHlsZT1cIndvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCI+XG4gICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgXG4gICAgICAgIDwhLS0gUmlnaHQgc2lkZTogRHVyYXRpb24gYW5kIFZpZXcgU3RlcHMgTGluayAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgICAgPCEtLSBEdXJhdGlvbiB3aXRoIENsb2NrIEljb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjNkE3MjgyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjNkE3MjgyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzIwcHhdIGNxYS10ZXh0LVsjNkE3MjgyXVwiPlxuICAgICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihpdGVtLmR1cmF0aW9uKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgICA8IS0tIFZpZXcgU3RlcHMgTGluazogcmVkaXJlY3QgbW9kZSAobmF2aWdhdGVzIHRvIFVSTCkgb3IgaW5saW5lIG1vZGUgKHRvZ2dsZSBleHBhbmQpIC0tPlxuICAgICAgICAgIDxhICpuZ0lmPVwiaGFzVmlld1N0ZXBzUmVkaXJlY3RVcmwoaXRlbSlcIlxuICAgICAgICAgICAgW2hyZWZdPVwiZ2V0SXRlbVZpZXdTdGVwc1VybChpdGVtKVwiXG4gICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwidmlld1N0ZXBzT3BlbkluTmV3VGFiID8gJ19ibGFuaycgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLnJlbF09XCJ2aWV3U3RlcHNPcGVuSW5OZXdUYWIgPyAnbm9vcGVuZXIgbm9yZWZlcnJlcicgOiBudWxsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLW5vLXVuZGVybGluZSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBob3ZlcjpjcWEtdW5kZXJsaW5lXCI+XG4gICAgICAgICAgICA8c3Bhbj5WaWV3IHN0ZXBzPC9zcGFuPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNVwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTguNjU1MiAxMi44MTg0TDcuNTU0MTMgMTEuNzY2OEwxMC44NTIgOC41ODY0SDIuODM5ODRWNy4wNTAzMkgxMC44NTJMNy41NTQxMyAzLjg3NTA2TDguNjU1MiAyLjgxODM2TDEzLjgzOTggNy44MTgzNkw4LjY1NTIgMTIuODE4NFpcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCIjM0Y0M0VFXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8YSAqbmdJZj1cIiFoYXNWaWV3U3RlcHNSZWRpcmVjdFVybChpdGVtKVwiIGhyZWY9XCIjXCIgKGNsaWNrKT1cIm9uVmlld1N0ZXBzKGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtbm8tdW5kZXJsaW5lIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGhvdmVyOmNxYS11bmRlcmxpbmVcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGlzSXRlbUV4cGFuZGVkKGl0ZW0uaWQpID8gJ0hpZGUgc3RlcHMnIDogJ1ZpZXcgc3RlcHMnIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN2ZyBbY2xhc3MuY3FhLXJvdGF0ZS05MF09XCJpc0l0ZW1FeHBhbmRlZChpdGVtLmlkKVwiIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE1XCJcbiAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNOC42NTUyIDEyLjgxODRMNy41NTQxMyAxMS43NjY4TDEwLjg1MiA4LjU4NjRIMi44Mzk4NFY3LjA1MDMySDEwLjg1Mkw3LjU1NDEzIDMuODc1MDZMOC42NTUyIDIuODE4MzZMMTMuODM5OCA3LjgxODM2TDguNjU1MiAxMi44MTg0WlwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIiMzRjQzRUVcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGVwcyBDb250ZW50IChzaG93biB3aGVuIGl0ZW0gaXMgZXhwYW5kZWQpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc0l0ZW1FeHBhbmRlZChpdGVtLmlkKVwiPlxuICAgICAgPCEtLSBDdXN0b20gdGVtcGxhdGUgdmlhIFRlbXBsYXRlUmVmIChmcm9tIEBDb250ZW50Q2hpbGQgb3IgQElucHV0KSAtIHBhc3NlcyBpdGVtIGFzIGNvbnRleHQgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbUNvbnRlbnRUcGwgfHwgaXRlbUNvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXAtM1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiKGl0ZW1Db250ZW50VHBsIHx8IGl0ZW1Db250ZW50VGVtcGxhdGUpITsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGl0ZW06IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEN1c3RvbSBjb250ZW50IHByb2plY3Rpb24gdmlhIG5nLWNvbnRlbnQgLSBkaXNwbGF5ZWQgZm9yIGFsbCBleHBhbmRlZCBpdGVtcyAtLT5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpdGVtQ29udGVudF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gQ3VzdG9tIGNvbnRlbnQgcHJvamVjdGlvbiBhZnRlciBhbGwgaXRlbXMgLSBmb3Igc3RlcHMgbG9hZGVkIGFmdGVyIEFQSSBjYWxsIC0tPlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FmdGVySXRlbXNdXCI+PC9uZy1jb250ZW50PiJdfQ==