@cqa-lib/cqa-ui 1.1.171 → 1.1.173

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/esm2020/lib/compare-runs/compare-runs.component.mjs +30 -8
  2. package/esm2020/lib/dynamic-select/dynamic-select-field.component.mjs +3 -3
  3. package/esm2020/lib/execution-screen/ai-action-step/ai-action-step.component.mjs +3 -3
  4. package/esm2020/lib/execution-screen/ai-agent-step/ai-agent-step.component.mjs +3 -3
  5. package/esm2020/lib/execution-screen/api-step/api-step.component.mjs +3 -3
  6. package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +3 -3
  7. package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +3 -3
  8. package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +3 -3
  9. package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +3 -3
  10. package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +1 -1
  11. package/esm2020/lib/execution-screen/step-renderer/step-renderer.component.mjs +1 -1
  12. package/esm2020/lib/simulator/simulator.component.mjs +3 -3
  13. package/fesm2015/cqa-lib-cqa-ui.mjs +47 -25
  14. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  15. package/fesm2020/cqa-lib-cqa-ui.mjs +47 -25
  16. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  17. package/lib/dynamic-select/dynamic-select-field.component.d.ts +2 -0
  18. package/lib/execution-screen/ai-action-step/ai-action-step.component.d.ts +6 -2
  19. package/lib/execution-screen/ai-agent-step/ai-agent-step.component.d.ts +6 -2
  20. package/lib/execution-screen/api-step/api-step.component.d.ts +6 -2
  21. package/lib/execution-screen/basic-step/basic-step.component.d.ts +6 -2
  22. package/lib/execution-screen/condition-step/condition-step.component.d.ts +6 -2
  23. package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +6 -2
  24. package/lib/execution-screen/loop-step/loop-step.component.d.ts +6 -2
  25. package/lib/execution-screen/step-group/step-group.component.d.ts +6 -2
  26. package/lib/execution-screen/step-renderer/step-renderer.component.d.ts +6 -2
  27. package/package.json +1 -1
  28. package/styles.css +1 -1
@@ -198,10 +198,10 @@ export class AIAgentStepComponent extends BaseStepComponent {
198
198
  }
199
199
  }
200
200
  AIAgentStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AIAgentStepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
201
- AIAgentStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AIAgentStepComponent, selector: "cqa-ai-agent-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", prompt: "prompt", optimizedRun: "optimizedRun", actionCount: "actionCount", actions: "actions", selectedTabInput: "selectedTabInput", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", stepDeleted: "stepDeleted", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", selfHealAnalysis: "selfHealAnalysis", getSelfHealLoadingStatesHandler: "getSelfHealLoadingStatesHandler", onStepClickHandler: "onStepClickHandler", isLive: "isLive", step: "step" }, outputs: { makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\">\n \n <!-- Status Icon -->\n <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n <!-- Skipped -->\n <div class=\"cqa-flex cqa-items-center\" *ngIf=\"status.toLowerCase() === 'skipped'\">\n <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n <!-- Lightbulb Icon and Step Number -->\n <div>\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ config?.stepNumber }}. <span [innerHTML]=\"config?.title || ''\"></span>\n </span>\n \n <!-- Loop Type Badges -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n AI Agent\n </span>\n <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#075F3F] cqa-bg-[#AEE9D4] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n Auto Heal\n </span>\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n </div>\n\n <!-- Action Count -->\n <span *ngIf=\"config?.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n {{ config?.actionCount }} actions\n </span>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(config?.duration || 0) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n <!-- Prompt Card -->\n <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n <div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n <span *ngIf=\"config?.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n Optimized Run\n </span>\n </div>\n <p class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" style=\"word-break: break-word;\" [innerHTML]=\"config?.prompt\"></p>\n </div>\n <button \n class=\"cqa-p-1.5\" \n (click)=\"copyPrompt()\"\n [matTooltip]=\"'Copy prompt'\"\n matTooltipPosition=\"above\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <!-- <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n <button\n (click)=\"selectTab('action-trace')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Action Trace\n <span *ngIf=\"config && config.actions && config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n {{ config.actions.length }}\n </span>\n </button>\n <button\n (click)=\"selectTab('planner-timeline')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Planner Timeline\n </button>\n <button\n (click)=\"selectTab('ai-reasoning')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n AI Reasoning\n </button>\n </div> -->\n\n <!-- Tab Content -->\n <!-- Action Trace Tab -->\n <div *ngIf=\"selectedTab === 'action-trace'\">\n <!-- <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-my-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n <b>{{ config?.actions?.length || 0 }} actions</b> \n from previous runs\n </div>\n </div> -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-my-1.5\">\n <ng-container *ngFor=\"let action of config?.actions; let i = index; trackBy: trackByActionId\">\n <div\n *ngIf=\"action?.description\"\n class=\"cqa-font-inter cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1\"\n [ngStyle]=\"{\n 'background-color': action?.reasoning ? '#EEF2FF' : '#F7FAFC',\n 'border': action?.reasoning ? '1px solid #C4B5FD' : '1px solid #BEDBFF'\n }\"\n >\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <svg *ngIf=\"!action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <svg *ngIf=\"action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#ddd7f5\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#7C3AED\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n {{ getActionIcon(action.type) }}\n </mat-icon> -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <svg *ngIf=\"!action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <svg *ngIf=\"action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#ddd7f5\"/>\n <path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n </div>\n <span\n class=\"cqa-flex-1 cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\" style=\"word-break: break-word;\"\n [ngStyle]=\"{ color: action?.reasoning ? '#4C1D95' : '#0B0B0B' }\"\n >\n {{ action.description }}\n </span>\n <span *ngIf=\"action.confidence\" class=\"cqa-font-inter cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] cqa-font-inter cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n {{ formatDuration(action.duration) }}\n </span>\n <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n Planner timeline content would go here\n </div>\n\n <!-- AI Reasoning Tab -->\n <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [id]=\"step?.testStepId\"\n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"config?.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.app || 0) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.tool || 0) }}</span>\n </div>\n </span>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [isExpanded]=\"showFailedStepDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [testStepResultId]=\"testStepResultId\"\n [timingBreakdown]=\"timingBreakdown\"\n [expanded]=\"true\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [isLive]=\"isLive\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", components: [{ type: i1.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["id", "originalLocator", "healedLocator", "confidence", "healMethod", "isLoadingAccept", "isLoadingModifyAccept"], outputs: ["action"] }, { type: i2.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails", "isExpanded"], outputs: ["viewMoreClick"] }, { type: i3.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline", "isMakingCurrentBaseline", "isLive"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
201
+ AIAgentStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AIAgentStepComponent, selector: "cqa-ai-agent-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", prompt: "prompt", optimizedRun: "optimizedRun", actionCount: "actionCount", actions: "actions", selectedTabInput: "selectedTabInput", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", stepDeleted: "stepDeleted", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", selfHealAnalysis: "selfHealAnalysis", getSelfHealLoadingStatesHandler: "getSelfHealLoadingStatesHandler", onStepClickHandler: "onStepClickHandler", isLive: "isLive", step: "step" }, outputs: { makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\">\n \n <!-- Status Icon -->\n <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n <!-- Skipped -->\n <div class=\"cqa-flex cqa-items-center\" *ngIf=\"status.toLowerCase() === 'skipped'\">\n <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n <!-- Lightbulb Icon and Step Number -->\n <div>\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ config?.stepNumber }}. <span [innerHTML]=\"config?.title || ''\"></span>\n </span>\n \n <!-- Loop Type Badges -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n AI Agent\n </span>\n\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n </div>\n\n <!-- Action Count -->\n <span *ngIf=\"config?.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n {{ config?.actionCount }} actions\n </span>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n </svg>\n Self-healed\n </span>\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(config?.duration || 0) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n <!-- Prompt Card -->\n <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n <div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n <span *ngIf=\"config?.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n Optimized Run\n </span>\n </div>\n <p class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" style=\"word-break: break-word;\" [innerHTML]=\"config?.prompt\"></p>\n </div>\n <button \n class=\"cqa-p-1.5\" \n (click)=\"copyPrompt()\"\n [matTooltip]=\"'Copy prompt'\"\n matTooltipPosition=\"above\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <!-- <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n <button\n (click)=\"selectTab('action-trace')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Action Trace\n <span *ngIf=\"config && config.actions && config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n {{ config.actions.length }}\n </span>\n </button>\n <button\n (click)=\"selectTab('planner-timeline')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Planner Timeline\n </button>\n <button\n (click)=\"selectTab('ai-reasoning')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n AI Reasoning\n </button>\n </div> -->\n\n <!-- Tab Content -->\n <!-- Action Trace Tab -->\n <div *ngIf=\"selectedTab === 'action-trace'\">\n <!-- <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-my-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n <b>{{ config?.actions?.length || 0 }} actions</b> \n from previous runs\n </div>\n </div> -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-my-1.5\">\n <ng-container *ngFor=\"let action of config?.actions; let i = index; trackBy: trackByActionId\">\n <div\n *ngIf=\"action?.description\"\n class=\"cqa-font-inter cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1\"\n [ngStyle]=\"{\n 'background-color': action?.reasoning ? '#EEF2FF' : '#F7FAFC',\n 'border': action?.reasoning ? '1px solid #C4B5FD' : '1px solid #BEDBFF'\n }\"\n >\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <svg *ngIf=\"!action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <svg *ngIf=\"action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#ddd7f5\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#7C3AED\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n {{ getActionIcon(action.type) }}\n </mat-icon> -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <svg *ngIf=\"!action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <svg *ngIf=\"action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#ddd7f5\"/>\n <path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n </div>\n <span\n class=\"cqa-flex-1 cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\" style=\"word-break: break-word;\"\n [ngStyle]=\"{ color: action?.reasoning ? '#4C1D95' : '#0B0B0B' }\"\n >\n {{ action.description }}\n </span>\n <span *ngIf=\"action.confidence\" class=\"cqa-font-inter cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] cqa-font-inter cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n {{ formatDuration(action.duration) }}\n </span>\n <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n Planner timeline content would go here\n </div>\n\n <!-- AI Reasoning Tab -->\n <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [id]=\"step?.testStepId\"\n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"config?.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.app || 0) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.tool || 0) }}</span>\n </div>\n </span>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [isExpanded]=\"showFailedStepDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [testStepResultId]=\"testStepResultId\"\n [timingBreakdown]=\"timingBreakdown\"\n [expanded]=\"true\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [isLive]=\"isLive\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", components: [{ type: i1.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["id", "originalLocator", "healedLocator", "confidence", "healMethod", "isLoadingAccept", "isLoadingModifyAccept"], outputs: ["action"] }, { type: i2.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails", "isExpanded"], outputs: ["viewMoreClick"] }, { type: i3.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline", "isMakingCurrentBaseline", "isLive"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
202
202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AIAgentStepComponent, decorators: [{
203
203
  type: Component,
204
- args: [{ selector: 'cqa-ai-agent-step', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-font-inter\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\">\n \n <!-- Status Icon -->\n <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n <!-- Skipped -->\n <div class=\"cqa-flex cqa-items-center\" *ngIf=\"status.toLowerCase() === 'skipped'\">\n <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n <!-- Lightbulb Icon and Step Number -->\n <div>\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ config?.stepNumber }}. <span [innerHTML]=\"config?.title || ''\"></span>\n </span>\n \n <!-- Loop Type Badges -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n AI Agent\n </span>\n <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#075F3F] cqa-bg-[#AEE9D4] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n Auto Heal\n </span>\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n </div>\n\n <!-- Action Count -->\n <span *ngIf=\"config?.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n {{ config?.actionCount }} actions\n </span>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(config?.duration || 0) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n <!-- Prompt Card -->\n <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n <div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n <span *ngIf=\"config?.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n Optimized Run\n </span>\n </div>\n <p class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" style=\"word-break: break-word;\" [innerHTML]=\"config?.prompt\"></p>\n </div>\n <button \n class=\"cqa-p-1.5\" \n (click)=\"copyPrompt()\"\n [matTooltip]=\"'Copy prompt'\"\n matTooltipPosition=\"above\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <!-- <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n <button\n (click)=\"selectTab('action-trace')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Action Trace\n <span *ngIf=\"config && config.actions && config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n {{ config.actions.length }}\n </span>\n </button>\n <button\n (click)=\"selectTab('planner-timeline')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Planner Timeline\n </button>\n <button\n (click)=\"selectTab('ai-reasoning')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n AI Reasoning\n </button>\n </div> -->\n\n <!-- Tab Content -->\n <!-- Action Trace Tab -->\n <div *ngIf=\"selectedTab === 'action-trace'\">\n <!-- <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-my-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n <b>{{ config?.actions?.length || 0 }} actions</b> \n from previous runs\n </div>\n </div> -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-my-1.5\">\n <ng-container *ngFor=\"let action of config?.actions; let i = index; trackBy: trackByActionId\">\n <div\n *ngIf=\"action?.description\"\n class=\"cqa-font-inter cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1\"\n [ngStyle]=\"{\n 'background-color': action?.reasoning ? '#EEF2FF' : '#F7FAFC',\n 'border': action?.reasoning ? '1px solid #C4B5FD' : '1px solid #BEDBFF'\n }\"\n >\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <svg *ngIf=\"!action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <svg *ngIf=\"action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#ddd7f5\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#7C3AED\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n {{ getActionIcon(action.type) }}\n </mat-icon> -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <svg *ngIf=\"!action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <svg *ngIf=\"action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#ddd7f5\"/>\n <path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n </div>\n <span\n class=\"cqa-flex-1 cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\" style=\"word-break: break-word;\"\n [ngStyle]=\"{ color: action?.reasoning ? '#4C1D95' : '#0B0B0B' }\"\n >\n {{ action.description }}\n </span>\n <span *ngIf=\"action.confidence\" class=\"cqa-font-inter cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] cqa-font-inter cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n {{ formatDuration(action.duration) }}\n </span>\n <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n Planner timeline content would go here\n </div>\n\n <!-- AI Reasoning Tab -->\n <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [id]=\"step?.testStepId\"\n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"config?.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.app || 0) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.tool || 0) }}</span>\n </div>\n </span>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [isExpanded]=\"showFailedStepDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [testStepResultId]=\"testStepResultId\"\n [timingBreakdown]=\"timingBreakdown\"\n [expanded]=\"true\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [isLive]=\"isLive\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", styles: [] }]
204
+ args: [{ selector: 'cqa-ai-agent-step', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-font-inter\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\">\n \n <!-- Status Icon -->\n <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n <!-- Skipped -->\n <div class=\"cqa-flex cqa-items-center\" *ngIf=\"status.toLowerCase() === 'skipped'\">\n <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n <!-- Lightbulb Icon and Step Number -->\n <div>\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n {{ config?.stepNumber }}. <span [innerHTML]=\"config?.title || ''\"></span>\n </span>\n \n <!-- Loop Type Badges -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n AI Agent\n </span>\n\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n </div>\n\n <!-- Action Count -->\n <span *ngIf=\"config?.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n {{ config?.actionCount }} actions\n </span>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n </svg>\n Self-healed\n </span>\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(config?.duration || 0) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n <!-- Prompt Card -->\n <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n <div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n <span *ngIf=\"config?.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n Optimized Run\n </span>\n </div>\n <p class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" style=\"word-break: break-word;\" [innerHTML]=\"config?.prompt\"></p>\n </div>\n <button \n class=\"cqa-p-1.5\" \n (click)=\"copyPrompt()\"\n [matTooltip]=\"'Copy prompt'\"\n matTooltipPosition=\"above\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <!-- <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n <button\n (click)=\"selectTab('action-trace')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Action Trace\n <span *ngIf=\"config && config.actions && config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n {{ config.actions.length }}\n </span>\n </button>\n <button\n (click)=\"selectTab('planner-timeline')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Planner Timeline\n </button>\n <button\n (click)=\"selectTab('ai-reasoning')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n AI Reasoning\n </button>\n </div> -->\n\n <!-- Tab Content -->\n <!-- Action Trace Tab -->\n <div *ngIf=\"selectedTab === 'action-trace'\">\n <!-- <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-my-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n <b>{{ config?.actions?.length || 0 }} actions</b> \n from previous runs\n </div>\n </div> -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-my-1.5\">\n <ng-container *ngFor=\"let action of config?.actions; let i = index; trackBy: trackByActionId\">\n <div\n *ngIf=\"action?.description\"\n class=\"cqa-font-inter cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1\"\n [ngStyle]=\"{\n 'background-color': action?.reasoning ? '#EEF2FF' : '#F7FAFC',\n 'border': action?.reasoning ? '1px solid #C4B5FD' : '1px solid #BEDBFF'\n }\"\n >\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <svg *ngIf=\"!action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <svg *ngIf=\"action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#ddd7f5\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#7C3AED\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n {{ getActionIcon(action.type) }}\n </mat-icon> -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <svg *ngIf=\"!action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <svg *ngIf=\"action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#ddd7f5\"/>\n <path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n </div>\n <span\n class=\"cqa-flex-1 cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\" style=\"word-break: break-word;\"\n [ngStyle]=\"{ color: action?.reasoning ? '#4C1D95' : '#0B0B0B' }\"\n >\n {{ action.description }}\n </span>\n <span *ngIf=\"action.confidence\" class=\"cqa-font-inter cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] cqa-font-inter cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n {{ formatDuration(action.duration) }}\n </span>\n <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n Planner timeline content would go here\n </div>\n\n <!-- AI Reasoning Tab -->\n <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [id]=\"step?.testStepId\"\n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"config?.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.app || 0) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.tool || 0) }}</span>\n </div>\n </span>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [isExpanded]=\"showFailedStepDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [testStepResultId]=\"testStepResultId\"\n [timingBreakdown]=\"timingBreakdown\"\n [expanded]=\"true\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [isLive]=\"isLive\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", styles: [] }]
205
205
  }], propDecorators: { id: [{
206
206
  type: Input
207
207
  }], testStepResultId: [{
@@ -261,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
261
261
  }], selfHealAction: [{
262
262
  type: Output
263
263
  }] } });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYWdlbnQtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vYWktYWdlbnQtc3RlcC9haS1hZ2VudC1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9haS1hZ2VudC1zdGVwL2FpLWFnZW50LXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7QUFTM0QsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGlCQUFpQjtJQU4zRDs7UUF5Qlcsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUk3QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBR2pDLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUU3Qix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUNuRSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3pELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ25DLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBSzNELHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUU1QyxnQkFBVyxHQUF5RCxjQUFjLENBQUM7S0FpTnBGO0lBL01VLFFBQVE7UUFDZiwyREFBMkQ7UUFDM0QsTUFBTSxXQUFXLEdBQUksSUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFL0Msd0RBQXdEO1FBQ3hELE1BQU0sVUFB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QUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFJSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJQWdlbnRTdGVwQ29uZmlnLCBBSUFnZW50QWN0aW9uLCBTdGVwU3RhdHVzLCBUaW1pbmdCcmVha2Rvd24sIEZhaWx1cmVEZXRhaWxzLCBTdWJTdGVwLCBTZWxmSGVhbEFuYWx5c2lzRGF0YSwgU2VsZkhlYWxBY3Rpb24sIEV4ZWN1dGlvblN0ZXBDb25maWcsIFNlbGZIZWFsQWN0aW9uRXZlbnQgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudCwgdXBsb2FkQmFzZWxpbmVFdmVudCB9IGZyb20gJy4uL3Zpc3VhbC1jb21wYXJpc29uL3Zpc3VhbC1jb21wYXJpc29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1haS1hZ2VudC1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FpLWFnZW50LXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgQUlBZ2VudFN0ZXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIEluZGl2aWR1YWwgaW5wdXRzXG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0U3RlcFJlc3VsdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzITogU3RlcFN0YXR1cztcbiAgQElucHV0KCkgZHVyYXRpb24hOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRpbWluZ0JyZWFrZG93bj86IFRpbWluZ0JyZWFrZG93bjtcbiAgQElucHV0KCkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBwcm9tcHQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGltaXplZFJ1bj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGlvbkNvdW50PzogbnVtYmVyO1xuICBASW5wdXQoKSBhY3Rpb25zPzogQUlBZ2VudEFjdGlvbltdO1xuICBASW5wdXQoKSBzZWxlY3RlZFRhYklucHV0PzogJ2FjdGlvbi10cmFjZScgfCAncGxhbm5lci10aW1lbGluZScgfCAnYWktcmVhc29uaW5nJztcbiAgQElucHV0KCkgZmFpbHVyZURldGFpbHM/OiBGYWlsdXJlRGV0YWlscztcbiAgQElucHV0KCkgcmVhc29uaW5nPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGNvbmZpZGVuY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0ZXBEZWxldGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZSA9IHt9O1xuICBASW5wdXQoKSBpc01ha2luZ0N1cnJlbnRCYXNlbGluZSA9IHt9O1xuICBASW5wdXQoKSBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIEBJbnB1dCgpIGdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXI/OiAoKSA9PiB7IGlzTG9hZGluZ0FjY2VwdDogYm9vbGVhbjsgaXNMb2FkaW5nTW9kaWZ5QWNjZXB0OiBib29sZWFuIH07XG4gIEBJbnB1dCgpIG9uU3RlcENsaWNrSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnLCBldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICBASW5wdXQoKSBpc0xpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3RlcD86IGFueTtcblxuICBzaG93RmFpbGVkU3RlcERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgbWFrZUN1cnJlbnRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8bWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgdXBsb2FkQmFzZWxpbmUgPSBuZXcgRXZlbnRFbWl0dGVyPHVwbG9hZEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBhbmFseXplID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0Z1bGxMb2dzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VsZkhlYWxBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGZIZWFsQWN0aW9uRXZlbnQ+KCk7XG5cbiAgLy8gQ29uZmlnIHByb3BlcnR5IGZvciBiYXNlIGNsYXNzIC0gYnVpbHQgZnJvbSBpbmRpdmlkdWFsIGlucHV0cyBpbiBuZ09uSW5pdFxuICBvdmVycmlkZSBjb25maWchOiBBSUFnZW50U3RlcENvbmZpZztcbiAgcHJpdmF0ZSBwcmV2aW91c1N0YXR1cz86IFN0ZXBTdGF0dXM7XG4gIHByaXZhdGUgdXNlck1hbnVhbGx5Q2xvc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VsZWN0ZWRUYWI6ICdhY3Rpb24tdHJhY2UnIHwgJ3BsYW5uZXItdGltZWxpbmUnIHwgJ2FpLXJlYXNvbmluZycgPSAnYWN0aW9uLXRyYWNlJztcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBHZXQgYWN0aW9uIGZyb20gc3RlcCBpZiBhdmFpbGFibGUgKHNldCBieSBzdGVwLXJlbmRlcmVyKVxuICAgIGNvbnN0IGFjdGlvblZhbHVlID0gKHRoaXMgYXMgYW55KS5hY3Rpb24gfHwgJyc7XG4gICAgXG4gICAgLy8gVXNlIHRpdGxlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBhY3Rpb25cbiAgICBjb25zdCB0aXRsZVZhbHVlID0gdGhpcy50aXRsZSB8fCBhY3Rpb25WYWx1ZSB8fCAnJztcbiAgICBcbiAgICAvLyBVc2UgcHJvbXB0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBhY3Rpb24gb3IgdGl0bGVcbiAgICBjb25zdCBwcm9tcHRWYWx1ZSA9IHRoaXMucHJvbXB0IHx8IGFjdGlvblZhbHVlIHx8IHRpdGxlVmFsdWUgfHwgJyc7XG4gICAgXG4gICAgLy8gQnVpbGQgY29uZmlnIGZyb20gaW5kaXZpZHVhbCBpbnB1dHNcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdGVzdFN0ZXBJZDogdGhpcy5zdGVwPy50ZXN0U3RlcElkIHx8IHVuZGVmaW5lZCxcbiAgICAgIHRlc3RTdGVwUmVzdWx0SWQ6IHRoaXMudGVzdFN0ZXBSZXN1bHRJZCxcbiAgICAgIHN0ZXBOdW1iZXI6IHRoaXMuc3RlcE51bWJlcixcbiAgICAgIHRpdGxlOiB0aXRsZVZhbHVlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgdHlwZTogJ2FpLWFnZW50JyxcbiAgICAgIHByb21wdDogcHJvbXB0VmFsdWUucmVwbGFjZSgnQUkgQWdlbnQnLCAnJykudHJpbSgpLFxuICAgICAgb3B0aW1pemVkUnVuOiB0aGlzLm9wdGltaXplZFJ1bixcbiAgICAgIGFjdGlvbkNvdW50OiB0aGlzLmFjdGlvbkNvdW50LFxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zIHx8IFtdLFxuICAgICAgc2VsZWN0ZWRUYWI6IHRoaXMuc2VsZWN0ZWRUYWJJbnB1dCxcbiAgICAgIHN0ZXBEZWxldGVkOiB0aGlzLnN0ZXBEZWxldGVkLFxuICAgICAgdGltaW5nQnJlYWtkb3duOiB0aGlzLnRpbWluZ0JyZWFrZG93bixcbiAgICAgIGV4cGFuZGVkOiB0aGlzLmV4cGFuZGVkLFxuICAgICAgc2VsZkhlYWxBbmFseXNpczogdGhpcy5zZWxmSGVhbEFuYWx5c2lzLFxuICAgIH0gYXMgQUlBZ2VudFN0ZXBDb25maWc7XG5cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0aGlzLmNvbmZpZy5zZWxlY3RlZFRhYiB8fCAnYWN0aW9uLXRyYWNlJztcbiAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aXRsZSBhbmQgcHJvbXB0IGluIGNvbmZpZyB3aGVuIHRoZXkgY2hhbmdlXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICBpZiAoY2hhbmdlc1sndGl0bGUnXSkge1xuICAgICAgICB0aGlzLmNvbmZpZy50aXRsZSA9IHRoaXMudGl0bGUgfHwgJyc7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlc1sncHJvbXB0J10pIHtcbiAgICAgICAgLy8gUmVtb3ZlICdBSSBBZ2VudCcgcHJlZml4IGlmIHByZXNlbnQgYW5kIHRyaW1cbiAgICAgICAgY29uc3QgcHJvbXB0VmFsdWUgPSB0aGlzLnByb21wdCB8fCAnJztcbiAgICAgICAgdGhpcy5jb25maWcucHJvbXB0ID0gcHJvbXB0VmFsdWUucmVwbGFjZSgnQUkgQWdlbnQnLCAnJykudHJpbSgpO1xuICAgICAgfVxuICAgICAgLy8gSWYgcHJvbXB0IGlzIG5vdCBzZXQgYnV0IHRpdGxlIGlzLCB1c2UgdGl0bGUgYXMgcHJvbXB0XG4gICAgICBpZiAoIXRoaXMucHJvbXB0ICYmIHRoaXMudGl0bGUgJiYgdGhpcy5jb25maWcucHJvbXB0ICE9PSB0aGlzLnRpdGxlLnJlcGxhY2UoJ0FJIEFnZW50JywgJycpLnRyaW0oKSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5wcm9tcHQgPSB0aGlzLnRpdGxlLnJlcGxhY2UoJ0FJIEFnZW50JywgJycpLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRpdGxlIGlzIG5vdCBzZXQgYnV0IHByb21wdCBpcywgdXNlIHByb21wdCBhcyB0aXRsZVxuICAgICAgaWYgKCF0aGlzLnRpdGxlICYmIHRoaXMucHJvbXB0ICYmIHRoaXMuY29uZmlnLnRpdGxlICE9PSB0aGlzLnByb21wdCkge1xuICAgICAgICB0aGlzLmNvbmZpZy50aXRsZSA9IHRoaXMucHJvbXB0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBzdWJTdGVwcyBhcnJheSB3aGVuIG5ldyBvbmVzIGFyZSBhZGRlZFxuICAgIGlmIChjaGFuZ2VzWydhY3Rpb25zJ10pIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3ViU3RlcHNDb3VudCA9IGNoYW5nZXNbJ2FjdGlvbnMnXS5wcmV2aW91c1ZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdWJTdGVwc0NvdW50ID0gKHRoaXMuYWN0aW9ucyB8fCBbXSkubGVuZ3RoO1xuICAgICAgXG4gICAgICAvLyBTdWItc3RlcHMgYXJlIGFwcGVuZGVkIGV4dGVybmFsbHksIHNvIHdlIGp1c3QgdXBkYXRlIHRoZSBjb25maWdcbiAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBBdXRvLWV4cGFuZCBpZiBzdGVwIGlzIHJ1bm5pbmcgYW5kIG5ldyBzdWJTdGVwcyBhcmUgYWRkZWQgKGxvZ3MgY29taW5nIGluKVxuICAgICAgaWYgKCFjaGFuZ2VzWydhY3Rpb25zJ10uZmlyc3RDaGFuZ2UgJiYgXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPT09ICdydW5uaW5nJyAmJiBcbiAgICAgICAgICBjdXJyZW50U3ViU3RlcHNDb3VudCA+IHByZXZpb3VzU3ViU3RlcHNDb3VudCAmJlxuICAgICAgICAgIHRoaXMuaGFzU3ViU3RlcHMgJiYgXG4gICAgICAgICAgIXRoaXMuaXNFeHBhbmRlZCAmJiBcbiAgICAgICAgICAhdGhpcy51c2VyTWFudWFsbHlDbG9zZWQpIHtcbiAgICAgICAgdGhpcy5hdXRvRXhwYW5kKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIGNoYW5nZXNbJ2R1cmF0aW9uJ10pIHtcbiAgICAgIHRoaXMuY29uZmlnLmR1cmF0aW9uID0gY2hhbmdlc1snZHVyYXRpb24nXT8uY3VycmVudFZhbHVlIHx8IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnICYmIGNoYW5nZXNbJ3N0ZXBEZWxldGVkJ10pIHtcbiAgICAgIHRoaXMuY29uZmlnLnN0ZXBEZWxldGVkID0gY2hhbmdlc1snc3RlcERlbGV0ZWQnXT8uY3VycmVudFZhbHVlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzdGF0dXMgY2hhbmdlcyAtIGF1dG8tZXhwYW5kIHdoZW4gc3RlcCBzdGFydHMgZXhlY3V0aW5nXG4gICAgaWYgKGNoYW5nZXNbJ3N0YXR1cyddICYmICFjaGFuZ2VzWydzdGF0dXMnXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3QgbmV3U3RhdHVzID0gY2hhbmdlc1snc3RhdHVzJ10/LmN1cnJlbnRWYWx1ZSB8fCAnJztcbiAgICAgIGNvbnN0IG9sZFN0YXR1cyA9IGNoYW5nZXNbJ3N0YXR1cyddPy5wcmV2aW91c1ZhbHVlIHx8ICcnO1xuICAgICAgXG4gICAgICAvLyBBdXRvLWV4cGFuZCB3aGVuIHN0YXR1cyBjaGFuZ2VzIHRvICdydW5uaW5nJyBhbmQgaGFzIHN1YlN0ZXBzIChvciB3aWxsIGhhdmUgc29vbilcbiAgICAgIGlmIChuZXdTdGF0dXMgPT09ICdydW5uaW5nJyAmJiBvbGRTdGF0dXMgIT09ICdydW5uaW5nJyAmJiAhdGhpcy51c2VyTWFudWFsbHlDbG9zZWQpIHtcbiAgICAgICAgLy8gRXhwYW5kIGltbWVkaWF0ZWx5IGlmIGFscmVhZHkgaGFzIHN1YlN0ZXBzLCBvciB3YWl0IGZvciB0aGVtXG4gICAgICAgIGlmICh0aGlzLmhhc1N1YlN0ZXBzKSB7XG4gICAgICAgICAgdGhpcy5hdXRvRXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5wcmV2aW91c1N0YXR1cyA9IG5ld1N0YXR1cztcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQgPz8gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdXRvRXhwYW5kKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0V4cGFuZGVkICYmIHRoaXMuaGFzU3ViU3RlcHMpIHtcbiAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRydWU7XG4gICAgICB0aGlzLnVzZXJNYW51YWxseUNsb3NlZCA9IGZhbHNlO1xuICAgICAgdGhpcy50b2dnbGVFeHBhbmRlZC5lbWl0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBoYXNTdWJTdGVwcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hY3Rpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBzZWxlY3RUYWIodGFiOiAnYWN0aW9uLXRyYWNlJyB8ICdwbGFubmVyLXRpbWVsaW5lJyB8ICdhaS1yZWFzb25pbmcnKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRhYjtcbiAgfVxuXG4gIGdldEFjdGlvbkljb24oYWN0aW9uVHlwZTogJ2V4dHJhY3QnIHwgJ3ZhbGlkYXRlJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFjdGlvblR5cGUgPT09ICdleHRyYWN0JyA/ICdib2x0JyA6ICd3YXJuaW5nJztcbiAgfVxuXG4gIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdDb3BpZWQgdG8gY2xpcGJvYXJkOicsIHRleHQpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0byBjbGlwYm9hcmQ6JywgZXJyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvcHlQcm9tcHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5wcm9tcHQpIHtcbiAgICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gdGhpcy5jb25maWcucHJvbXB0O1xuICAgICAgY29uc3QgcGxhaW5UZXh0ID0gdGVtcERpdi50ZXh0Q29udGVudCB8fCB0ZW1wRGl2LmlubmVyVGV4dCB8fCAnJztcbiAgICAgIHRoaXMuY29weVRvQ2xpcGJvYXJkKHBsYWluVGV4dCk7XG4gICAgfVxuICB9XG5cbiAgb25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljayhleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzID0gZXhwYW5kZWQ7XG4gIH1cblxuICBnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKTogU3ViU3RlcFtdIHtcbiAgICAvLyBDb252ZXJ0IEFJQWdlbnRBY3Rpb25bXSB0byBTdWJTdGVwW10gZm9yIHRoZSBmYWlsZWQgc3RlcCBjb21wb25lbnRcbiAgICByZXR1cm4gKHRoaXMuYWN0aW9ucyB8fCBbXSkubWFwKGFjdGlvbiA9PiAoe1xuICAgICAgaWQ6IGFjdGlvbi5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBhY3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICBzdGF0dXM6IGFjdGlvbi5zdGF0dXMsXG4gICAgICBkdXJhdGlvbjogYWN0aW9uLmR1cmF0aW9uLFxuICAgIH0pKTtcbiAgfVxuXG4gIG9uTWFrZUN1cnJlbnRCYXNlbGluZShldmVudDogbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tYWtlQ3VycmVudEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25VcGxvYWRCYXNlbGluZShldmVudDogdXBsb2FkQmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkQmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkFuYWx5emUoKTogdm9pZCB7XG4gICAgdGhpcy5hbmFseXplLmVtaXQoKTtcbiAgfVxuXG4gIG9uVmlld0Z1bGxMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMudmlld0Z1bGxMb2dzLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2VsZkhlYWxBY3Rpb24oZXZlbnQ6IFNlbGZIZWFsQWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGZIZWFsQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgdHJhY2tCeUFjdGlvbklkKGluZGV4OiBudW1iZXIsIGFjdGlvbjogQUlBZ2VudEFjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFjdGlvbj8uaWQgfHwgaW5kZXgudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBzaG93Vmlld01vcmVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZCAmJiBCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHMpICYmXG4gICAgICAoXG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmV4cGVjdGVkIHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LmFjdHVhbCkpIHx8XG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5jdXJyZW50IHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5iYXNlbGluZSB8fCB0aGlzLmZhaWx1cmVEZXRhaWxzPy5zY3JlZW5zaG90cz8uZGlmZmVyZW5jZSlcbiAgICAgICAgICB8fCBCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmxvZ3M/Lmxlbmd0aCkpIHx8IFxuICAgICAgICAoQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5haUZpeEFwcGxpZWQgJiYgKHRoaXMuZmFpbHVyZURldGFpbHM/LmFpRml4TWVzc2FnZSB8fCB0aGlzLmNvbmZpZGVuY2UgfHwgdGhpcy5yZWFzb25pbmc/Lmxlbmd0aCkpKVxuICAgICAgKVxuICB9XG5cbiAgdG9nZ2xlSGVhZGVyKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgc3VwZXIudG9nZ2xlKCk7XG4gICAgaWYoIXRoaXMuaXNFeHBhbmRlZCl7XG4gICAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblN0ZXBDbGlja0hhbmRsZXIpIHtcbiAgICAgIGNvbnN0IHN0ZXBUb1Bhc3MgPSB0aGlzLnN0ZXAgfHwgdGhpcy5jb25maWc7XG4gICAgICBpZiAoc3RlcFRvUGFzcykge1xuICAgICAgICB0aGlzLm9uU3RlcENsaWNrSGFuZGxlcihzdGVwVG9QYXNzLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtaW50ZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcC0yIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZUhlYWRlcigkZXZlbnQpXCI+XG4gICAgXG4gICAgPCEtLSBTdGF0dXMgSWNvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJ1wiID48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsdXJlJyB8fCBzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWxlZCdcIj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTcuNSA0LjVMNC41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNC41TDcuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCI+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3J1bm5pbmcnXCI+PHN2ZyBjbGFzcz1cImNxYS1hbmltYXRlLXNwaW4gY3FhLXRleHQtWyMzQjgyRjZdXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgY3g9XCI2XCIgY3k9XCI2XCIgcj1cIjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIG9wYWNpdHk9XCIwLjI1XCIvPjxwYXRoIGQ9XCJNNiAxQTUgNSAwIDAgMSAxMSA2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgIDwhLS0gU2tpcHBlZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiICpuZ0lmPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdza2lwcGVkJ1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGNxYS10ZXh0LVsjOUNBM0FGXSBjcWEtdGV4dC1bMTJweF1cIj5cbiAgICAgICAgc2tpcF9uZXh0XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBMaWdodGJ1bGIgSWNvbiBhbmQgU3RlcCBOdW1iZXIgLS0+XG4gICAgPGRpdj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHJ4PVwiNFwiIGZpbGw9XCIjRkVGM0M2XCIvPjxwYXRoIGQ9XCJNOC44MzE1IDEwLjVIMTEuMTY4TTEwIDMuNVY0TTEzLjE4MiA0LjgxOEwxMi44Mjg1IDUuMTcxNU0xNC41IDhIMTRNNiA4SDUuNU03LjE3MTUgNS4xNzE1TDYuODE4IDQuODE4TTguMjMyIDkuNzY4QzcuODgyNDMgOS40MTgzNCA3LjY0NDQgOC45NzI4OCA3LjU0Nzk5IDguNDg3OTVDNy40NTE1OCA4LjAwMzAxIDcuNTAxMTMgNy41MDAzOCA3LjY5MDM2IDcuMDQzNjFDNy44Nzk2IDYuNTg2ODMgOC4yMDAwMyA2LjE5NjQyIDguNjExMTQgNS45MjE3NUM5LjAyMjI1IDUuNjQ3MDcgOS41MDU1NyA1LjUwMDQ3IDEwIDUuNTAwNDdDMTAuNDk0NCA1LjUwMDQ3IDEwLjk3NzcgNS42NDcwNyAxMS4zODg5IDUuOTIxNzVDMTEuOCA2LjE5NjQyIDEyLjEyMDQgNi41ODY4MyAxMi4zMDk2IDcuMDQzNjFDMTIuNDk4OSA3LjUwMDM4IDEyLjU0ODQgOC4wMDMwMSAxMi40NTIgOC40ODc5NUMxMi4zNTU2IDguOTcyODggMTIuMTE3NiA5LjQxODM0IDExLjc2OCA5Ljc2OEwxMS40OTQgMTAuMDQxNUMxMS4zMzc0IDEwLjE5ODIgMTEuMjEzMSAxMC4zODQyIDExLjEyODMgMTAuNTg4OUMxMS4wNDM2IDEwLjc5MzYgMTEgMTEuMDEyOSAxMSAxMS4yMzQ1VjExLjVDMTEgMTEuNzY1MiAxMC44OTQ2IDEyLjAxOTYgMTAuNzA3MSAxMi4yMDcxQzEwLjUxOTYgMTIuMzk0NiAxMC4yNjUyIDEyLjUgMTAgMTIuNUM5LjczNDc4IDEyLjUgOS40ODA0MyAxMi4zOTQ2IDkuMjkyODkgMTIuMjA3MUM5LjEwNTM2IDEyLjAxOTYgOSAxMS43NjUyIDkgMTEuNVYxMS4yMzQ1QzkgMTAuNzg3IDguODIyIDEwLjM1NzUgOC41MDYgMTAuMDQxNUw4LjIzMiA5Ljc2OFpcIiBzdHJva2U9XCIjRTE3MTAwXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGVwIE51bWJlciBhbmQgVGl0bGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLWZvbnQtaW50ZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMzMzQxNTVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMThweF1cIiBzdHlsZT1cIndvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCI+XG4gICAgICAgIHt7IGNvbmZpZz8uc3RlcE51bWJlciB9fS4gPHNwYW4gW2lubmVySFRNTF09XCJjb25maWc/LnRpdGxlIHx8ICcnXCI+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgXG4gICAgICA8IS0tIExvb3AgVHlwZSBCYWRnZXMgLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNFMTcxMDBdIGNxYS1iZy1bI0ZFRjNDNl0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtbWluLXctbWF4XCI+XG4gICAgICAgIEFJIEFnZW50XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cInNlbGZIZWFsQW5hbHlzaXNcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMwNzVGM0ZdIGNxYS1iZy1bI0FFRTlENF0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtbWluLXctbWF4XCI+XG4gICAgICAgIEF1dG8gSGVhbFxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuc3RlcERlbGV0ZWRcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjQjQyMzE4XSBjcWEtYmctWyNGRUYzRjJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZFRTRFMl1cIj5cbiAgICAgICAgRGVsZXRlZFxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBY3Rpb24gQ291bnQgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJjb25maWc/LmFjdGlvbkNvdW50XCIgY2xhc3M9XCJjcWEtcHgtMS41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjRTE3MTAwXSBjcWEtYmctWyNGRUYzQzZdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLW1pbi13LW1heFwiPlxuICAgICAge3sgY29uZmlnPy5hY3Rpb25Db3VudCB9fSBhY3Rpb25zXG4gICAgPC9zcGFuPlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1mb250LWludGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKGNvbmZpZz8uZHVyYXRpb24gfHwgMCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzdmcgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTMuNSA1TDcgOC41TDEwLjUgNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWJnLVsjRkZGRUY5XSBjcWEtbXQtMS41IGNxYS1tbC05IGNxYS1tci02IGNxYS1wLTRcIiBzdHlsZT1cImJvcmRlci10b3A6IDFweCBzb2xpZCAjRTRFNEU0O1wiPlxuICAgIDwhLS0gUHJvbXB0IENhcmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWl0ZW1zLXN0YXJ0IGNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1sZyBjcWEtcC0zXCIgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjRkVFNjg1XCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTJcIj5cbiAgICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNS4zMzMzMyA2LjY2Njc1SDUuMzRNOCA2LjY2Njc1SDguMDA2NjdNMTAuNjY2NyA2LjY2Njc1SDEwLjY3MzNNNiAxMC42NjY3SDMuMzMzMzNDMi45Nzk3MSAxMC42NjY3IDIuNjQwNTcgMTAuNTI2MyAyLjM5MDUyIDEwLjI3NjJDMi4xNDA0OCAxMC4wMjYyIDIgOS42ODcwNCAyIDkuMzMzNDFWNC4wMDAwOEMyIDMuNjQ2NDYgMi4xNDA0OCAzLjMwNzMyIDIuMzkwNTIgMy4wNTcyN0MyLjY0MDU3IDIuODA3MjIgMi45Nzk3MSAyLjY2Njc1IDMuMzMzMzMgMi42NjY3NUgxMi42NjY3QzEzLjAyMDMgMi42NjY3NSAxMy4zNTk0IDIuODA3MjIgMTMuNjA5NSAzLjA1NzI3QzEzLjg1OTUgMy4zMDczMiAxNCAzLjY0NjQ2IDE0IDQuMDAwMDhWOS4zMzM0MUMxNCA5LjY4NzA0IDEzLjg1OTUgMTAuMDI2MiAxMy42MDk1IDEwLjI3NjJDMTMuMzU5NCAxMC41MjYzIDEzLjAyMDMgMTAuNjY2NyAxMi42NjY3IDEwLjY2NjdIOS4zMzMzM0w2IDE0LjAwMDFWMTAuNjY2N1pcIiBzdHJva2U9XCIjRTE3MTAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyNCQjREMDBdIFwiPlBST01QVDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZz8ub3B0aW1pemVkUnVuXCIgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtZnVsbCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1wcmltYXJ5IGNxYS1iZy1bI0VCRUNGRF1cIj5cbiAgICAgICAgICAgIE9wdGltaXplZCBSdW5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMEIwQjBCXVwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIiBbaW5uZXJIVE1MXT1cImNvbmZpZz8ucHJvbXB0XCI+PC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIFxuICAgICAgICBjbGFzcz1cImNxYS1wLTEuNVwiIFxuICAgICAgICAoY2xpY2spPVwiY29weVByb21wdCgpXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0NvcHkgcHJvbXB0J1wiXG4gICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNS4zMzMzMiAxMC42NjY3SDMuOTk5OTlDMy42NDYzNyAxMC42NjY3IDMuMzA3MjMgMTAuNTI2MyAzLjA1NzE4IDEwLjI3NjJDMi44MDcxMyAxMC4wMjYyIDIuNjY2NjYgOS42ODcwNCAyLjY2NjY2IDkuMzMzNDFWNC4wMDAwOEMyLjY2NjY2IDMuNjQ2NDYgMi44MDcxMyAzLjMwNzMyIDMuMDU3MTggMy4wNTcyN0MzLjMwNzIzIDIuODA3MjIgMy42NDYzNyAyLjY2Njc1IDMuOTk5OTkgMi42NjY3NUg5LjMzMzMyQzkuNjg2OTUgMi42NjY3NSAxMC4wMjYxIDIuODA3MjIgMTAuMjc2MSAzLjA1NzI3QzEwLjUyNjIgMy4zMDczMiAxMC42NjY3IDMuNjQ2NDYgMTAuNjY2NyA0LjAwMDA4VjUuMzMzNDFNNi42NjY2NiAxMy4zMzM0SDEyQzEyLjM1MzYgMTMuMzMzNCAxMi42OTI4IDEzLjE5MjkgMTIuOTQyOCAxMi45NDI5QzEzLjE5MjggMTIuNjkyOCAxMy4zMzMzIDEyLjM1MzcgMTMuMzMzMyAxMi4wMDAxVjYuNjY2NzVDMTMuMzMzMyA2LjMxMzEzIDEzLjE5MjggNS45NzM5OSAxMi45NDI4IDUuNzIzOTRDMTIuNjkyOCA1LjQ3Mzg5IDEyLjM1MzYgNS4zMzM0MSAxMiA1LjMzMzQxSDYuNjY2NjZDNi4zMTMwMyA1LjMzMzQxIDUuOTczOSA1LjQ3Mzg5IDUuNzIzODUgNS43MjM5NEM1LjQ3MzggNS45NzM5OSA1LjMzMzMyIDYuMzEzMTMgNS4zMzMzMiA2LjY2Njc1VjEyLjAwMDFDNS4zMzMzMiAxMi4zNTM3IDUuNDczOCAxMi42OTI4IDUuNzIzODUgMTIuOTQyOUM1Ljk3MzkgMTMuMTkyOSA2LjMxMzAzIDEzLjMzMzQgNi42NjY2NiAxMy4zMzM0WlwiIHN0cm9rZT1cIiM2MzYzNjNcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRhYiBOYXZpZ2F0aW9uIC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWZsZXgtd3JhcCBjcWEtbXktMS41XCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U0RTRFNFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKCdhY3Rpb24tdHJhY2UnKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnIWNxYS10ZXh0LVsjQkI0RDAwXSc6IHNlbGVjdGVkVGFiID09PSAnYWN0aW9uLXRyYWNlJ31cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiBzZWxlY3RlZFRhYiA9PT0gJ2FjdGlvbi10cmFjZScgPyAnMnB4IHNvbGlkICNGRTlBMDAnIDogJzJweCBzb2xpZCB0cmFuc3BhcmVudCd9XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzYzNjM2M10gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIEFjdGlvbiBUcmFjZVxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZyAmJiBjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtYmctWyNGNUY1RjVdIGNxYS10ZXh0LWN1cnJlbnQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxMy4zcHhdIGNxYS1mb250LW1lZGl1bSBjcWEtcm91bmRlZC1mdWxsIGNxYS13LVsxNnB4XSBjcWEtaC1bMTZweF0gY3FhLW1pbi13LVsxNnB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIHt7IGNvbmZpZy5hY3Rpb25zLmxlbmd0aCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRhYigncGxhbm5lci10aW1lbGluZScpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieychY3FhLXRleHQtWyNCQjREMDBdJzogc2VsZWN0ZWRUYWIgPT09ICdwbGFubmVyLXRpbWVsaW5lJ31cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiBzZWxlY3RlZFRhYiA9PT0gJ3BsYW5uZXItdGltZWxpbmUnID8gJzJweCBzb2xpZCAjRkU5QTAwJyA6ICcycHggc29saWQgdHJhbnNwYXJlbnQnfVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTIgY3FhLXB4LTMgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctNCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM2MzYzNjNdIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICBQbGFubmVyIFRpbWVsaW5lXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRhYignYWktcmVhc29uaW5nJylcIlxuICAgICAgICBbbmdDbGFzc109XCJ7JyFjcWEtdGV4dC1bI0JCNEQwMF0nOiBzZWxlY3RlZFRhYiA9PT0gJ2FpLXJlYXNvbmluZyd9XCJcbiAgICAgICAgW25nU3R5bGVdPVwieydib3JkZXItYm90dG9tJzogc2VsZWN0ZWRUYWIgPT09ICdhaS1yZWFzb25pbmcnID8gJzJweCBzb2xpZCAjRkU5QTAwJyA6ICcycHggc29saWQgdHJhbnNwYXJlbnQnfVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTIgY3FhLXB4LTMgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctNCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM2MzYzNjNdIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICBBSSBSZWFzb25pbmdcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gVGFiIENvbnRlbnQgLS0+XG4gICAgPCEtLSBBY3Rpb24gVHJhY2UgVGFiIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ2FjdGlvbi10cmFjZSdcIj5cbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1yb3VuZGVkLW1kIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1teS0xLjUgY3FhLXAtMiBjcWEtYmctWyNFRkY2RkZdXCIgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjQkVEQkZGXCI+XG4gICAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk04LjY2NjY3IDQuNjY2NzVIMTRNMTQgNC42NjY3NVYxMC4wMDAxTTE0IDQuNjY2NzVMOC42NjY2NyAxMC4wMDAxTDYgNy4zMzM0MUwyIDExLjMzMzRcIiBzdHJva2U9XCIjMTU1REZDXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE0NDdFNl0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPlxuICAgICAgICAgIDxiPnt7IGNvbmZpZz8uYWN0aW9ucz8ubGVuZ3RoIHx8IDAgfX0gYWN0aW9uczwvYj4gXG4gICAgICAgICAgZnJvbSBwcmV2aW91cyBydW5zXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW15LTEuNVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnPy5hY3Rpb25zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5QWN0aW9uSWRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtZm9udC1pbnRlciBjcWEtcm91bmRlZC1tZCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHgtMiBjcWEtcHktMVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogYWN0aW9uPy5yZWFzb25pbmcgPyAnI0VFRjJGRicgOiAnI0Y3RkFGQycsXG4gICAgICAgICAgICAgICdib3JkZXInOiBhY3Rpb24/LnJlYXNvbmluZyA/ICcxcHggc29saWQgI0M0QjVGRCcgOiAnMXB4IHNvbGlkICNCRURCRkYnXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFhY3Rpb24/LnJlYXNvbmluZ1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiByeD1cIjhcIiBmaWxsPVwiI0RCRUFGRVwiLz48cGF0aCBkPVwiTTUuMDgzMzcgOC40MTY3NUw2Ljc1MDA0IDEwLjA4MzRMMTAuOTE2NyA1LjkxNjc1XCIgc3Ryb2tlPVwiIzE1NURGQ1wiIHN0cm9rZS13aWR0aD1cIjAuODMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiYWN0aW9uPy5yZWFzb25pbmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgcng9XCI4XCIgZmlsbD1cIiNkZGQ3ZjVcIi8+PHBhdGggZD1cIk01LjA4MzM3IDguNDE2NzVMNi43NTAwNCAxMC4wODM0TDEwLjkxNjcgNS45MTY3NVwiIHN0cm9rZT1cIiM3QzNBRURcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCIhY3FhLXctNCAhY3FhLWgtNCAhY3FhLXRleHQtWzE2cHhdIGNxYS10ZXh0LXllbGxvdy01MDBcIj5cbiAgICAgICAgICAgICAge3sgZ2V0QWN0aW9uSWNvbihhY3Rpb24udHlwZSkgfX1cbiAgICAgICAgICAgIDwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhYWN0aW9uPy5yZWFzb25pbmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgcng9XCI0XCIgZmlsbD1cIiNGRUYzQzZcIi8+PHBhdGggZD1cIk0xMC41IDlWNS41TDYgMTFIOS41VjE0LjVMMTQgOUgxMC41WlwiIHN0cm9rZT1cIiNFMTcxMDBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFjdGlvbj8ucmVhc29uaW5nXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgcng9XCI0XCIgZmlsbD1cIiNkZGQ3ZjVcIi8+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguODMxNSAxMC41SDExLjE2OE0xMCAzLjVWNE0xMy4xODIgNC44MThMMTIuODI4NSA1LjE3MTVNMTQuNSA4SDE0TTYgOEg1LjVNNy4xNzE1IDUuMTcxNUw2LjgxOCA0LjgxOE04LjIzMiA5Ljc2OEM3Ljg4MjQzIDkuNDE4MzQgNy42NDQ0IDguOTcyODggNy41NDc5OSA4LjQ4Nzk1QzcuNDUxNTggOC4wMDMwMSA3LjUwMTEzIDcuNTAwMzggNy42OTAzNiA3LjA0MzYxQzcuODc5NiA2LjU4NjgzIDguMjAwMDMgNi4xOTY0MiA4LjYxMTE0IDUuOTIxNzVDOS4wMjIyNSA1LjY0NzA3IDkuNTA1NTcgNS41MDA0NyAxMCA1LjUwMDQ3QzEwLjQ5NDQgNS41MDA0NyAxMC45Nzc3IDUuNjQ3MDcgMTEuMzg4OSA1LjkyMTc1QzExLjggNi4xOTY0MiAxMi4xMjA0IDYuNTg2ODMgMTIuMzA5NiA3LjA0MzYxQzEyLjQ5ODkgNy41MDAzOCAxMi41NDg0IDguMDAzMDEgMTIuNDUyIDguNDg3OTVDMTIuMzU1NiA4Ljk3Mjg4IDEyLjExNzYgOS40MTgzNCAxMS43NjggOS43NjhMMTEuNDk0IDEwLjA0MTVDMTEuMzM3NCAxMC4xOTgyIDExLjIxMzEgMTAuMzg0MiAxMS4xMjgzIDEwLjU4ODlDMTEuMDQzNiAxMC43OTM2IDExIDExLjAxMjkgMTEgMTEuMjM0NVYxMS41QzExIDExLjc2NTIgMTAuODk0NiAxMi4wMTk2IDEwLjcwNzEgMTIuMjA3MUMxMC41MTk2IDEyLjM5NDYgMTAuMjY1MiAxMi41IDEwIDEyLjVDOS43MzQ3OCAxMi41IDkuNDgwNDMgMTIuMzk0NiA5LjI5Mjg5IDEyLjIwNzFDOS4xMDUzNiAxMi4wMTk2IDkgMTEuNzY1MiA5IDExLjVWMTEuMjM0NUM5IDEwLjc4NyA4LjgyMiAxMC4zNTc1IDguNTA2IDEwLjA0MTVMOC4yMzIgOS43NjhaXCIgc3Ryb2tlPVwiIzdDM0FFRFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICBcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1zZW1pYm9sZFwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBhY3Rpb24/LnJlYXNvbmluZyA/ICcjNEMxRDk1JyA6ICcjMEIwQjBCJyB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFjdGlvbi5jb25maWRlbmNlXCIgY2xhc3M9XCJjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzAwQTYzRV1cIj5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmNvbmZpZGVuY2UgfX0lXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtZm9udC1pbnRlciBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNjM2MzYzXVwiPlxuICAgICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihhY3Rpb24uZHVyYXRpb24pIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIDxkaXY+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk00LjUgMi41TDggNkw0LjUgOS41XCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBsYW5uZXIgVGltZWxpbmUgVGFiIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ3BsYW5uZXItdGltZWxpbmUnXCIgY2xhc3M9XCJjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgUGxhbm5lciB0aW1lbGluZSBjb250ZW50IHdvdWxkIGdvIGhlcmVcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQUkgUmVhc29uaW5nIFRhYiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdhaS1yZWFzb25pbmcnXCIgY2xhc3M9XCJjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgQUkgcmVhc29uaW5nIGNvbnRlbnQgd291bGQgZ28gaGVyZVxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gICAgICA8IS0tIFNlbGYgSGVhbCBBbmFseXNpcyAtLT5cbiAgICA8Y3FhLXNlbGYtaGVhbC1hbmFseXNpcyBcbiAgICAgICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIFxuICAgICAgW2lkXT1cInN0ZXA/LnRlc3RTdGVwSWRcIlxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICBbaXNMb2FkaW5nQWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nQWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICBbaXNMb2FkaW5nTW9kaWZ5QWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nTW9kaWZ5QWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICA8IS0tIFRpbWluZyBCcmVha2Rvd24gLS0+XG4gIDxkaXYgKm5nSWY9XCJjb25maWc/LnRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC0xLjUgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1kaWFsb2ctbXV0ZWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTNcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIEFwcCA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWdyYXktNzAwXCI+e3sgZm9ybWF0RHVyYXRpb24oY29uZmlnPy50aW1pbmdCcmVha2Rvd24/LmFwcCB8fCAwKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxIDExXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0tMy44MTQ3ZS0wNiAxMC4zMlYtNy4xNTI1NmUtMDdIMC45NTk5OTZWMTAuMzJILTMuODE0N2UtMDZaXCIgZmlsbD1cIiNFNUU3RUJcIi8+PC9zdmc+PC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWc/LnRpbWluZ0JyZWFrZG93bj8udG9vbCB8fCAwKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvblxuICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgW3N1YlN0ZXBzXT1cImdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpXCJcbiAgICAgIFtmYWlsdXJlRGV0YWlsc109XCJmYWlsdXJlRGV0YWlsc1wiXG4gICAgICBbaXNFeHBhbmRlZF09XCJzaG93RmFpbGVkU3RlcERldGFpbHNcIlxuICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgPC9jcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93Vmlld01vcmVCdXR0b24gJiYgc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzICYmIGZhaWx1cmVEZXRhaWxzXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdXBkYXRlZC1mYWlsZWQtc3RlcFxuICAgICAgW3Rlc3RTdGVwUmVzdWx0SWRdPVwidGVzdFN0ZXBSZXN1bHRJZFwiXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbZXhwYW5kZWRdPVwidHJ1ZVwiXG4gICAgICBbc3ViU3RlcHNdPVwiZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKClcIlxuICAgICAgW2ZhaWx1cmVEZXRhaWxzXT1cImZhaWx1cmVEZXRhaWxzXCJcbiAgICAgIFtyZWFzb25pbmddPVwicmVhc29uaW5nXCJcbiAgICAgIFtjb25maWRlbmNlXT1cImNvbmZpZGVuY2VcIlxuICAgICAgW2lzVXBsb2FkaW5nQmFzZWxpbmVdPVwiaXNVcGxvYWRpbmdCYXNlbGluZVwiXG4gICAgICBbaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVdPVwiaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVcIlxuICAgICAgW2lzTGl2ZV09XCJpc0xpdmVcIlxuICAgICAgKG1ha2VDdXJyZW50QmFzZWxpbmUpPVwib25NYWtlQ3VycmVudEJhc2VsaW5lKCRldmVudClcIlxuICAgICAgKHVwbG9hZEJhc2VsaW5lKT1cIm9uVXBsb2FkQmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAoYW5hbHl6ZSk9XCJvbkFuYWx5emUoKVwiXG4gICAgICAodmlld0Z1bGxMb2dzKT1cIm9uVmlld0Z1bGxMb2dzKClcIj5cbiAgICA8L2NxYS11cGRhdGVkLWZhaWxlZC1zdGVwPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYWdlbnQtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vYWktYWdlbnQtc3RlcC9haS1hZ2VudC1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9haS1hZ2VudC1zdGVwL2FpLWFnZW50LXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7QUFTM0QsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGlCQUFpQjtJQU4zRDs7UUF5Qlcsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUk3QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBR2pDLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUU3Qix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUNuRSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3pELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ25DLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBSzNELHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUU1QyxnQkFBVyxHQUF5RCxjQUFjLENBQUM7S0FpTnBGO0lBL01VLFFBQVE7UUFDZiwyREFBMkQ7UUFDM0QsTUFBTSxXQUFXLEdBQUksSUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFL0Msd0RBQXdEO1FBQ3hELE1BQU0sVUFB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QUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFJSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJQWdlbnRTdGVwQ29uZmlnLCBBSUFnZW50QWN0aW9uLCBTdGVwU3RhdHVzLCBUaW1pbmdCcmVha2Rvd24sIEZhaWx1cmVEZXRhaWxzLCBTdWJTdGVwLCBTZWxmSGVhbEFuYWx5c2lzRGF0YSwgU2VsZkhlYWxBY3Rpb24sIEV4ZWN1dGlvblN0ZXBDb25maWcsIFNlbGZIZWFsQWN0aW9uRXZlbnQgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudCwgdXBsb2FkQmFzZWxpbmVFdmVudCB9IGZyb20gJy4uL3Zpc3VhbC1jb21wYXJpc29uL3Zpc3VhbC1jb21wYXJpc29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1haS1hZ2VudC1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FpLWFnZW50LXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgQUlBZ2VudFN0ZXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIEluZGl2aWR1YWwgaW5wdXRzXG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0U3RlcFJlc3VsdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzITogU3RlcFN0YXR1cztcbiAgQElucHV0KCkgZHVyYXRpb24hOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRpbWluZ0JyZWFrZG93bj86IFRpbWluZ0JyZWFrZG93bjtcbiAgQElucHV0KCkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBwcm9tcHQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGltaXplZFJ1bj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGlvbkNvdW50PzogbnVtYmVyO1xuICBASW5wdXQoKSBhY3Rpb25zPzogQUlBZ2VudEFjdGlvbltdO1xuICBASW5wdXQoKSBzZWxlY3RlZFRhYklucHV0PzogJ2FjdGlvbi10cmFjZScgfCAncGxhbm5lci10aW1lbGluZScgfCAnYWktcmVhc29uaW5nJztcbiAgQElucHV0KCkgZmFpbHVyZURldGFpbHM/OiBGYWlsdXJlRGV0YWlscztcbiAgQElucHV0KCkgcmVhc29uaW5nPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGNvbmZpZGVuY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0ZXBEZWxldGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZSA9IHt9O1xuICBASW5wdXQoKSBpc01ha2luZ0N1cnJlbnRCYXNlbGluZSA9IHt9O1xuICBASW5wdXQoKSBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIEBJbnB1dCgpIGdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXI/OiAoKSA9PiB7IGlzTG9hZGluZ0FjY2VwdDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07IGlzTG9hZGluZ01vZGlmeUFjY2VwdDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfTtcbiAgQElucHV0KCkgb25TdGVwQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGlzTGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGVwPzogYW55O1xuXG4gIHNob3dGYWlsZWRTdGVwRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBtYWtlQ3VycmVudEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjxtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB1cGxvYWRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8dXBsb2FkQmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFuYWx5emUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RnVsbExvZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxmSGVhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZkhlYWxBY3Rpb25FdmVudD4oKTtcblxuICAvLyBDb25maWcgcHJvcGVydHkgZm9yIGJhc2UgY2xhc3MgLSBidWlsdCBmcm9tIGluZGl2aWR1YWwgaW5wdXRzIGluIG5nT25Jbml0XG4gIG92ZXJyaWRlIGNvbmZpZyE6IEFJQWdlbnRTdGVwQ29uZmlnO1xuICBwcml2YXRlIHByZXZpb3VzU3RhdHVzPzogU3RlcFN0YXR1cztcbiAgcHJpdmF0ZSB1c2VyTWFudWFsbHlDbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzZWxlY3RlZFRhYjogJ2FjdGlvbi10cmFjZScgfCAncGxhbm5lci10aW1lbGluZScgfCAnYWktcmVhc29uaW5nJyA9ICdhY3Rpb24tdHJhY2UnO1xuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEdldCBhY3Rpb24gZnJvbSBzdGVwIGlmIGF2YWlsYWJsZSAoc2V0IGJ5IHN0ZXAtcmVuZGVyZXIpXG4gICAgY29uc3QgYWN0aW9uVmFsdWUgPSAodGhpcyBhcyBhbnkpLmFjdGlvbiB8fCAnJztcbiAgICBcbiAgICAvLyBVc2UgdGl0bGUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFjdGlvblxuICAgIGNvbnN0IHRpdGxlVmFsdWUgPSB0aGlzLnRpdGxlIHx8IGFjdGlvblZhbHVlIHx8ICcnO1xuICAgIFxuICAgIC8vIFVzZSBwcm9tcHQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFjdGlvbiBvciB0aXRsZVxuICAgIGNvbnN0IHByb21wdFZhbHVlID0gdGhpcy5wcm9tcHQgfHwgYWN0aW9uVmFsdWUgfHwgdGl0bGVWYWx1ZSB8fCAnJztcbiAgICBcbiAgICAvLyBCdWlsZCBjb25maWcgZnJvbSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0ZXN0U3RlcElkOiB0aGlzLnN0ZXA/LnRlc3RTdGVwSWQgfHwgdW5kZWZpbmVkLFxuICAgICAgdGVzdFN0ZXBSZXN1bHRJZDogdGhpcy50ZXN0U3RlcFJlc3VsdElkLFxuICAgICAgc3RlcE51bWJlcjogdGhpcy5zdGVwTnVtYmVyLFxuICAgICAgdGl0bGU6IHRpdGxlVmFsdWUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgZHVyYXRpb246IHRoaXMuZHVyYXRpb24sXG4gICAgICB0eXBlOiAnYWktYWdlbnQnLFxuICAgICAgcHJvbXB0OiBwcm9tcHRWYWx1ZS5yZXBsYWNlKCdBSSBBZ2VudCcsICcnKS50cmltKCksXG4gICAgICBvcHRpbWl6ZWRSdW46IHRoaXMub3B0aW1pemVkUnVuLFxuICAgICAgYWN0aW9uQ291bnQ6IHRoaXMuYWN0aW9uQ291bnQsXG4gICAgICBhY3Rpb25zOiB0aGlzLmFjdGlvbnMgfHwgW10sXG4gICAgICBzZWxlY3RlZFRhYjogdGhpcy5zZWxlY3RlZFRhYklucHV0LFxuICAgICAgc3RlcERlbGV0ZWQ6IHRoaXMuc3RlcERlbGV0ZWQsXG4gICAgICB0aW1pbmdCcmVha2Rvd246IHRoaXMudGltaW5nQnJlYWtkb3duLFxuICAgICAgZXhwYW5kZWQ6IHRoaXMuZXhwYW5kZWQsXG4gICAgICBzZWxmSGVhbEFuYWx5c2lzOiB0aGlzLnNlbGZIZWFsQW5hbHlzaXMsXG4gICAgfSBhcyBBSUFnZW50U3RlcENvbmZpZztcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRoaXMuY29uZmlnLnNlbGVjdGVkVGFiIHx8ICdhY3Rpb24tdHJhY2UnO1xuICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHRpdGxlIGFuZCBwcm9tcHQgaW4gY29uZmlnIHdoZW4gdGhleSBjaGFuZ2VcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIGlmIChjaGFuZ2VzWyd0aXRsZSddKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLnRpdGxlID0gdGhpcy50aXRsZSB8fCAnJztcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzWydwcm9tcHQnXSkge1xuICAgICAgICAvLyBSZW1vdmUgJ0FJIEFnZW50JyBwcmVmaXggaWYgcHJlc2VudCBhbmQgdHJpbVxuICAgICAgICBjb25zdCBwcm9tcHRWYWx1ZSA9IHRoaXMucHJvbXB0IHx8ICcnO1xuICAgICAgICB0aGlzLmNvbmZpZy5wcm9tcHQgPSBwcm9tcHRWYWx1ZS5yZXBsYWNlKCdBSSBBZ2VudCcsICcnKS50cmltKCk7XG4gICAgICB9XG4gICAgICAvLyBJZiBwcm9tcHQgaXMgbm90IHNldCBidXQgdGl0bGUgaXMsIHVzZSB0aXRsZSBhcyBwcm9tcHRcbiAgICAgIGlmICghdGhpcy5wcm9tcHQgJiYgdGhpcy50aXRsZSAmJiB0aGlzLmNvbmZpZy5wcm9tcHQgIT09IHRoaXMudGl0bGUucmVwbGFjZSgnQUkgQWdlbnQnLCAnJykudHJpbSgpKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLnByb21wdCA9IHRoaXMudGl0bGUucmVwbGFjZSgnQUkgQWdlbnQnLCAnJykudHJpbSgpO1xuICAgICAgfVxuICAgICAgLy8gSWYgdGl0bGUgaXMgbm90IHNldCBidXQgcHJvbXB0IGlzLCB1c2UgcHJvbXB0IGFzIHRpdGxlXG4gICAgICBpZiAoIXRoaXMudGl0bGUgJiYgdGhpcy5wcm9tcHQgJiYgdGhpcy5jb25maWcudGl0bGUgIT09IHRoaXMucHJvbXB0KSB7XG4gICAgICAgIHRoaXMuY29uZmlnLnRpdGxlID0gdGhpcy5wcm9tcHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHN1YlN0ZXBzIGFycmF5IHdoZW4gbmV3IG9uZXMgYXJlIGFkZGVkXG4gICAgaWYgKGNoYW5nZXNbJ2FjdGlvbnMnXSkge1xuICAgICAgY29uc3QgcHJldmlvdXNTdWJTdGVwc0NvdW50ID0gY2hhbmdlc1snYWN0aW9ucyddLnByZXZpb3VzVmFsdWU/Lmxlbmd0aCB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFN1YlN0ZXBzQ291bnQgPSAodGhpcy5hY3Rpb25zIHx8IFtdKS5sZW5ndGg7XG4gICAgICBcbiAgICAgIC8vIFN1Yi1zdGVwcyBhcmUgYXBwZW5kZWQgZXh0ZXJuYWxseSwgc28gd2UganVzdCB1cGRhdGUgdGhlIGNvbmZpZ1xuICAgICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnMgfHwgW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEF1dG8tZXhwYW5kIGlmIHN0ZXAgaXMgcnVubmluZyBhbmQgbmV3IHN1YlN0ZXBzIGFyZSBhZGRlZCAobG9ncyBjb21pbmcgaW4pXG4gICAgICBpZiAoIWNoYW5nZXNbJ2FjdGlvbnMnXS5maXJzdENoYW5nZSAmJiBcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9PT0gJ3J1bm5pbmcnICYmIFxuICAgICAgICAgIGN1cnJlbnRTdWJTdGVwc0NvdW50ID4gcHJldmlvdXNTdWJTdGVwc0NvdW50ICYmXG4gICAgICAgICAgdGhpcy5oYXNTdWJTdGVwcyAmJiBcbiAgICAgICAgICAhdGhpcy5pc0V4cGFuZGVkICYmIFxuICAgICAgICAgICF0aGlzLnVzZXJNYW51YWxseUNsb3NlZCkge1xuICAgICAgICB0aGlzLmF1dG9FeHBhbmQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcgJiYgY2hhbmdlc1snZHVyYXRpb24nXSkge1xuICAgICAgdGhpcy5jb25maWcuZHVyYXRpb24gPSBjaGFuZ2VzWydkdXJhdGlvbiddPy5jdXJyZW50VmFsdWUgfHwgMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcgJiYgY2hhbmdlc1snc3RlcERlbGV0ZWQnXSkge1xuICAgICAgdGhpcy5jb25maWcuc3RlcERlbGV0ZWQgPSBjaGFuZ2VzWydzdGVwRGVsZXRlZCddPy5jdXJyZW50VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHN0YXR1cyBjaGFuZ2VzIC0gYXV0by1leHBhbmQgd2hlbiBzdGVwIHN0YXJ0cyBleGVjdXRpbmdcbiAgICBpZiAoY2hhbmdlc1snc3RhdHVzJ10gJiYgIWNoYW5nZXNbJ3N0YXR1cyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSBjaGFuZ2VzWydzdGF0dXMnXT8uY3VycmVudFZhbHVlIHx8ICcnO1xuICAgICAgY29uc3Qgb2xkU3RhdHVzID0gY2hhbmdlc1snc3RhdHVzJ10/LnByZXZpb3VzVmFsdWUgfHwgJyc7XG4gICAgICBcbiAgICAgIC8vIEF1dG8tZXhwYW5kIHdoZW4gc3RhdHVzIGNoYW5nZXMgdG8gJ3J1bm5pbmcnIGFuZCBoYXMgc3ViU3RlcHMgKG9yIHdpbGwgaGF2ZSBzb29uKVxuICAgICAgaWYgKG5ld1N0YXR1cyA9PT0gJ3J1bm5pbmcnICYmIG9sZFN0YXR1cyAhPT0gJ3J1bm5pbmcnICYmICF0aGlzLnVzZXJNYW51YWxseUNsb3NlZCkge1xuICAgICAgICAvLyBFeHBhbmQgaW1tZWRpYXRlbHkgaWYgYWxyZWFkeSBoYXMgc3ViU3RlcHMsIG9yIHdhaXQgZm9yIHRoZW1cbiAgICAgICAgaWYgKHRoaXMuaGFzU3ViU3RlcHMpIHtcbiAgICAgICAgICB0aGlzLmF1dG9FeHBhbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLnByZXZpb3VzU3RhdHVzID0gbmV3U3RhdHVzO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydleHBhbmRlZCddICYmIHRoaXMuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZCA/PyBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9FeHBhbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5oYXNTdWJTdGVwcykge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudXNlck1hbnVhbGx5Q2xvc2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhhc1N1YlN0ZXBzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmFjdGlvbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHNlbGVjdFRhYih0YWI6ICdhY3Rpb24tdHJhY2UnIHwgJ3BsYW5uZXItdGltZWxpbmUnIHwgJ2FpLXJlYXNvbmluZycpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGFiO1xuICB9XG5cbiAgZ2V0QWN0aW9uSWNvbihhY3Rpb25UeXBlOiAnZXh0cmFjdCcgfCAndmFsaWRhdGUnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aW9uVHlwZSA9PT0gJ2V4dHJhY3QnID8gJ2JvbHQnIDogJ3dhcm5pbmcnO1xuICB9XG5cbiAgY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ0NvcGllZCB0byBjbGlwYm9hcmQ6JywgdGV4dCk7XG4gICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZDonLCBlcnIpO1xuICAgIH0pO1xuICB9XG5cbiAgY29weVByb21wdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWc/LnByb21wdCkge1xuICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSB0aGlzLmNvbmZpZy5wcm9tcHQ7XG4gICAgICBjb25zdCBwbGFpblRleHQgPSB0ZW1wRGl2LnRleHRDb250ZW50IHx8IHRlbXBEaXYuaW5uZXJUZXh0IHx8ICcnO1xuICAgICAgdGhpcy5jb3B5VG9DbGlwYm9hcmQocGxhaW5UZXh0KTtcbiAgICB9XG4gIH1cblxuICBvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmFpbGVkU3RlcERldGFpbHMgPSBleHBhbmRlZDtcbiAgfVxuXG4gIGdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpOiBTdWJTdGVwW10ge1xuICAgIC8vIENvbnZlcnQgQUlBZ2VudEFjdGlvbltdIHRvIFN1YlN0ZXBbXSBmb3IgdGhlIGZhaWxlZCBzdGVwIGNvbXBvbmVudFxuICAgIHJldHVybiAodGhpcy5hY3Rpb25zIHx8IFtdKS5tYXAoYWN0aW9uID0+ICh7XG4gICAgICBpZDogYWN0aW9uLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGFjdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgIHN0YXR1czogYWN0aW9uLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiBhY3Rpb24uZHVyYXRpb24sXG4gICAgfSkpO1xuICB9XG5cbiAgb25NYWtlQ3VycmVudEJhc2VsaW5lKGV2ZW50OiBtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1ha2VDdXJyZW50QmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvblVwbG9hZEJhc2VsaW5lKGV2ZW50OiB1cGxvYWRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRCYXNlbGluZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQW5hbHl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFuYWx5emUuZW1pdCgpO1xuICB9XG5cbiAgb25WaWV3RnVsbExvZ3MoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3RnVsbExvZ3MuZW1pdCgpO1xuICB9XG5cbiAgb25TZWxmSGVhbEFjdGlvbihldmVudDogU2VsZkhlYWxBY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZkhlYWxBY3Rpb24uZW1pdChldmVudCk7XG4gIH1cblxuICB0cmFja0J5QWN0aW9uSWQoaW5kZXg6IG51bWJlciwgYWN0aW9uOiBBSUFnZW50QWN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aW9uPy5pZCB8fCBpbmRleC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IHNob3dWaWV3TW9yZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkICYmIEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscykgJiZcbiAgICAgIChcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uZXhwZWN0ZWQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uYWN0dWFsKSkgfHxcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmN1cnJlbnQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmJhc2VsaW5lIHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5kaWZmZXJlbmNlKVxuICAgICAgICAgIHx8IEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8ubG9ncz8ubGVuZ3RoKSkgfHwgXG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmFpRml4QXBwbGllZCAmJiAodGhpcy5mYWlsdXJlRGV0YWlscz8uYWlGaXhNZXNzYWdlIHx8IHRoaXMuY29uZmlkZW5jZSB8fCB0aGlzLnJlYXNvbmluZz8ubGVuZ3RoKSkpXG4gICAgICApXG4gIH1cblxuICB0b2dnbGVIZWFkZXIoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBzdXBlci50b2dnbGUoKTtcbiAgICBpZighdGhpcy5pc0V4cGFuZGVkKXtcbiAgICAgIHRoaXMuc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uU3RlcENsaWNrSGFuZGxlcikge1xuICAgICAgY29uc3Qgc3RlcFRvUGFzcyA9IHRoaXMuc3RlcCB8fCB0aGlzLmNvbmZpZztcbiAgICAgIGlmIChzdGVwVG9QYXNzKSB7XG4gICAgICAgIHRoaXMub25TdGVwQ2xpY2tIYW5kbGVyKHN0ZXBUb1Bhc3MsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZm9udC1pbnRlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1wLTIgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlSGVhZGVyKCRldmVudClcIj5cbiAgICBcbiAgICA8IS0tIFN0YXR1cyBJY29uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnXCIgPjxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuOTAwNSA0Ljk5OTk5QzExLjEyODkgNi4xMjA2NCAxMC45NjYyIDcuMjg1NzEgMTAuNDM5NSA4LjMwMDg5QzkuOTEyNzkgOS4zMTYwOCA5LjA1NCAxMC4xMiA4LjAwNjMxIDEwLjU3ODdDNi45NTg2MiAxMS4wMzczIDUuNzg1MzYgMTEuMTIyOSA0LjY4MjIgMTAuODIxMkMzLjU3OTA0IDEwLjUxOTUgMi42MTI2NSA5Ljg0ODY5IDEuOTQ0MTkgOC45MjA3MUMxLjI3NTczIDcuOTkyNzIgMC45NDU2MTEgNi44NjM2MSAxLjAwODg4IDUuNzIxNjlDMS4wNzIxNSA0LjU3OTc2IDEuNTI0OTkgMy40OTQwNCAyLjI5MTg4IDIuNjQ1NThDMy4wNTg3NiAxLjc5NzEyIDQuMDkzMzQgMS4yMzcyMSA1LjIyMzA4IDEuMDU5MjJDNi4zNTI4MiAwLjg4MTIzMyA3LjUwOTQ0IDEuMDk1OTIgOC41MDAwNSAxLjY2NzQ5XCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA1LjVMNiA3TDExIDJcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWx1cmUnIHx8IHN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbGVkJ1wiPjxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNy41IDQuNUw0LjUgNy41XCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA0LjVMNy41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncGVuZGluZydcIj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZydcIj48c3ZnIGNsYXNzPVwiY3FhLWFuaW1hdGUtc3BpbiBjcWEtdGV4dC1bIzNCODJGNl1cIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjZcIiBjeT1cIjZcIiByPVwiNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgb3BhY2l0eT1cIjAuMjVcIi8+PHBhdGggZD1cIk02IDFBNSA1IDAgMCAxIDExIDZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgPCEtLSBTa2lwcGVkIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3NraXBwZWQnXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3FhLXRleHQtWyM5Q0EzQUZdIGNxYS10ZXh0LVsxMnB4XVwiPlxuICAgICAgICBza2lwX25leHRcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIExpZ2h0YnVsYiBJY29uIGFuZCBTdGVwIE51bWJlciAtLT5cbiAgICA8ZGl2PlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgcng9XCI0XCIgZmlsbD1cIiNGRUYzQzZcIi8+PHBhdGggZD1cIk04LjgzMTUgMTAuNUgxMS4xNjhNMTAgMy41VjRNMTMuMTgyIDQuODE4TDEyLjgyODUgNS4xNzE1TTE0LjUgOEgxNE02IDhINS41TTcuMTcxNSA1LjE3MTVMNi44MTggNC44MThNOC4yMzIgOS43NjhDNy44ODI0MyA5LjQxODM0IDcuNjQ0NCA4Ljk3Mjg4IDcuNTQ3OTkgOC40ODc5NUM3LjQ1MTU4IDguMDAzMDEgNy41MDExMyA3LjUwMDM4IDcuNjkwMzYgNy4wNDM2MUM3Ljg3OTYgNi41ODY4MyA4LjIwMDAzIDYuMTk2NDIgOC42MTExNCA1LjkyMTc1QzkuMDIyMjUgNS42NDcwNyA5LjUwNTU3IDUuNTAwNDcgMTAgNS41MDA0N0MxMC40OTQ0IDUuNTAwNDcgMTAuOTc3NyA1LjY0NzA3IDExLjM4ODkgNS45MjE3NUMxMS44IDYuMTk2NDIgMTIuMTIwNCA2LjU4NjgzIDEyLjMwOTYgNy4wNDM2MUMxMi40OTg5IDcuNTAwMzggMTIuNTQ4NCA4LjAwMzAxIDEyLjQ1MiA4LjQ4Nzk1QzEyLjM1NTYgOC45NzI4OCAxMi4xMTc2IDkuNDE4MzQgMTEuNzY4IDkuNzY4TDExLjQ5NCAxMC4wNDE1QzExLjMzNzQgMTAuMTk4MiAxMS4yMTMxIDEwLjM4NDIgMTEuMTI4MyAxMC41ODg5QzExLjA0MzYgMTAuNzkzNiAxMSAxMS4wMTI5IDExIDExLjIzNDVWMTEuNUMxMSAxMS43NjUyIDEwLjg5NDYgMTIuMDE5NiAxMC43MDcxIDEyLjIwNzFDMTAuNTE5NiAxMi4zOTQ2IDEwLjI2NTIgMTIuNSAxMCAxMi41QzkuNzM0NzggMTIuNSA5LjQ4MDQzIDEyLjM5NDYgOS4yOTI4OSAxMi4yMDcxQzkuMTA1MzYgMTIuMDE5NiA5IDExLjc2NTIgOSAxMS41VjExLjIzNDVDOSAxMC43ODcgOC44MjIgMTAuMzU3NSA4LjUwNiAxMC4wNDE1TDguMjMyIDkuNzY4WlwiIHN0cm9rZT1cIiNFMTcxMDBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgTnVtYmVyIGFuZCBUaXRsZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZm9udC1pbnRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxOHB4XVwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIj5cbiAgICAgICAge3sgY29uZmlnPy5zdGVwTnVtYmVyIH19LiA8c3BhbiBbaW5uZXJIVE1MXT1cImNvbmZpZz8udGl0bGUgfHwgJydcIj48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICBcbiAgICAgIDwhLS0gTG9vcCBUeXBlIEJhZGdlcyAtLT5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXB4LTEuNSBjcWEtcm91bmRlZC1mdWxsIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bI0UxNzEwMF0gY3FhLWJnLVsjRkVGM0M2XSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1taW4tdy1tYXhcIj5cbiAgICAgICAgQUkgQWdlbnRcbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuc3RlcERlbGV0ZWRcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjQjQyMzE4XSBjcWEtYmctWyNGRUYzRjJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZFRTRFMl1cIj5cbiAgICAgICAgRGVsZXRlZFxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBY3Rpb24gQ291bnQgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJjb25maWc/LmFjdGlvbkNvdW50XCIgY2xhc3M9XCJjcWEtcHgtMS41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjRTE3MTAwXSBjcWEtYmctWyNGRUYzQzZdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLW1pbi13LW1heFwiPlxuICAgICAge3sgY29uZmlnPy5hY3Rpb25Db3VudCB9fSBhY3Rpb25zXG4gICAgPC9zcGFuPlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1mb250LWludGVyXCI+XG4gICAgICA8c3BhbiAqbmdJZj1cInNlbGZIZWFsQW5hbHlzaXNcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMwOTdFNTNdIGNxYS1iZy1bI0NGRjJFNV0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtbWluLXctbWF4IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bNnB4XVwiPlxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjlcIiBoZWlnaHQ9XCI5XCIgdmlld0JveD1cIjAgMCA5IDlcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNC41MDk0MSAwQzQuNTY0ODkgMC4wMjI3Mzg0IDQuNTg4NTkgMC4wNzgyNjUyIDQuNjExMzEgMC4xMjk4NDZDNC42MjI2OSAwLjE1OTkgNC42MzMxNCAwLjE5MDExNyA0LjY0MzI5IDAuMjIwNTc1QzQuNjQ3MjYgMC4yMzIyNDcgNC42NTEyMyAwLjI0MzkxOCA0LjY1NTMyIDAuMjU1OTQzQzQuNzA4MDYgMC40MTMwMDUgNC43NTUwNCAwLjU3MTc0OCA0LjgwMjI5IDAuNzMwMzhDNC44MTI5NyAwLjc2NjE5IDQuODIzNjkgMC44MDE5ODcgNC44MzQ0MiAwLjgzNzc4M0M0Ljg4OTA1IDEuMDIwMDQgNC45NDMyNyAxLjIwMjQgNC45OTcxOSAxLjM4NDg0QzUuMDA0NzYgMS40MTA0NyA1LjAxMjM0IDEuNDM2MDkgNS4wMTk5MiAxLjQ2MTcxQzUuMDQxMjggMS41MzM5NSA1LjA2MjYyIDEuNjA2MTkgNS4wODM4MyAxLjY3ODQ3QzUuMTI4NjcgMS44MzEyIDUuMTc0NzMgMS45ODM0NyA1LjIyMzc4IDIuMTM1MDFDNS4yMjgwNyAyLjE0ODI3IDUuMjMyMzYgMi4xNjE1MiA1LjIzNjc3IDIuMTc1MThDNS4zNjQyIDIuNTY1IDUuNTQ0ODIgMi45MTQzNyA1Ljg0MDkgMy4yMTE5NkM1Ljg0ODIzIDMuMjE5NyA1Ljg1NTU2IDMuMjI3NDQgNS44NjMxMiAzLjIzNTQxQzUuOTg5NSAzLjM2NDM3IDYuMTUxNjkgMy40Njc3MSA2LjMxMzggMy41NTExMUM2LjMyMjA2IDMuNTU1NDIgNi4zMzAzMSAzLjU1OTc0IDYuMzM4ODIgMy41NjQxOUM2LjgxNTg3IDMuODA5MjUgNy4zODk1MSAzLjkxNzA0IDcuOTA2MTkgNC4wNjA1QzguMTMyNiA0LjEyMzQgOC4zNTgzIDQuMTg4MjkgOC41ODMxNyA0LjI1NjAzQzguNTk4OTcgNC4yNjA3OSA4LjYxNDc4IDQuMjY1NTQgOC42MzA1OCA0LjI3MDI4QzguNjc3ODQgNC4yODQ0NSA4LjcyNSA0LjI5ODg3IDguNzcyMTEgNC4zMTM0N0M4Ljc4MzEgNC4zMTY3OSA4Ljc5NDA4IDQuMzIwMTEgOC44MDUzOSA0LjMyMzUzQzguODcwMjkgNC4zNDQwNiA4LjkzMjM5IDQuMzY4MjkgOC45ODU2NiA0LjQxMDI3QzkuMDAxOTEgNC40NDQxOCA5LjAwMTkxIDQuNDQ0MTggOC45OTc0OCA0LjQ3ODFDOC45NDU2NCA0LjUyNzM2IDguODk0MiA0LjU1MDQ2IDguODI1NzggNC41NzNDOC44MTYgNC41NzYzMiA4LjgwNjIyIDQuNTc5NjUgOC43OTYxNCA0LjU4MzA4QzguNjgwNjEgNC42MjE4MyA4LjU2MzUxIDQuNjU1NzUgOC40NDYyNiA0LjY4OTM1QzguNDIyMiA0LjY5NjMgOC4zOTgxNCA0LjcwMzI2IDguMzc0MDggNC43MTAyMUM4LjIyNTcxIDQuNzUzMDEgOC4wNzcwOCA0Ljc5NDkgNy45MjgyOSA0LjgzNjMyQzcuNzMyMzIgNC44OTA4OCA3LjUzNjYzIDQuOTQ2MzQgNy4zNDExMyA1LjAwMjQzQzcuMzA5MSA1LjAxMTYyIDcuMjc3MDYgNS4wMjA3OCA3LjI0NTAxIDUuMDI5OTFDNy4wNzY3MSA1LjA3Nzg2IDYuOTA5MjMgNS4xMjc1MyA2Ljc0MzE0IDUuMTgyMDhDNi43MjkzNyA1LjE4NjU5IDYuNzE1NTkgNS4xOTExIDYuNzAxMzkgNS4xOTU3NEM2LjE0NTExIDUuMzgwODIgNS43MjExIDUuNzI2MDkgNS40NTU3MSA2LjIzMDk5QzUuMzEyNjMgNi41MTQ3NSA1LjIyODIzIDYuODIxNjEgNS4xNDIxNCA3LjEyNDQ3QzUuMTE4ODQgNy4yMDYxOSA1LjA5NDA5IDcuMjg3NDUgNS4wNjkwNSA3LjM2ODY5QzUuMDQ5NCA3LjQzMjYxIDUuMDMwMiA3LjQ5NjYzIDUuMDExNDkgNy41NjA4MUM1LjAwOTI2IDcuNTY4NDQgNS4wMDcwMyA3LjU3NjA4IDUuMDA0NzMgNy41ODM5NUM0Ljk5Mzk0IDcuNjIwOTQgNC45ODMxOSA3LjY1NzkzIDQuOTcyNTIgNy42OTQ5NUM0Ljk0NTE5IDcuNzg4NzkgNC45MTU3OCA3Ljg4MTg3IDQuODg1NTUgNy45NzQ4OUM0LjgzMTkxIDguMTQwMjEgNC43ODMxIDguMzA2NzQgNC43MzQ1OSA4LjQ3MzVDNC42NjE0NCA4LjcyNDU3IDQuNjYxNDQgOC43MjQ1NyA0LjYxOTk3IDguODQ1MjdDNC42MTcyMSA4Ljg1MzM3IDQuNjE0NDYgOC44NjE0NyA0LjYxMTYzIDguODY5ODJDNC41OTY0OSA4LjkxMjc4IDQuNTgwOTIgOC45NTIzMyA0LjU1MjI2IDguOTg4N0M0LjUwODY3IDguOTk3ODggNC41MDg2NyA4Ljk5Nzg4IDQuNDY5NTEgOUM0LjQyNDczIDguOTM3NTkgNC4zOTUwOCA4Ljg3NzExIDQuMzcxMzMgOC44MDUwOEM0LjM2Nzg3IDguNzk0ODcgNC4zNjQ0MSA4Ljc4NDY2IDQuMzYwODUgOC43NzQxNUM0LjMxNjg0IDguNjQyNDggNC4yNzc1MSA4LjUwOTQ2IDQuMjM4MTcgOC4zNzY0NkM0LjIyOTE2IDguMzQ2MDQgNC4yMjAxMSA4LjMxNTY0IDQuMjExMDUgOC4yODUyNEM0LjE0MzYgOC4wNTg2MyA0LjA3NzI1IDcuODMxNzQgNC4wMTEwMSA3LjYwNDgxQzMuNzM1MDcgNi40ODIyNCAzLjczNTA3IDYuNDgyMjQgMy4wMzkgNS41NzQ2NkMzLjAyNzg0IDUuNTY1OTYgMy4wMTY2OSA1LjU1NzI2IDMuMDA1MTkgNS41NDgzQzIuNTQ5MTMgNS4xOTkwMiAxLjk0ODM0IDUuMDY5NjkgMS4zOTgxNSA0LjkxODEzQzEuMjYyMDcgNC44ODA2MiAxLjEyNjA1IDQuODQyOTMgMC45OTAwMzIgNC44MDUyM0MwLjk3ODEzOCA0LjgwMTkzIDAuOTc4MTM4IDQuODAxOTMgMC45NjYwMDMgNC43OTg1N0MwLjc2OTgxMSA0Ljc0NDE3IDAuNTczNjc0IDQuNjg5NjMgMC4zNzgyMjQgNC42MzI4M0MwLjM2OTk1NiA0LjYzMDQ1IDAuMzYxNjg4IDQuNjI4MDYgMC4zNTMxNjkgNC42MjU2MUMwLjA1Mjg5ODkgNC41Mzg4MyAwLjA1Mjg5ODkgNC41Mzg4MyAwLjAwMDY0NjUzNyA0LjQ3ODFDLTAuMDAwODMxMjYxIDQuNDUwNTQgLTAuMDAwODMxMjYxIDQuNDUwNTQgMC4wMTI0Njg5IDQuNDIxNTdDMC4wNjcwODM1IDQuMzcwNCAwLjEyMDA3NyA0LjM0ODQ4IDAuMTkyMTYgNC4zMjYxOUMwLjIwMjU5NyA0LjMyMjg0IDAuMjEzMDM0IDQuMzE5NDggMC4yMjM3ODcgNC4zMTYwM0MwLjI1NTc1MyA0LjMwNTgyIDAuMjg3Nzg4IDQuMjk1ODQgMC4zMTk4NTEgNC4yODU5MkMwLjMyOTAwMSA0LjI4MzA1IDAuMzM4MTUxIDQuMjgwMTcgMC4zNDc1NzggNC4yNzcyMkMwLjQxMjI4NSA0LjI1NjkzIDAuNDc3MjI1IDQuMjM3NCAwLjU0MjI1OSA0LjIxODA5QzAuNTU4MjQgNC4yMTMzMiAwLjU1ODI0IDQuMjEzMzIgMC41NzQ1NDQgNC4yMDg0NkMwLjg1MjI2OSA0LjEyNTg3IDEuMTMxODEgNC4wNDkgMS40MTEyNiAzLjk3MTk2QzEuNjE5NSAzLjkxNDU1IDEuODI3MzggMy44NTYxOCAyLjAzNDYgMy43OTU0OEMyLjA0NDEzIDMuNzkyNzEgMi4wNTM2NSAzLjc4OTkzIDIuMDYzNDYgMy43ODcwN0MyLjU0MzUgMy42NDY5NiAzLjAxMjc4IDMuNDQ4MTYgMy4zMjI3NCAzLjA1MzdDMy4zMjczOCAzLjA0Nzg1IDMuMzMyMDIgMy4wNDIgMy4zMzY4IDMuMDM1OTdDMy42ODE5NyAyLjU5ODE1IDMuODE2NTggMi4wNjU3MiAzLjk2Njk1IDEuNTQ2MjFDNC4wMTY0MyAxLjM3NTM0IDQuMDY2NDkgMS4yMDQ2NCA0LjExNjczIDEuMDMzOTlDNC4xMzA2NCAwLjk4NjczMyA0LjE0NDUzIDAuOTM5NDcxIDQuMTU4MzYgMC44OTIxOTRDNC4yMTM5NCAwLjcwMjI4OSA0LjI3MDM1IDAuNTEyNjQyIDQuMzMgMC4zMjM4NjRDNC4zMzU1OCAwLjMwNjE4NiA0LjM0MTE0IDAuMjg4NTAxIDQuMzQ2NjYgMC4yNzA4MDdDNC40MzAxNyAwLjAwMzk4NzYxIDQuNDMwMTcgMC4wMDM5ODc2MSA0LjUwOTQxIDBaXCIgZmlsbD1cIiMwREJEN0RcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk03LjIzNTk3IDAuNTU0ODU5QzcuMjkwMjQgMC42MTM1OTkgNy4zMDEwOSAwLjY4MjYzMSA3LjMxNzk5IDAuNzU3NjM4QzcuMzc0MzYgMC45OTMyNjkgNy40MzkyOSAxLjIwOTkzIDcuNjY0NjcgMS4zNDY4MUM3LjgwMzcxIDEuNDIwMzUgNy45Njk0NCAxLjQ1MzgxIDguMTIzNSAxLjQ4NTQxQzguMTg4NTQgMS40OTkwMiA4LjI0MzQ4IDEuNTE3MDkgOC4yOTkyNCAxLjU1MzIxQzguMzExODEgMS41NzIyOSA4LjMxMTgxIDEuNTcyMjkgOC4zMTEwNyAxLjYwNTQ5QzguMjk4MTQgMS42NDU4OCA4LjI4Njc4IDEuNjU4OSA4LjI1MjY5IDEuNjg1MzNDOC4yMTU0MyAxLjY5NzI2IDguMjE1NDMgMS42OTcyNiA4LjE3MDY4IDEuNzA2NTNDOC4xNTM3NSAxLjcxMDI1IDguMTM2ODMgMS43MTQgOC4xMTk5MiAxLjcxNzc5QzguMTEwODYgMS43MTk4IDguMTAxODEgMS43MjE4MSA4LjA5MjQ3IDEuNzIzODhDNy44MTY5NiAxLjc4NDgyIDcuODE2OTYgMS43ODQ4MiA3LjU3ODgyIDEuOTIyNzNDNy41NzEwOCAxLjkyODY5IDcuNTYzMzMgMS45MzQ2NiA3LjU1NTM2IDEuOTQwOEM3LjM4NTE2IDIuMDg0MzEgNy4zNDkxNiAyLjMyMzAzIDcuMjk3OTMgMi41MjMwMUM3LjI5NDk5IDIuNTMzOTkgNy4yOTIwNiAyLjU0NDk3IDcuMjg5MDMgMi41NTYyOUM3LjI4NjQ5IDIuNTY2MDEgNy4yODM5NSAyLjU3NTczIDcuMjgxMzMgMi41ODU3NUM3LjI3MDI4IDIuNjE1NDQgNy4yNTg4MSAyLjYzNDc5IDcuMjM1OTcgMi42NTc1NEM3LjE3MjM0IDIuNjY1MjcgNy4xNzIzNCAyLjY2NTI3IDcuMTQxMzkgMi42NTc1NEM3LjA5MjE2IDIuNjIxMDYgNy4wODExNCAyLjU3OTUgNy4wNjgyOCAyLjUyMzY1QzcuMDY2MTMgMi41MTUwMSA3LjA2Mzk4IDIuNTA2MzYgNy4wNjE3NiAyLjQ5NzQ1QzcuMDU0ODkgMi40Njk4MyA3LjA0ODI0IDIuNDQyMTcgNy4wNDE2NCAyLjQxNDQ5QzYuOTg5NzkgMi4xOTg5NyA2LjkzMTI2IDEuOTg3NTEgNi43MjQ1MSAxLjg2MTE4QzYuNTYyOTMgMS43NzUwMSA2LjM2NjQ2IDEuNzM0MjYgNi4xODU4NyAxLjcwMTM2QzYuMTM2MzcgMS42OTE1MSA2LjEwODAyIDEuNjc5MTEgNi4wNzczOCAxLjY0MDEyQzYuMDcwNzMgMS42MDA1NSA2LjA3MDczIDEuNjAwNTUgNi4wNzczOCAxLjU2MDk4QzYuMTI0NDcgMS41MTQzNyA2LjE3NDAyIDEuNTAyOTkgNi4yMzc3MiAxLjQ4ODkxQzYuMjU3NzggMS40ODQxNiA2LjI3Nzg0IDEuNDc5MzggNi4yOTc4OSAxLjQ3NDU2QzYuMzA4MjUgMS40NzIwOSA2LjMxODYxIDEuNDY5NjIgNi4zMjkyOSAxLjQ2NzA3QzYuMzgyMTIgMS40NTQwNyA2LjQzNDQzIDEuNDM5NDkgNi40ODY3MyAxLjQyNDYyQzYuNDk2MjMgMS40MjE5OCA2LjUwNTczIDEuNDE5MzUgNi41MTU1MiAxLjQxNjYzQzYuNjIxODIgMS4zODYyNCA2LjcxMzU2IDEuMzQ3MzcgNi43OTg1NCAxLjI3ODM2QzYuODA2NDcgMS4yNzIxMyA2LjgxNDM5IDEuMjY1ODkgNi44MjI1NSAxLjI1OTQ2QzYuOTU0OCAxLjE0NTY1IDYuOTk5NzQgMC45NzQ2NzQgNy4wNDA1MyAwLjgxNTEzNEM3LjA0MzY0IDAuODAzMDIyIDcuMDQ2NzUgMC43OTA5MSA3LjA0OTk1IDAuNzc4NDMyQzcuMDU2MTQgMC43NTQxMDEgNy4wNjIyMiAwLjcyOTc0MyA3LjA2ODE3IDAuNzA1MzU5QzcuMDcyNDMgMC42ODgzOTQgNy4wNzI0MyAwLjY4ODM5NCA3LjA3Njc4IDAuNjcxMDg2QzcuMDc5MjcgMC42NjA5NTEgNy4wODE3NSAwLjY1MDgxNiA3LjA4NDMxIDAuNjQwMzczQzcuMDk1MjEgMC42MDgxMDggNy4xMDk1MiAwLjU4Mjc3MiA3LjEyOTU3IDAuNTU0ODU5QzcuMTY4MSAwLjUzNjQzNSA3LjE5NTE1IDAuNTQ0NzY0IDcuMjM1OTcgMC41NTQ4NTlaXCIgZmlsbD1cIiMwNzVGM0ZcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk0xLjc5NTQ1IDYuMjQ3MUMxLjgwOTUxIDYuMjQ3MTkgMS44MDk1MSA2LjI0NzE5IDEuODIzODYgNi4yNDcyOUMxLjkyNDc3IDYuMjUwMjIgMS45OTMwNCA2LjI4MTE1IDIuMDY3MzYgNi4zNDYwMUMyLjE1Mzg0IDYuNDM1MzMgMi4xOTM3NyA2LjUzNjExIDIuMTkxNSA2LjY1NjVDMi4xODE3OCA2Ljc1NDEyIDIuMTIxNTggNi44MzkzNSAyLjA0NzczIDYuOTA1MzNDMS45NjA4MSA2Ljk3MjQyIDEuODczMTMgNi45OTQ1OSAxLjc2MjA2IDYuOTkxNDlDMS42Njg0MSA2Ljk4MTA3IDEuNTgwMyA2LjkzODUyIDEuNTEzOTMgNi44NzQ1MUMxLjQzMTM4IDYuNzY2ODEgMS40MDcyNSA2LjY2ODAzIDEuNDE5MzUgNi41MzUzN0MxLjQ0NDMzIDYuNDMwOTIgMS41MTYzNyA2LjM0NjEzIDEuNjA4NSA2LjI4NjY2QzEuNjcyNTEgNi4yNTU2NCAxLjcyMzk5IDYuMjQ2NTIgMS43OTU0NSA2LjI0NzFaXCIgZmlsbD1cIiMwREJEN0RcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIFNlbGYtaGVhbGVkXG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKGNvbmZpZz8uZHVyYXRpb24gfHwgMCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzdmcgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTMuNSA1TDcgOC41TDEwLjUgNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWJnLVsjRkZGRUY5XSBjcWEtbXQtMS41IGNxYS1tbC05IGNxYS1tci02IGNxYS1wLTRcIiBzdHlsZT1cImJvcmRlci10b3A6IDFweCBzb2xpZCAjRTRFNEU0O1wiPlxuICAgIDwhLS0gUHJvbXB0IENhcmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWl0ZW1zLXN0YXJ0IGNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1sZyBjcWEtcC0zXCIgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjRkVFNjg1XCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTJcIj5cbiAgICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNS4zMzMzMyA2LjY2Njc1SDUuMzRNOCA2LjY2Njc1SDguMDA2NjdNMTAuNjY2NyA2LjY2Njc1SDEwLjY3MzNNNiAxMC42NjY3SDMuMzMzMzNDMi45Nzk3MSAxMC42NjY3IDIuNjQwNTcgMTAuNTI2MyAyLjM5MDUyIDEwLjI3NjJDMi4xNDA0OCAxMC4wMjYyIDIgOS42ODcwNCAyIDkuMzMzNDFWNC4wMDAwOEMyIDMuNjQ2NDYgMi4xNDA0OCAzLjMwNzMyIDIuMzkwNTIgMy4wNTcyN0MyLjY0MDU3IDIuODA3MjIgMi45Nzk3MSAyLjY2Njc1IDMuMzMzMzMgMi42NjY3NUgxMi42NjY3QzEzLjAyMDMgMi42NjY3NSAxMy4zNTk0IDIuODA3MjIgMTMuNjA5NSAzLjA1NzI3QzEzLjg1OTUgMy4zMDczMiAxNCAzLjY0NjQ2IDE0IDQuMDAwMDhWOS4zMzM0MUMxNCA5LjY4NzA0IDEzLjg1OTUgMTAuMDI2MiAxMy42MDk1IDEwLjI3NjJDMTMuMzU5NCAxMC41MjYzIDEzLjAyMDMgMTAuNjY2NyAxMi42NjY3IDEwLjY2NjdIOS4zMzMzM0w2IDE0LjAwMDFWMTAuNjY2N1pcIiBzdHJva2U9XCIjRTE3MTAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyNCQjREMDBdIFwiPlBST01QVDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZz8ub3B0aW1pemVkUnVuXCIgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtZnVsbCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1wcmltYXJ5IGNxYS1iZy1bI0VCRUNGRF1cIj5cbiAgICAgICAgICAgIE9wdGltaXplZCBSdW5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMEIwQjBCXVwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIiBbaW5uZXJIVE1MXT1cImNvbmZpZz8ucHJvbXB0XCI+PC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIFxuICAgICAgICBjbGFzcz1cImNxYS1wLTEuNVwiIFxuICAgICAgICAoY2xpY2spPVwiY29weVByb21wdCgpXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0NvcHkgcHJvbXB0J1wiXG4gICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNS4zMzMzMiAxMC42NjY3SDMuOTk5OTlDMy42NDYzNyAxMC42NjY3IDMuMzA3MjMgMTAuNTI2MyAzLjA1NzE4IDEwLjI3NjJDMi44MDcxMyAxMC4wMjYyIDIuNjY2NjYgOS42ODcwNCAyLjY2NjY2IDkuMzMzNDFWNC4wMDAwOEMyLjY2NjY2IDMuNjQ2NDYgMi44MDcxMyAzLjMwNzMyIDMuMDU3MTggMy4wNTcyN0MzLjMwNzIzIDIuODA3MjIgMy42NDYzNyAyLjY2Njc1IDMuOTk5OTkgMi42NjY3NUg5LjMzMzMyQzkuNjg2OTUgMi42NjY3NSAxMC4wMjYxIDIuODA3MjIgMTAuMjc2MSAzLjA1NzI3QzEwLjUyNjIgMy4zMDczMiAxMC42NjY3IDMuNjQ2NDYgMTAuNjY2NyA0LjAwMDA4VjUuMzMzNDFNNi42NjY2NiAxMy4zMzM0SDEyQzEyLjM1MzYgMTMuMzMzNCAxMi42OTI4IDEzLjE5MjkgMTIuOTQyOCAxMi45NDI5QzEzLjE5MjggMTIuNjkyOCAxMy4zMzMzIDEyLjM1MzcgMTMuMzMzMyAxMi4wMDAxVjYuNjY2NzVDMTMuMzMzMyA2LjMxMzEzIDEzLjE5MjggNS45NzM5OSAxMi45NDI4IDUuNzIzOTRDMTIuNjkyOCA1LjQ3Mzg5IDEyLjM1MzYgNS4zMzM0MSAxMiA1LjMzMzQxSDYuNjY2NjZDNi4zMTMwMyA1LjMzMzQxIDUuOTczOSA1LjQ3Mzg5IDUuNzIzODUgNS43MjM5NEM1LjQ3MzggNS45NzM5OSA1LjMzMzMyIDYuMzEzMTMgNS4zMzMzMiA2LjY2Njc1VjEyLjAwMDFDNS4zMzMzMiAxMi4zNTM3IDUuNDczOCAxMi42OTI4IDUuNzIzODUgMTIuOTQyOUM1Ljk3MzkgMTMuMTkyOSA2LjMxMzAzIDEzLjMzMzQgNi42NjY2NiAxMy4zMzM0WlwiIHN0cm9rZT1cIiM2MzYzNjNcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRhYiBOYXZpZ2F0aW9uIC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWZsZXgtd3JhcCBjcWEtbXktMS41XCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U0RTRFNFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKCdhY3Rpb24tdHJhY2UnKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnIWNxYS10ZXh0LVsjQkI0RDAwXSc6IHNlbGVjdGVkVGFiID09PSAnYWN0aW9uLXRyYWNlJ31cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiBzZWxlY3RlZFRhYiA9PT0gJ2FjdGlvbi10cmFjZScgPyAnMnB4IHNvbGlkICNGRTlBMDAnIDogJzJweCBzb2xpZCB0cmFuc3BhcmVudCd9XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzYzNjM2M10gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIEFjdGlvbiBUcmFjZVxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZyAmJiBjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtYmctWyNGNUY1RjVdIGNxYS10ZXh0LWN1cnJlbnQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxMy4zcHhdIGNxYS1mb250LW1lZGl1bSBjcWEtcm91bmRlZC1mdWxsIGNxYS13LVsxNnB4XSBjcWEtaC1bMTZweF0gY3FhLW1pbi13LVsxNnB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIHt7IGNvbmZpZy5hY3Rpb25zLmxlbmd0aCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRhYigncGxhbm5lci10aW1lbGluZScpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieychY3FhLXRleHQtWyNCQjREMDBdJzogc2VsZWN0ZWRUYWIgPT09ICdwbGFubmVyLXRpbWVsaW5lJ31cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiBzZWxlY3RlZFRhYiA9PT0gJ3BsYW5uZXItdGltZWxpbmUnID8gJzJweCBzb2xpZCAjRkU5QTAwJyA6ICcycHggc29saWQgdHJhbnNwYXJlbnQnfVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTIgY3FhLXB4LTMgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctNCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM2MzYzNjNdIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICBQbGFubmVyIFRpbWVsaW5lXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRhYignYWktcmVhc29uaW5nJylcIlxuICAgICAgICBbbmdDbGFzc109XCJ7JyFjcWEtdGV4dC1bI0JCNEQwMF0nOiBzZWxlY3RlZFRhYiA9PT0gJ2FpLXJlYXNvbmluZyd9XCJcbiAgICAgICAgW25nU3R5bGVdPVwieydib3JkZXItYm90dG9tJzogc2VsZWN0ZWRUYWIgPT09ICdhaS1yZWFzb25pbmcnID8gJzJweCBzb2xpZCAjRkU5QTAwJyA6ICcycHggc29saWQgdHJhbnNwYXJlbnQnfVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTIgY3FhLXB4LTMgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctNCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM2MzYzNjNdIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICBBSSBSZWFzb25pbmdcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gVGFiIENvbnRlbnQgLS0+XG4gICAgPCEtLSBBY3Rpb24gVHJhY2UgVGFiIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ2FjdGlvbi10cmFjZSdcIj5cbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1yb3VuZGVkLW1kIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1teS0xLjUgY3FhLXAtMiBjcWEtYmctWyNFRkY2RkZdXCIgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjQkVEQkZGXCI+XG4gICAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk04LjY2NjY3IDQuNjY2NzVIMTRNMTQgNC42NjY3NVYxMC4wMDAxTTE0IDQuNjY2NzVMOC42NjY2NyAxMC4wMDAxTDYgNy4zMzM0MUwyIDExLjMzMzRcIiBzdHJva2U9XCIjMTU1REZDXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE0NDdFNl0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPlxuICAgICAgICAgIDxiPnt7IGNvbmZpZz8uYWN0aW9ucz8ubGVuZ3RoIHx8IDAgfX0gYWN0aW9uczwvYj4gXG4gICAgICAgICAgZnJvbSBwcmV2aW91cyBydW5zXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW15LTEuNVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnPy5hY3Rpb25zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5QWN0aW9uSWRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtZm9udC1pbnRlciBjcWEtcm91bmRlZC1tZCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHgtMiBjcWEtcHktMVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogYWN0aW9uPy5yZWFzb25pbmcgPyAnI0VFRjJGRicgOiAnI0Y3RkFGQycsXG4gICAgICAgICAgICAgICdib3JkZXInOiBhY3Rpb24/LnJlYXNvbmluZyA/ICcxcHggc29saWQgI0M0QjVGRCcgOiAnMXB4IHNvbGlkICNCRURCRkYnXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFhY3Rpb24/LnJlYXNvbmluZ1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiByeD1cIjhcIiBmaWxsPVwiI0RCRUFGRVwiLz48cGF0aCBkPVwiTTUuMDgzMzcgOC40MTY3NUw2Ljc1MDA0IDEwLjA4MzRMMTAuOTE2NyA1LjkxNjc1XCIgc3Ryb2tlPVwiIzE1NURGQ1wiIHN0cm9rZS13aWR0aD1cIjAuODMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiYWN0aW9uPy5yZWFzb25pbmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgcng9XCI4XCIgZmlsbD1cIiNkZGQ3ZjVcIi8+PHBhdGggZD1cIk01LjA4MzM3IDguNDE2NzVMNi43NTAwNCAxMC4wODM0TDEwLjkxNjcgNS45MTY3NVwiIHN0cm9rZT1cIiM3QzNBRURcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCIhY3FhLXctNCAhY3FhLWgtNCAhY3FhLXRleHQtWzE2cHhdIGNxYS10ZXh0LXllbGxvdy01MDBcIj5cbiAgICAgICAgICAgICAge3sgZ2V0QWN0aW9uSWNvbihhY3Rpb24udHlwZSkgfX1cbiAgICAgICAgICAgIDwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhYWN0aW9uPy5yZWFzb25pbmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgcng9XCI0XCIgZmlsbD1cIiNGRUYzQzZcIi8+PHBhdGggZD1cIk0xMC41IDlWNS41TDYgMTFIOS41VjE0LjVMMTQgOUgxMC41WlwiIHN0cm9rZT1cIiNFMTcxMDBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImFjdGlvbj8ucmVhc29uaW5nXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgcng9XCI0XCIgZmlsbD1cIiNkZGQ3ZjVcIi8+XG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguODMxNSAxMC41SDExLjE2OE0xMCAzLjVWNE0xMy4xODIgNC44MThMMTIuODI4NSA1LjE3MTVNMTQuNSA4SDE0TTYgOEg1LjVNNy4xNzE1IDUuMTcxNUw2LjgxOCA0LjgxOE04LjIzMiA5Ljc2OEM3Ljg4MjQzIDkuNDE4MzQgNy42NDQ0IDguOTcyODggNy41NDc5OSA4LjQ4Nzk1QzcuNDUxNTggOC4wMDMwMSA3LjUwMTEzIDcuNTAwMzggNy42OTAzNiA3LjA0MzYxQzcuODc5NiA2LjU4NjgzIDguMjAwMDMgNi4xOTY0MiA4LjYxMTE0IDUuOTIxNzVDOS4wMjIyNSA1LjY0NzA3IDkuNTA1NTcgNS41MDA0NyAxMCA1LjUwMDQ3QzEwLjQ5NDQgNS41MDA0NyAxMC45Nzc3IDUuNjQ3MDcgMTEuMzg4OSA1LjkyMTc1QzExLjggNi4xOTY0MiAxMi4xMjA0IDYuNTg2ODMgMTIuMzA5NiA3LjA0MzYxQzEyLjQ5ODkgNy41MDAzOCAxMi41NDg0IDguMDAzMDEgMTIuNDUyIDguNDg3OTVDMTIuMzU1NiA4Ljk3Mjg4IDEyLjExNzYgOS40MTgzNCAxMS43NjggOS43NjhMMTEuNDk0IDEwLjA0MTVDMTEuMzM3NCAxMC4xOTgyIDExLjIxMzEgMTAuMzg0MiAxMS4xMjgzIDEwLjU4ODlDMTEuMDQzNiAxMC43OTM2IDExIDExLjAxMjkgMTEgMTEuMjM0NVYxMS41QzExIDExLjc2NTIgMTAuODk0NiAxMi4wMTk2IDEwLjcwNzEgMTIuMjA3MUMxMC41MTk2IDEyLjM5NDYgMTAuMjY1MiAxMi41IDEwIDEyLjVDOS43MzQ3OCAxMi41IDkuNDgwNDMgMTIuMzk0NiA5LjI5Mjg5IDEyLjIwNzFDOS4xMDUzNiAxMi4wMTk2IDkgMTEuNzY1MiA5IDExLjVWMTEuMjM0NUM5IDEwLjc4NyA4LjgyMiAxMC4zNTc1IDguNTA2IDEwLjA0MTVMOC4yMzIgOS43NjhaXCIgc3Ryb2tlPVwiIzdDM0FFRFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICBcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1zZW1pYm9sZFwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBhY3Rpb24/LnJlYXNvbmluZyA/ICcjNEMxRDk1JyA6ICcjMEIwQjBCJyB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFjdGlvbi5jb25maWRlbmNlXCIgY2xhc3M9XCJjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzAwQTYzRV1cIj5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmNvbmZpZGVuY2UgfX0lXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtZm9udC1pbnRlciBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNjM2MzYzXVwiPlxuICAgICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihhY3Rpb24uZHVyYXRpb24pIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIDxkaXY+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk00LjUgMi41TDggNkw0LjUgOS41XCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBsYW5uZXIgVGltZWxpbmUgVGFiIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ3BsYW5uZXItdGltZWxpbmUnXCIgY2xhc3M9XCJjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgUGxhbm5lciB0aW1lbGluZSBjb250ZW50IHdvdWxkIGdvIGhlcmVcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQUkgUmVhc29uaW5nIFRhYiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdhaS1yZWFzb25pbmcnXCIgY2xhc3M9XCJjcWEtZm9udC1pbnRlciBjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgQUkgcmVhc29uaW5nIGNvbnRlbnQgd291bGQgZ28gaGVyZVxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gICAgICA8IS0tIFNlbGYgSGVhbCBBbmFseXNpcyAtLT5cbiAgICA8Y3FhLXNlbGYtaGVhbC1hbmFseXNpcyBcbiAgICAgICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIFxuICAgICAgW2lkXT1cInN0ZXA/LnRlc3RTdGVwSWRcIlxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICBbaXNMb2FkaW5nQWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nQWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICBbaXNMb2FkaW5nTW9kaWZ5QWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nTW9kaWZ5QWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICA8IS0tIFRpbWluZyBCcmVha2Rvd24gLS0+XG4gIDxkaXYgKm5nSWY9XCJjb25maWc/LnRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC0xLjUgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1kaWFsb2ctbXV0ZWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTNcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIEFwcCA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWdyYXktNzAwXCI+e3sgZm9ybWF0RHVyYXRpb24oY29uZmlnPy50aW1pbmdCcmVha2Rvd24/LmFwcCB8fCAwKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxIDExXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0tMy44MTQ3ZS0wNiAxMC4zMlYtNy4xNTI1NmUtMDdIMC45NTk5OTZWMTAuMzJILTMuODE0N2UtMDZaXCIgZmlsbD1cIiNFNUU3RUJcIi8+PC9zdmc+PC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWc/LnRpbWluZ0JyZWFrZG93bj8udG9vbCB8fCAwKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvblxuICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgW3N1YlN0ZXBzXT1cImdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpXCJcbiAgICAgIFtmYWlsdXJlRGV0YWlsc109XCJmYWlsdXJlRGV0YWlsc1wiXG4gICAgICBbaXNFeHBhbmRlZF09XCJzaG93RmFpbGVkU3RlcERldGFpbHNcIlxuICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgPC9jcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93Vmlld01vcmVCdXR0b24gJiYgc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzICYmIGZhaWx1cmVEZXRhaWxzXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdXBkYXRlZC1mYWlsZWQtc3RlcFxuICAgICAgW3Rlc3RTdGVwUmVzdWx0SWRdPVwidGVzdFN0ZXBSZXN1bHRJZFwiXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbZXhwYW5kZWRdPVwidHJ1ZVwiXG4gICAgICBbc3ViU3RlcHNdPVwiZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKClcIlxuICAgICAgW2ZhaWx1cmVEZXRhaWxzXT1cImZhaWx1cmVEZXRhaWxzXCJcbiAgICAgIFtyZWFzb25pbmddPVwicmVhc29uaW5nXCJcbiAgICAgIFtjb25maWRlbmNlXT1cImNvbmZpZGVuY2VcIlxuICAgICAgW2lzVXBsb2FkaW5nQmFzZWxpbmVdPVwiaXNVcGxvYWRpbmdCYXNlbGluZVwiXG4gICAgICBbaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVdPVwiaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVcIlxuICAgICAgW2lzTGl2ZV09XCJpc0xpdmVcIlxuICAgICAgKG1ha2VDdXJyZW50QmFzZWxpbmUpPVwib25NYWtlQ3VycmVudEJhc2VsaW5lKCRldmVudClcIlxuICAgICAgKHVwbG9hZEJhc2VsaW5lKT1cIm9uVXBsb2FkQmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAoYW5hbHl6ZSk9XCJvbkFuYWx5emUoKVwiXG4gICAgICAodmlld0Z1bGxMb2dzKT1cIm9uVmlld0Z1bGxMb2dzKClcIj5cbiAgICA8L2NxYS11cGRhdGVkLWZhaWxlZC1zdGVwPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19