@cqa-lib/cqa-ui 1.1.343 → 1.1.344
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/execution-screen/ai-action-step/ai-action-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/ai-agent-step/ai-agent-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/api-step/api-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +4 -4
- package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/document-verification-step/document-verification-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/failed-step/failed-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/file-download-step/file-download-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/live-execution-step/live-execution-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +4 -4
- package/esm2020/lib/execution-screen/main-step-collapse/main-step-collapse.component.mjs +3 -3
- package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +4 -4
- package/fesm2015/cqa-lib-cqa-ui.mjs +29 -29
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +29 -29
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -62,7 +62,7 @@ export class ConditionStepComponent extends BaseStepComponent {
|
|
|
62
62
|
}
|
|
63
63
|
/** True when this condition-step's own breakpoint is disabled (used to propagate parentSkipped to children). */
|
|
64
64
|
get selfDebugDisabled() {
|
|
65
|
-
return
|
|
65
|
+
return !!this.step?.debugPointDisabled || !!this.parentSkipped;
|
|
66
66
|
}
|
|
67
67
|
ngOnInit() {
|
|
68
68
|
// Always determine active branch from executed branch (for live mode)
|
|
@@ -425,10 +425,10 @@ export class ConditionStepComponent extends BaseStepComponent {
|
|
|
425
425
|
}
|
|
426
426
|
}
|
|
427
427
|
ConditionStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ConditionStepComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
428
|
-
ConditionStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ConditionStepComponent, selector: "cqa-condition-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", conditionText: "conditionText", branches: "branches", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", selfHealAnalysis: "selfHealAnalysis", isLoading: "isLoading", nestedSteps: "nestedSteps", hasChild: "hasChild", stepDeleted: "stepDeleted", isDebug: "isDebug", debugPointSet: "debugPointSet", parentSkipped: "parentSkipped", getDebugPointSetHandler: "getDebugPointSetHandler", onDebugPointChangeHandler: "onDebugPointChangeHandler", addStepMenuOptions: "addStepMenuOptions", stepMoreMenuOptions: "stepMoreMenuOptions", ifChild: "ifChild", activeBranchStepId: "activeBranchStepId", onExpandHandler: "onExpandHandler", onEditStepHandler: "onEditStepHandler", onAddStepOptionSelectHandler: "onAddStepOptionSelectHandler", onStepMoreOptionSelectHandler: "onStepMoreOptionSelectHandler", getAddStepMenuOptionsForNested: "getAddStepMenuOptionsForNested", getStepMoreMenuOptionsForNested: "getStepMoreMenuOptionsForNested", getConditionBranchesHandler: "getConditionBranchesHandler", isStepLoadingHandler: "isStepLoadingHandler", isStepExpandedHandler: "isStepExpandedHandler", convertMsToSecondsHandler: "convertMsToSecondsHandler", formatFailureDetailsHandler: "formatFailureDetailsHandler", getSelfHealAnalysisHandler: "getSelfHealAnalysisHandler", onMakeCurrentBaselineHandler: "onMakeCurrentBaselineHandler", onUploadBaselineHandler: "onUploadBaselineHandler", onAnalyzeHandler: "onAnalyzeHandler", onViewFullLogsHandler: "onViewFullLogsHandler", onSelfHealActionHandler: "onSelfHealActionHandler", getSelfHealLoadingStatesHandler: "getSelfHealLoadingStatesHandler", getLoopIterationsHandler: "getLoopIterationsHandler", getApiAssertionsHandler: "getApiAssertionsHandler", formatActionsHandler: "formatActionsHandler", onViewAllIterationsHandler: "onViewAllIterationsHandler", onConditionBranchClickHandler: "onConditionBranchClickHandler", onStepClickHandler: "onStepClickHandler", onJsonPathCopiedHandler: "onJsonPathCopiedHandler", onDownloadHandler: "onDownloadHandler", onFilePathCopiedHandler: "onFilePathCopiedHandler", onTextCopiedHandler: "onTextCopiedHandler", jumpToTimestampHandler: "jumpToTimestampHandler", downloadingStepId: "downloadingStepId", step: "step", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", isLive: "isLive" }, outputs: { debugPointChange: "debugPointChange", editStep: "editStep", addStepOptionSelect: "addStepOptionSelect", stepMoreOptionSelect: "stepMoreOptionSelect", onBranchClickEvent: "onBranchClickEvent", onExpand: "onExpand", makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root cqa-w-full" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter cqa-w-full\" (click)=\"$event.stopPropagation()\">\n <div class=\"cqa-p-2\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\">\n <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n [matTooltip]=\"status === 'running' ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled || !!parentSkipped ? 'Breakpoint cannot be set on skipped steps' : '')\"\n matTooltipPosition=\"right\">\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n [ngClass]=\"status === 'running' || !!step?.debugPointDisabled || !!parentSkipped ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n [disabled]=\"status === 'running' || !!step?.debugPointDisabled || !!parentSkipped\"\n (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" fill=\"#C63535\"/>\n </svg>\n <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"#C63535\" stroke-width=\"1.5\" fill=\"none\"/>\n </svg>\n </button>\n </div>\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 <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 <!-- Condition Icon -->\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></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 }}. Condition: <span [innerHTML]=\"config.conditionText\"></span>\n </span>\n \n <!-- Condition Badge -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n CONDITION\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 <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 <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n *ngIf=\"step?.executedResult?.video_start_time\" \n [matTooltip]=\"'Jump to video time'\" \n matTooltipPosition=\"below\"\n (click)=\"onJumpToTimestamp($event)\">\n <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n play_arrow\n </mat-icon>\n <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n </span>\n </div>\n <div *ngIf=\"isDebug\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n <!-- <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n </button> -->\n <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n </button>\n <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n {{ opt.label }}\n </button>\n </mat-menu>\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n </button>\n <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n </mat-menu>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg *ngIf=\"hasExpandableContent\" [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 <!-- Branch Buttons - Read-only, showing executed status only -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-flex-wrap\">\n <div\n *ngFor=\"let branch of config.branches\"\n class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\"\n [ngClass]=\"getBranchClass(branch)\" (click)=\"onBranchClick(branch)\">\n <!-- Checkmark icon for executed branch -->\n <div *ngIf=\"branch.executed\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <span>{{ branch.type.toUpperCase() }}</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && !isLoading\">\n\n <!-- Executed Branch Sub-steps -->\n <div *ngFor=\"let branch of config.branches\">\n <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div\n *ngFor=\"let subStep of branch.subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\" >\n <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>\n </div>\n <!-- Failure -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n <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>\n </div>\n <!-- Pending -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n <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>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n <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\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n \n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"word-break: break-word;\">\n <span [innerHTML]=\"subStep.description\"></span>\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Unexecuted Branch Message -->\n <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n </p>\n </div>\n\n <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n </p>\n </div>\n\n <!-- Nested Steps -->\n <div *ngIf=\"hasChild || (config.nestedSteps && config.nestedSteps.length > 0)\" class=\"cqa-ml-9 cqa-pb-1\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-py-[2px] cqa-px-3\" *ngIf=\"config.nestedSteps && config.nestedSteps.length > 0\">Nested steps</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n <!-- Loading indicator for nested steps -->\n <div *ngIf=\"hasChild && (!config.nestedSteps || config.nestedSteps.length === 0) && isStepLoading()\" \n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n </div>\n\n <ng-container *ngFor=\"let step of config.nestedSteps; index as i\">\n <!-- Wrapper to show skeleton while step-renderer is loading -->\n <div\n class=\"cqa-step-renderer-wrapper\"\n [attr.id]=\"'exc-' + step.id\"\n [class.loaded]=\"!isNestedStepLoading(step)\">\n <!-- Loading skeleton overlay -->\n <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n </div> -->\n <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n <cqa-step-renderer \n [step]=\"step\"\n [stepNumber]=\"stepNumber + '.' + (i + 1)\"\n [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n [onExpandHandler]=\"onExpandHandler\"\n [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n [isStepLoadingHandler]=\"isStepLoadingHandler\"\n [isStepExpandedHandler]=\"isStepExpandedHandler\"\n [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n [formatActionsHandler]=\"formatActionsHandler\"\n [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n [onAnalyzeHandler]=\"onAnalyzeHandler\"\n [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n [onStepClickHandler]=\"onStepClickHandler\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n [onDownloadHandler]=\"onDownloadHandler\"\n [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n [onTextCopiedHandler]=\"onTextCopiedHandler\"\n [downloadingStepId]=\"downloadingStepId\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [selectedIterationId]=\"step?.selectedIterationId || ''\"\n [isLive]=\"isLive\"\n [isDebug]=\"isDebug\"\n [parentSkipped]=\"selfDebugDisabled\"\n [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n [onEditStepHandler]=\"onEditStepHandler\"\n [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(step) : addStepMenuOptions\"\n [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(step) : stepMoreMenuOptions\"\n [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n (componentReady)=\"markStepLoaded(step)\">\n </cqa-step-renderer>\n </div>\n </ng-container>\n </div>\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) }}</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) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton && !isLoading\" 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 [timingBreakdown]=\"timingBreakdown\"\n [testStepResultId]=\"testStepResultId\"\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.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i3.StepRendererComponent, selector: "cqa-step-renderer", inputs: ["step", "onExpandHandler", "getConditionBranchesHandler", "isStepLoadingHandler", "isStepExpandedHandler", "convertMsToSecondsHandler", "formatFailureDetailsHandler", "getSelfHealAnalysisHandler", "onMakeCurrentBaselineHandler", "onUploadBaselineHandler", "onAnalyzeHandler", "onViewFullLogsHandler", "onSelfHealActionHandler", "getSelfHealLoadingStatesHandler", "isUploadingBaseline", "isMakingCurrentBaseline", "selectedIterationId", "getLoopIterationsHandler", "getApiAssertionsHandler", "formatActionsHandler", "onViewAllIterationsHandler", "onConditionBranchClickHandler", "onStepClickHandler", "onJsonPathCopiedHandler", "onDownloadHandler", "onFilePathCopiedHandler", "onTextCopiedHandler", "jumpToTimestampHandler", "downloadingStepId", "isLive", "isDebug", "debugPointSet", "getDebugPointSetHandler", "onDebugPointChangeHandler", "onEditStepHandler", "addStepMenuOptions", "onAddStepOptionSelectHandler", "stepMoreMenuOptions", "onStepMoreOptionSelectHandler", "getAddStepMenuOptionsForNested", "getStepMoreMenuOptionsForNested", "stepNumber", "parentSkipped"], outputs: ["addStepOptionSelect", "stepMoreOptionSelect", "componentReady"] }, { type: i4.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["id", "originalLocator", "healedLocator", "confidence", "healMethod", "isLoadingAccept", "isLoadingModifyAccept"], outputs: ["action"] }, { type: i5.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails", "isExpanded"], outputs: ["viewMoreClick"] }, { type: i6.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline", "isMakingCurrentBaseline", "isLive"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
428
|
+
ConditionStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ConditionStepComponent, selector: "cqa-condition-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", conditionText: "conditionText", branches: "branches", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", selfHealAnalysis: "selfHealAnalysis", isLoading: "isLoading", nestedSteps: "nestedSteps", hasChild: "hasChild", stepDeleted: "stepDeleted", isDebug: "isDebug", debugPointSet: "debugPointSet", parentSkipped: "parentSkipped", getDebugPointSetHandler: "getDebugPointSetHandler", onDebugPointChangeHandler: "onDebugPointChangeHandler", addStepMenuOptions: "addStepMenuOptions", stepMoreMenuOptions: "stepMoreMenuOptions", ifChild: "ifChild", activeBranchStepId: "activeBranchStepId", onExpandHandler: "onExpandHandler", onEditStepHandler: "onEditStepHandler", onAddStepOptionSelectHandler: "onAddStepOptionSelectHandler", onStepMoreOptionSelectHandler: "onStepMoreOptionSelectHandler", getAddStepMenuOptionsForNested: "getAddStepMenuOptionsForNested", getStepMoreMenuOptionsForNested: "getStepMoreMenuOptionsForNested", getConditionBranchesHandler: "getConditionBranchesHandler", isStepLoadingHandler: "isStepLoadingHandler", isStepExpandedHandler: "isStepExpandedHandler", convertMsToSecondsHandler: "convertMsToSecondsHandler", formatFailureDetailsHandler: "formatFailureDetailsHandler", getSelfHealAnalysisHandler: "getSelfHealAnalysisHandler", onMakeCurrentBaselineHandler: "onMakeCurrentBaselineHandler", onUploadBaselineHandler: "onUploadBaselineHandler", onAnalyzeHandler: "onAnalyzeHandler", onViewFullLogsHandler: "onViewFullLogsHandler", onSelfHealActionHandler: "onSelfHealActionHandler", getSelfHealLoadingStatesHandler: "getSelfHealLoadingStatesHandler", getLoopIterationsHandler: "getLoopIterationsHandler", getApiAssertionsHandler: "getApiAssertionsHandler", formatActionsHandler: "formatActionsHandler", onViewAllIterationsHandler: "onViewAllIterationsHandler", onConditionBranchClickHandler: "onConditionBranchClickHandler", onStepClickHandler: "onStepClickHandler", onJsonPathCopiedHandler: "onJsonPathCopiedHandler", onDownloadHandler: "onDownloadHandler", onFilePathCopiedHandler: "onFilePathCopiedHandler", onTextCopiedHandler: "onTextCopiedHandler", jumpToTimestampHandler: "jumpToTimestampHandler", downloadingStepId: "downloadingStepId", step: "step", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", isLive: "isLive" }, outputs: { debugPointChange: "debugPointChange", editStep: "editStep", addStepOptionSelect: "addStepOptionSelect", stepMoreOptionSelect: "stepMoreOptionSelect", onBranchClickEvent: "onBranchClickEvent", onExpand: "onExpand", makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root cqa-w-full" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter cqa-w-full\" (click)=\"$event.stopPropagation()\">\n <div class=\"cqa-p-2\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\">\n <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n [matTooltip]=\"status.toLowerCase() === 'running' || (!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')\"\n matTooltipPosition=\"right\">\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped\"\n (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped ? '#9E9E9E' : '#C63535'\"/>\n </svg>\n <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n </svg>\n </button>\n </div>\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 <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 <!-- Condition Icon -->\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></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 }}. Condition: <span [innerHTML]=\"config.conditionText\"></span>\n </span>\n \n <!-- Condition Badge -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n CONDITION\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 <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 <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n *ngIf=\"step?.executedResult?.video_start_time\" \n [matTooltip]=\"'Jump to video time'\" \n matTooltipPosition=\"below\"\n (click)=\"onJumpToTimestamp($event)\">\n <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n play_arrow\n </mat-icon>\n <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n </span>\n </div>\n <div *ngIf=\"isDebug\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n <!-- <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n </button> -->\n <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n </button>\n <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n {{ opt.label }}\n </button>\n </mat-menu>\n <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n </button>\n <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n </mat-menu>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg *ngIf=\"hasExpandableContent\" [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 <!-- Branch Buttons - Read-only, showing executed status only -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-flex-wrap\">\n <div\n *ngFor=\"let branch of config.branches\"\n class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\"\n [ngClass]=\"getBranchClass(branch)\" (click)=\"onBranchClick(branch)\">\n <!-- Checkmark icon for executed branch -->\n <div *ngIf=\"branch.executed\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <span>{{ branch.type.toUpperCase() }}</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && !isLoading\">\n\n <!-- Executed Branch Sub-steps -->\n <div *ngFor=\"let branch of config.branches\">\n <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div\n *ngFor=\"let subStep of branch.subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\" >\n <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>\n </div>\n <!-- Failure -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n <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>\n </div>\n <!-- Pending -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n <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>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n <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\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n \n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"word-break: break-word;\">\n <span [innerHTML]=\"subStep.description\"></span>\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Unexecuted Branch Message -->\n <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n </p>\n </div>\n\n <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n </p>\n </div>\n\n <!-- Nested Steps -->\n <div *ngIf=\"hasChild || (config.nestedSteps && config.nestedSteps.length > 0)\" class=\"cqa-ml-9 cqa-pb-1\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-py-[2px] cqa-px-3\" *ngIf=\"config.nestedSteps && config.nestedSteps.length > 0\">Nested steps</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n <!-- Loading indicator for nested steps -->\n <div *ngIf=\"hasChild && (!config.nestedSteps || config.nestedSteps.length === 0) && isStepLoading()\" \n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n </div>\n\n <ng-container *ngFor=\"let step of config.nestedSteps; index as i\">\n <!-- Wrapper to show skeleton while step-renderer is loading -->\n <div\n class=\"cqa-step-renderer-wrapper\"\n [attr.id]=\"'exc-' + step.id\"\n [class.loaded]=\"!isNestedStepLoading(step)\">\n <!-- Loading skeleton overlay -->\n <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n </div> -->\n <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n <cqa-step-renderer \n [step]=\"step\"\n [stepNumber]=\"stepNumber + '.' + (i + 1)\"\n [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n [onExpandHandler]=\"onExpandHandler\"\n [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n [isStepLoadingHandler]=\"isStepLoadingHandler\"\n [isStepExpandedHandler]=\"isStepExpandedHandler\"\n [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n [formatActionsHandler]=\"formatActionsHandler\"\n [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n [onAnalyzeHandler]=\"onAnalyzeHandler\"\n [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n [onStepClickHandler]=\"onStepClickHandler\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n [onDownloadHandler]=\"onDownloadHandler\"\n [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n [onTextCopiedHandler]=\"onTextCopiedHandler\"\n [downloadingStepId]=\"downloadingStepId\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [selectedIterationId]=\"step?.selectedIterationId || ''\"\n [isLive]=\"isLive\"\n [isDebug]=\"isDebug\"\n [parentSkipped]=\"selfDebugDisabled\"\n [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n [onEditStepHandler]=\"onEditStepHandler\"\n [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(step) : addStepMenuOptions\"\n [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(step) : stepMoreMenuOptions\"\n [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n (componentReady)=\"markStepLoaded(step)\">\n </cqa-step-renderer>\n </div>\n </ng-container>\n </div>\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) }}</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) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton && !isLoading\" 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 [timingBreakdown]=\"timingBreakdown\"\n [testStepResultId]=\"testStepResultId\"\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.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i3.StepRendererComponent, selector: "cqa-step-renderer", inputs: ["step", "onExpandHandler", "getConditionBranchesHandler", "isStepLoadingHandler", "isStepExpandedHandler", "convertMsToSecondsHandler", "formatFailureDetailsHandler", "getSelfHealAnalysisHandler", "onMakeCurrentBaselineHandler", "onUploadBaselineHandler", "onAnalyzeHandler", "onViewFullLogsHandler", "onSelfHealActionHandler", "getSelfHealLoadingStatesHandler", "isUploadingBaseline", "isMakingCurrentBaseline", "selectedIterationId", "getLoopIterationsHandler", "getApiAssertionsHandler", "formatActionsHandler", "onViewAllIterationsHandler", "onConditionBranchClickHandler", "onStepClickHandler", "onJsonPathCopiedHandler", "onDownloadHandler", "onFilePathCopiedHandler", "onTextCopiedHandler", "jumpToTimestampHandler", "downloadingStepId", "isLive", "isDebug", "debugPointSet", "getDebugPointSetHandler", "onDebugPointChangeHandler", "onEditStepHandler", "addStepMenuOptions", "onAddStepOptionSelectHandler", "stepMoreMenuOptions", "onStepMoreOptionSelectHandler", "getAddStepMenuOptionsForNested", "getStepMoreMenuOptionsForNested", "stepNumber", "parentSkipped"], outputs: ["addStepOptionSelect", "stepMoreOptionSelect", "componentReady"] }, { type: i4.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["id", "originalLocator", "healedLocator", "confidence", "healMethod", "isLoadingAccept", "isLoadingModifyAccept"], outputs: ["action"] }, { type: i5.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails", "isExpanded"], outputs: ["viewMoreClick"] }, { type: i6.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline", "isMakingCurrentBaseline", "isLive"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
429
429
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ConditionStepComponent, decorators: [{
|
|
430
430
|
type: Component,
|
|
431
|
-
args: [{ selector: 'cqa-condition-step', host: { class: 'cqa-ui-root cqa-w-full' }, template: "<div class=\"cqa-font-inter cqa-w-full\" (click)=\"$event.stopPropagation()\">\n <div class=\"cqa-p-2\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\">\n <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n [matTooltip]=\"status === 'running' ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled || !!parentSkipped ? 'Breakpoint cannot be set on skipped steps' : '')\"\n matTooltipPosition=\"right\">\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n [ngClass]=\"status === 'running' || !!step?.debugPointDisabled || !!parentSkipped ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n [disabled]=\"status === 'running' || !!step?.debugPointDisabled || !!parentSkipped\"\n (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" fill=\"#C63535\"/>\n </svg>\n <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"#C63535\" stroke-width=\"1.5\" fill=\"none\"/>\n </svg>\n </button>\n </div>\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 <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 <!-- Condition Icon -->\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></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 }}. Condition: <span [innerHTML]=\"config.conditionText\"></span>\n </span>\n \n <!-- Condition Badge -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n CONDITION\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 <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 <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n *ngIf=\"step?.executedResult?.video_start_time\" \n [matTooltip]=\"'Jump to video time'\" \n matTooltipPosition=\"below\"\n (click)=\"onJumpToTimestamp($event)\">\n <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n play_arrow\n </mat-icon>\n <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n </span>\n </div>\n <div *ngIf=\"isDebug\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n <!-- <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n </button> -->\n <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n </button>\n <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n {{ opt.label }}\n </button>\n </mat-menu>\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n </button>\n <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n </mat-menu>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg *ngIf=\"hasExpandableContent\" [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 <!-- Branch Buttons - Read-only, showing executed status only -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-flex-wrap\">\n <div\n *ngFor=\"let branch of config.branches\"\n class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\"\n [ngClass]=\"getBranchClass(branch)\" (click)=\"onBranchClick(branch)\">\n <!-- Checkmark icon for executed branch -->\n <div *ngIf=\"branch.executed\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <span>{{ branch.type.toUpperCase() }}</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && !isLoading\">\n\n <!-- Executed Branch Sub-steps -->\n <div *ngFor=\"let branch of config.branches\">\n <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div\n *ngFor=\"let subStep of branch.subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\" >\n <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>\n </div>\n <!-- Failure -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n <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>\n </div>\n <!-- Pending -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n <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>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n <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\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n \n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"word-break: break-word;\">\n <span [innerHTML]=\"subStep.description\"></span>\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Unexecuted Branch Message -->\n <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n </p>\n </div>\n\n <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n </p>\n </div>\n\n <!-- Nested Steps -->\n <div *ngIf=\"hasChild || (config.nestedSteps && config.nestedSteps.length > 0)\" class=\"cqa-ml-9 cqa-pb-1\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-py-[2px] cqa-px-3\" *ngIf=\"config.nestedSteps && config.nestedSteps.length > 0\">Nested steps</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n <!-- Loading indicator for nested steps -->\n <div *ngIf=\"hasChild && (!config.nestedSteps || config.nestedSteps.length === 0) && isStepLoading()\" \n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n </div>\n\n <ng-container *ngFor=\"let step of config.nestedSteps; index as i\">\n <!-- Wrapper to show skeleton while step-renderer is loading -->\n <div\n class=\"cqa-step-renderer-wrapper\"\n [attr.id]=\"'exc-' + step.id\"\n [class.loaded]=\"!isNestedStepLoading(step)\">\n <!-- Loading skeleton overlay -->\n <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n </div> -->\n <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n <cqa-step-renderer \n [step]=\"step\"\n [stepNumber]=\"stepNumber + '.' + (i + 1)\"\n [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n [onExpandHandler]=\"onExpandHandler\"\n [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n [isStepLoadingHandler]=\"isStepLoadingHandler\"\n [isStepExpandedHandler]=\"isStepExpandedHandler\"\n [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n [formatActionsHandler]=\"formatActionsHandler\"\n [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n [onAnalyzeHandler]=\"onAnalyzeHandler\"\n [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n [onStepClickHandler]=\"onStepClickHandler\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n [onDownloadHandler]=\"onDownloadHandler\"\n [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n [onTextCopiedHandler]=\"onTextCopiedHandler\"\n [downloadingStepId]=\"downloadingStepId\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [selectedIterationId]=\"step?.selectedIterationId || ''\"\n [isLive]=\"isLive\"\n [isDebug]=\"isDebug\"\n [parentSkipped]=\"selfDebugDisabled\"\n [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n [onEditStepHandler]=\"onEditStepHandler\"\n [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(step) : addStepMenuOptions\"\n [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(step) : stepMoreMenuOptions\"\n [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n (componentReady)=\"markStepLoaded(step)\">\n </cqa-step-renderer>\n </div>\n </ng-container>\n </div>\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) }}</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) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton && !isLoading\" 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 [timingBreakdown]=\"timingBreakdown\"\n [testStepResultId]=\"testStepResultId\"\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" }]
|
|
431
|
+
args: [{ selector: 'cqa-condition-step', host: { class: 'cqa-ui-root cqa-w-full' }, template: "<div class=\"cqa-font-inter cqa-w-full\" (click)=\"$event.stopPropagation()\">\n <div class=\"cqa-p-2\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\">\n <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n [matTooltip]=\"status.toLowerCase() === 'running' || (!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')\"\n matTooltipPosition=\"right\">\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped\"\n (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped ? '#9E9E9E' : '#C63535'\"/>\n </svg>\n <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n </svg>\n </button>\n </div>\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 <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 <!-- Condition Icon -->\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></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 }}. Condition: <span [innerHTML]=\"config.conditionText\"></span>\n </span>\n \n <!-- Condition Badge -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n CONDITION\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 <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 <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n *ngIf=\"step?.executedResult?.video_start_time\" \n [matTooltip]=\"'Jump to video time'\" \n matTooltipPosition=\"below\"\n (click)=\"onJumpToTimestamp($event)\">\n <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n play_arrow\n </mat-icon>\n <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n </span>\n </div>\n <div *ngIf=\"isDebug\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n <!-- <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n </button> -->\n <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n </button>\n <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n {{ opt.label }}\n </button>\n </mat-menu>\n <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n </button>\n <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n </mat-menu>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg *ngIf=\"hasExpandableContent\" [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 <!-- Branch Buttons - Read-only, showing executed status only -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-flex-wrap\">\n <div\n *ngFor=\"let branch of config.branches\"\n class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\"\n [ngClass]=\"getBranchClass(branch)\" (click)=\"onBranchClick(branch)\">\n <!-- Checkmark icon for executed branch -->\n <div *ngIf=\"branch.executed\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <span>{{ branch.type.toUpperCase() }}</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && !isLoading\">\n\n <!-- Executed Branch Sub-steps -->\n <div *ngFor=\"let branch of config.branches\">\n <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div\n *ngFor=\"let subStep of branch.subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\" >\n <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>\n </div>\n <!-- Failure -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n <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>\n </div>\n <!-- Pending -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n <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>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n <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\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n \n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"word-break: break-word;\">\n <span [innerHTML]=\"subStep.description\"></span>\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Unexecuted Branch Message -->\n <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n </p>\n </div>\n\n <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n </p>\n </div>\n\n <!-- Nested Steps -->\n <div *ngIf=\"hasChild || (config.nestedSteps && config.nestedSteps.length > 0)\" class=\"cqa-ml-9 cqa-pb-1\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-py-[2px] cqa-px-3\" *ngIf=\"config.nestedSteps && config.nestedSteps.length > 0\">Nested steps</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n <!-- Loading indicator for nested steps -->\n <div *ngIf=\"hasChild && (!config.nestedSteps || config.nestedSteps.length === 0) && isStepLoading()\" \n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n </div>\n\n <ng-container *ngFor=\"let step of config.nestedSteps; index as i\">\n <!-- Wrapper to show skeleton while step-renderer is loading -->\n <div\n class=\"cqa-step-renderer-wrapper\"\n [attr.id]=\"'exc-' + step.id\"\n [class.loaded]=\"!isNestedStepLoading(step)\">\n <!-- Loading skeleton overlay -->\n <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n </div> -->\n <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n <cqa-step-renderer \n [step]=\"step\"\n [stepNumber]=\"stepNumber + '.' + (i + 1)\"\n [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n [onExpandHandler]=\"onExpandHandler\"\n [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n [isStepLoadingHandler]=\"isStepLoadingHandler\"\n [isStepExpandedHandler]=\"isStepExpandedHandler\"\n [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n [formatActionsHandler]=\"formatActionsHandler\"\n [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n [onAnalyzeHandler]=\"onAnalyzeHandler\"\n [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n [onStepClickHandler]=\"onStepClickHandler\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n [onDownloadHandler]=\"onDownloadHandler\"\n [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n [onTextCopiedHandler]=\"onTextCopiedHandler\"\n [downloadingStepId]=\"downloadingStepId\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [selectedIterationId]=\"step?.selectedIterationId || ''\"\n [isLive]=\"isLive\"\n [isDebug]=\"isDebug\"\n [parentSkipped]=\"selfDebugDisabled\"\n [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n [onEditStepHandler]=\"onEditStepHandler\"\n [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(step) : addStepMenuOptions\"\n [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(step) : stepMoreMenuOptions\"\n [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n (componentReady)=\"markStepLoaded(step)\">\n </cqa-step-renderer>\n </div>\n </ng-container>\n </div>\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) }}</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) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton && !isLoading\" 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 [timingBreakdown]=\"timingBreakdown\"\n [testStepResultId]=\"testStepResultId\"\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" }]
|
|
432
432
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
|
|
433
433
|
type: Input
|
|
434
434
|
}], testStepResultId: [{
|
|
@@ -574,4 +574,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
574
574
|
}], selfHealAction: [{
|
|
575
575
|
type: Output
|
|
576
576
|
}] } });
|
|
577
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2NvbmRpdGlvbi1zdGVwL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9jb25kaXRpb24tc3RlcC9jb25kaXRpb24tc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFpTSw2QkFBNkIsRUFBc0IsOEJBQThCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1VCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVEzRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsaUJBQWlCO0lBdUgzRCxZQUFvQixHQUFzQjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQURVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBNUdqQyxhQUFRLEdBQXNCLEVBQUUsQ0FBQztRQU1qQyxnQkFBVyxHQUEyQixFQUFFLENBQUM7UUFHekMsWUFBTyxHQUFhLEtBQUssQ0FBQztRQUMxQixrQkFBYSxHQUFhLEtBQUssQ0FBQztRQUNoQyxrQkFBYSxHQUFhLEtBQUssQ0FBQztRQUcvQixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQy9DLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3BDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBQzVELHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQy9ELHVCQUFrQixHQUF3Qiw2QkFBNkIsQ0FBQztRQUN4RSx3QkFBbUIsR0FB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QUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25kaXRpb25TdGVwQ29uZmlnLCBDb25kaXRpb25CcmFuY2gsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgRmFpbHVyZURldGFpbHMsIFN1YlN0ZXAsIFNlbGZIZWFsQW5hbHlzaXNEYXRhLCBTZWxmSGVhbEFjdGlvbiwgRXhlY3V0aW9uU3RlcENvbmZpZywgU2VsZkhlYWxBY3Rpb25FdmVudCwgQWRkU3RlcE1lbnVPcHRpb24sIERFRkFVTFRfQUREX1NURVBfTUVOVV9PUFRJT05TLCBTdGVwTW9yZU1lbnVPcHRpb24sIERFRkFVTFRfU1RFUF9NT1JFX01FTlVfT1BUSU9OUyB9IGZyb20gJy4uL2V4ZWN1dGlvbi1zdGVwLm1vZGVscyc7XG5pbXBvcnQgeyBCYXNlU3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50LCB1cGxvYWRCYXNlbGluZUV2ZW50IH0gZnJvbSAnLi4vdmlzdWFsLWNvbXBhcmlzb24vdmlzdWFsLWNvbXBhcmlzb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWNvbmRpdGlvbi1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290IGNxYS13LWZ1bGwnIH1cbn0pXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uU3RlcENvbXBvbmVudCBleHRlbmRzIEJhc2VTdGVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyBJbmRpdmlkdWFsIGlucHV0c1xuICBASW5wdXQoKSBpZCE6IHN0cmluZztcbiAgQElucHV0KCkgdGVzdFN0ZXBSZXN1bHRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgc3RlcE51bWJlciE6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0YXR1cyE6IFN0ZXBTdGF0dXM7XG4gIEBJbnB1dCgpIGR1cmF0aW9uITogbnVtYmVyO1xuICBASW5wdXQoKSB0aW1pbmdCcmVha2Rvd24/OiBUaW1pbmdCcmVha2Rvd247XG4gIEBJbnB1dCgpIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgY29uZGl0aW9uVGV4dCE6IHN0cmluZztcbiAgQElucHV0KCkgYnJhbmNoZXM6IENvbmRpdGlvbkJyYW5jaFtdID0gW107XG4gIEBJbnB1dCgpIGZhaWx1cmVEZXRhaWxzPzogRmFpbHVyZURldGFpbHM7XG4gIEBJbnB1dCgpIHJlYXNvbmluZz86IHN0cmluZ1tdO1xuICBASW5wdXQoKSBjb25maWRlbmNlPzogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIEBJbnB1dCgpIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIG5lc3RlZFN0ZXBzPzogRXhlY3V0aW9uU3RlcENvbmZpZ1tdID0gW107XG4gIEBJbnB1dCgpIGhhc0NoaWxkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgc3RlcERlbGV0ZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc0RlYnVnPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWJ1Z1BvaW50U2V0PzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwYXJlbnRTa2lwcGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBnZXREZWJ1Z1BvaW50U2V0SGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBvbkRlYnVnUG9pbnRDaGFuZ2VIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBAT3V0cHV0KCkgZGVidWdQb2ludENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGVkaXRTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcE9wdGlvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8QWRkU3RlcE1lbnVPcHRpb24+KCk7XG4gIEBPdXRwdXQoKSBzdGVwTW9yZU9wdGlvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8U3RlcE1vcmVNZW51T3B0aW9uPigpO1xuICBASW5wdXQoKSBhZGRTdGVwTWVudU9wdGlvbnM6IEFkZFN0ZXBNZW51T3B0aW9uW10gPSBERUZBVUxUX0FERF9TVEVQX01FTlVfT1BUSU9OUztcbiAgQElucHV0KCkgc3RlcE1vcmVNZW51T3B0aW9uczogU3RlcE1vcmVNZW51T3B0aW9uW10gPSBERUZBVUxUX1NURVBfTU9SRV9NRU5VX09QVElPTlM7XG4gIEBJbnB1dCgpIGlmQ2hpbGQ/OiBhbnk7IC8vIGlmQ2hpbGQgZGF0YSBmcm9tIEFQSSAtIGlmIG51bGwgYW5kIGhhc0NoaWxkIGlzIHRydWUsIHdlIG5lZWQgdG8gY2FsbCBBUElcbiAgQElucHV0KCkgYWN0aXZlQnJhbmNoU3RlcElkPzogc3RyaW5nIHwgbnVtYmVyOyAvLyBJRCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZS9zZWxlY3RlZCBicmFuY2ggc3RlcFxuXG4gIC8vIEhhbmRsZXIgZnVuY3Rpb24gdG8gcGFzcyBkb3duIHRvIG5lc3RlZCBjaGlsZCBzdGVwIGdyb3VwcyBmb3IgcmVjdXJzaXZlIGV4cGFuc2lvblxuICBASW5wdXQoKSBvbkV4cGFuZEhhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHBhc3NlZCB0byBuZXN0ZWQgc3RlcC1yZW5kZXJlciBzbyBFZGl0IG9uIG5lc3RlZCBzdGVwcyBpcyBmb3J3YXJkZWQgd2l0aCB0aGUgc3RlcCBjb25maWcuICovXG4gIEBJbnB1dCgpIG9uRWRpdFN0ZXBIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQWRkU3RlcE9wdGlvblNlbGVjdEhhbmRsZXI/OiAob3B0aW9uOiBBZGRTdGVwTWVudU9wdGlvbiwgc3RlcD86IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU3RlcE1vcmVPcHRpb25TZWxlY3RIYW5kbGVyPzogKG9wdGlvbjogU3RlcE1vcmVNZW51T3B0aW9uLCBzdGVwPzogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHVzZWQgdG8gZ2V0IGFkZC1zdGVwIG1lbnUgb3B0aW9ucyBwZXIgbmVzdGVkIHN0ZXA7IG90aGVyd2lzZSBhZGRTdGVwTWVudU9wdGlvbnMgaXMgdXNlZCBmb3IgYWxsLiBTdXBwb3J0cyBhcmJpdHJhcnkgbmVzdGluZy4gKi9cbiAgQElucHV0KCkgZ2V0QWRkU3RlcE1lbnVPcHRpb25zRm9yTmVzdGVkPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IEFkZFN0ZXBNZW51T3B0aW9uW107XG4gIC8qKiBXaGVuIHByb3ZpZGVkLCB1c2VkIHRvIGdldCBzdGVwLW1vcmUgbWVudSBvcHRpb25zIHBlciBuZXN0ZWQgc3RlcDsgb3RoZXJ3aXNlIHN0ZXBNb3JlTWVudU9wdGlvbnMgaXMgdXNlZCBmb3IgYWxsLiBTdXBwb3J0cyBhcmJpdHJhcnkgbmVzdGluZy4gKi9cbiAgQElucHV0KCkgZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZD86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBTdGVwTW9yZU1lbnVPcHRpb25bXTtcblxuICAvLyBIYW5kbGVyIGZ1bmN0aW9ucyBmb3IgY29uZGl0aW9uIHN0ZXBzXG4gIEBJbnB1dCgpIGdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBDb25kaXRpb25CcmFuY2hbXTtcbiAgQElucHV0KCkgaXNTdGVwTG9hZGluZ0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgaXNTdGVwRXhwYW5kZWRIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXI/OiAoZHVyYXRpb246IG51bWJlcikgPT4gbnVtYmVyO1xuICBASW5wdXQoKSBmb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55O1xuICBASW5wdXQoKSBnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnk7XG4gIEBJbnB1dCgpIG9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXI/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25VcGxvYWRCYXNlbGluZUhhbmRsZXI/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25BbmFseXplSGFuZGxlcj86ICgpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVmlld0Z1bGxMb2dzSGFuZGxlcj86ICgpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXI/OiAoKSA9PiB7IGlzTG9hZGluZ0FjY2VwdDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07IGlzTG9hZGluZ01vZGlmeUFjY2VwdDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfTtcbiAgQElucHV0KCkgZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueVtdO1xuICBASW5wdXQoKSBnZXRBcGlBc3NlcnRpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnlbXTtcbiAgQElucHV0KCkgZm9ybWF0QWN0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55W107XG4gIEBJbnB1dCgpIG9uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IGFueSwgYnJhbmNoOiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU3RlcENsaWNrSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnLCBldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvbkpzb25QYXRoQ29waWVkSGFuZGxlcj86IChldmVudDogeyBwYXRoOiBzdHJpbmc7IHNvdXJjZTogJ3JlcXVlc3RCb2R5JyB8ICdyZXNwb25zZUJvZHknIHwgJ3JlcXVlc3RIZWFkZXJzJyB8ICdyZXNwb25zZUhlYWRlcnMnIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uRG93bmxvYWRIYW5kbGVyPzogKGV2ZW50OiB7IGZpbGVOYW1lOiBzdHJpbmc7IGZpbGVQYXRoPzogc3RyaW5nOyBmaWxlVHlwZTogc3RyaW5nOyB0ZXN0U3RlcFJlc3VsdElkOiBzdHJpbmcgfSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25GaWxlUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgZmlsZVBhdGg6IHN0cmluZzsgdGVzdFN0ZXBSZXN1bHRJZDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVGV4dENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgdGV4dDogc3RyaW5nOyB0ZXN0U3RlcFJlc3VsdElkOiBzdHJpbmcgfSkgPT4gdm9pZDtcbiAgQElucHV0KCkganVtcFRvVGltZXN0YW1wSGFuZGxlcj86ICh0aW1lc3RhbXA6IG51bWJlciwgdGVzdFN0ZXBJZD86IG51bWJlciB8IHN0cmluZykgPT4gdm9pZDtcbiAgQElucHV0KCkgZG93bmxvYWRpbmdTdGVwSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBzdGVwPzogYW55O1xuXG4gIEBPdXRwdXQoKSBvbkJyYW5jaENsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbmRpdGlvbkJyYW5jaD4oKTtcbiAgQE91dHB1dCgpIG9uRXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBASW5wdXQoKSBpc1VwbG9hZGluZ0Jhc2VsaW5lID0ge307XG4gIEBJbnB1dCgpIGlzTWFraW5nQ3VycmVudEJhc2VsaW5lID0ge307XG4gIEBJbnB1dCgpIGlzTGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgbWFrZUN1cnJlbnRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8bWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgdXBsb2FkQmFzZWxpbmUgPSBuZXcgRXZlbnRFbWl0dGVyPHVwbG9hZEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBhbmFseXplID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0Z1bGxMb2dzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VsZkhlYWxBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGZIZWFsQWN0aW9uRXZlbnQ+KCk7XG5cbiAgc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFNob3cgZGVidWcgaWNvbiBvbmx5IHdoZW4gdGhpcyBzdGVwIGhhcyBubyBjaGlsZCBzdGVwcyAoaWNvbiBpcyBzaG93biBvbiBjaGlsZCBzdGVwcyBpbnN0ZWFkKS4gKi9cbiAgLyoqIFNob3cgZGVidWcgaWNvbiB3aGVuIGRlYnVnIG1vZGUgaXMgb24gKHNob3duIG9uIHBhcmVudCBhbmQgYWxsIGNoaWxkIHN0ZXBzKS4gKi9cbiAgZ2V0IHNob3dEZWJ1Z0ljb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZWJ1ZyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBQZXItc3RlcCBmaWx0ZXJlZCB0aHJlZS1kb3QgbWVudSBvcHRpb25zIChlLmcuIGhpZGUgRHVwbGljYXRlL0RlbGV0ZSBmb3Igc3RlcC1ncm91cCBjaGlsZHJlbikuICovXG4gIGdldCBlZmZlY3RpdmVTdGVwTW9yZU1lbnVPcHRpb25zKCk6IFN0ZXBNb3JlTWVudU9wdGlvbltdIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5zdGVwTW9yZU1lbnVPcHRpb25zIHx8IFtdO1xuICAgIC8vIEFsd2F5cyBoaWRlIGR1cGxpY2F0ZSBvcHRpb24gZm9yIHRoaXMgY29udGFpbmVyIHN0ZXBcbiAgICBsZXQgZmlsdGVyZWQgPSBiYXNlLmZpbHRlcihvcHQgPT4gb3B0LmlkICE9PSAnZHVwbGljYXRlJyk7XG4gICAgXG4gICAgY29uc3Qgc3RlcFJlZjogYW55ID0gdGhpcy5zdGVwO1xuICAgIGlmICghc3RlcFJlZikgcmV0dXJuIGZpbHRlcmVkO1xuXG4gICAgY29uc3QgaXNHcm91cENoaWxkID0gISFzdGVwUmVmLmlzU3RlcEdyb3VwQ2hpbGRyZW47XG4gICAgLy8gV2hlbiBzdGVwLnN0ZXBNb3JlTWVudU9wdGlvbnMgaXMgdHJ1dGh5IE9SIHN0ZXAgaXMgYSBzdGVwLWdyb3VwIGNoaWxkLCBoaWRlIG11dGF0aW5nIGl0ZW1zXG4gICAgY29uc3Qgc3VwcHJlc3NNdXRhdGluZyA9ICEhc3RlcFJlZi5zdGVwTW9yZU1lbnVPcHRpb25zIHx8IGlzR3JvdXBDaGlsZDtcbiAgICBpZiAoIXN1cHByZXNzTXV0YXRpbmcpIHJldHVybiBmaWx0ZXJlZDtcblxuICAgIHJldHVybiBmaWx0ZXJlZC5maWx0ZXIob3B0ID0+IG9wdC5pZCAhPT0gJ2RlbGV0ZScpO1xuICB9XG4gIFxuICAvKiogVHJ1ZSB3aGVuIHRoaXMgY29uZGl0aW9uLXN0ZXAncyBvd24gYnJlYWtwb2ludCBpcyBkaXNhYmxlZCAodXNlZCB0byBwcm9wYWdhdGUgcGFyZW50U2tpcHBlZCB0byBjaGlsZHJlbikuICovXG4gIGdldCBzZWxmRGVidWdEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09ICdydW5uaW5nJyB8fCAhISh0aGlzLnN0ZXAgYXMgYW55KT8uZGVidWdQb2ludERpc2FibGVkIHx8ICEhdGhpcy5wYXJlbnRTa2lwcGVkO1xuICB9XG5cbiAgLy8gQ29uZmlnIHByb3BlcnR5IGZvciBiYXNlIGNsYXNzIC0gYnVpbHQgZnJvbSBpbmRpdmlkdWFsIGlucHV0cyBpbiBuZ09uSW5pdFxuICBvdmVycmlkZSBjb25maWchOiBDb25kaXRpb25TdGVwQ29uZmlnO1xuXG4gIC8vIFRyYWNrIHdoaWNoIHN0ZXBzIGFyZSBzdGlsbCBsb2FkaW5nIHRvIHNob3cgc2tlbGV0b25cbiAgbG9hZGluZ1N0ZXBzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQWx3YXlzIGRldGVybWluZSBhY3RpdmUgYnJhbmNoIGZyb20gZXhlY3V0ZWQgYnJhbmNoIChmb3IgbGl2ZSBtb2RlKVxuICAgIGlmICh0aGlzLmlzTGl2ZSkge1xuICAgICAgdGhpcy5kZXRlcm1pbmVBY3RpdmVCcmFuY2goKTtcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgbmVzdGVkIHN0ZXBzIGJhc2VkIG9uIGFjdGl2ZSBicmFuY2ggKGRlcml2ZWQgZnJvbSBleGVjdXRlZCBicmFuY2gpXG4gICAgY29uc3Qgc3RlcHNUb1VzZSA9IHRoaXMubmVzdGVkU3RlcHMgfHwgW107XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdGVzdFN0ZXBJZDogdGhpcy5zdGVwPy50ZXN0U3RlcElkIHx8IHVuZGVmaW5lZCxcbiAgICAgIHRlc3RTdGVwUmVzdWx0SWQ6IHRoaXMudGVzdFN0ZXBSZXN1bHRJZCxcbiAgICAgIHN0ZXBOdW1iZXI6IHRoaXMuc3RlcE51bWJlcixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgZGlzcGxheVR5cGU6ICdjb25kaXRpb24nLFxuICAgICAgY29uZGl0aW9uVGV4dDogdGhpcy5jb25kaXRpb25UZXh0LFxuICAgICAgYnJhbmNoZXM6IHRoaXMuYnJhbmNoZXMsXG4gICAgICBzdGVwRGVsZXRlZDogdGhpcy5zdGVwRGVsZXRlZCxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICAgIG5lc3RlZFN0ZXBzOiBzdGVwc1RvVXNlLFxuICAgIH0gYXMgQ29uZGl0aW9uU3RlcENvbmZpZztcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBJbml0aWFsaXplIGxvYWRpbmcgc3RhdGUgaWYgYWxyZWFkeSBleHBhbmRlZFxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5uZXN0ZWRTdGVwcyAmJiB0aGlzLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgICB0aGlzLm5lc3RlZFN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgICAgICBpZiAoc3RlcElkKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gT25seSBwcm9jZXNzIGNoYW5nZXMgaWYgY29uZmlnIGhhcyBiZWVuIGluaXRpYWxpemVkIChuZ09uSW5pdCBoYXMgYmVlbiBjYWxsZWQpXG4gICAgaWYgKCF0aGlzLmNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgaWZDaGlsZCBpZiBpdCdzIHByb3ZpZGVkIGFuZCBicmFuY2hlcyBuZWVkIHRvIGJlIHVwZGF0ZWRcbiAgICBpZiAoY2hhbmdlc1snaWZDaGlsZCddICYmIHRoaXMuaWZDaGlsZCAmJiBBcnJheS5pc0FycmF5KHRoaXMuaWZDaGlsZCkgJiYgdGhpcy5pZkNoaWxkLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFByb2Nlc3MgaWZDaGlsZCB0byB1cGRhdGUgYnJhbmNoZXNcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyBicmFuY2hlcyByZWZsZWN0IHRoZSBleGVjdXRlZCBjb25kaXRpb24gZnJvbSBpZkNoaWxkXG4gICAgICBpZiAodGhpcy5nZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXIpIHtcbiAgICAgICAgLy8gVXNlIGhhbmRsZXIgdG8gZ2V0IHVwZGF0ZWQgYnJhbmNoZXMgZnJvbSBpZkNoaWxkXG4gICAgICAgIGNvbnN0IHN0ZXBXaXRoSWZDaGlsZCA9IHtcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICBpZkNoaWxkOiB0aGlzLmlmQ2hpbGRcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRCcmFuY2hlcyA9IHRoaXMuZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyKHN0ZXBXaXRoSWZDaGlsZCk7XG4gICAgICAgIGlmICh1cGRhdGVkQnJhbmNoZXMgJiYgdXBkYXRlZEJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmJyYW5jaGVzID0gdXBkYXRlZEJyYW5jaGVzO1xuICAgICAgICAgIHRoaXMuY29uZmlnLmJyYW5jaGVzID0gdXBkYXRlZEJyYW5jaGVzLm1hcCgoYnJhbmNoOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5icmFuY2gsXG4gICAgICAgICAgICBzdWJTdGVwczogYnJhbmNoLnN1YlN0ZXBzID8gWy4uLmJyYW5jaC5zdWJTdGVwc10gOiBbXVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTGl2ZSkge1xuICAgICAgLy8gVXBkYXRlIGJyYW5jaGVzIGlmIGNoYW5nZWQgLSBjcmVhdGUgZGVlcCBjb3B5IHRvIGVuc3VyZSBjaGFuZ2UgZGV0ZWN0aW9uIHdvcmtzXG4gICAgICBpZiAoY2hhbmdlc1snYnJhbmNoZXMnXSAmJiB0aGlzLmJyYW5jaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgZGVlcCBjb3B5IHRvIGVuc3VyZSBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24gcGlja3MgdXAgbmVzdGVkIGNoYW5nZXNcbiAgICAgICAgdGhpcy5jb25maWcuYnJhbmNoZXMgPSB0aGlzLmJyYW5jaGVzLm1hcCgoYnJhbmNoOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4uYnJhbmNoLFxuICAgICAgICAgIHN1YlN0ZXBzOiBicmFuY2guc3ViU3RlcHMgPyBbLi4uYnJhbmNoLnN1YlN0ZXBzXSA6IFtdXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5icmFuY2hlcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29uZmlnLmJyYW5jaGVzICE9PSB0aGlzLmJyYW5jaGVzKSB7XG4gICAgICAgIC8vIEZhbGxiYWNrOiBjaGVjayBpZiBicmFuY2hlcyBjaGFuZ2VkIGV2ZW4gaWYgbmdPbkNoYW5nZXMgZGlkbid0IGRldGVjdCBpdFxuICAgICAgICAvLyBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgbmVzdGVkIHN1YlN0ZXBzIHdlcmUgdXBkYXRlZFxuICAgICAgICBjb25zdCBjdXJyZW50U3ViU3RlcHNDb3VudCA9ICh0aGlzLmNvbmZpZy5icmFuY2hlcyB8fCBbXSkucmVkdWNlKChzdW06IG51bWJlciwgYjogYW55KSA9PiBzdW0gKyAoYi5zdWJTdGVwcz8ubGVuZ3RoIHx8IDApLCAwKTtcbiAgICAgICAgY29uc3QgbmV3U3ViU3RlcHNDb3VudCA9ICh0aGlzLmJyYW5jaGVzIHx8IFtdKS5yZWR1Y2UoKHN1bTogbnVtYmVyLCBiOiBhbnkpID0+IHN1bSArIChiLnN1YlN0ZXBzPy5sZW5ndGggfHwgMCksIDApO1xuXG4gICAgICAgIGlmIChjdXJyZW50U3ViU3RlcHNDb3VudCAhPT0gbmV3U3ViU3RlcHNDb3VudCB8fFxuICAgICAgICAgIHRoaXMuY29uZmlnLmJyYW5jaGVzICE9PSB0aGlzLmJyYW5jaGVzKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcuYnJhbmNoZXMgPSB0aGlzLmJyYW5jaGVzLm1hcCgoYnJhbmNoOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5icmFuY2gsXG4gICAgICAgICAgICBzdWJTdGVwczogYnJhbmNoLnN1YlN0ZXBzID8gWy4uLmJyYW5jaC5zdWJTdGVwc10gOiBbXVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgb3RoZXIgcHJvcGVydGllcyB0aGF0IG1pZ2h0IGNoYW5nZVxuICAgICAgaWYgKGNoYW5nZXNbJ3N0YXR1cyddICYmIHRoaXMuc3RhdHVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb25maWcuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzWydkdXJhdGlvbiddICYmIHRoaXMuZHVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbmZpZy5kdXJhdGlvbiA9IHRoaXMuZHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzWydzdGVwRGVsZXRlZCddKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLnN0ZXBEZWxldGVkID0gdGhpcy5zdGVwRGVsZXRlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZXNbJ2V4cGFuZGVkJ10gJiYgdGhpcy5leHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmV4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZXNbJ2NvbmRpdGlvblRleHQnXSAmJiB0aGlzLmNvbmRpdGlvblRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbmZpZy5jb25kaXRpb25UZXh0ID0gdGhpcy5jb25kaXRpb25UZXh0O1xuICAgICAgfVxuICAgICAgLy8gVXBkYXRlIGFjdGl2ZSBicmFuY2ggaWYgY2hhbmdlZCAtIGFsd2F5cyBkZXJpdmUgZnJvbSBleGVjdXRlZCBicmFuY2hcbiAgICAgIGlmIChjaGFuZ2VzWydhY3RpdmVCcmFuY2hTdGVwSWQnXSB8fCBjaGFuZ2VzWydicmFuY2hlcyddKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGV4ZWN1dGVkIGJyYW5jaCBjaGFuZ2VkXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVkQnJhbmNoQ2hhbmdlZCA9IGNoYW5nZXNbJ2JyYW5jaGVzJ10gJiYgXG4gICAgICAgICAgY2hhbmdlc1snYnJhbmNoZXMnXS5wcmV2aW91c1ZhbHVlICYmIFxuICAgICAgICAgIGNoYW5nZXNbJ2JyYW5jaGVzJ10uY3VycmVudFZhbHVlICYmXG4gICAgICAgICAgY2hhbmdlc1snYnJhbmNoZXMnXS5wcmV2aW91c1ZhbHVlLnNvbWUoKHByZXZCcmFuY2g6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEJyYW5jaCA9IGNoYW5nZXNbJ2JyYW5jaGVzJ10uY3VycmVudFZhbHVlW2luZGV4XTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2QnJhbmNoPy5leGVjdXRlZCAhPT0gY3VycmVudEJyYW5jaD8uZXhlY3V0ZWQ7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWx3YXlzIGRldGVybWluZSBhY3RpdmUgYnJhbmNoIGZyb20gZXhlY3V0ZWQgYnJhbmNoXG4gICAgICAgIHRoaXMuZGV0ZXJtaW5lQWN0aXZlQnJhbmNoKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbHRlciBuZXN0ZWQgc3RlcHMgYmFzZWQgb24gYWN0aXZlIGJyYW5jaFxuICAgICAgaWYgKGNoYW5nZXNbJ25lc3RlZFN0ZXBzJ10gfHwgY2hhbmdlc1snYWN0aXZlQnJhbmNoU3RlcElkJ10pIHtcbiAgICAgICAgdGhpcy5jb25maWcubmVzdGVkU3RlcHMgPSB0aGlzLm5lc3RlZFN0ZXBzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlc1snYnJhbmNoZXMnXSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5icmFuY2hlcyA9IHRoaXMuYnJhbmNoZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3N0ZXBEZWxldGVkJ10pIHtcbiAgICAgIHRoaXMuY29uZmlnLnN0ZXBEZWxldGVkID0gdGhpcy5zdGVwRGVsZXRlZDtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIGxvYWRpbmcgc3RhdGUgd2hlbiBuZXN0ZWQgc3RlcHMgYXJlIGFkZGVkIGFuZCBzdGVwIGlzIGV4cGFuZGVkXG4gICAgLy8gaWYgKGNoYW5nZXNbJ25lc3RlZFN0ZXBzJ10gJiYgdGhpcy5pc0V4cGFuZGVkICYmIHRoaXMubmVzdGVkU3RlcHMgJiYgdGhpcy5uZXN0ZWRTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhcIk5FU1RFRCBTVEVQU1wiLCB0aGlzLmxvYWRpbmdTdGVwcylcbiAgICAvLyAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgLy8gICB0aGlzLm5lc3RlZFN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgIC8vICAgICBpZiAoc3RlcElkKSB7XG4gICAgLy8gICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gICBjb25zb2xlLmxvZyhcIk5FU1RFRCBTVEVQU1wiLCB0aGlzLmxvYWRpbmdTdGVwcylcbiAgICAvLyB9XG5cbiAgICAvLyBJbml0aWFsaXplIGxvYWRpbmcgc3RhdGUgaWYgYWxyZWFkeSBleHBhbmRlZCB3aGVuIGNvbXBvbmVudCBpbml0aWFsaXplc1xuICAgIGlmIChjaGFuZ2VzWydleHBhbmRlZCddICYmIHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLm5lc3RlZFN0ZXBzICYmIHRoaXMubmVzdGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuY2xlYXIoKTtcbiAgICAgIHRoaXMubmVzdGVkU3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgICAgIGlmIChzdGVwSWQpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGVwcy5hZGQoU3RyaW5nKHN0ZXBJZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSB0b2dnbGUoKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzRXhwYW5kZWQgPSB0aGlzLmlzRXhwYW5kZWQ7XG4gICAgc3VwZXIudG9nZ2xlKCk7XG4gICAgaWYgKCF3YXNFeHBhbmRlZCAmJiB0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMub25FeHBhbmQuZW1pdCgpO1xuICAgICAgLy8gQWx3YXlzIGNhbGwgY2hpbGRyZW4gQVBJIGlmIGhhc0NoaWxkIGlzIHRydWUgKGxpa2Ugb3RoZXIgc3RlcCB0eXBlcylcbiAgICAgIC8vIElmIGlmQ2hpbGQgZXhpc3RzIGFuZCBoYXMgYW4gZXhlY3V0ZWQgY29uZGl0aW9uIChyZXN1bHQ6IFwiU1VDQ0VTU1wiKSwgdXNlIHRoYXQgY29uZGl0aW9uJ3MgdGVzdFN0ZXBSZXN1bHRJZFxuICAgICAgaWYgKHRoaXMub25FeHBhbmRIYW5kbGVyICYmIHRoaXMuY29uZmlnICYmIHRoaXMuaGFzQ2hpbGQpIHtcbiAgICAgICAgY29uc3QgY29uZmlnV2l0aE5lc3RlZCA9IHRoaXMuY29uZmlnIGFzIENvbmRpdGlvblN0ZXBDb25maWc7XG5cbiAgICAgICAgLy8gRmluZCB0aGUgZXhlY3V0ZWQgY29uZGl0aW9uIGZyb20gaWZDaGlsZCAodGhlIG9uZSB3aXRoIHJlc3VsdDogXCJTVUNDRVNTXCIpXG4gICAgICAgIGxldCBleGVjdXRlZENvbmRpdGlvblRlc3RTdGVwUmVzdWx0SWQgPSB0aGlzLnRlc3RTdGVwUmVzdWx0SWQ7IC8vIERlZmF1bHQgdG8gcGFyZW50J3MgSURcbiAgICAgICAgbGV0IGV4ZWN1dGVkQ29uZGl0aW9uSGFzQ2hpbGQgPSB0aGlzLmhhc0NoaWxkO1xuXG4gICAgICAgIGlmICh0aGlzLmlmQ2hpbGQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmlmQ2hpbGQpICYmIHRoaXMuaWZDaGlsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZXhlY3V0ZWRDb25kaXRpb24gPSB0aGlzLmlmQ2hpbGQuZmluZCgoY29uZGl0aW9uOiBhbnkpID0+XG4gICAgICAgICAgICBjb25kaXRpb24ucmVzdWx0ID09PSAnU1VDQ0VTUycgfHwgY29uZGl0aW9uLnJlc3VsdCA9PT0gJ1NVQ0NFU1MnXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChleGVjdXRlZENvbmRpdGlvbiAmJiBleGVjdXRlZENvbmRpdGlvbi50ZXN0U3RlcFJlc3VsdElkKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGV4ZWN1dGVkIGNvbmRpdGlvbidzIHRlc3RTdGVwUmVzdWx0SWQgYW5kIGhhc0NoaWxkXG4gICAgICAgICAgICBleGVjdXRlZENvbmRpdGlvblRlc3RTdGVwUmVzdWx0SWQgPSBleGVjdXRlZENvbmRpdGlvbi50ZXN0U3RlcFJlc3VsdElkO1xuICAgICAgICAgICAgZXhlY3V0ZWRDb25kaXRpb25IYXNDaGlsZCA9IGV4ZWN1dGVkQ29uZGl0aW9uLmhhc0NoaWxkIHx8IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBhIHN0ZXAgY29uZmlnIG9iamVjdCBmb3IgdGhlIGhhbmRsZXJcbiAgICAgICAgY29uc3Qgc3RlcENvbmZpZyA9IHtcbiAgICAgICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgICAgICBoYXNDaGlsZDogZXhlY3V0ZWRDb25kaXRpb25IYXNDaGlsZCxcbiAgICAgICAgICBleHBhbmRlZDogdHJ1ZSwgLy8gRW5zdXJlIGV4cGFuZGVkIGlzIHNldFxuICAgICAgICAgIHRlc3RTdGVwVHlwZTogKHRoaXMuY29uZmlnIGFzIGFueSkudGVzdFN0ZXBUeXBlIHx8ICdDT05ESVRJT05fSUYnLFxuICAgICAgICAgIGNoaWxkcmVuOiBjb25maWdXaXRoTmVzdGVkLm5lc3RlZFN0ZXBzIHx8IFtdLFxuICAgICAgICAgIHRlc3RTdGVwUmVzdWx0SWQ6IGV4ZWN1dGVkQ29uZGl0aW9uVGVzdFN0ZXBSZXN1bHRJZCwgLy8gVXNlIGV4ZWN1dGVkIGNvbmRpdGlvbidzIElEIGZvciBBUEkgY2FsbFxuICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgIGlmQ2hpbGQ6IHRoaXMuaWZDaGlsZCB8fCBudWxsLCAvLyBQYXNzIGlmQ2hpbGQgZm9yIGJyYW5jaCBleGVjdXRpb24gZGV0ZXJtaW5hdGlvblxuICAgICAgICAgIC8vIFN0b3JlIG9yaWdpbmFsIHBhcmVudCB0ZXN0U3RlcFJlc3VsdElkIGZvciB0cmFja2luZyBzdGF0ZXMgYW5kIHVwZGF0aW5nIHBhcmVudCBzdHJ1Y3R1cmVcbiAgICAgICAgICBvcmlnaW5hbFRlc3RTdGVwUmVzdWx0SWQ6IHRoaXMudGVzdFN0ZXBSZXN1bHRJZFxuICAgICAgICB9IGFzIEV4ZWN1dGlvblN0ZXBDb25maWcgJiB7IG9yaWdpbmFsVGVzdFN0ZXBSZXN1bHRJZD86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgICB0aGlzLm9uRXhwYW5kSGFuZGxlcihzdGVwQ29uZmlnKTtcbiAgICAgIH1cbiAgICAgIC8vIEluaXRpYWxpemUgbG9hZGluZyBzdGF0ZSBmb3IgYWxsIG5lc3RlZCBzdGVwc1xuICAgICAgaWYgKHRoaXMuY29uZmlnLm5lc3RlZFN0ZXBzICYmIHRoaXMuY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jb25maWcubmVzdGVkU3RlcHMuZm9yRWFjaChzdGVwID0+IHtcbiAgICAgICAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICAgICAgICBpZiAoc3RlcElkKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGVwcy5hZGQoU3RyaW5nKHN0ZXBJZCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICAvLyBDbGVhciBsb2FkaW5nIHN0YXRlIHdoZW4gY29sbGFwc2luZ1xuICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgZXhwYW5kZWQgc3RhdGUgaXMgc3luY2VkIHdpdGggY29uZmlnXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbmZpZy5leHBhbmRlZCA9IHRoaXMuaXNFeHBhbmRlZDtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiBhIHN0ZXAgaXMgc3RpbGwgbG9hZGluZ1xuICBpc05lc3RlZFN0ZXBMb2FkaW5nKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICByZXR1cm4gc3RlcElkID8gdGhpcy5sb2FkaW5nU3RlcHMuaGFzKFN0cmluZyhzdGVwSWQpKSA6IGZhbHNlO1xuICB9XG5cbiAgLy8gTWFyayBhIHN0ZXAgYXMgbG9hZGVkIChjYWxsZWQgd2hlbiBzdGVwLXJlbmRlcmVyIGlzIHJlYWR5KVxuICBtYXJrU3RlcExvYWRlZChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgaWYgKHN0ZXBJZCkge1xuICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuZGVsZXRlKFN0cmluZyhzdGVwSWQpKTtcbiAgICB9XG4gIH1cblxuICBnZXRFeGVjdXRlZEJyYW5jaCgpOiBDb25kaXRpb25CcmFuY2ggfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5icmFuY2hlcy5maW5kKGJyYW5jaCA9PiBicmFuY2guZXhlY3V0ZWQpIHx8IG51bGw7XG4gIH1cblxuICBnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKTogQ29uZGl0aW9uQnJhbmNoW10ge1xuICAgIHJldHVybiB0aGlzLmJyYW5jaGVzPy5maWx0ZXIoYnJhbmNoID0+ICFicmFuY2guZXhlY3V0ZWQpIHx8IFtdO1xuICB9XG5cbiAgZ2V0U3ViU3RlcEluZGV4KHN1YlN0ZXBzOiBhbnlbXSwgc3ViU3RlcDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3ViU3RlcHMuaW5kZXhPZihzdWJTdGVwKSArIDE7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGlzIHN0ZXAgaXMgY3VycmVudGx5IGxvYWRpbmcgbmVzdGVkIGNoaWxkcmVuXG4gIGlzU3RlcExvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdGVwTG9hZGluZ0hhbmRsZXIgJiYgdGhpcy5jb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyKHRoaXMuY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nIHx8IGZhbHNlO1xuICB9XG5cbiAgb25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljayhleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzID0gZXhwYW5kZWQ7XG4gIH1cblxuICBnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKTogU3ViU3RlcFtdIHtcbiAgICBjb25zdCBleGVjdXRlZEJyYW5jaCA9IHRoaXMuZ2V0RXhlY3V0ZWRCcmFuY2goKTtcbiAgICByZXR1cm4gZXhlY3V0ZWRCcmFuY2g/LnN1YlN0ZXBzIHx8IFtdO1xuICB9XG5cbiAgb25NYWtlQ3VycmVudEJhc2VsaW5lKGV2ZW50OiBtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1ha2VDdXJyZW50QmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvblVwbG9hZEJhc2VsaW5lKGV2ZW50OiB1cGxvYWRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRCYXNlbGluZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQW5hbHl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFuYWx5emUuZW1pdCgpO1xuICB9XG5cbiAgb25WaWV3RnVsbExvZ3MoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3RnVsbExvZ3MuZW1pdCgpO1xuICB9XG5cbiAgb25TZWxmSGVhbEFjdGlvbihldmVudDogU2VsZkhlYWxBY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZkhlYWxBY3Rpb24uZW1pdChldmVudCk7XG4gIH1cblxuICBnZXQgc2hvd1ZpZXdNb3JlQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRXhwYW5kZWQgJiYgQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzKSAmJlxuICAgICAgKFxuICAgICAgICAoQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5leHBlY3RlZCB8fCB0aGlzLmZhaWx1cmVEZXRhaWxzPy5hY3R1YWwpKSB8fFxuICAgICAgICAoQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5zY3JlZW5zaG90cz8uY3VycmVudCB8fCB0aGlzLmZhaWx1cmVEZXRhaWxzPy5zY3JlZW5zaG90cz8uYmFzZWxpbmUgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmRpZmZlcmVuY2UpXG4gICAgICAgICAgfHwgQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5sb2dzPy5sZW5ndGgpKSB8fFxuICAgICAgICAoQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5haUZpeEFwcGxpZWQgJiYgKHRoaXMuZmFpbHVyZURldGFpbHM/LmFpRml4TWVzc2FnZSB8fCB0aGlzLmNvbmZpZGVuY2UgfHwgdGhpcy5yZWFzb25pbmc/Lmxlbmd0aCkpKVxuICAgICAgKVxuICB9XG5cbiAgb25EZWJ1Z1BvaW50Q2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmRlYnVnUG9pbnRDaGFuZ2UuZW1pdCghdGhpcy5kZWJ1Z1BvaW50U2V0KTtcbiAgfVxuXG4gIG9uRWRpdFN0ZXAoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmVkaXRTdGVwLmVtaXQoKTtcbiAgfVxuXG4gIG9uQWRkU3RlcE9wdGlvblNlbGVjdChvcHRpb246IEFkZFN0ZXBNZW51T3B0aW9uLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuYWRkU3RlcE9wdGlvblNlbGVjdC5lbWl0KG9wdGlvbik7XG4gIH1cblxuICBvblN0ZXBNb3JlT3B0aW9uU2VsZWN0KG9wdGlvbjogU3RlcE1vcmVNZW51T3B0aW9uLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc3RlcE1vcmVPcHRpb25TZWxlY3QuZW1pdChvcHRpb24pO1xuICB9XG5cbiAgdG9nZ2xlSGVhZGVyKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGUoKTtcbiAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgdGhpcy5zaG93RmFpbGVkU3RlcERldGFpbHMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25TdGVwQ2xpY2tIYW5kbGVyKSB7XG4gICAgICBjb25zdCBzdGVwVG9QYXNzID0gdGhpcy5zdGVwIHx8IHRoaXMuY29uZmlnO1xuICAgICAgaWYgKHN0ZXBUb1Bhc3MpIHtcbiAgICAgICAgdGhpcy5vblN0ZXBDbGlja0hhbmRsZXIoc3RlcFRvUGFzcywgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBoYXNFeHBhbmRhYmxlQ29udGVudCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNCcmFuY2hTdWJTdGVwcyA9IHRoaXMuY29uZmlnLmJyYW5jaGVzPy5zb21lKGJyYW5jaCA9PlxuICAgICAgYnJhbmNoLnN1YlN0ZXBzICYmIGJyYW5jaC5zdWJTdGVwcy5sZW5ndGggPiAwXG4gICAgKSB8fCBmYWxzZTtcbiAgICBjb25zdCBoYXNOZXN0ZWRTdGVwcyA9ICEhKHRoaXMuY29uZmlnLm5lc3RlZFN0ZXBzICYmIHRoaXMuY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApO1xuICAgIHJldHVybiBoYXNCcmFuY2hTdWJTdGVwcyB8fCBoYXNOZXN0ZWRTdGVwcztcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lQWN0aXZlQnJhbmNoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5icmFuY2hlcyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmJyYW5jaGVzKSB8fCB0aGlzLmJyYW5jaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFsd2F5cyBmaW5kIHRoZSBleGVjdXRlZCBicmFuY2ggYW5kIHNldCBhY3RpdmVCcmFuY2hTdGVwSWQgZnJvbSBpdFxuICAgIGNvbnN0IGV4ZWN1dGVkQnJhbmNoID0gdGhpcy5icmFuY2hlcy5maW5kKChiOiBhbnkpID0+IGIuZXhlY3V0ZWQpIGFzIGFueTtcbiAgICBpZiAoZXhlY3V0ZWRCcmFuY2ggJiYgZXhlY3V0ZWRCcmFuY2guYnJhbmNoU3RlcElkKSB7XG4gICAgICAvLyBVcGRhdGUgYWN0aXZlQnJhbmNoU3RlcElkIHRvIG1hdGNoIGV4ZWN1dGVkIGJyYW5jaFxuICAgICAgaWYgKHRoaXMuYWN0aXZlQnJhbmNoU3RlcElkICE9PSBleGVjdXRlZEJyYW5jaC5icmFuY2hTdGVwSWQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVCcmFuY2hTdGVwSWQgPSBleGVjdXRlZEJyYW5jaC5icmFuY2hTdGVwSWQ7XG4gICAgICAgIC8vIFVwZGF0ZSBuZXN0ZWQgc3RlcHMgd2hlbiBleGVjdXRlZCBicmFuY2ggY2hhbmdlc1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG5vIGJyYW5jaCBpcyBleGVjdXRlZCwgZGVmYXVsdCB0byBmaXJzdCBicmFuY2ggKElGIGJyYW5jaCkgYnV0IGRvbid0IG1hcmsgaXQgYXMgZXhlY3V0ZWRcbiAgICBjb25zdCBmaXJzdEJyYW5jaCA9IHRoaXMuYnJhbmNoZXNbMF0gYXMgYW55O1xuICAgIGlmIChmaXJzdEJyYW5jaCAmJiBmaXJzdEJyYW5jaC5icmFuY2hTdGVwSWQpIHtcbiAgICAgIGlmICh0aGlzLmFjdGl2ZUJyYW5jaFN0ZXBJZCAhPT0gZmlyc3RCcmFuY2guYnJhbmNoU3RlcElkKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQnJhbmNoU3RlcElkID0gZmlyc3RCcmFuY2guYnJhbmNoU3RlcElkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQnJhbmNoQ2xpY2soYnJhbmNoOiBDb25kaXRpb25CcmFuY2gpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNMaXZlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vbkJyYW5jaENsaWNrRXZlbnQuZW1pdChicmFuY2gpO1xuICB9XG5cbiAgZ2V0QnJhbmNoQ2xhc3MoYnJhbmNoOiBhbnkpOiBzdHJpbmcge1xuICAgIC8vIElmIGJyYW5jaCBpcyBleGVjdXRlZCwgc2hvdyBncmVlbiBzdHlsaW5nXG4gICAgaWYgKGJyYW5jaC5leGVjdXRlZCkge1xuICAgICAgcmV0dXJuICdjcWEtYmctWyNEQ0ZDRTddIGNxYS10ZXh0LVsjMDA4MjM2XSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0I5RjhDRl0nO1xuICAgIH1cblxuICAgIC8vIEZvciBsaXZlIG1vZGU6IGlmIG5vIGJyYW5jaGVzIGFyZSBleGVjdXRlZCBidXQgdGhlcmUncyBhbiBhY3RpdmVCcmFuY2hTdGVwSWQsXG4gICAgLy8gc2hvdyB0aGUgYWN0aXZlIGJyYW5jaCB3aXRoIGJsdWUgYm9yZGVyXG4gICAgaWYgKHRoaXMuaXNMaXZlICYmICF0aGlzLmhhc0FueUV4ZWN1dGVkQnJhbmNoKCkpIHtcbiAgICAgIHJldHVybiAnY3FhLWJnLVsjRUZGNkZGXSBjcWEtdGV4dC1bIzFFNDBBRl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyMzQjgyRjZdJztcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0OiBncmF5IHN0eWxpbmcgZm9yIHVuZXhlY3V0ZWQgYnJhbmNoZXNcbiAgICByZXR1cm4gJ2NxYS1iZy1bI0YzRjRGNl0gY3FhLXRleHQtWyM5OUExQUZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSc7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW55IGJyYW5jaCBpcyBleGVjdXRlZC5cbiAgICovXG4gIHByaXZhdGUgaGFzQW55RXhlY3V0ZWRCcmFuY2goKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmJyYW5jaGVzIHx8ICFBcnJheS5pc0FycmF5KHRoaXMuYnJhbmNoZXMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJyYW5jaGVzLnNvbWUoKGI6IGFueSkgPT4gYi5leGVjdXRlZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBvbkp1bXBUb1RpbWVzdGFtcChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5qdW1wVG9UaW1lc3RhbXBIYW5kbGVyICYmIHRoaXMuc3RlcD8uZXhlY3V0ZWRSZXN1bHQ/LnZpZGVvX3N0YXJ0X3RpbWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnN0ZXA/LmV4ZWN1dGVkUmVzdWx0Py52aWRlb19zdGFydF90aW1lICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSB0eXBlb2YgdGhpcy5zdGVwLmV4ZWN1dGVkUmVzdWx0LnZpZGVvX3N0YXJ0X3RpbWUgPT09ICdudW1iZXInIFxuICAgICAgICA/IHRoaXMuc3RlcC5leGVjdXRlZFJlc3VsdC52aWRlb19zdGFydF90aW1lIFxuICAgICAgICA6IE51bWJlcih0aGlzLnN0ZXAuZXhlY3V0ZWRSZXN1bHQudmlkZW9fc3RhcnRfdGltZSk7XG4gICAgICBjb25zdCB0ZXN0U3RlcElkID0gdGhpcy5zdGVwPy50ZXN0U3RlcElkO1xuICAgICAgaWYgKGlzRmluaXRlKHRpbWVzdGFtcCkgJiYgdGltZXN0YW1wID49IDApIHtcbiAgICAgICAgdGhpcy5qdW1wVG9UaW1lc3RhbXBIYW5kbGVyKHRpbWVzdGFtcCwgdGVzdFN0ZXBJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtaW50ZXIgY3FhLXctZnVsbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1wLTJcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1wYi0xLjUgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVIZWFkZXIoJGV2ZW50KVwiPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dEZWJ1Z0ljb25cIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwic3RhdHVzID09PSAncnVubmluZycgPyAnQnJlYWtwb2ludCBjYW5ub3QgYmUgc2V0IG9uIGEgcnVubmluZyBzdGVwJyA6ICghIXN0ZXA/LmRlYnVnUG9pbnREaXNhYmxlZCB8fCAhIXBhcmVudFNraXBwZWQgPyAnQnJlYWtwb2ludCBjYW5ub3QgYmUgc2V0IG9uIHNraXBwZWQgc3RlcHMnIDogJycpXCJcbiAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLXJvdW5kZWQtZnVsbCBjcWEtdHJhbnNpdGlvbi1vcGFjaXR5IGZvY3VzOmNxYS1vdXRsaW5lLW5vbmVcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInN0YXR1cyA9PT0gJ3J1bm5pbmcnIHx8ICEhc3RlcD8uZGVidWdQb2ludERpc2FibGVkIHx8ICEhcGFyZW50U2tpcHBlZCA/ICdjcWEtY3Vyc29yLW5vdC1hbGxvd2VkIGNxYS1vcGFjaXR5LTQwIGNxYS1wb2ludGVyLWV2ZW50cy1ub25lJyA6ICdjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAnXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic3RhdHVzID09PSAncnVubmluZycgfHwgISFzdGVwPy5kZWJ1Z1BvaW50RGlzYWJsZWQgfHwgISFwYXJlbnRTa2lwcGVkXCJcbiAgICAgICAgICAoY2xpY2spPVwib25EZWJ1Z1BvaW50Q2xpY2soJGV2ZW50KVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiZGVidWdQb2ludFNldCA/ICdSZW1vdmUgZGVidWcgcG9pbnQnIDogJ1NldCBkZWJ1ZyBwb2ludCdcIj5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiZGVidWdQb2ludFNldFwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjZcIiBmaWxsPVwiI0M2MzUzNVwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWRlYnVnUG9pbnRTZXRcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiN1wiIGN5PVwiN1wiIHI9XCI2XCIgc3Ryb2tlPVwiI0M2MzUzNVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBTdGF0dXMgSWNvbiAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnXCIgPjxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuOTAwNSA0Ljk5OTk5QzExLjEyODkgNi4xMjA2NCAxMC45NjYyIDcuMjg1NzEgMTAuNDM5NSA4LjMwMDg5QzkuOTEyNzkgOS4zMTYwOCA5LjA1NCAxMC4xMiA4LjAwNjMxIDEwLjU3ODdDNi45NTg2MiAxMS4wMzczIDUuNzg1MzYgMTEuMTIyOSA0LjY4MjIgMTAuODIxMkMzLjU3OTA0IDEwLjUxOTUgMi42MTI2NSA5Ljg0ODY5IDEuOTQ0MTkgOC45MjA3MUMxLjI3NTczIDcuOTkyNzIgMC45NDU2MTEgNi44NjM2MSAxLjAwODg4IDUuNzIxNjlDMS4wNzIxNSA0LjU3OTc2IDEuNTI0OTkgMy40OTQwNCAyLjI5MTg4IDIuNjQ1NThDMy4wNTg3NiAxLjc5NzEyIDQuMDkzMzQgMS4yMzcyMSA1LjIyMzA4IDEuMDU5MjJDNi4zNTI4MiAwLjg4MTIzMyA3LjUwOTQ0IDEuMDk1OTIgOC41MDAwNSAxLjY2NzQ5XCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA1LjVMNiA3TDExIDJcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbHVyZScgfHwgc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsZWQnXCI+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk03LjUgNC41TDQuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC41IDQuNUw3LjUgNy41XCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCI+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZydcIj48c3ZnIGNsYXNzPVwiY3FhLWFuaW1hdGUtc3BpbiBjcWEtdGV4dC1bIzNCODJGNl1cIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjZcIiBjeT1cIjZcIiByPVwiNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgb3BhY2l0eT1cIjAuMjVcIi8+PHBhdGggZD1cIk02IDFBNSA1IDAgMCAxIDExIDZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiICpuZ0lmPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdza2lwcGVkJ1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGNxYS10ZXh0LVsjOUNBM0FGXSBjcWEtdGV4dC1bMTJweF1cIj5cbiAgICAgICAgc2tpcF9uZXh0XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgICA8IS0tIENvbmRpdGlvbiBJY29uIC0tPlxuICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiByeD1cIjRcIiBmaWxsPVwiI0ZGRURENVwiLz48cGF0aCBkPVwiTTYgNVY5XCIgc3Ryb2tlPVwiI0ZEOUEwMFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMCA3QzEwLjU1MjMgNyAxMSA2LjU1MjI4IDExIDZDMTEgNS40NDc3MiAxMC41NTIzIDUgMTAgNUM5LjQ0NzcyIDUgOSA1LjQ0NzcyIDkgNkM5IDYuNTUyMjggOS40NDc3MiA3IDEwIDdaXCIgc3Ryb2tlPVwiI0ZEOUEwMFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDExQzYuNTUyMjggMTEgNyAxMC41NTIzIDcgMTBDNyA5LjQ0NzcyIDYuNTUyMjggOSA2IDlDNS40NDc3MiA5IDUgOS40NDc3MiA1IDEwQzUgMTAuNTUyMyA1LjQ0NzcyIDExIDYgMTFaXCIgc3Ryb2tlPVwiI0ZEOUEwMFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMCA3QzEwIDcuNzk1NjUgOS42ODM5MyA4LjU1ODcxIDkuMTIxMzIgOS4xMjEzMkM4LjU1ODcxIDkuNjgzOTMgNy43OTU2NSAxMCA3IDEwXCIgc3Ryb2tlPVwiI0ZEOUEwMFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG5cbiAgICAgIDwhLS0gU3RlcCBOdW1iZXIgYW5kIFRpdGxlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLWZvbnQtaW50ZXJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxOHB4XVwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIj5cbiAgICAgICAgICB7eyBjb25maWc/LnN0ZXBOdW1iZXIgfX0uIENvbmRpdGlvbjogPHNwYW4gW2lubmVySFRNTF09XCJjb25maWcuY29uZGl0aW9uVGV4dFwiPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBDb25kaXRpb24gQmFkZ2UgLS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXB4LTEuNSBjcWEtcm91bmRlZC1mdWxsIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bI0VBNTgwQ10gY3FhLWJnLVsjRkZFREQ1XSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdXCI+XG4gICAgICAgICAgQ09ORElUSU9OXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuc3RlcERlbGV0ZWRcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjQjQyMzE4XSBjcWEtYmctWyNGRUYzRjJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZFRTRFMl1cIj5cbiAgICAgICAgICBEZWxldGVkXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLWZvbnQtaW50ZXJcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxmSGVhbEFuYWx5c2lzXCIgY2xhc3M9XCJjcWEtcHgtMS41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMDk3RTUzXSBjcWEtYmctWyNDRkYyRTVdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLW1pbi13LW1heCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtWzZweF1cIj5cbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjlcIiBoZWlnaHQ9XCI5XCIgdmlld0JveD1cIjAgMCA5IDlcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk00LjUwOTQxIDBDNC41NjQ4OSAwLjAyMjczODQgNC41ODg1OSAwLjA3ODI2NTIgNC42MTEzMSAwLjEyOTg0NkM0LjYyMjY5IDAuMTU5OSA0LjYzMzE0IDAuMTkwMTE3IDQuNjQzMjkgMC4yMjA1NzVDNC42NDcyNiAwLjIzMjI0NyA0LjY1MTIzIDAuMjQzOTE4IDQuNjU1MzIgMC4yNTU5NDNDNC43MDgwNiAwLjQxMzAwNSA0Ljc1NTA0IDAuNTcxNzQ4IDQuODAyMjkgMC43MzAzOEM0LjgxMjk3IDAuNzY2MTkgNC44MjM2OSAwLjgwMTk4NyA0LjgzNDQyIDAuODM3NzgzQzQuODg5MDUgMS4wMjAwNCA0Ljk0MzI3IDEuMjAyNCA0Ljk5NzE5IDEuMzg0ODRDNS4wMDQ3NiAxLjQxMDQ3IDUuMDEyMzQgMS40MzYwOSA1LjAxOTkyIDEuNDYxNzFDNS4wNDEyOCAxLjUzMzk1IDUuMDYyNjIgMS42MDYxOSA1LjA4MzgzIDEuNjc4NDdDNS4xMjg2NyAxLjgzMTIgNS4xNzQ3MyAxLjk4MzQ3IDUuMjIzNzggMi4xMzUwMUM1LjIyODA3IDIuMTQ4MjcgNS4yMzIzNiAyLjE2MTUyIDUuMjM2NzcgMi4xNzUxOEM1LjM2NDIgMi41NjUgNS41NDQ4MiAyLjkxNDM3IDUuODQwOSAzLjIxMTk2QzUuODQ4MjMgMy4yMTk3IDUuODU1NTYgMy4yMjc0NCA1Ljg2MzEyIDMuMjM1NDFDNS45ODk1IDMuMzY0MzcgNi4xNTE2OSAzLjQ2NzcxIDYuMzEzOCAzLjU1MTExQzYuMzIyMDYgMy41NTU0MiA2LjMzMDMxIDMuNTU5NzQgNi4zMzg4MiAzLjU2NDE5QzYuODE1ODcgMy44MDkyNSA3LjM4OTUxIDMuOTE3MDQgNy45MDYxOSA0LjA2MDVDOC4xMzI2IDQuMTIzNCA4LjM1ODMgNC4xODgyOSA4LjU4MzE3IDQuMjU2MDNDOC41OTg5NyA0LjI2MDc5IDguNjE0NzggNC4yNjU1NCA4LjYzMDU4IDQuMjcwMjhDOC42Nzc4NCA0LjI4NDQ1IDguNzI1IDQuMjk4ODcgOC43NzIxMSA0LjMxMzQ3QzguNzgzMSA0LjMxNjc5IDguNzk0MDggNC4zMjAxMSA4LjgwNTM5IDQuMzIzNTNDOC44NzAyOSA0LjM0NDA2IDguOTMyMzkgNC4zNjgyOSA4Ljk4NTY2IDQuNDEwMjdDOS4wMDE5MSA0LjQ0NDE4IDkuMDAxOTEgNC40NDQxOCA4Ljk5NzQ4IDQuNDc4MUM4Ljk0NTY0IDQuNTI3MzYgOC44OTQyIDQuNTUwNDYgOC44MjU3OCA0LjU3M0M4LjgxNiA0LjU3NjMyIDguODA2MjIgNC41Nzk2NSA4Ljc5NjE0IDQuNTgzMDhDOC42ODA2MSA0LjYyMTgzIDguNTYzNTEgNC42NTU3NSA4LjQ0NjI2IDQuNjg5MzVDOC40MjIyIDQuNjk2MyA4LjM5ODE0IDQuNzAzMjYgOC4zNzQwOCA0LjcxMDIxQzguMjI1NzEgNC43NTMwMSA4LjA3NzA4IDQuNzk0OSA3LjkyODI5IDQuODM2MzJDNy43MzIzMiA0Ljg5MDg4IDcuNTM2NjMgNC45NDYzNCA3LjM0MTEzIDUuMDAyNDNDNy4zMDkxIDUuMDExNjIgNy4yNzcwNiA1LjAyMDc4IDcuMjQ1MDEgNS4wMjk5MUM3LjA3NjcxIDUuMDc3ODYgNi45MDkyMyA1LjEyNzUzIDYuNzQzMTQgNS4xODIwOEM2LjcyOTM3IDUuMTg2NTkgNi43MTU1OSA1LjE5MTEgNi43MDEzOSA1LjE5NTc0QzYuMTQ1MTEgNS4zODA4MiA1LjcyMTEgNS43MjYwOSA1LjQ1NTcxIDYuMjMwOTlDNS4zMTI2MyA2LjUxNDc1IDUuMjI4MjMgNi44MjE2MSA1LjE0MjE0IDcuMTI0NDdDNS4xMTg4NCA3LjIwNjE5IDUuMDk0MDkgNy4yODc0NSA1LjA2OTA1IDcuMzY4NjlDNS4wNDk0IDcuNDMyNjEgNS4wMzAyIDcuNDk2NjMgNS4wMTE0OSA3LjU2MDgxQzUuMDA5MjYgNy41Njg0NCA1LjAwNzAzIDcuNTc2MDggNS4wMDQ3MyA3LjU4Mzk1QzQuOTkzOTQgNy42MjA5NCA0Ljk4MzE5IDcuNjU3OTMgNC45NzI1MiA3LjY5NDk1QzQuOTQ1MTkgNy43ODg3OSA0LjkxNTc4IDcuODgxODcgNC44ODU1NSA3Ljk3NDg5QzQuODMxOTEgOC4xNDAyMSA0Ljc4MzEgOC4zMDY3NCA0LjczNDU5IDguNDczNUM0LjY2MTQ0IDguNzI0NTcgNC42NjE0NCA4LjcyNDU3IDQuNjE5OTcgOC44NDUyN0M0LjYxNzIxIDguODUzMzcgNC42MTQ0NiA4Ljg2MTQ3IDQuNjExNjMgOC44Njk4MkM0LjU5NjQ5IDguOTEyNzggNC41ODA5MiA4Ljk1MjMzIDQuNTUyMjYgOC45ODg3QzQuNTA4NjcgOC45OTc4OCA0LjUwODY3IDguOTk3ODggNC40Njk1MSA5QzQuNDI0NzMgOC45Mzc1OSA0LjM5NTA4IDguODc3MTEgNC4zNzEzMyA4LjgwNTA4QzQuMzY3ODcgOC43OTQ4NyA0LjM2NDQxIDguNzg0NjYgNC4zNjA4NSA4Ljc3NDE1QzQuMzE2ODQgOC42NDI0OCA0LjI3NzUxIDguNTA5NDYgNC4yMzgxNyA4LjM3NjQ2QzQuMjI5MTYgOC4zNDYwNCA0LjIyMDExIDguMzE1NjQgNC4yMTEwNSA4LjI4NTI0QzQuMTQzNiA4LjA1ODYzIDQuMDc3MjUgNy44MzE3NCA0LjAxMTAxIDcuNjA0ODFDMy43MzUwNyA2LjQ4MjI0IDMuNzM1MDcgNi40ODIyNCAzLjAzOSA1LjU3NDY2QzMuMDI3ODQgNS41NjU5NiAzLjAxNjY5IDUuNTU3MjYgMy4wMDUxOSA1LjU0ODNDMi41NDkxMyA1LjE5OTAyIDEuOTQ4MzQgNS4wNjk2OSAxLjM5ODE1IDQuOTE4MTNDMS4yNjIwNyA0Ljg4MDYyIDEuMTI2MDUgNC44NDI5MyAwLjk5MDAzMiA0LjgwNTIzQzAuOTc4MTM4IDQuODAxOTMgMC45NzgxMzggNC44MDE5MyAwLjk2NjAwMyA0Ljc5ODU3QzAuNzY5ODExIDQuNzQ0MTcgMC41NzM2NzQgNC42ODk2MyAwLjM3ODIyNCA0LjYzMjgzQzAuMzY5OTU2IDQuNjMwNDUgMC4zNjE2ODggNC42MjgwNiAwLjM1MzE2OSA0LjYyNTYxQzAuMDUyODk4OSA0LjUzODgzIDAuMDUyODk4OSA0LjUzODgzIDAuMDAwNjQ2NTM3IDQuNDc4MUMtMC4wMDA4MzEyNjEgNC40NTA1NCAtMC4wMDA4MzEyNjEgNC40NTA1NCAwLjAxMjQ2ODkgNC40MjE1N0MwLjA2NzA4MzUgNC4zNzA0IDAuMTIwMDc3IDQuMzQ4NDggMC4xOTIxNiA0LjMyNjE5QzAuMjAyNTk3IDQuMzIyODQgMC4yMTMwMzQgNC4zMTk0OCAwLjIyMzc4NyA0LjMxNjAzQzAuMjU1NzUzIDQuMzA1ODIgMC4yODc3ODggNC4yOTU4NCAwLjMxOTg1MSA0LjI4NTkyQzAuMzI5MDAxIDQuMjgzMDUgMC4zMzgxNTEgNC4yODAxNyAwLjM0NzU3OCA0LjI3NzIyQzAuNDEyMjg1IDQuMjU2OTMgMC40NzcyMjUgNC4yMzc0IDAuNTQyMjU5IDQuMjE4MDlDMC41NTgyNCA0LjIxMzMyIDAuNTU4MjQgNC4yMTMzMiAwLjU3NDU0NCA0LjIwODQ2QzAuODUyMjY5IDQuMTI1ODcgMS4xMzE4MSA0LjA0OSAxLjQxMTI2IDMuOTcxOTZDMS42MTk1IDMuOTE0NTUgMS44MjczOCAzLjg1NjE4IDIuMDM0NiAzLjc5NTQ4QzIuMDQ0MTMgMy43OTI3MSAyLjA1MzY1IDMuNzg5OTMgMi4wNjM0NiAzLjc4NzA3QzIuNTQzNSAzLjY0Njk2IDMuMDEyNzggMy40NDgxNiAzLjMyMjc0IDMuMDUzN0MzLjMyNzM4IDMuMDQ3ODUgMy4zMzIwMiAzLjA0MiAzLjMzNjggMy4wMzU5N0MzLjY4MTk3IDIuNTk4MTUgMy44MTY1OCAyLjA2NTcyIDMuOTY2OTUgMS41NDYyMUM0LjAxNjQzIDEuMzc1MzQgNC4wNjY0OSAxLjIwNDY0IDQuMTE2NzMgMS4wMzM5OUM0LjEzMDY0IDAuOTg2NzMzIDQuMTQ0NTMgMC45Mzk0NzEgNC4xNTgzNiAwLjg5MjE5NEM0LjIxMzk0IDAuNzAyMjg5IDQuMjcwMzUgMC41MTI2NDIgNC4zMyAwLjMyMzg2NEM0LjMzNTU4IDAuMzA2MTg2IDQuMzQxMTQgMC4yODg1MDEgNC4zNDY2NiAwLjI3MDgwN0M0LjQzMDE3IDAuMDAzOTg3NjEgNC40MzAxNyAwLjAwMzk4NzYxIDQuNTA5NDEgMFpcIiBmaWxsPVwiIzBEQkQ3RFwiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy4yMzU5NyAwLjU1NDg1OUM3LjI5MDI0IDAuNjEzNTk5IDcuMzAxMDkgMC42ODI2MzEgNy4zMTc5OSAwLjc1NzYzOEM3LjM3NDM2IDAuOTkzMjY5IDcuNDM5MjkgMS4yMDk5MyA3LjY2NDY3IDEuMzQ2ODFDNy44MDM3MSAxLjQyMDM1IDcuOTY5NDQgMS40NTM4MSA4LjEyMzUgMS40ODU0MUM4LjE4ODU0IDEuNDk5MDIgOC4yNDM0OCAxLjUxNzA5IDguMjk5MjQgMS41NTMyMUM4LjMxMTgxIDEuNTcyMjkgOC4zMTE4MSAxLjU3MjI5IDguMzExMDcgMS42MDU0OUM4LjI5ODE0IDEuNjQ1ODggOC4yODY3OCAxLjY1ODkgOC4yNTI2OSAxLjY4NTMzQzguMjE1NDMgMS42OTcyNiA4LjIxNTQzIDEuNjk3MjYgOC4xNzA2OCAxLjcwNjUzQzguMTUzNzUgMS43MTAyNSA4LjEzNjgzIDEuNzE0IDguMTE5OTIgMS43MTc3OUM4LjExMDg2IDEuNzE5OCA4LjEwMTgxIDEuNzIxODEgOC4wOTI0NyAxLjcyMzg4QzcuODE2OTYgMS43ODQ4MiA3LjgxNjk2IDEuNzg0ODIgNy41Nzg4MiAxLjkyMjczQzcuNTcxMDggMS45Mjg2OSA3LjU2MzMzIDEuOTM0NjYgNy41NTUzNiAxLjk0MDhDNy4zODUxNiAyLjA4NDMxIDcuMzQ5MTYgMi4zMjMwMyA3LjI5NzkzIDIuNTIzMDFDNy4yOTQ5OSAyLjUzMzk5IDcuMjkyMDYgMi41NDQ5NyA3LjI4OTAzIDIuNTU2MjlDNy4yODY0OSAyLjU2NjAxIDcuMjgzOTUgMi41NzU3MyA3LjI4MTMzIDIuNTg1NzVDNy4yNzAyOCAyLjYxNTQ0IDcuMjU4ODEgMi42MzQ3OSA3LjIzNTk3IDIuNjU3NTRDNy4xNzIzNCAyLjY2NTI3IDcuMTcyMzQgMi42NjUyNyA3LjE0MTM5IDIuNjU3NTRDNy4wOTIxNiAyLjYyMTA2IDcuMDgxMTQgMi41Nzk1IDcuMDY4MjggMi41MjM2NUM3LjA2NjEzIDIuNTE1MDEgNy4wNjM5OCAyLjUwNjM2IDcuMDYxNzYgMi40OTc0NUM3LjA1NDg5IDIuNDY5ODMgNy4wNDgyNCAyLjQ0MjE3IDcuMDQxNjQgMi40MTQ0OUM2Ljk4OTc5IDIuMTk4OTcgNi45MzEyNiAxLjk4NzUxIDYuNzI0NTEgMS44NjExOEM2LjU2MjkzIDEuNzc1MDEgNi4zNjY0NiAxLjczNDI2IDYuMTg1ODcgMS43MDEzNkM2LjEzNjM3IDEuNjkxNTEgNi4xMDgwMiAxLjY3OTExIDYuMDc3MzggMS42NDAxMkM2LjA3MDczIDEuNjAwNTUgNi4wNzA3MyAxLjYwMDU1IDYuMDc3MzggMS41NjA5OEM2LjEyNDQ3IDEuNTE0MzcgNi4xNzQwMiAxLjUwMjk5IDYuMjM3NzIgMS40ODg5MUM2LjI1Nzc4IDEuNDg0MTYgNi4yNzc4NCAxLjQ3OTM4IDYuMjk3ODkgMS40NzQ1NkM2LjMwODI1IDEuNDcyMDkgNi4zMTg2MSAxLjQ2OTYyIDYuMzI5MjkgMS40NjcwN0M2LjM4MjEyIDEuNDU0MDcgNi40MzQ0MyAxLjQzOTQ5IDYuNDg2NzMgMS40MjQ2MkM2LjQ5NjIzIDEuNDIxOTggNi41MDU3MyAxLjQxOTM1IDYuNTE1NTIgMS40MTY2M0M2LjYyMTgyIDEuMzg2MjQgNi43MTM1NiAxLjM0NzM3IDYuNzk4NTQgMS4yNzgzNkM2LjgwNjQ3IDEuMjcyMTMgNi44MTQzOSAxLjI2NTg5IDYuODIyNTUgMS4yNTk0NkM2Ljk1NDggMS4xNDU2NSA2Ljk5OTc0IDAuOTc0Njc0IDcuMDQwNTMgMC44MTUxMzRDNy4wNDM2NCAwLjgwMzAyMiA3LjA0Njc1IDAuNzkwOTEgNy4wNDk5NSAwLjc3ODQzMkM3LjA1NjE0IDAuNzU0MTAxIDcuMDYyMjIgMC43Mjk3NDMgNy4wNjgxNyAwLjcwNTM1OUM3LjA3MjQzIDAuNjg4Mzk0IDcuMDcyNDMgMC42ODgzOTQgNy4wNzY3OCAwLjY3MTA4NkM3LjA3OTI3IDAuNjYwOTUxIDcuMDgxNzUgMC42NTA4MTYgNy4wODQzMSAwLjY0MDM3M0M3LjA5NTIxIDAuNjA4MTA4IDcuMTA5NTIgMC41ODI3NzIgNy4xMjk1NyAwLjU1NDg1OUM3LjE2ODEgMC41MzY0MzUgNy4xOTUxNSAwLjU0NDc2NCA3LjIzNTk3IDAuNTU0ODU5WlwiIGZpbGw9XCIjMDc1RjNGXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xLjc5NTQ1IDYuMjQ3MUMxLjgwOTUxIDYuMjQ3MTkgMS44MDk1MSA2LjI0NzE5IDEuODIzODYgNi4yNDcyOUMxLjkyNDc3IDYuMjUwMjIgMS45OTMwNCA2LjI4MTE1IDIuMDY3MzYgNi4zNDYwMUMyLjE1Mzg0IDYuNDM1MzMgMi4xOTM3NyA2LjUzNjExIDIuMTkxNSA2LjY1NjVDMi4xODE3OCA2Ljc1NDEyIDIuMTIxNTggNi44MzkzNSAyLjA0NzczIDYuOTA1MzNDMS45NjA4MSA2Ljk3MjQyIDEuODczMTMgNi45OTQ1OSAxLjc2MjA2IDYuOTkxNDlDMS42Njg0MSA2Ljk4MTA3IDEuNTgwMyA2LjkzODUyIDEuNTEzOTMgNi44NzQ1MUMxLjQzMTM4IDYuNzY2ODEgMS40MDcyNSA2LjY2ODAzIDEuNDE5MzUgNi41MzUzN0MxLjQ0NDMzIDYuNDMwOTIgMS41MTYzNyA2LjM0NjEzIDEuNjA4NSA2LjI4NjY2QzEuNjcyNTEgNi4yNTU2NCAxLjcyMzk5IDYuMjQ2NTIgMS43OTU0NSA2LjI0NzFaXCIgZmlsbD1cIiMwREJEN0RcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICBTZWxmLWhlYWxlZFxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHktMC41IGNxYS1weC0xIGNxYS1iZy1bIzYzNjZGMTFBXSBjcWEtbWwtMSBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eVwiIFxuICAgICAgICAgICAgICpuZ0lmPVwic3RlcD8uZXhlY3V0ZWRSZXN1bHQ/LnZpZGVvX3N0YXJ0X3RpbWVcIiBcbiAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInSnVtcCB0byB2aWRlbyB0aW1lJ1wiIFxuICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwib25KdW1wVG9UaW1lc3RhbXAoJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjNjM2MzYzXSAhY3FhLXRleHQtWzEwcHhdICFjcWEtdy1bMTBweF0gIWNxYS1oLVsxMHB4XVwiPlxuICAgICAgICAgICAgcGxheV9hcnJvd1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bOHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjNjM2MzYzXVwiPlxuICAgICAgICAgICAge3sgZm9ybWF0RHVyYXRpb25DbG9jayhzdGVwPy5leGVjdXRlZFJlc3VsdD8udmlkZW9fc3RhcnRfdGltZSB8fCAwKSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNEZWJ1Z1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTAuNSBjcWEtdGV4dC1bIzlDQTNBRl1cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cIiFzdGVwPy5pc1N0ZXBHcm91cENoaWxkcmVuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY3FhLXAtMCBjcWEtYm9yZGVyLTAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtb3BhY2l0eS04MCBjcWEtdHJhbnNpdGlvbi1vcGFjaXR5IGZvY3VzOmNxYS1vdXRsaW5lLW5vbmVcIiBhcmlhLWxhYmVsPVwiRWRpdFwiIChjbGljayk9XCJvbkVkaXRTdGVwKCRldmVudClcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXRleHQtWzE0cHhdICFjcWEtdy1bMTRweF0gIWNxYS1oLVsxNHB4XVwiPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhc3RlcD8uaXNTdGVwR3JvdXBDaGlsZHJlblwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNxYS1wLTAgY3FhLWJvcmRlci0wIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBmb2N1czpjcWEtb3V0bGluZS1ub25lXCIgYXJpYS1sYWJlbD1cIkFkZFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJhZGRTdGVwTWVudVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdGV4dC1bMTRweF0gIWNxYS13LVsxNHB4XSAhY3FhLWgtWzE0cHhdXCI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtbWVudSAjYWRkU3RlcE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJjcWEtYWRkLXN0ZXAtbWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiIHlQb3NpdGlvbj1cImJlbG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBvcHQgb2YgYWRkU3RlcE1lbnVPcHRpb25zXCIgKGNsaWNrKT1cIm9uQWRkU3RlcE9wdGlvblNlbGVjdChvcHQsICRldmVudClcIj5cbiAgICAgICAgICAgIHt7IG9wdC5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNxYS1wLTAgY3FhLWJvcmRlci0wIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBmb2N1czpjcWEtb3V0bGluZS1ub25lXCIgYXJpYS1sYWJlbD1cIk1vcmUgb3B0aW9uc1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJzdGVwTW9yZU1lbnVcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXRleHQtWzE0cHhdICFjcWEtdy1bMTRweF0gIWNxYS1oLVsxNHB4XVwiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LW1lbnUgI3N0ZXBNb3JlTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImNxYS1zdGVwLW1vcmUtbWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiIHlQb3NpdGlvbj1cImJlbG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBvcHQgb2YgZWZmZWN0aXZlU3RlcE1vcmVNZW51T3B0aW9uc1wiIChjbGljayk9XCJvblN0ZXBNb3JlT3B0aW9uU2VsZWN0KG9wdCwgJGV2ZW50KVwiPnt7IG9wdC5sYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PlxuICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihjb25maWcuZHVyYXRpb24pIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHN2ZyAqbmdJZj1cImhhc0V4cGFuZGFibGVDb250ZW50XCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTMuNSA1TDcgOC41TDEwLjUgNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQnJhbmNoIEJ1dHRvbnMgLSBSZWFkLW9ubHksIHNob3dpbmcgZXhlY3V0ZWQgc3RhdHVzIG9ubHkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weC00IGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXSBjcWEtZmxleC13cmFwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBicmFuY2ggb2YgY29uZmlnLmJyYW5jaGVzXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktMSBjcWEtcm91bmRlZCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QnJhbmNoQ2xhc3MoYnJhbmNoKVwiIChjbGljayk9XCJvbkJyYW5jaENsaWNrKGJyYW5jaClcIj5cbiAgICAgICAgPCEtLSBDaGVja21hcmsgaWNvbiBmb3IgZXhlY3V0ZWQgYnJhbmNoIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYnJhbmNoLmV4ZWN1dGVkXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDNMNC41IDguNUwyIDZcIiBzdHJva2U9XCIjMDA4MjM2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4+e3sgYnJhbmNoLnR5cGUudG9VcHBlckNhc2UoKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkICYmICFpc0xvYWRpbmdcIj5cblxuICAgIDwhLS0gRXhlY3V0ZWQgQnJhbmNoIFN1Yi1zdGVwcyAtLT5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBicmFuY2ggb2YgY29uZmlnLmJyYW5jaGVzXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYnJhbmNoLmV4ZWN1dGVkICYmIGJyYW5jaC5zdWJTdGVwc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtcGItMSBjcWEtbWwtOVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJzFweCBzb2xpZCAjRjNGNEY2J1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IHN1YlN0ZXAgb2YgYnJhbmNoLnN1YlN0ZXBzXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weS1bNS41cHhdIGNxYS1weC0zXCI+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBTdWItc3RlcCBTdGF0dXMgSWNvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycgfHwgc3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAncGFzc2VkJ1wiID5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuOTAwNSA0Ljk5OTk5QzExLjEyODkgNi4xMjA2NCAxMC45NjYyIDcuMjg1NzEgMTAuNDM5NSA4LjMwMDg5QzkuOTEyNzkgOS4zMTYwOCA5LjA1NCAxMC4xMiA4LjAwNjMxIDEwLjU3ODdDNi45NTg2MiAxMS4wMzczIDUuNzg1MzYgMTEuMTIyOSA0LjY4MjIgMTAuODIxMkMzLjU3OTA0IDEwLjUxOTUgMi42MTI2NSA5Ljg0ODY5IDEuOTQ0MTkgOC45MjA3MUMxLjI3NTczIDcuOTkyNzIgMC45NDU2MTEgNi44NjM2MSAxLjAwODg4IDUuNzIxNjlDMS4wNzIxNSA0LjU3OTc2IDEuNTI0OTkgMy40OTQwNCAyLjI5MTg4IDIuNjQ1NThDMy4wNTg3NiAxLjc5NzEyIDQuMDkzMzQgMS4yMzcyMSA1LjIyMzA4IDEuMDU5MjJDNi4zNTI4MiAwLjg4MTIzMyA3LjUwOTQ0IDEuMDk1OTIgOC41MDAwNSAxLjY2NzQ5XCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA1LjVMNiA3TDExIDJcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gRmFpbHVyZSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbHVyZScgfHwgc3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbGVkJ1wiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk03LjUgNC41TDQuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC41IDQuNUw3LjUgNy41XCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFBlbmRpbmcgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBSdW5uaW5nIC0gU2hvdyBzcGlubmVyIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdWJTdGVwPy5zdGF0dXM/LnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJ1wiPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1hbmltYXRlLXNwaW4gY3FhLXRleHQtWyMzQjgyRjZdXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNlwiIGN5PVwiNlwiIHI9XCI1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBvcGFjaXR5PVwiMC4yNVwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDFBNSA1IDAgMCAxIDExIDZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgXG5cbiAgICAgICAgICA8IS0tIFN1Yi1zdGVwIERlc2NyaXB0aW9uIC0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtdGV4dC1bMTNweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10ZXh0LVsjMzY0MTUzXVwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIj5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic3ViU3RlcC5kZXNjcmlwdGlvblwiPjwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8IS0tIFN1Yi1zdGVwIER1cmF0aW9uIC0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtbWV0YWRhdGEta2V5XCI+XG4gICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihzdWJTdGVwLmR1cmF0aW9uKSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVW5leGVjdXRlZCBCcmFuY2ggTWVzc2FnZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCkubGVuZ3RoID4gMCAmJiBnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKS5sZW5ndGggPCAyXCIgY2xhc3M9XCJjcWEtbWwtOVwiPlxuICAgICAgPHAgY2xhc3M9XCJjcWEtcHgtMyBjcWEtcHktWzEwcHhdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS10ZXh0LVsjNzM3MzczXSBjcWEtaXRhbGljXCI+XG4gICAgICAgIHt7IGdldFVuZXhlY3V0ZWRCcmFuY2hlcygpPy5bMF0/LnR5cGU/LnRvVXBwZXJDYXNlKCkgfX0gYnJhbmNoIG5vdCBleGVjdXRlZFxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImdldFVuZXhlY3V0ZWRCcmFuY2hlcygpLmxlbmd0aCA+IDFcIiBjbGFzcz1cImNxYS1tbC05XCI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1weC0zIGNxYS1weS1bMTBweF0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtWyM3MzczNzNdIGNxYS1pdGFsaWNcIj5cbiAgICAgICAge3sgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk/LlswXT8udHlwZT8udG9VcHBlckNhc2UoKSB9fSBhbmQge3sgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk/LlsxXT8udHlwZT8udG9VcHBlckNhc2UoKSB9fSBicmFuY2hlcyBub3QgZXhlY3V0ZWRcbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTmVzdGVkIFN0ZXBzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJoYXNDaGlsZCB8fCAoY29uZmlnLm5lc3RlZFN0ZXBzICYmIGNvbmZpZy5uZXN0ZWRTdGVwcy5sZW5ndGggPiAwKVwiIGNsYXNzPVwiY3FhLW1sLTkgY3FhLXBiLTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206ICcxcHggc29saWQgI0YzRjRGNidcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzczNzM3M10gY3FhLXB5LVsycHhdIGNxYS1weC0zXCIgKm5nSWY9XCJjb25maWcubmVzdGVkU3RlcHMgJiYgY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDBcIj5OZXN0ZWQgc3RlcHM8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1wbC1bMThweF1cIiBzdHlsZT1cImJvcmRlci1sZWZ0OiAycHggc29saWQgI0M1QzdGQTtcIj5cbiAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciBmb3IgbmVzdGVkIHN0ZXBzIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzQ2hpbGQgJiYgKCFjb25maWcubmVzdGVkU3RlcHMgfHwgY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA9PT0gMCkgJiYgaXNTdGVwTG9hZGluZygpXCIgXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weS0yIGNxYS1weC0zXCI+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1hbmltYXRlLXNwaW4gY3FhLXRleHQtWyMzQjgyRjZdXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjdcIiBjeT1cIjdcIiByPVwiNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgb3BhY2l0eT1cIjAuMjVcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTcgMUE2IDYgMCAwIDEgMTMgN1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTNweF0gY3FhLXRleHQtWyM3MzczNzNdXCI+TG9hZGluZyBuZXN0ZWQgc3RlcHMuLi48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0ZXAgb2YgY29uZmlnLm5lc3RlZFN0ZXBzOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgPCEtLSBXcmFwcGVyIHRvIHNob3cgc2tlbGV0b24gd2hpbGUgc3RlcC1yZW5kZXJlciBpcyBsb2FkaW5nIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXN0ZXAtcmVuZGVyZXItd3JhcHBlclwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCInZXhjLScgKyBzdGVwLmlkXCJcbiAgICAgICAgICAgIFtjbGFzcy5sb2FkZWRdPVwiIWlzTmVzdGVkU3RlcExvYWRpbmcoc3RlcClcIj5cbiAgICAgICAgICAgIDwhLS0gTG9hZGluZyBza2VsZXRvbiBvdmVybGF5IC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaXNOZXN0ZWRTdGVwTG9hZGluZyhzdGVwKVwiIGNsYXNzPVwiY3FhLXN0ZXAtc2tlbGV0b24tb3ZlcmxheVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXN0ZXAtc2tlbGV0b24gY3FhLW14LTMgY3FhLW15LTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwhLS0gVXNlIHN0ZXAtcmVuZGVyZXIgZm9yIGFsbCBuZXN0ZWQgc3RlcHMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIC0tPlxuICAgICAgICAgICAgPCEtLSBUaGUgc3RlcC1yZW5kZXJlciB3aWxsIGR5bmFtaWNhbGx5IGxvYWQgdGhlIGFwcHJvcHJpYXRlIGNvbXBvbmVudCBhbmQgcGFzcyBoYW5kbGVycyAtLT5cbiAgICAgICAgICAgIDxjcWEtc3RlcC1yZW5kZXJlciBcbiAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICAgIFtzdGVwTnVtYmVyXT1cInN0ZXBOdW1iZXIgKyAnLicgKyAoaSArIDEpXCJcbiAgICAgICAgICAgICAgW29uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXT1cIm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uRXhwYW5kSGFuZGxlcl09XCJvbkV4cGFuZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyXT1cImdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtpc1N0ZXBMb2FkaW5nSGFuZGxlcl09XCJpc1N0ZXBMb2FkaW5nSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtpc1N0ZXBFeHBhbmRlZEhhbmRsZXJdPVwiaXNTdGVwRXhwYW5kZWRIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2p1bXBUb1RpbWVzdGFtcEhhbmRsZXJdPVwianVtcFRvVGltZXN0YW1wSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyXT1cImNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyXT1cImZvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcl09XCJnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRMb29wSXRlcmF0aW9uc0hhbmRsZXJdPVwiZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2dldEFwaUFzc2VydGlvbnNIYW5kbGVyXT1cImdldEFwaUFzc2VydGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2Zvcm1hdEFjdGlvbnNIYW5kbGVyXT1cImZvcm1hdEFjdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyXT1cIm9uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXJdPVwib25NYWtlQ3VycmVudEJhc2VsaW5lSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvblVwbG9hZEJhc2VsaW5lSGFuZGxlcl09XCJvblVwbG9hZEJhc2VsaW5lSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyXT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25BbmFseXplSGFuZGxlcl09XCJvbkFuYWx5emVIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uVmlld0Z1bGxMb2dzSGFuZGxlcl09XCJvblZpZXdGdWxsTG9nc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25TZWxmSGVhbEFjdGlvbkhhbmRsZXJdPVwib25TZWxmSGVhbEFjdGlvbkhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25TdGVwQ2xpY2tIYW5kbGVyXT1cIm9uU3RlcENsaWNrSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvbkpzb25QYXRoQ29waWVkSGFuZGxlcl09XCJvbkpzb25QYXRoQ29waWVkSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvbkRvd25sb2FkSGFuZGxlcl09XCJvbkRvd25sb2FkSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvbkZpbGVQYXRoQ29waWVkSGFuZGxlcl09XCJvbkZpbGVQYXRoQ29waWVkSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvblRleHRDb3BpZWRIYW5kbGVyXT1cIm9uVGV4dENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZG93bmxvYWRpbmdTdGVwSWRdPVwiZG93bmxvYWRpbmdTdGVwSWRcIlxuICAgICAgICAgICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgICAgICAgICAgW2lzTWFraW5nQ3VycmVudEJhc2VsaW5lXT1cImlzTWFraW5nQ3VycmVudEJhc2VsaW5lXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSXRlcmF0aW9uSWRdPVwic3RlcD8uc2VsZWN0ZWRJdGVyYXRpb25JZCB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtpc0xpdmVdPVwiaXNMaXZlXCJcbiAgICAgICAgICAgICAgW2lzRGVidWddPVwiaXNEZWJ1Z1wiXG4gICAgICAgICAgICAgIFtwYXJlbnRTa2lwcGVkXT1cInNlbGZEZWJ1Z0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2RlYnVnUG9pbnRTZXRdPVwiZ2V0RGVidWdQb2ludFNldEhhbmRsZXIgPyBnZXREZWJ1Z1BvaW50U2V0SGFuZGxlcihzdGVwKSA6IGRlYnVnUG9pbnRTZXRcIlxuICAgICAgICAgICAgICBbZ2V0RGVidWdQb2ludFNldEhhbmRsZXJdPVwiZ2V0RGVidWdQb2ludFNldEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25EZWJ1Z1BvaW50Q2hhbmdlSGFuZGxlcl09XCJvbkRlYnVnUG9pbnRDaGFuZ2VIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uRWRpdFN0ZXBIYW5kbGVyXT1cIm9uRWRpdFN0ZXBIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2FkZFN0ZXBNZW51T3B0aW9uc109XCJnZXRBZGRTdGVwTWVudU9wdGlvbnNGb3JOZXN0ZWQgPyBnZXRBZGRTdGVwTWVudU9wdGlvbnNGb3JOZXN0ZWQoc3RlcCkgOiBhZGRTdGVwTWVudU9wdGlvbnNcIlxuICAgICAgICAgICAgICBbb25BZGRTdGVwT3B0aW9uU2VsZWN0SGFuZGxlcl09XCJvbkFkZFN0ZXBPcHRpb25TZWxlY3RIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW3N0ZXBNb3JlTWVudU9wdGlvbnNdPVwiZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZCA/IGdldFN0ZXBNb3JlTWVudU9wdGlvbnNGb3JOZXN0ZWQoc3RlcCkgOiBzdGVwTW9yZU1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgW29uU3RlcE1vcmVPcHRpb25TZWxlY3RIYW5kbGVyXT1cIm9uU3RlcE1vcmVPcHRpb25TZWxlY3RIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2dldEFkZFN0ZXBNZW51T3B0aW9uc0Zvck5lc3RlZF09XCJnZXRBZGRTdGVwTWVudU9wdGlvbnNGb3JOZXN0ZWRcIlxuICAgICAgICAgICAgICBbZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZF09XCJnZXRTdGVwTW9yZU1lbnVPcHRpb25zRm9yTmVzdGVkXCJcbiAgICAgICAgICAgICAgKGNvbXBvbmVudFJlYWR5KT1cIm1hcmtTdGVwTG9hZGVkKHN0ZXApXCI+XG4gICAgICAgICAgICA8L2NxYS1zdGVwLXJlbmRlcmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNlbGYgSGVhbCBBbmFseXNpcyAtLT5cbiAgICA8Y3FhLXNlbGYtaGVhbC1hbmFseXNpcyBcbiAgICAgICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIFxuICAgICAgW2lkXT1cInN0ZXA/LnRlc3RTdGVwSWRcIlxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICBbaXNMb2FkaW5nQWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nQWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICBbaXNMb2FkaW5nTW9kaWZ5QWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nTW9kaWZ5QWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICAgIDwhLS0gVGltaW5nIEJyZWFrZG93biAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC0xLjUgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZGlhbG9nLW11dGVkIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQXBwIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTS0zLjgxNDdlLTA2IDEwLjMyVi03LjE1MjU2ZS0wN0gwLjk1OTk5NlYxMC4zMkgtMy44MTQ3ZS0wNlpcIiBmaWxsPVwiI0U1RTdFQlwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uICYmICFpc0xvYWRpbmdcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbc3ViU3RlcHNdPVwiZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKClcIlxuICAgICAgW2ZhaWx1cmVEZXRhaWxzXT1cImZhaWx1cmVEZXRhaWxzXCJcbiAgICAgIFtpc0V4cGFuZGVkXT1cInNob3dGYWlsZWRTdGVwRGV0YWlsc1wiXG4gICAgICAodmlld01vcmVDbGljayk9XCJvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKCRldmVudClcIj5cbiAgICA8L2NxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFVwZGF0ZWQgRmFpbGVkIFN0ZXAgQ29tcG9uZW50IC0gc2hvd24gd2hlbiBidXR0b24gaXMgY2xpY2tlZCAtLT5cbiAgPGRpdiAqbmdJZj1cInNob3dWaWV3TW9yZUJ1dHRvbiAmJiBzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS11cGRhdGVkLWZhaWxlZC1zdGVwXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgIFtleHBhbmRlZF09XCJ0cnVlXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgW3JlYXNvbmluZ109XCJyZWFzb25pbmdcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgIFtpc01ha2luZ0N1cnJlbnRCYXNlbGluZV09XCJpc01ha2luZ0N1cnJlbnRCYXNlbGluZVwiXG4gICAgICBbaXNMaXZlXT1cImlzTGl2ZVwiXG4gICAgICAobWFrZUN1cnJlbnRCYXNlbGluZSk9XCJvbk1ha2VDdXJyZW50QmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAodXBsb2FkQmFzZWxpbmUpPVwib25VcGxvYWRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgIChhbmFseXplKT1cIm9uQW5hbHl6ZSgpXCJcbiAgICAgICh2aWV3RnVsbExvZ3MpPVwib25WaWV3RnVsbExvZ3MoKVwiPlxuICAgIDwvY3FhLXVwZGF0ZWQtZmFpbGVkLXN0ZXA+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
577
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2NvbmRpdGlvbi1zdGVwL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9jb25kaXRpb24tc3RlcC9jb25kaXRpb24tc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFpTSw2QkFBNkIsRUFBc0IsOEJBQThCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1VCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVEzRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsaUJBQWlCO0lBdUgzRCxZQUFvQixHQUFzQjtRQUN4QyxLQUFLLEVBQUUsQ0FBQztRQURVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBNUdqQyxhQUFRLEdBQXNCLEVBQUUsQ0FBQztRQU1qQyxnQkFBVyxHQUEyQixFQUFFLENBQUM7UUFHekMsWUFBTyxHQUFhLEtBQUssQ0FBQztRQUMxQixrQkFBYSxHQUFhLEtBQUssQ0FBQztRQUNoQyxrQkFBYSxHQUFhLEtBQUssQ0FBQztRQUcvQixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQy9DLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3BDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBQzVELHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQy9ELHVCQUFrQixHQUF3Qiw2QkFBNkIsQ0FBQztRQUN4RSx3QkFBbUIsR0FB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QU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25kaXRpb25TdGVwQ29uZmlnLCBDb25kaXRpb25CcmFuY2gsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgRmFpbHVyZURldGFpbHMsIFN1YlN0ZXAsIFNlbGZIZWFsQW5hbHlzaXNEYXRhLCBTZWxmSGVhbEFjdGlvbiwgRXhlY3V0aW9uU3RlcENvbmZpZywgU2VsZkhlYWxBY3Rpb25FdmVudCwgQWRkU3RlcE1lbnVPcHRpb24sIERFRkFVTFRfQUREX1NURVBfTUVOVV9PUFRJT05TLCBTdGVwTW9yZU1lbnVPcHRpb24sIERFRkFVTFRfU1RFUF9NT1JFX01FTlVfT1BUSU9OUyB9IGZyb20gJy4uL2V4ZWN1dGlvbi1zdGVwLm1vZGVscyc7XG5pbXBvcnQgeyBCYXNlU3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50LCB1cGxvYWRCYXNlbGluZUV2ZW50IH0gZnJvbSAnLi4vdmlzdWFsLWNvbXBhcmlzb24vdmlzdWFsLWNvbXBhcmlzb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWNvbmRpdGlvbi1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290IGNxYS13LWZ1bGwnIH1cbn0pXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uU3RlcENvbXBvbmVudCBleHRlbmRzIEJhc2VTdGVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyBJbmRpdmlkdWFsIGlucHV0c1xuICBASW5wdXQoKSBpZCE6IHN0cmluZztcbiAgQElucHV0KCkgdGVzdFN0ZXBSZXN1bHRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgc3RlcE51bWJlciE6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0YXR1cyE6IFN0ZXBTdGF0dXM7XG4gIEBJbnB1dCgpIGR1cmF0aW9uITogbnVtYmVyO1xuICBASW5wdXQoKSB0aW1pbmdCcmVha2Rvd24/OiBUaW1pbmdCcmVha2Rvd247XG4gIEBJbnB1dCgpIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgY29uZGl0aW9uVGV4dCE6IHN0cmluZztcbiAgQElucHV0KCkgYnJhbmNoZXM6IENvbmRpdGlvbkJyYW5jaFtdID0gW107XG4gIEBJbnB1dCgpIGZhaWx1cmVEZXRhaWxzPzogRmFpbHVyZURldGFpbHM7XG4gIEBJbnB1dCgpIHJlYXNvbmluZz86IHN0cmluZ1tdO1xuICBASW5wdXQoKSBjb25maWRlbmNlPzogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIEBJbnB1dCgpIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIEBJbnB1dCgpIG5lc3RlZFN0ZXBzPzogRXhlY3V0aW9uU3RlcENvbmZpZ1tdID0gW107XG4gIEBJbnB1dCgpIGhhc0NoaWxkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgc3RlcERlbGV0ZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc0RlYnVnPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWJ1Z1BvaW50U2V0PzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwYXJlbnRTa2lwcGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBnZXREZWJ1Z1BvaW50U2V0SGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBvbkRlYnVnUG9pbnRDaGFuZ2VIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBAT3V0cHV0KCkgZGVidWdQb2ludENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGVkaXRTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcE9wdGlvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8QWRkU3RlcE1lbnVPcHRpb24+KCk7XG4gIEBPdXRwdXQoKSBzdGVwTW9yZU9wdGlvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8U3RlcE1vcmVNZW51T3B0aW9uPigpO1xuICBASW5wdXQoKSBhZGRTdGVwTWVudU9wdGlvbnM6IEFkZFN0ZXBNZW51T3B0aW9uW10gPSBERUZBVUxUX0FERF9TVEVQX01FTlVfT1BUSU9OUztcbiAgQElucHV0KCkgc3RlcE1vcmVNZW51T3B0aW9uczogU3RlcE1vcmVNZW51T3B0aW9uW10gPSBERUZBVUxUX1NURVBfTU9SRV9NRU5VX09QVElPTlM7XG4gIEBJbnB1dCgpIGlmQ2hpbGQ/OiBhbnk7IC8vIGlmQ2hpbGQgZGF0YSBmcm9tIEFQSSAtIGlmIG51bGwgYW5kIGhhc0NoaWxkIGlzIHRydWUsIHdlIG5lZWQgdG8gY2FsbCBBUElcbiAgQElucHV0KCkgYWN0aXZlQnJhbmNoU3RlcElkPzogc3RyaW5nIHwgbnVtYmVyOyAvLyBJRCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZS9zZWxlY3RlZCBicmFuY2ggc3RlcFxuXG4gIC8vIEhhbmRsZXIgZnVuY3Rpb24gdG8gcGFzcyBkb3duIHRvIG5lc3RlZCBjaGlsZCBzdGVwIGdyb3VwcyBmb3IgcmVjdXJzaXZlIGV4cGFuc2lvblxuICBASW5wdXQoKSBvbkV4cGFuZEhhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHBhc3NlZCB0byBuZXN0ZWQgc3RlcC1yZW5kZXJlciBzbyBFZGl0IG9uIG5lc3RlZCBzdGVwcyBpcyBmb3J3YXJkZWQgd2l0aCB0aGUgc3RlcCBjb25maWcuICovXG4gIEBJbnB1dCgpIG9uRWRpdFN0ZXBIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQWRkU3RlcE9wdGlvblNlbGVjdEhhbmRsZXI/OiAob3B0aW9uOiBBZGRTdGVwTWVudU9wdGlvbiwgc3RlcD86IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU3RlcE1vcmVPcHRpb25TZWxlY3RIYW5kbGVyPzogKG9wdGlvbjogU3RlcE1vcmVNZW51T3B0aW9uLCBzdGVwPzogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHVzZWQgdG8gZ2V0IGFkZC1zdGVwIG1lbnUgb3B0aW9ucyBwZXIgbmVzdGVkIHN0ZXA7IG90aGVyd2lzZSBhZGRTdGVwTWVudU9wdGlvbnMgaXMgdXNlZCBmb3IgYWxsLiBTdXBwb3J0cyBhcmJpdHJhcnkgbmVzdGluZy4gKi9cbiAgQElucHV0KCkgZ2V0QWRkU3RlcE1lbnVPcHRpb25zRm9yTmVzdGVkPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IEFkZFN0ZXBNZW51T3B0aW9uW107XG4gIC8qKiBXaGVuIHByb3ZpZGVkLCB1c2VkIHRvIGdldCBzdGVwLW1vcmUgbWVudSBvcHRpb25zIHBlciBuZXN0ZWQgc3RlcDsgb3RoZXJ3aXNlIHN0ZXBNb3JlTWVudU9wdGlvbnMgaXMgdXNlZCBmb3IgYWxsLiBTdXBwb3J0cyBhcmJpdHJhcnkgbmVzdGluZy4gKi9cbiAgQElucHV0KCkgZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZD86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBTdGVwTW9yZU1lbnVPcHRpb25bXTtcblxuICAvLyBIYW5kbGVyIGZ1bmN0aW9ucyBmb3IgY29uZGl0aW9uIHN0ZXBzXG4gIEBJbnB1dCgpIGdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBDb25kaXRpb25CcmFuY2hbXTtcbiAgQElucHV0KCkgaXNTdGVwTG9hZGluZ0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgaXNTdGVwRXhwYW5kZWRIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXI/OiAoZHVyYXRpb246IG51bWJlcikgPT4gbnVtYmVyO1xuICBASW5wdXQoKSBmb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55O1xuICBASW5wdXQoKSBnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnk7XG4gIEBJbnB1dCgpIG9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXI/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25VcGxvYWRCYXNlbGluZUhhbmRsZXI/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25BbmFseXplSGFuZGxlcj86ICgpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVmlld0Z1bGxMb2dzSGFuZGxlcj86ICgpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXI/OiAoKSA9PiB7IGlzTG9hZGluZ0FjY2VwdDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07IGlzTG9hZGluZ01vZGlmeUFjY2VwdDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfTtcbiAgQElucHV0KCkgZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueVtdO1xuICBASW5wdXQoKSBnZXRBcGlBc3NlcnRpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnlbXTtcbiAgQElucHV0KCkgZm9ybWF0QWN0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55W107XG4gIEBJbnB1dCgpIG9uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IGFueSwgYnJhbmNoOiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU3RlcENsaWNrSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnLCBldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvbkpzb25QYXRoQ29waWVkSGFuZGxlcj86IChldmVudDogeyBwYXRoOiBzdHJpbmc7IHNvdXJjZTogJ3JlcXVlc3RCb2R5JyB8ICdyZXNwb25zZUJvZHknIHwgJ3JlcXVlc3RIZWFkZXJzJyB8ICdyZXNwb25zZUhlYWRlcnMnIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uRG93bmxvYWRIYW5kbGVyPzogKGV2ZW50OiB7IGZpbGVOYW1lOiBzdHJpbmc7IGZpbGVQYXRoPzogc3RyaW5nOyBmaWxlVHlwZTogc3RyaW5nOyB0ZXN0U3RlcFJlc3VsdElkOiBzdHJpbmcgfSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25GaWxlUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgZmlsZVBhdGg6IHN0cmluZzsgdGVzdFN0ZXBSZXN1bHRJZDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVGV4dENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgdGV4dDogc3RyaW5nOyB0ZXN0U3RlcFJlc3VsdElkOiBzdHJpbmcgfSkgPT4gdm9pZDtcbiAgQElucHV0KCkganVtcFRvVGltZXN0YW1wSGFuZGxlcj86ICh0aW1lc3RhbXA6IG51bWJlciwgdGVzdFN0ZXBJZD86IG51bWJlciB8IHN0cmluZykgPT4gdm9pZDtcbiAgQElucHV0KCkgZG93bmxvYWRpbmdTdGVwSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBzdGVwPzogYW55O1xuXG4gIEBPdXRwdXQoKSBvbkJyYW5jaENsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbmRpdGlvbkJyYW5jaD4oKTtcbiAgQE91dHB1dCgpIG9uRXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBASW5wdXQoKSBpc1VwbG9hZGluZ0Jhc2VsaW5lID0ge307XG4gIEBJbnB1dCgpIGlzTWFraW5nQ3VycmVudEJhc2VsaW5lID0ge307XG4gIEBJbnB1dCgpIGlzTGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgbWFrZUN1cnJlbnRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8bWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgdXBsb2FkQmFzZWxpbmUgPSBuZXcgRXZlbnRFbWl0dGVyPHVwbG9hZEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBhbmFseXplID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0Z1bGxMb2dzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VsZkhlYWxBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGZIZWFsQWN0aW9uRXZlbnQ+KCk7XG5cbiAgc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFNob3cgZGVidWcgaWNvbiBvbmx5IHdoZW4gdGhpcyBzdGVwIGhhcyBubyBjaGlsZCBzdGVwcyAoaWNvbiBpcyBzaG93biBvbiBjaGlsZCBzdGVwcyBpbnN0ZWFkKS4gKi9cbiAgLyoqIFNob3cgZGVidWcgaWNvbiB3aGVuIGRlYnVnIG1vZGUgaXMgb24gKHNob3duIG9uIHBhcmVudCBhbmQgYWxsIGNoaWxkIHN0ZXBzKS4gKi9cbiAgZ2V0IHNob3dEZWJ1Z0ljb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZWJ1ZyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBQZXItc3RlcCBmaWx0ZXJlZCB0aHJlZS1kb3QgbWVudSBvcHRpb25zIChlLmcuIGhpZGUgRHVwbGljYXRlL0RlbGV0ZSBmb3Igc3RlcC1ncm91cCBjaGlsZHJlbikuICovXG4gIGdldCBlZmZlY3RpdmVTdGVwTW9yZU1lbnVPcHRpb25zKCk6IFN0ZXBNb3JlTWVudU9wdGlvbltdIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5zdGVwTW9yZU1lbnVPcHRpb25zIHx8IFtdO1xuICAgIC8vIEFsd2F5cyBoaWRlIGR1cGxpY2F0ZSBvcHRpb24gZm9yIHRoaXMgY29udGFpbmVyIHN0ZXBcbiAgICBsZXQgZmlsdGVyZWQgPSBiYXNlLmZpbHRlcihvcHQgPT4gb3B0LmlkICE9PSAnZHVwbGljYXRlJyk7XG4gICAgXG4gICAgY29uc3Qgc3RlcFJlZjogYW55ID0gdGhpcy5zdGVwO1xuICAgIGlmICghc3RlcFJlZikgcmV0dXJuIGZpbHRlcmVkO1xuXG4gICAgY29uc3QgaXNHcm91cENoaWxkID0gISFzdGVwUmVmLmlzU3RlcEdyb3VwQ2hpbGRyZW47XG4gICAgLy8gV2hlbiBzdGVwLnN0ZXBNb3JlTWVudU9wdGlvbnMgaXMgdHJ1dGh5IE9SIHN0ZXAgaXMgYSBzdGVwLWdyb3VwIGNoaWxkLCBoaWRlIG11dGF0aW5nIGl0ZW1zXG4gICAgY29uc3Qgc3VwcHJlc3NNdXRhdGluZyA9ICEhc3RlcFJlZi5zdGVwTW9yZU1lbnVPcHRpb25zIHx8IGlzR3JvdXBDaGlsZDtcbiAgICBpZiAoIXN1cHByZXNzTXV0YXRpbmcpIHJldHVybiBmaWx0ZXJlZDtcblxuICAgIHJldHVybiBmaWx0ZXJlZC5maWx0ZXIob3B0ID0+IG9wdC5pZCAhPT0gJ2RlbGV0ZScpO1xuICB9XG4gIFxuICAvKiogVHJ1ZSB3aGVuIHRoaXMgY29uZGl0aW9uLXN0ZXAncyBvd24gYnJlYWtwb2ludCBpcyBkaXNhYmxlZCAodXNlZCB0byBwcm9wYWdhdGUgcGFyZW50U2tpcHBlZCB0byBjaGlsZHJlbikuICovXG4gIGdldCBzZWxmRGVidWdEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5zdGVwIGFzIGFueSk/LmRlYnVnUG9pbnREaXNhYmxlZCB8fCAhIXRoaXMucGFyZW50U2tpcHBlZDtcbiAgfVxuXG4gIC8vIENvbmZpZyBwcm9wZXJ0eSBmb3IgYmFzZSBjbGFzcyAtIGJ1aWx0IGZyb20gaW5kaXZpZHVhbCBpbnB1dHMgaW4gbmdPbkluaXRcbiAgb3ZlcnJpZGUgY29uZmlnITogQ29uZGl0aW9uU3RlcENvbmZpZztcblxuICAvLyBUcmFjayB3aGljaCBzdGVwcyBhcmUgc3RpbGwgbG9hZGluZyB0byBzaG93IHNrZWxldG9uXG4gIGxvYWRpbmdTdGVwczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEFsd2F5cyBkZXRlcm1pbmUgYWN0aXZlIGJyYW5jaCBmcm9tIGV4ZWN1dGVkIGJyYW5jaCAoZm9yIGxpdmUgbW9kZSlcbiAgICBpZiAodGhpcy5pc0xpdmUpIHtcbiAgICAgIHRoaXMuZGV0ZXJtaW5lQWN0aXZlQnJhbmNoKCk7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIG5lc3RlZCBzdGVwcyBiYXNlZCBvbiBhY3RpdmUgYnJhbmNoIChkZXJpdmVkIGZyb20gZXhlY3V0ZWQgYnJhbmNoKVxuICAgIGNvbnN0IHN0ZXBzVG9Vc2UgPSB0aGlzLm5lc3RlZFN0ZXBzIHx8IFtdO1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRlc3RTdGVwSWQ6IHRoaXMuc3RlcD8udGVzdFN0ZXBJZCB8fCB1bmRlZmluZWQsXG4gICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICBzdGVwTnVtYmVyOiB0aGlzLnN0ZXBOdW1iZXIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcbiAgICAgIGRpc3BsYXlUeXBlOiAnY29uZGl0aW9uJyxcbiAgICAgIGNvbmRpdGlvblRleHQ6IHRoaXMuY29uZGl0aW9uVGV4dCxcbiAgICAgIGJyYW5jaGVzOiB0aGlzLmJyYW5jaGVzLFxuICAgICAgc3RlcERlbGV0ZWQ6IHRoaXMuc3RlcERlbGV0ZWQsXG4gICAgICB0aW1pbmdCcmVha2Rvd246IHRoaXMudGltaW5nQnJlYWtkb3duLFxuICAgICAgZXhwYW5kZWQ6IHRoaXMuZXhwYW5kZWQsXG4gICAgICBuZXN0ZWRTdGVwczogc3RlcHNUb1VzZSxcbiAgICB9IGFzIENvbmRpdGlvblN0ZXBDb25maWc7XG5cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGlmIGFscmVhZHkgZXhwYW5kZWRcbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkICYmIHRoaXMubmVzdGVkU3RlcHMgJiYgdGhpcy5uZXN0ZWRTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdGVwcy5jbGVhcigpO1xuICAgICAgdGhpcy5uZXN0ZWRTdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgICAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICAgICAgaWYgKHN0ZXBJZCkge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmFkZChTdHJpbmcoc3RlcElkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIE9ubHkgcHJvY2VzcyBjaGFuZ2VzIGlmIGNvbmZpZyBoYXMgYmVlbiBpbml0aWFsaXplZCAobmdPbkluaXQgaGFzIGJlZW4gY2FsbGVkKVxuICAgIGlmICghdGhpcy5jb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGlmQ2hpbGQgaWYgaXQncyBwcm92aWRlZCBhbmQgYnJhbmNoZXMgbmVlZCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKGNoYW5nZXNbJ2lmQ2hpbGQnXSAmJiB0aGlzLmlmQ2hpbGQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmlmQ2hpbGQpICYmIHRoaXMuaWZDaGlsZC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBQcm9jZXNzIGlmQ2hpbGQgdG8gdXBkYXRlIGJyYW5jaGVzXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgYnJhbmNoZXMgcmVmbGVjdCB0aGUgZXhlY3V0ZWQgY29uZGl0aW9uIGZyb20gaWZDaGlsZFxuICAgICAgaWYgKHRoaXMuZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyKSB7XG4gICAgICAgIC8vIFVzZSBoYW5kbGVyIHRvIGdldCB1cGRhdGVkIGJyYW5jaGVzIGZyb20gaWZDaGlsZFxuICAgICAgICBjb25zdCBzdGVwV2l0aElmQ2hpbGQgPSB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgaWZDaGlsZDogdGhpcy5pZkNoaWxkXG4gICAgICAgIH0gYXMgYW55O1xuICAgICAgICBjb25zdCB1cGRhdGVkQnJhbmNoZXMgPSB0aGlzLmdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcihzdGVwV2l0aElmQ2hpbGQpO1xuICAgICAgICBpZiAodXBkYXRlZEJyYW5jaGVzICYmIHVwZGF0ZWRCcmFuY2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5icmFuY2hlcyA9IHVwZGF0ZWRCcmFuY2hlcztcbiAgICAgICAgICB0aGlzLmNvbmZpZy5icmFuY2hlcyA9IHVwZGF0ZWRCcmFuY2hlcy5tYXAoKGJyYW5jaDogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uYnJhbmNoLFxuICAgICAgICAgICAgc3ViU3RlcHM6IGJyYW5jaC5zdWJTdGVwcyA/IFsuLi5icmFuY2guc3ViU3RlcHNdIDogW11cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0xpdmUpIHtcbiAgICAgIC8vIFVwZGF0ZSBicmFuY2hlcyBpZiBjaGFuZ2VkIC0gY3JlYXRlIGRlZXAgY29weSB0byBlbnN1cmUgY2hhbmdlIGRldGVjdGlvbiB3b3Jrc1xuICAgICAgaWYgKGNoYW5nZXNbJ2JyYW5jaGVzJ10gJiYgdGhpcy5icmFuY2hlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIGRlZXAgY29weSB0byBlbnN1cmUgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uIHBpY2tzIHVwIG5lc3RlZCBjaGFuZ2VzXG4gICAgICAgIHRoaXMuY29uZmlnLmJyYW5jaGVzID0gdGhpcy5icmFuY2hlcy5tYXAoKGJyYW5jaDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmJyYW5jaCxcbiAgICAgICAgICBzdWJTdGVwczogYnJhbmNoLnN1YlN0ZXBzID8gWy4uLmJyYW5jaC5zdWJTdGVwc10gOiBbXVxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYnJhbmNoZXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbmZpZy5icmFuY2hlcyAhPT0gdGhpcy5icmFuY2hlcykge1xuICAgICAgICAvLyBGYWxsYmFjazogY2hlY2sgaWYgYnJhbmNoZXMgY2hhbmdlZCBldmVuIGlmIG5nT25DaGFuZ2VzIGRpZG4ndCBkZXRlY3QgaXRcbiAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIG5lc3RlZCBzdWJTdGVwcyB3ZXJlIHVwZGF0ZWRcbiAgICAgICAgY29uc3QgY3VycmVudFN1YlN0ZXBzQ291bnQgPSAodGhpcy5jb25maWcuYnJhbmNoZXMgfHwgW10pLnJlZHVjZSgoc3VtOiBudW1iZXIsIGI6IGFueSkgPT4gc3VtICsgKGIuc3ViU3RlcHM/Lmxlbmd0aCB8fCAwKSwgMCk7XG4gICAgICAgIGNvbnN0IG5ld1N1YlN0ZXBzQ291bnQgPSAodGhpcy5icmFuY2hlcyB8fCBbXSkucmVkdWNlKChzdW06IG51bWJlciwgYjogYW55KSA9PiBzdW0gKyAoYi5zdWJTdGVwcz8ubGVuZ3RoIHx8IDApLCAwKTtcblxuICAgICAgICBpZiAoY3VycmVudFN1YlN0ZXBzQ291bnQgIT09IG5ld1N1YlN0ZXBzQ291bnQgfHxcbiAgICAgICAgICB0aGlzLmNvbmZpZy5icmFuY2hlcyAhPT0gdGhpcy5icmFuY2hlcykge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmJyYW5jaGVzID0gdGhpcy5icmFuY2hlcy5tYXAoKGJyYW5jaDogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uYnJhbmNoLFxuICAgICAgICAgICAgc3ViU3RlcHM6IGJyYW5jaC5zdWJTdGVwcyA/IFsuLi5icmFuY2guc3ViU3RlcHNdIDogW11cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIG90aGVyIHByb3BlcnRpZXMgdGhhdCBtaWdodCBjaGFuZ2VcbiAgICAgIGlmIChjaGFuZ2VzWydzdGF0dXMnXSAmJiB0aGlzLnN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLnN0YXR1cyA9IHRoaXMuc3RhdHVzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlc1snZHVyYXRpb24nXSAmJiB0aGlzLmR1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb25maWcuZHVyYXRpb24gPSB0aGlzLmR1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlc1snc3RlcERlbGV0ZWQnXSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5zdGVwRGVsZXRlZCA9IHRoaXMuc3RlcERlbGV0ZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzWydleHBhbmRlZCddICYmIHRoaXMuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbmZpZy5leHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzWydjb25kaXRpb25UZXh0J10gJiYgdGhpcy5jb25kaXRpb25UZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb25maWcuY29uZGl0aW9uVGV4dCA9IHRoaXMuY29uZGl0aW9uVGV4dDtcbiAgICAgIH1cbiAgICAgIC8vIFVwZGF0ZSBhY3RpdmUgYnJhbmNoIGlmIGNoYW5nZWQgLSBhbHdheXMgZGVyaXZlIGZyb20gZXhlY3V0ZWQgYnJhbmNoXG4gICAgICBpZiAoY2hhbmdlc1snYWN0aXZlQnJhbmNoU3RlcElkJ10gfHwgY2hhbmdlc1snYnJhbmNoZXMnXSkge1xuICAgICAgICAvLyBDaGVjayBpZiBleGVjdXRlZCBicmFuY2ggY2hhbmdlZFxuICAgICAgICBjb25zdCBleGVjdXRlZEJyYW5jaENoYW5nZWQgPSBjaGFuZ2VzWydicmFuY2hlcyddICYmIFxuICAgICAgICAgIGNoYW5nZXNbJ2JyYW5jaGVzJ10ucHJldmlvdXNWYWx1ZSAmJiBcbiAgICAgICAgICBjaGFuZ2VzWydicmFuY2hlcyddLmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgICAgIGNoYW5nZXNbJ2JyYW5jaGVzJ10ucHJldmlvdXNWYWx1ZS5zb21lKChwcmV2QnJhbmNoOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCcmFuY2ggPSBjaGFuZ2VzWydicmFuY2hlcyddLmN1cnJlbnRWYWx1ZVtpbmRleF07XG4gICAgICAgICAgICByZXR1cm4gcHJldkJyYW5jaD8uZXhlY3V0ZWQgIT09IGN1cnJlbnRCcmFuY2g/LmV4ZWN1dGVkO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFsd2F5cyBkZXRlcm1pbmUgYWN0aXZlIGJyYW5jaCBmcm9tIGV4ZWN1dGVkIGJyYW5jaFxuICAgICAgICB0aGlzLmRldGVybWluZUFjdGl2ZUJyYW5jaCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaWx0ZXIgbmVzdGVkIHN0ZXBzIGJhc2VkIG9uIGFjdGl2ZSBicmFuY2hcbiAgICAgIGlmIChjaGFuZ2VzWyduZXN0ZWRTdGVwcyddIHx8IGNoYW5nZXNbJ2FjdGl2ZUJyYW5jaFN0ZXBJZCddKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLm5lc3RlZFN0ZXBzID0gdGhpcy5uZXN0ZWRTdGVwcztcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYW5nZXNbJ2JyYW5jaGVzJ10pIHtcbiAgICAgICAgdGhpcy5jb25maWcuYnJhbmNoZXMgPSB0aGlzLmJyYW5jaGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydzdGVwRGVsZXRlZCddKSB7XG4gICAgICB0aGlzLmNvbmZpZy5zdGVwRGVsZXRlZCA9IHRoaXMuc3RlcERlbGV0ZWQ7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIHdoZW4gbmVzdGVkIHN0ZXBzIGFyZSBhZGRlZCBhbmQgc3RlcCBpcyBleHBhbmRlZFxuICAgIC8vIGlmIChjaGFuZ2VzWyduZXN0ZWRTdGVwcyddICYmIHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLm5lc3RlZFN0ZXBzICYmIHRoaXMubmVzdGVkU3RlcHMubGVuZ3RoID4gMCkge1xuICAgIC8vICAgY29uc29sZS5sb2coXCJORVNURUQgU1RFUFNcIiwgdGhpcy5sb2FkaW5nU3RlcHMpXG4gICAgLy8gICB0aGlzLmxvYWRpbmdTdGVwcy5jbGVhcigpO1xuICAgIC8vICAgdGhpcy5uZXN0ZWRTdGVwcy5mb3JFYWNoKHN0ZXAgPT4ge1xuICAgIC8vICAgICBjb25zdCBzdGVwSWQgPSBzdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgc3RlcC5pZDtcbiAgICAvLyAgICAgaWYgKHN0ZXBJZCkge1xuICAgIC8vICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmFkZChTdHJpbmcoc3RlcElkKSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vICAgY29uc29sZS5sb2coXCJORVNURUQgU1RFUFNcIiwgdGhpcy5sb2FkaW5nU3RlcHMpXG4gICAgLy8gfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBsb2FkaW5nIHN0YXRlIGlmIGFscmVhZHkgZXhwYW5kZWQgd2hlbiBjb21wb25lbnQgaW5pdGlhbGl6ZXNcbiAgICBpZiAoY2hhbmdlc1snZXhwYW5kZWQnXSAmJiB0aGlzLmlzRXhwYW5kZWQgJiYgdGhpcy5uZXN0ZWRTdGVwcyAmJiB0aGlzLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgICB0aGlzLm5lc3RlZFN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgICAgICBpZiAoc3RlcElkKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGNvbnN0IHdhc0V4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkO1xuICAgIHN1cGVyLnRvZ2dsZSgpO1xuICAgIGlmICghd2FzRXhwYW5kZWQgJiYgdGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLm9uRXhwYW5kLmVtaXQoKTtcbiAgICAgIC8vIEFsd2F5cyBjYWxsIGNoaWxkcmVuIEFQSSBpZiBoYXNDaGlsZCBpcyB0cnVlIChsaWtlIG90aGVyIHN0ZXAgdHlwZXMpXG4gICAgICAvLyBJZiBpZkNoaWxkIGV4aXN0cyBhbmQgaGFzIGFuIGV4ZWN1dGVkIGNvbmRpdGlvbiAocmVzdWx0OiBcIlNVQ0NFU1NcIiksIHVzZSB0aGF0IGNvbmRpdGlvbidzIHRlc3RTdGVwUmVzdWx0SWRcbiAgICAgIGlmICh0aGlzLm9uRXhwYW5kSGFuZGxlciAmJiB0aGlzLmNvbmZpZyAmJiB0aGlzLmhhc0NoaWxkKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ1dpdGhOZXN0ZWQgPSB0aGlzLmNvbmZpZyBhcyBDb25kaXRpb25TdGVwQ29uZmlnO1xuXG4gICAgICAgIC8vIEZpbmQgdGhlIGV4ZWN1dGVkIGNvbmRpdGlvbiBmcm9tIGlmQ2hpbGQgKHRoZSBvbmUgd2l0aCByZXN1bHQ6IFwiU1VDQ0VTU1wiKVxuICAgICAgICBsZXQgZXhlY3V0ZWRDb25kaXRpb25UZXN0U3RlcFJlc3VsdElkID0gdGhpcy50ZXN0U3RlcFJlc3VsdElkOyAvLyBEZWZhdWx0IHRvIHBhcmVudCdzIElEXG4gICAgICAgIGxldCBleGVjdXRlZENvbmRpdGlvbkhhc0NoaWxkID0gdGhpcy5oYXNDaGlsZDtcblxuICAgICAgICBpZiAodGhpcy5pZkNoaWxkICYmIEFycmF5LmlzQXJyYXkodGhpcy5pZkNoaWxkKSAmJiB0aGlzLmlmQ2hpbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGV4ZWN1dGVkQ29uZGl0aW9uID0gdGhpcy5pZkNoaWxkLmZpbmQoKGNvbmRpdGlvbjogYW55KSA9PlxuICAgICAgICAgICAgY29uZGl0aW9uLnJlc3VsdCA9PT0gJ1NVQ0NFU1MnIHx8IGNvbmRpdGlvbi5yZXN1bHQgPT09ICdTVUNDRVNTJ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoZXhlY3V0ZWRDb25kaXRpb24gJiYgZXhlY3V0ZWRDb25kaXRpb24udGVzdFN0ZXBSZXN1bHRJZCkge1xuICAgICAgICAgICAgLy8gVXNlIHRoZSBleGVjdXRlZCBjb25kaXRpb24ncyB0ZXN0U3RlcFJlc3VsdElkIGFuZCBoYXNDaGlsZFxuICAgICAgICAgICAgZXhlY3V0ZWRDb25kaXRpb25UZXN0U3RlcFJlc3VsdElkID0gZXhlY3V0ZWRDb25kaXRpb24udGVzdFN0ZXBSZXN1bHRJZDtcbiAgICAgICAgICAgIGV4ZWN1dGVkQ29uZGl0aW9uSGFzQ2hpbGQgPSBleGVjdXRlZENvbmRpdGlvbi5oYXNDaGlsZCB8fCBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgYSBzdGVwIGNvbmZpZyBvYmplY3QgZm9yIHRoZSBoYW5kbGVyXG4gICAgICAgIGNvbnN0IHN0ZXBDb25maWcgPSB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgICAgaGFzQ2hpbGQ6IGV4ZWN1dGVkQ29uZGl0aW9uSGFzQ2hpbGQsXG4gICAgICAgICAgZXhwYW5kZWQ6IHRydWUsIC8vIEVuc3VyZSBleHBhbmRlZCBpcyBzZXRcbiAgICAgICAgICB0ZXN0U3RlcFR5cGU6ICh0aGlzLmNvbmZpZyBhcyBhbnkpLnRlc3RTdGVwVHlwZSB8fCAnQ09ORElUSU9OX0lGJyxcbiAgICAgICAgICBjaGlsZHJlbjogY29uZmlnV2l0aE5lc3RlZC5uZXN0ZWRTdGVwcyB8fCBbXSxcbiAgICAgICAgICB0ZXN0U3RlcFJlc3VsdElkOiBleGVjdXRlZENvbmRpdGlvblRlc3RTdGVwUmVzdWx0SWQsIC8vIFVzZSBleGVjdXRlZCBjb25kaXRpb24ncyBJRCBmb3IgQVBJIGNhbGxcbiAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICBpZkNoaWxkOiB0aGlzLmlmQ2hpbGQgfHwgbnVsbCwgLy8gUGFzcyBpZkNoaWxkIGZvciBicmFuY2ggZXhlY3V0aW9uIGRldGVybWluYXRpb25cbiAgICAgICAgICAvLyBTdG9yZSBvcmlnaW5hbCBwYXJlbnQgdGVzdFN0ZXBSZXN1bHRJZCBmb3IgdHJhY2tpbmcgc3RhdGVzIGFuZCB1cGRhdGluZyBwYXJlbnQgc3RydWN0dXJlXG4gICAgICAgICAgb3JpZ2luYWxUZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWRcbiAgICAgICAgfSBhcyBFeGVjdXRpb25TdGVwQ29uZmlnICYgeyBvcmlnaW5hbFRlc3RTdGVwUmVzdWx0SWQ/OiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgICAgICAgdGhpcy5vbkV4cGFuZEhhbmRsZXIoc3RlcENvbmZpZyk7XG4gICAgICB9XG4gICAgICAvLyBJbml0aWFsaXplIGxvYWRpbmcgc3RhdGUgZm9yIGFsbCBuZXN0ZWQgc3RlcHNcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5uZXN0ZWRTdGVwcyAmJiB0aGlzLmNvbmZpZy5uZXN0ZWRTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuY29uZmlnLm5lc3RlZFN0ZXBzLmZvckVhY2goc3RlcCA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgICAgICAgaWYgKHN0ZXBJZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RlcHMuYWRkKFN0cmluZyhzdGVwSWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgLy8gQ2xlYXIgbG9hZGluZyBzdGF0ZSB3aGVuIGNvbGxhcHNpbmdcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGV4cGFuZGVkIHN0YXRlIGlzIHN5bmNlZCB3aXRoIGNvbmZpZ1xuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5jb25maWcuZXhwYW5kZWQgPSB0aGlzLmlzRXhwYW5kZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYSBzdGVwIGlzIHN0aWxsIGxvYWRpbmdcbiAgaXNOZXN0ZWRTdGVwTG9hZGluZyhzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RlcElkID0gc3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHN0ZXAuaWQ7XG4gICAgcmV0dXJuIHN0ZXBJZCA/IHRoaXMubG9hZGluZ1N0ZXBzLmhhcyhTdHJpbmcoc3RlcElkKSkgOiBmYWxzZTtcbiAgfVxuXG4gIC8vIE1hcmsgYSBzdGVwIGFzIGxvYWRlZCAoY2FsbGVkIHdoZW4gc3RlcC1yZW5kZXJlciBpcyByZWFkeSlcbiAgbWFya1N0ZXBMb2FkZWQoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBJZCA9IHN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBzdGVwLmlkO1xuICAgIGlmIChzdGVwSWQpIHtcbiAgICAgIHRoaXMubG9hZGluZ1N0ZXBzLmRlbGV0ZShTdHJpbmcoc3RlcElkKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXhlY3V0ZWRCcmFuY2goKTogQ29uZGl0aW9uQnJhbmNoIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYnJhbmNoZXMuZmluZChicmFuY2ggPT4gYnJhbmNoLmV4ZWN1dGVkKSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk6IENvbmRpdGlvbkJyYW5jaFtdIHtcbiAgICByZXR1cm4gdGhpcy5icmFuY2hlcz8uZmlsdGVyKGJyYW5jaCA9PiAhYnJhbmNoLmV4ZWN1dGVkKSB8fCBbXTtcbiAgfVxuXG4gIGdldFN1YlN0ZXBJbmRleChzdWJTdGVwczogYW55W10sIHN1YlN0ZXA6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN1YlN0ZXBzLmluZGV4T2Yoc3ViU3RlcCkgKyAxO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBzdGVwIGlzIGN1cnJlbnRseSBsb2FkaW5nIG5lc3RlZCBjaGlsZHJlblxuICBpc1N0ZXBMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyICYmIHRoaXMuY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcih0aGlzLmNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZyB8fCBmYWxzZTtcbiAgfVxuXG4gIG9uVmlld01vcmVGYWlsZWRTdGVwQ2xpY2soZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKCk6IFN1YlN0ZXBbXSB7XG4gICAgY29uc3QgZXhlY3V0ZWRCcmFuY2ggPSB0aGlzLmdldEV4ZWN1dGVkQnJhbmNoKCk7XG4gICAgcmV0dXJuIGV4ZWN1dGVkQnJhbmNoPy5zdWJTdGVwcyB8fCBbXTtcbiAgfVxuXG4gIG9uTWFrZUN1cnJlbnRCYXNlbGluZShldmVudDogbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tYWtlQ3VycmVudEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25VcGxvYWRCYXNlbGluZShldmVudDogdXBsb2FkQmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkQmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkFuYWx5emUoKTogdm9pZCB7XG4gICAgdGhpcy5hbmFseXplLmVtaXQoKTtcbiAgfVxuXG4gIG9uVmlld0Z1bGxMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMudmlld0Z1bGxMb2dzLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2VsZkhlYWxBY3Rpb24oZXZlbnQ6IFNlbGZIZWFsQWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGZIZWFsQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IHNob3dWaWV3TW9yZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkICYmIEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscykgJiZcbiAgICAgIChcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uZXhwZWN0ZWQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uYWN0dWFsKSkgfHxcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmN1cnJlbnQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmJhc2VsaW5lIHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5kaWZmZXJlbmNlKVxuICAgICAgICAgIHx8IEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8ubG9ncz8ubGVuZ3RoKSkgfHxcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uYWlGaXhBcHBsaWVkICYmICh0aGlzLmZhaWx1cmVEZXRhaWxzPy5haUZpeE1lc3NhZ2UgfHwgdGhpcy5jb25maWRlbmNlIHx8IHRoaXMucmVhc29uaW5nPy5sZW5ndGgpKSlcbiAgICAgIClcbiAgfVxuXG4gIG9uRGVidWdQb2ludENsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kZWJ1Z1BvaW50Q2hhbmdlLmVtaXQoIXRoaXMuZGVidWdQb2ludFNldCk7XG4gIH1cblxuICBvbkVkaXRTdGVwKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5lZGl0U3RlcC5lbWl0KCk7XG4gIH1cblxuICBvbkFkZFN0ZXBPcHRpb25TZWxlY3Qob3B0aW9uOiBBZGRTdGVwTWVudU9wdGlvbiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmFkZFN0ZXBPcHRpb25TZWxlY3QuZW1pdChvcHRpb24pO1xuICB9XG5cbiAgb25TdGVwTW9yZU9wdGlvblNlbGVjdChvcHRpb246IFN0ZXBNb3JlTWVudU9wdGlvbiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnN0ZXBNb3JlT3B0aW9uU2VsZWN0LmVtaXQob3B0aW9uKTtcbiAgfVxuXG4gIHRvZ2dsZUhlYWRlcihldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgaWYgKCF0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uU3RlcENsaWNrSGFuZGxlcikge1xuICAgICAgY29uc3Qgc3RlcFRvUGFzcyA9IHRoaXMuc3RlcCB8fCB0aGlzLmNvbmZpZztcbiAgICAgIGlmIChzdGVwVG9QYXNzKSB7XG4gICAgICAgIHRoaXMub25TdGVwQ2xpY2tIYW5kbGVyKHN0ZXBUb1Bhc3MsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaGFzRXhwYW5kYWJsZUNvbnRlbnQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzQnJhbmNoU3ViU3RlcHMgPSB0aGlzLmNvbmZpZy5icmFuY2hlcz8uc29tZShicmFuY2ggPT5cbiAgICAgIGJyYW5jaC5zdWJTdGVwcyAmJiBicmFuY2guc3ViU3RlcHMubGVuZ3RoID4gMFxuICAgICkgfHwgZmFsc2U7XG4gICAgY29uc3QgaGFzTmVzdGVkU3RlcHMgPSAhISh0aGlzLmNvbmZpZy5uZXN0ZWRTdGVwcyAmJiB0aGlzLmNvbmZpZy5uZXN0ZWRTdGVwcy5sZW5ndGggPiAwKTtcbiAgICByZXR1cm4gaGFzQnJhbmNoU3ViU3RlcHMgfHwgaGFzTmVzdGVkU3RlcHM7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZUFjdGl2ZUJyYW5jaCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYnJhbmNoZXMgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5icmFuY2hlcykgfHwgdGhpcy5icmFuY2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgZmluZCB0aGUgZXhlY3V0ZWQgYnJhbmNoIGFuZCBzZXQgYWN0aXZlQnJhbmNoU3RlcElkIGZyb20gaXRcbiAgICBjb25zdCBleGVjdXRlZEJyYW5jaCA9IHRoaXMuYnJhbmNoZXMuZmluZCgoYjogYW55KSA9PiBiLmV4ZWN1dGVkKSBhcyBhbnk7XG4gICAgaWYgKGV4ZWN1dGVkQnJhbmNoICYmIGV4ZWN1dGVkQnJhbmNoLmJyYW5jaFN0ZXBJZCkge1xuICAgICAgLy8gVXBkYXRlIGFjdGl2ZUJyYW5jaFN0ZXBJZCB0byBtYXRjaCBleGVjdXRlZCBicmFuY2hcbiAgICAgIGlmICh0aGlzLmFjdGl2ZUJyYW5jaFN0ZXBJZCAhPT0gZXhlY3V0ZWRCcmFuY2guYnJhbmNoU3RlcElkKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQnJhbmNoU3RlcElkID0gZXhlY3V0ZWRCcmFuY2guYnJhbmNoU3RlcElkO1xuICAgICAgICAvLyBVcGRhdGUgbmVzdGVkIHN0ZXBzIHdoZW4gZXhlY3V0ZWQgYnJhbmNoIGNoYW5nZXNcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBubyBicmFuY2ggaXMgZXhlY3V0ZWQsIGRlZmF1bHQgdG8gZmlyc3QgYnJhbmNoIChJRiBicmFuY2gpIGJ1dCBkb24ndCBtYXJrIGl0IGFzIGV4ZWN1dGVkXG4gICAgY29uc3QgZmlyc3RCcmFuY2ggPSB0aGlzLmJyYW5jaGVzWzBdIGFzIGFueTtcbiAgICBpZiAoZmlyc3RCcmFuY2ggJiYgZmlyc3RCcmFuY2guYnJhbmNoU3RlcElkKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVCcmFuY2hTdGVwSWQgIT09IGZpcnN0QnJhbmNoLmJyYW5jaFN0ZXBJZCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUJyYW5jaFN0ZXBJZCA9IGZpcnN0QnJhbmNoLmJyYW5jaFN0ZXBJZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkJyYW5jaENsaWNrKGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25CcmFuY2hDbGlja0V2ZW50LmVtaXQoYnJhbmNoKTtcbiAgfVxuXG4gIGdldEJyYW5jaENsYXNzKGJyYW5jaDogYW55KTogc3RyaW5nIHtcbiAgICAvLyBJZiBicmFuY2ggaXMgZXhlY3V0ZWQsIHNob3cgZ3JlZW4gc3R5bGluZ1xuICAgIGlmIChicmFuY2guZXhlY3V0ZWQpIHtcbiAgICAgIHJldHVybiAnY3FhLWJnLVsjRENGQ0U3XSBjcWEtdGV4dC1bIzAwODIzNl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNCOUY4Q0ZdJztcbiAgICB9XG5cbiAgICAvLyBGb3IgbGl2ZSBtb2RlOiBpZiBubyBicmFuY2hlcyBhcmUgZXhlY3V0ZWQgYnV0IHRoZXJlJ3MgYW4gYWN0aXZlQnJhbmNoU3RlcElkLFxuICAgIC8vIHNob3cgdGhlIGFjdGl2ZSBicmFuY2ggd2l0aCBibHVlIGJvcmRlclxuICAgIGlmICh0aGlzLmlzTGl2ZSAmJiAhdGhpcy5oYXNBbnlFeGVjdXRlZEJyYW5jaCgpKSB7XG4gICAgICByZXR1cm4gJ2NxYS1iZy1bI0VGRjZGRl0gY3FhLXRleHQtWyMxRTQwQUZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjM0I4MkY2XSc7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogZ3JheSBzdHlsaW5nIGZvciB1bmV4ZWN1dGVkIGJyYW5jaGVzXG4gICAgcmV0dXJuICdjcWEtYmctWyNGM0Y0RjZdIGNxYS10ZXh0LVsjOTlBMUFGXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTdFQl0nO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFueSBicmFuY2ggaXMgZXhlY3V0ZWQuXG4gICAqL1xuICBwcml2YXRlIGhhc0FueUV4ZWN1dGVkQnJhbmNoKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5icmFuY2hlcyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmJyYW5jaGVzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5icmFuY2hlcy5zb21lKChiOiBhbnkpID0+IGIuZXhlY3V0ZWQgPT09IHRydWUpO1xuICB9XG5cbiAgb25KdW1wVG9UaW1lc3RhbXAoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuanVtcFRvVGltZXN0YW1wSGFuZGxlciAmJiB0aGlzLnN0ZXA/LmV4ZWN1dGVkUmVzdWx0Py52aWRlb19zdGFydF90aW1lICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zdGVwPy5leGVjdXRlZFJlc3VsdD8udmlkZW9fc3RhcnRfdGltZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gdHlwZW9mIHRoaXMuc3RlcC5leGVjdXRlZFJlc3VsdC52aWRlb19zdGFydF90aW1lID09PSAnbnVtYmVyJyBcbiAgICAgICAgPyB0aGlzLnN0ZXAuZXhlY3V0ZWRSZXN1bHQudmlkZW9fc3RhcnRfdGltZSBcbiAgICAgICAgOiBOdW1iZXIodGhpcy5zdGVwLmV4ZWN1dGVkUmVzdWx0LnZpZGVvX3N0YXJ0X3RpbWUpO1xuICAgICAgY29uc3QgdGVzdFN0ZXBJZCA9IHRoaXMuc3RlcD8udGVzdFN0ZXBJZDtcbiAgICAgIGlmIChpc0Zpbml0ZSh0aW1lc3RhbXApICYmIHRpbWVzdGFtcCA+PSAwKSB7XG4gICAgICAgIHRoaXMuanVtcFRvVGltZXN0YW1wSGFuZGxlcih0aW1lc3RhbXAsIHRlc3RTdGVwSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1mb250LWludGVyIGNxYS13LWZ1bGxcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtcC0yXCI+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcGItMS41IGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlSGVhZGVyKCRldmVudClcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93RGVidWdJY29uXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgIFttYXRUb29sdGlwXT1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZycgfHwgKCEhcGFyZW50U2tpcHBlZCAmJiAhc3RlcD8uZGVidWdQb2ludERpc2FibGVkKSA/ICdCcmVha3BvaW50IGNhbm5vdCBiZSBzZXQgb24gYSBydW5uaW5nIHN0ZXAnIDogKCEhc3RlcD8uZGVidWdQb2ludERpc2FibGVkID8gJ0JyZWFrcG9pbnQgY2Fubm90IGJlIHNldCBvbiBza2lwcGVkIHN0ZXBzJyA6ICcnKVwiXG4gICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY3FhLXAtMCBjcWEtYm9yZGVyLTAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBmb2N1czpjcWEtb3V0bGluZS1ub25lXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3J1bm5pbmcnIHx8ICEhc3RlcD8uZGVidWdQb2ludERpc2FibGVkIHx8ICEhcGFyZW50U2tpcHBlZCA/ICdjcWEtY3Vyc29yLW5vdC1hbGxvd2VkIGNxYS1vcGFjaXR5LTQwIGNxYS1wb2ludGVyLWV2ZW50cy1ub25lJyA6ICdjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAnXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJyB8fCAhIXN0ZXA/LmRlYnVnUG9pbnREaXNhYmxlZCB8fCAhIXBhcmVudFNraXBwZWRcIlxuICAgICAgICAgIChjbGljayk9XCJvbkRlYnVnUG9pbnRDbGljaygkZXZlbnQpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJkZWJ1Z1BvaW50U2V0ID8gJ1JlbW92ZSBkZWJ1ZyBwb2ludCcgOiAnU2V0IGRlYnVnIHBvaW50J1wiPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJkZWJ1Z1BvaW50U2V0XCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjdcIiBjeT1cIjdcIiByPVwiNlwiIFthdHRyLmZpbGxdPVwiISFzdGVwPy5kZWJ1Z1BvaW50RGlzYWJsZWQgfHwgISFwYXJlbnRTa2lwcGVkID8gJyM5RTlFOUUnIDogJyNDNjM1MzUnXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzdmcgKm5nSWY9XCIhZGVidWdQb2ludFNldFwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjZcIiBbYXR0ci5zdHJva2VdPVwiISFzdGVwPy5kZWJ1Z1BvaW50RGlzYWJsZWQgfHwgISFwYXJlbnRTa2lwcGVkID8gJyM5RTlFOUUnIDogJyNDNjM1MzUnXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIFN0YXR1cyBJY29uIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcydcIiA+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMC45MDA1IDQuOTk5OTlDMTEuMTI4OSA2LjEyMDY0IDEwLjk2NjIgNy4yODU3MSAxMC40Mzk1IDguMzAwODlDOS45MTI3OSA5LjMxNjA4IDkuMDU0IDEwLjEyIDguMDA2MzEgMTAuNTc4N0M2Ljk1ODYyIDExLjAzNzMgNS43ODUzNiAxMS4xMjI5IDQuNjgyMiAxMC44MjEyQzMuNTc5MDQgMTAuNTE5NSAyLjYxMjY1IDkuODQ4NjkgMS45NDQxOSA4LjkyMDcxQzEuMjc1NzMgNy45OTI3MiAwLjk0NTYxMSA2Ljg2MzYxIDEuMDA4ODggNS43MjE2OUMxLjA3MjE1IDQuNTc5NzYgMS41MjQ5OSAzLjQ5NDA0IDIuMjkxODggMi42NDU1OEMzLjA1ODc2IDEuNzk3MTIgNC4wOTMzNCAxLjIzNzIxIDUuMjIzMDggMS4wNTkyMkM2LjM1MjgyIDAuODgxMjMzIDcuNTA5NDQgMS4wOTU5MiA4LjUwMDA1IDEuNjY3NDlcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC41IDUuNUw2IDdMMTEgMlwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsdXJlJyB8fCBzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWxlZCdcIj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTcuNSA0LjVMNC41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNC41TDcuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAncGVuZGluZydcIj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwic3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJ1wiPjxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS10ZXh0LVsjM0I4MkY2XVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiNlwiIGN5PVwiNlwiIHI9XCI1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBvcGFjaXR5PVwiMC4yNVwiLz48cGF0aCBkPVwiTTYgMUE1IDUgMCAwIDEgMTEgNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJzdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3NraXBwZWQnXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3FhLXRleHQtWyM5Q0EzQUZdIGNxYS10ZXh0LVsxMnB4XVwiPlxuICAgICAgICBza2lwX25leHRcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICAgIDwhLS0gQ29uZGl0aW9uIEljb24gLS0+XG4gICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHJ4PVwiNFwiIGZpbGw9XCIjRkZFREQ1XCIvPjxwYXRoIGQ9XCJNNiA1VjlcIiBzdHJva2U9XCIjRkQ5QTAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTEwIDdDMTAuNTUyMyA3IDExIDYuNTUyMjggMTEgNkMxMSA1LjQ0NzcyIDEwLjU1MjMgNSAxMCA1QzkuNDQ3NzIgNSA5IDUuNDQ3NzIgOSA2QzkgNi41NTIyOCA5LjQ0NzcyIDcgMTAgN1pcIiBzdHJva2U9XCIjRkQ5QTAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgMTFDNi41NTIyOCAxMSA3IDEwLjU1MjMgNyAxMEM3IDkuNDQ3NzIgNi41NTIyOCA5IDYgOUM1LjQ0NzcyIDkgNSA5LjQ0NzcyIDUgMTBDNSAxMC41NTIzIDUuNDQ3NzIgMTEgNiAxMVpcIiBzdHJva2U9XCIjRkQ5QTAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTEwIDdDMTAgNy43OTU2NSA5LjY4MzkzIDguNTU4NzEgOS4xMjEzMiA5LjEyMTMyQzguNTU4NzEgOS42ODM5MyA3Ljc5NTY1IDEwIDcgMTBcIiBzdHJva2U9XCIjRkQ5QTAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgICAgPCEtLSBTdGVwIE51bWJlciBhbmQgVGl0bGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZm9udC1pbnRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE4cHhdXCIgc3R5bGU9XCJ3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiPlxuICAgICAgICAgIHt7IGNvbmZpZz8uc3RlcE51bWJlciB9fS4gQ29uZGl0aW9uOiA8c3BhbiBbaW5uZXJIVE1MXT1cImNvbmZpZy5jb25kaXRpb25UZXh0XCI+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIFxuICAgICAgICA8IS0tIENvbmRpdGlvbiBCYWRnZSAtLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtcHgtMS41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjRUE1ODBDXSBjcWEtYmctWyNGRkVERDVdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF1cIj5cbiAgICAgICAgICBDT05ESVRJT05cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5zdGVwRGVsZXRlZFwiIGNsYXNzPVwiY3FhLXB4LTEuNSBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNCNDIzMThdIGNxYS1iZy1bI0ZFRjNGMl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRkVFNEUyXVwiPlxuICAgICAgICAgIERlbGV0ZWRcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtZm9udC1pbnRlclwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGZIZWFsQW5hbHlzaXNcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMwOTdFNTNdIGNxYS1iZy1bI0NGRjJFNV0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtbWluLXctbWF4IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bNnB4XVwiPlxuICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOVwiIGhlaWdodD1cIjlcIiB2aWV3Qm94PVwiMCAwIDkgOVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTQuNTA5NDEgMEM0LjU2NDg5IDAuMDIyNzM4NCA0LjU4ODU5IDAuMDc4MjY1MiA0LjYxMTMxIDAuMTI5ODQ2QzQuNjIyNjkgMC4xNTk5IDQuNjMzMTQgMC4xOTAxMTcgNC42NDMyOSAwLjIyMDU3NUM0LjY0NzI2IDAuMjMyMjQ3IDQuNjUxMjMgMC4yNDM5MTggNC42NTUzMiAwLjI1NTk0M0M0LjcwODA2IDAuNDEzMDA1IDQuNzU1MDQgMC41NzE3NDggNC44MDIyOSAwLjczMDM4QzQuODEyOTcgMC43NjYxOSA0LjgyMzY5IDAuODAxOTg3IDQuODM0NDIgMC44Mzc3ODNDNC44ODkwNSAxLjAyMDA0IDQuOTQzMjcgMS4yMDI0IDQuOTk3MTkgMS4zODQ4NEM1LjAwNDc2IDEuNDEwNDcgNS4wMTIzNCAxLjQzNjA5IDUuMDE5OTIgMS40NjE3MUM1LjA0MTI4IDEuNTMzOTUgNS4wNjI2MiAxLjYwNjE5IDUuMDgzODMgMS42Nzg0N0M1LjEyODY3IDEuODMxMiA1LjE3NDczIDEuOTgzNDcgNS4yMjM3OCAyLjEzNTAxQzUuMjI4MDcgMi4xNDgyNyA1LjIzMjM2IDIuMTYxNTIgNS4yMzY3NyAyLjE3NTE4QzUuMzY0MiAyLjU2NSA1LjU0NDgyIDIuOTE0MzcgNS44NDA5IDMuMjExOTZDNS44NDgyMyAzLjIxOTcgNS44NTU1NiAzLjIyNzQ0IDUuODYzMTIgMy4yMzU0MUM1Ljk4OTUgMy4zNjQzNyA2LjE1MTY5IDMuNDY3NzEgNi4zMTM4IDMuNTUxMTFDNi4zMjIwNiAzLjU1NTQyIDYuMzMwMzEgMy41NTk3NCA2LjMzODgyIDMuNTY0MTlDNi44MTU4NyAzLjgwOTI1IDcuMzg5NTEgMy45MTcwNCA3LjkwNjE5IDQuMDYwNUM4LjEzMjYgNC4xMjM0IDguMzU4MyA0LjE4ODI5IDguNTgzMTcgNC4yNTYwM0M4LjU5ODk3IDQuMjYwNzkgOC42MTQ3OCA0LjI2NTU0IDguNjMwNTggNC4yNzAyOEM4LjY3Nzg0IDQuMjg0NDUgOC43MjUgNC4yOTg4NyA4Ljc3MjExIDQuMzEzNDdDOC43ODMxIDQuMzE2NzkgOC43OTQwOCA0LjMyMDExIDguODA1MzkgNC4zMjM1M0M4Ljg3MDI5IDQuMzQ0MDYgOC45MzIzOSA0LjM2ODI5IDguOTg1NjYgNC40MTAyN0M5LjAwMTkxIDQuNDQ0MTggOS4wMDE5MSA0LjQ0NDE4IDguOTk3NDggNC40NzgxQzguOTQ1NjQgNC41MjczNiA4Ljg5NDIgNC41NTA0NiA4LjgyNTc4IDQuNTczQzguODE2IDQuNTc2MzIgOC44MDYyMiA0LjU3OTY1IDguNzk2MTQgNC41ODMwOEM4LjY4MDYxIDQuNjIxODMgOC41NjM1MSA0LjY1NTc1IDguNDQ2MjYgNC42ODkzNUM4LjQyMjIgNC42OTYzIDguMzk4MTQgNC43MDMyNiA4LjM3NDA4IDQuNzEwMjFDOC4yMjU3MSA0Ljc1MzAxIDguMDc3MDggNC43OTQ5IDcuOTI4MjkgNC44MzYzMkM3LjczMjMyIDQuODkwODggNy41MzY2MyA0Ljk0NjM0IDcuMzQxMTMgNS4wMDI0M0M3LjMwOTEgNS4wMTE2MiA3LjI3NzA2IDUuMDIwNzggNy4yNDUwMSA1LjAyOTkxQzcuMDc2NzEgNS4wNzc4NiA2LjkwOTIzIDUuMTI3NTMgNi43NDMxNCA1LjE4MjA4QzYuNzI5MzcgNS4xODY1OSA2LjcxNTU5IDUuMTkxMSA2LjcwMTM5IDUuMTk1NzRDNi4xNDUxMSA1LjM4MDgyIDUuNzIxMSA1LjcyNjA5IDUuNDU1NzEgNi4yMzA5OUM1LjMxMjYzIDYuNTE0NzUgNS4yMjgyMyA2LjgyMTYxIDUuMTQyMTQgNy4xMjQ0N0M1LjExODg0IDcuMjA2MTkgNS4wOTQwOSA3LjI4NzQ1IDUuMDY5MDUgNy4zNjg2OUM1LjA0OTQgNy40MzI2MSA1LjAzMDIgNy40OTY2MyA1LjAxMTQ5IDcuNTYwODFDNS4wMDkyNiA3LjU2ODQ0IDUuMDA3MDMgNy41NzYwOCA1LjAwNDczIDcuNTgzOTVDNC45OTM5NCA3LjYyMDk0IDQuOTgzMTkgNy42NTc5MyA0Ljk3MjUyIDcuNjk0OTVDNC45NDUxOSA3Ljc4ODc5IDQuOTE1NzggNy44ODE4NyA0Ljg4NTU1IDcuOTc0ODlDNC44MzE5MSA4LjE0MDIxIDQuNzgzMSA4LjMwNjc0IDQuNzM0NTkgOC40NzM1QzQuNjYxNDQgOC43MjQ1NyA0LjY2MTQ0IDguNzI0NTcgNC42MTk5NyA4Ljg0NTI3QzQuNjE3MjEgOC44NTMzNyA0LjYxNDQ2IDguODYxNDcgNC42MTE2MyA4Ljg2OTgyQzQuNTk2NDkgOC45MTI3OCA0LjU4MDkyIDguOTUyMzMgNC41NTIyNiA4Ljk4ODdDNC41MDg2NyA4Ljk5Nzg4IDQuNTA4NjcgOC45OTc4OCA0LjQ2OTUxIDlDNC40MjQ3MyA4LjkzNzU5IDQuMzk1MDggOC44NzcxMSA0LjM3MTMzIDguODA1MDhDNC4zNjc4NyA4Ljc5NDg3IDQuMzY0NDEgOC43ODQ2NiA0LjM2MDg1IDguNzc0MTVDNC4zMTY4NCA4LjY0MjQ4IDQuMjc3NTEgOC41MDk0NiA0LjIzODE3IDguMzc2NDZDNC4yMjkxNiA4LjM0NjA0IDQuMjIwMTEgOC4zMTU2NCA0LjIxMTA1IDguMjg1MjRDNC4xNDM2IDguMDU4NjMgNC4wNzcyNSA3LjgzMTc0IDQuMDExMDEgNy42MDQ4MUMzLjczNTA3IDYuNDgyMjQgMy43MzUwNyA2LjQ4MjI0IDMuMDM5IDUuNTc0NjZDMy4wMjc4NCA1LjU2NTk2IDMuMDE2NjkgNS41NTcyNiAzLjAwNTE5IDUuNTQ4M0MyLjU0OTEzIDUuMTk5MDIgMS45NDgzNCA1LjA2OTY5IDEuMzk4MTUgNC45MTgxM0MxLjI2MjA3IDQuODgwNjIgMS4xMjYwNSA0Ljg0MjkzIDAuOTkwMDMyIDQuODA1MjNDMC45NzgxMzggNC44MDE5MyAwLjk3ODEzOCA0LjgwMTkzIDAuOTY2MDAzIDQuNzk4NTdDMC43Njk4MTEgNC43NDQxNyAwLjU3MzY3NCA0LjY4OTYzIDAuMzc4MjI0IDQuNjMyODNDMC4zNjk5NTYgNC42MzA0NSAwLjM2MTY4OCA0LjYyODA2IDAuMzUzMTY5IDQuNjI1NjFDMC4wNTI4OTg5IDQuNTM4ODMgMC4wNTI4OTg5IDQuNTM4ODMgMC4wMDA2NDY1MzcgNC40NzgxQy0wLjAwMDgzMTI2MSA0LjQ1MDU0IC0wLjAwMDgzMTI2MSA0LjQ1MDU0IDAuMDEyNDY4OSA0LjQyMTU3QzAuMDY3MDgzNSA0LjM3MDQgMC4xMjAwNzcgNC4zNDg0OCAwLjE5MjE2IDQuMzI2MTlDMC4yMDI1OTcgNC4zMjI4NCAwLjIxMzAzNCA0LjMxOTQ4IDAuMjIzNzg3IDQuMzE2MDNDMC4yNTU3NTMgNC4zMDU4MiAwLjI4Nzc4OCA0LjI5NTg0IDAuMzE5ODUxIDQuMjg1OTJDMC4zMjkwMDEgNC4yODMwNSAwLjMzODE1MSA0LjI4MDE3IDAuMzQ3NTc4IDQuMjc3MjJDMC40MTIyODUgNC4yNTY5MyAwLjQ3NzIyNSA0LjIzNzQgMC41NDIyNTkgNC4yMTgwOUMwLjU1ODI0IDQuMjEzMzIgMC41NTgyNCA0LjIxMzMyIDAuNTc0NTQ0IDQuMjA4NDZDMC44NTIyNjkgNC4xMjU4NyAxLjEzMTgxIDQuMDQ5IDEuNDExMjYgMy45NzE5NkMxLjYxOTUgMy45MTQ1NSAxLjgyNzM4IDMuODU2MTggMi4wMzQ2IDMuNzk1NDhDMi4wNDQxMyAzLjc5MjcxIDIuMDUzNjUgMy43ODk5MyAyLjA2MzQ2IDMuNzg3MDdDMi41NDM1IDMuNjQ2OTYgMy4wMTI3OCAzLjQ0ODE2IDMuMzIyNzQgMy4wNTM3QzMuMzI3MzggMy4wNDc4NSAzLjMzMjAyIDMuMDQyIDMuMzM2OCAzLjAzNTk3QzMuNjgxOTcgMi41OTgxNSAzLjgxNjU4IDIuMDY1NzIgMy45NjY5NSAxLjU0NjIxQzQuMDE2NDMgMS4zNzUzNCA0LjA2NjQ5IDEuMjA0NjQgNC4xMTY3MyAxLjAzMzk5QzQuMTMwNjQgMC45ODY3MzMgNC4xNDQ1MyAwLjkzOTQ3MSA0LjE1ODM2IDAuODkyMTk0QzQuMjEzOTQgMC43MDIyODkgNC4yNzAzNSAwLjUxMjY0MiA0LjMzIDAuMzIzODY0QzQuMzM1NTggMC4zMDYxODYgNC4zNDExNCAwLjI4ODUwMSA0LjM0NjY2IDAuMjcwODA3QzQuNDMwMTcgMC4wMDM5ODc2MSA0LjQzMDE3IDAuMDAzOTg3NjEgNC41MDk0MSAwWlwiIGZpbGw9XCIjMERCRDdEXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk03LjIzNTk3IDAuNTU0ODU5QzcuMjkwMjQgMC42MTM1OTkgNy4zMDEwOSAwLjY4MjYzMSA3LjMxNzk5IDAuNzU3NjM4QzcuMzc0MzYgMC45OTMyNjkgNy40MzkyOSAxLjIwOTkzIDcuNjY0NjcgMS4zNDY4MUM3LjgwMzcxIDEuNDIwMzUgNy45Njk0NCAxLjQ1MzgxIDguMTIzNSAxLjQ4NTQxQzguMTg4NTQgMS40OTkwMiA4LjI0MzQ4IDEuNTE3MDkgOC4yOTkyNCAxLjU1MzIxQzguMzExODEgMS41NzIyOSA4LjMxMTgxIDEuNTcyMjkgOC4zMTEwNyAxLjYwNTQ5QzguMjk4MTQgMS42NDU4OCA4LjI4Njc4IDEuNjU4OSA4LjI1MjY5IDEuNjg1MzNDOC4yMTU0MyAxLjY5NzI2IDguMjE1NDMgMS42OTcyNiA4LjE3MDY4IDEuNzA2NTNDOC4xNTM3NSAxLjcxMDI1IDguMTM2ODMgMS43MTQgOC4xMTk5MiAxLjcxNzc5QzguMTEwODYgMS43MTk4IDguMTAxODEgMS43MjE4MSA4LjA5MjQ3IDEuNzIzODhDNy44MTY5NiAxLjc4NDgyIDcuODE2OTYgMS43ODQ4MiA3LjU3ODgyIDEuOTIyNzNDNy41NzEwOCAxLjkyODY5IDcuNTYzMzMgMS45MzQ2NiA3LjU1NTM2IDEuOTQwOEM3LjM4NTE2IDIuMDg0MzEgNy4zNDkxNiAyLjMyMzAzIDcuMjk3OTMgMi41MjMwMUM3LjI5NDk5IDIuNTMzOTkgNy4yOTIwNiAyLjU0NDk3IDcuMjg5MDMgMi41NTYyOUM3LjI4NjQ5IDIuNTY2MDEgNy4yODM5NSAyLjU3NTczIDcuMjgxMzMgMi41ODU3NUM3LjI3MDI4IDIuNjE1NDQgNy4yNTg4MSAyLjYzNDc5IDcuMjM1OTcgMi42NTc1NEM3LjE3MjM0IDIuNjY1MjcgNy4xNzIzNCAyLjY2NTI3IDcuMTQxMzkgMi42NTc1NEM3LjA5MjE2IDIuNjIxMDYgNy4wODExNCAyLjU3OTUgNy4wNjgyOCAyLjUyMzY1QzcuMDY2MTMgMi41MTUwMSA3LjA2Mzk4IDIuNTA2MzYgNy4wNjE3NiAyLjQ5NzQ1QzcuMDU0ODkgMi40Njk4MyA3LjA0ODI0IDIuNDQyMTcgNy4wNDE2NCAyLjQxNDQ5QzYuOTg5NzkgMi4xOTg5NyA2LjkzMTI2IDEuOTg3NTEgNi43MjQ1MSAxLjg2MTE4QzYuNTYyOTMgMS43NzUwMSA2LjM2NjQ2IDEuNzM0MjYgNi4xODU4NyAxLjcwMTM2QzYuMTM2MzcgMS42OTE1MSA2LjEwODAyIDEuNjc5MTEgNi4wNzczOCAxLjY0MDEyQzYuMDcwNzMgMS42MDA1NSA2LjA3MDczIDEuNjAwNTUgNi4wNzczOCAxLjU2MDk4QzYuMTI0NDcgMS41MTQzNyA2LjE3NDAyIDEuNTAyOTkgNi4yMzc3MiAxLjQ4ODkxQzYuMjU3NzggMS40ODQxNiA2LjI3Nzg0IDEuNDc5MzggNi4yOTc4OSAxLjQ3NDU2QzYuMzA4MjUgMS40NzIwOSA2LjMxODYxIDEuNDY5NjIgNi4zMjkyOSAxLjQ2NzA3QzYuMzgyMTIgMS40NTQwNyA2LjQzNDQzIDEuNDM5NDkgNi40ODY3MyAxLjQyNDYyQzYuNDk2MjMgMS40MjE5OCA2LjUwNTczIDEuNDE5MzUgNi41MTU1MiAxLjQxNjYzQzYuNjIxODIgMS4zODYyNCA2LjcxMzU2IDEuMzQ3MzcgNi43OTg1NCAxLjI3ODM2QzYuODA2NDcgMS4yNzIxMyA2LjgxNDM5IDEuMjY1ODkgNi44MjI1NSAxLjI1OTQ2QzYuOTU0OCAxLjE0NTY1IDYuOTk5NzQgMC45NzQ2NzQgNy4wNDA1MyAwLjgxNTEzNEM3LjA0MzY0IDAuODAzMDIyIDcuMDQ2NzUgMC43OTA5MSA3LjA0OTk1IDAuNzc4NDMyQzcuMDU2MTQgMC43NTQxMDEgNy4wNjIyMiAwLjcyOTc0MyA3LjA2ODE3IDAuNzA1MzU5QzcuMDcyNDMgMC42ODgzOTQgNy4wNzI0MyAwLjY4ODM5NCA3LjA3Njc4IDAuNjcxMDg2QzcuMDc5MjcgMC42NjA5NTEgNy4wODE3NSAwLjY1MDgxNiA3LjA4NDMxIDAuNjQwMzczQzcuMDk1MjEgMC42MDgxMDggNy4xMDk1MiAwLjU4Mjc3MiA3LjEyOTU3IDAuNTU0ODU5QzcuMTY4MSAwLjUzNjQzNSA3LjE5NTE1IDAuNTQ0NzY0IDcuMjM1OTcgMC41NTQ4NTlaXCIgZmlsbD1cIiMwNzVGM0ZcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEuNzk1NDUgNi4yNDcxQzEuODA5NTEgNi4yNDcxOSAxLjgwOTUxIDYuMjQ3MTkgMS44MjM4NiA2LjI0NzI5QzEuOTI0NzcgNi4yNTAyMiAxLjk5MzA0IDYuMjgxMTUgMi4wNjczNiA2LjM0NjAxQzIuMTUzODQgNi40MzUzMyAyLjE5Mzc3IDYuNTM2MTEgMi4xOTE1IDYuNjU2NUMyLjE4MTc4IDYuNzU0MTIgMi4xMjE1OCA2LjgzOTM1IDIuMDQ3NzMgNi45MDUzM0MxLjk2MDgxIDYuOTcyNDIgMS44NzMxMyA2Ljk5NDU5IDEuNzYyMDYgNi45OTE0OUMxLjY2ODQxIDYuOTgxMDcgMS41ODAzIDYuOTM4NTIgMS41MTM5MyA2Ljg3NDUxQzEuNDMxMzggNi43NjY4MSAxLjQwNzI1IDYuNjY4MDMgMS40MTkzNSA2LjUzNTM3QzEuNDQ0MzMgNi40MzA5MiAxLjUxNjM3IDYuMzQ2MTMgMS42MDg1IDYuMjg2NjZDMS42NzI1MSA2LjI1NTY0IDEuNzIzOTkgNi4yNDY1MiAxLjc5NTQ1IDYuMjQ3MVpcIiBmaWxsPVwiIzBEQkQ3RFwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIFNlbGYtaGVhbGVkXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1weS0wLjUgY3FhLXB4LTEgY3FhLWJnLVsjNjM2NkYxMUFdIGNxYS1tbC0xIGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtb3BhY2l0eS04MCBjcWEtdHJhbnNpdGlvbi1vcGFjaXR5XCIgXG4gICAgICAgICAgICAgKm5nSWY9XCJzdGVwPy5leGVjdXRlZFJlc3VsdD8udmlkZW9fc3RhcnRfdGltZVwiIFxuICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidKdW1wIHRvIHZpZGVvIHRpbWUnXCIgXG4gICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgICAgIChjbGljayk9XCJvbkp1bXBUb1RpbWVzdGFtcCgkZXZlbnQpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyM2MzYzNjNdICFjcWEtdGV4dC1bMTBweF0gIWNxYS13LVsxMHB4XSAhY3FhLWgtWzEwcHhdXCI+XG4gICAgICAgICAgICBwbGF5X2Fycm93XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVs4cHhdIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyM2MzYzNjNdXCI+XG4gICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbkNsb2NrKHN0ZXA/LmV4ZWN1dGVkUmVzdWx0Py52aWRlb19zdGFydF90aW1lIHx8IDApIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0RlYnVnXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMC41IGNxYS10ZXh0LVsjOUNBM0FGXVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgPCEtLSA8YnV0dG9uICpuZ0lmPVwiIXN0ZXA/LmlzU3RlcEdyb3VwQ2hpbGRyZW5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1vcGFjaXR5LTgwIGNxYS10cmFuc2l0aW9uLW9wYWNpdHkgZm9jdXM6Y3FhLW91dGxpbmUtbm9uZVwiIGFyaWEtbGFiZWw9XCJFZGl0XCIgKGNsaWNrKT1cIm9uRWRpdFN0ZXAoJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdGV4dC1bMTRweF0gIWNxYS13LVsxNHB4XSAhY3FhLWgtWzE0cHhdXCI+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFzdGVwPy5pc1N0ZXBHcm91cENoaWxkcmVuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY3FhLXAtMCBjcWEtYm9yZGVyLTAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtb3BhY2l0eS04MCBjcWEtdHJhbnNpdGlvbi1vcGFjaXR5IGZvY3VzOmNxYS1vdXRsaW5lLW5vbmVcIiBhcmlhLWxhYmVsPVwiQWRkXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFkZFN0ZXBNZW51XCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS10ZXh0LVsxNHB4XSAhY3FhLXctWzE0cHhdICFjcWEtaC1bMTRweF1cIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1tZW51ICNhZGRTdGVwTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImNxYS1hZGQtc3RlcC1tZW51XCIgeFBvc2l0aW9uPVwiYmVmb3JlXCIgeVBvc2l0aW9uPVwiYmVsb3dcIj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IG9wdCBvZiBhZGRTdGVwTWVudU9wdGlvbnNcIiAoY2xpY2spPVwib25BZGRTdGVwT3B0aW9uU2VsZWN0KG9wdCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAge3sgb3B0LmxhYmVsIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJlZmZlY3RpdmVTdGVwTW9yZU1lbnVPcHRpb25zLmxlbmd0aFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNxYS1wLTAgY3FhLWJvcmRlci0wIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBmb2N1czpjcWEtb3V0bGluZS1ub25lXCIgYXJpYS1sYWJlbD1cIk1vcmUgb3B0aW9uc1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJzdGVwTW9yZU1lbnVcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXRleHQtWzE0cHhdICFjcWEtdy1bMTRweF0gIWNxYS1oLVsxNHB4XVwiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LW1lbnUgI3N0ZXBNb3JlTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImNxYS1zdGVwLW1vcmUtbWVudVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiIHlQb3NpdGlvbj1cImJlbG93XCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBvcHQgb2YgZWZmZWN0aXZlU3RlcE1vcmVNZW51T3B0aW9uc1wiIChjbGljayk9XCJvblN0ZXBNb3JlT3B0aW9uU2VsZWN0KG9wdCwgJGV2ZW50KVwiPnt7IG9wdC5sYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PlxuICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihjb25maWcuZHVyYXRpb24pIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHN2ZyAqbmdJZj1cImhhc0V4cGFuZGFibGVDb250ZW50XCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTMuNSA1TDcgOC41TDEwLjUgNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQnJhbmNoIEJ1dHRvbnMgLSBSZWFkLW9ubHksIHNob3dpbmcgZXhlY3V0ZWQgc3RhdHVzIG9ubHkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weC00IGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXSBjcWEtZmxleC13cmFwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBicmFuY2ggb2YgY29uZmlnLmJyYW5jaGVzXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktMSBjcWEtcm91bmRlZCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QnJhbmNoQ2xhc3MoYnJhbmNoKVwiIChjbGljayk9XCJvbkJyYW5jaENsaWNrKGJyYW5jaClcIj5cbiAgICAgICAgPCEtLSBDaGVja21hcmsgaWNvbiBmb3IgZXhlY3V0ZWQgYnJhbmNoIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYnJhbmNoLmV4ZWN1dGVkXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDNMNC41IDguNUwyIDZcIiBzdHJva2U9XCIjMDA4MjM2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4+e3sgYnJhbmNoLnR5cGUudG9VcHBlckNhc2UoKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkICYmICFpc0xvYWRpbmdcIj5cblxuICAgIDwhLS0gRXhlY3V0ZWQgQnJhbmNoIFN1Yi1zdGVwcyAtLT5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBicmFuY2ggb2YgY29uZmlnLmJyYW5jaGVzXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYnJhbmNoLmV4ZWN1dGVkICYmIGJyYW5jaC5zdWJTdGVwc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtcGItMSBjcWEtbWwtOVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJzFweCBzb2xpZCAjRjNGNEY2J1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IHN1YlN0ZXAgb2YgYnJhbmNoLnN1YlN0ZXBzXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weS1bNS41cHhdIGNxYS1weC0zXCI+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBTdWItc3RlcCBTdGF0dXMgSWNvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycgfHwgc3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAncGFzc2VkJ1wiID5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuOTAwNSA0Ljk5OTk5QzExLjEyODkgNi4xMjA2NCAxMC45NjYyIDcuMjg1NzEgMTAuNDM5NSA4LjMwMDg5QzkuOTEyNzkgOS4zMTYwOCA5LjA1NCAxMC4xMiA4LjAwNjMxIDEwLjU3ODdDNi45NTg2MiAxMS4wMzczIDUuNzg1MzYgMTEuMTIyOSA0LjY4MjIgMTAuODIxMkMzLjU3OTA0IDEwLjUxOTUgMi42MTI2NSA5Ljg0ODY5IDEuOTQ0MTkgOC45MjA3MUMxLjI3NTczIDcuOTkyNzIgMC45NDU2MTEgNi44NjM2MSAxLjAwODg4IDUuNzIxNjlDMS4wNzIxNSA0LjU3OTc2IDEuNTI0OTkgMy40OTQwNCAyLjI5MTg4IDIuNjQ1NThDMy4wNTg3NiAxLjc5NzEyIDQuMDkzMzQgMS4yMzcyMSA1LjIyMzA4IDEuMDU5MjJDNi4zNTI4MiAwLjg4MTIzMyA3LjUwOTQ0IDEuMDk1OTIgOC41MDAwNSAxLjY2NzQ5XCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA1LjVMNiA3TDExIDJcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gRmFpbHVyZSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbHVyZScgfHwgc3ViU3RlcD8uc3RhdHVzPy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbGVkJ1wiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk03LjUgNC41TDQuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC41IDQuNUw3LjUgNy41XCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFBlbmRpbmcgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInN1YlN0ZXA/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBSdW5uaW5nIC0gU2hvdyBzcGlubmVyIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdWJTdGVwPy5zdGF0dXM/LnRvTG93ZXJDYXNlKCkgPT09ICdydW5uaW5nJ1wiPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1hbmltYXRlLXNwaW4gY3FhLXRleHQtWyMzQjgyRjZdXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNlwiIGN5PVwiNlwiIHI9XCI1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBvcGFjaXR5PVwiMC4yNVwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDFBNSA1IDAgMCAxIDExIDZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgXG5cbiAgICAgICAgICA8IS0tIFN1Yi1zdGVwIERlc2NyaXB0aW9uIC0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtdGV4dC1bMTNweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10ZXh0LVsjMzY0MTUzXVwiIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDtcIj5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic3ViU3RlcC5kZXNjcmlwdGlvblwiPjwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8IS0tIFN1Yi1zdGVwIER1cmF0aW9uIC0tPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtbWV0YWRhdGEta2V5XCI+XG4gICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihzdWJTdGVwLmR1cmF0aW9uKSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVW5leGVjdXRlZCBCcmFuY2ggTWVzc2FnZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCkubGVuZ3RoID4gMCAmJiBnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKS5sZW5ndGggPCAyXCIgY2xhc3M9XCJjcWEtbWwtOVwiPlxuICAgICAgPHAgY2xhc3M9XCJjcWEtcHgtMyBjcWEtcHktWzEwcHhdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS10ZXh0LVsjNzM3MzczXSBjcWEtaXRhbGljXCI+XG4gICAgICAgIHt7IGdldFVuZXhlY3V0ZWRCcmFuY2hlcygpPy5bMF0/LnR5cGU/LnRvVXBwZXJDYXNlKCkgfX0gYnJhbmNoIG5vdCBleGVjdXRlZFxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cImdldFVuZXhlY3V0ZWRCcmFuY2hlcygpLmxlbmd0aCA+IDFcIiBjbGFzcz1cImNxYS1tbC05XCI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1weC0zIGNxYS1weS1bMTBweF0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtWyM3MzczNzNdIGNxYS1pdGFsaWNcIj5cbiAgICAgICAge3sgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk/LlswXT8udHlwZT8udG9VcHBlckNhc2UoKSB9fSBhbmQge3sgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk/LlsxXT8udHlwZT8udG9VcHBlckNhc2UoKSB9fSBicmFuY2hlcyBub3QgZXhlY3V0ZWRcbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTmVzdGVkIFN0ZXBzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJoYXNDaGlsZCB8fCAoY29uZmlnLm5lc3RlZFN0ZXBzICYmIGNvbmZpZy5uZXN0ZWRTdGVwcy5sZW5ndGggPiAwKVwiIGNsYXNzPVwiY3FhLW1sLTkgY3FhLXBiLTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206ICcxcHggc29saWQgI0YzRjRGNidcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzczNzM3M10gY3FhLXB5LVsycHhdIGNxYS1weC0zXCIgKm5nSWY9XCJjb25maWcubmVzdGVkU3RlcHMgJiYgY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA+IDBcIj5OZXN0ZWQgc3RlcHM8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1wbC1bMThweF1cIiBzdHlsZT1cImJvcmRlci1sZWZ0OiAycHggc29saWQgI0M1QzdGQTtcIj5cbiAgICAgICAgPCEtLSBMb2FkaW5nIGluZGljYXRvciBmb3IgbmVzdGVkIHN0ZXBzIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzQ2hpbGQgJiYgKCFjb25maWcubmVzdGVkU3RlcHMgfHwgY29uZmlnLm5lc3RlZFN0ZXBzLmxlbmd0aCA9PT0gMCkgJiYgaXNTdGVwTG9hZGluZygpXCIgXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weS0yIGNxYS1weC0zXCI+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cImNxYS1hbmltYXRlLXNwaW4gY3FhLXRleHQtWyMzQjgyRjZdXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjdcIiBjeT1cIjdcIiByPVwiNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgb3BhY2l0eT1cIjAuMjVcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTcgMUE2IDYgMCAwIDEgMTMgN1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTNweF0gY3FhLXRleHQtWyM3MzczNzNdXCI+TG9hZGluZyBuZXN0ZWQgc3RlcHMuLi48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0ZXAgb2YgY29uZmlnLm5lc3RlZFN0ZXBzOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgPCEtLSBXcmFwcGVyIHRvIHNob3cgc2tlbGV0b24gd2hpbGUgc3RlcC1yZW5kZXJlciBpcyBsb2FkaW5nIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXN0ZXAtcmVuZGVyZXItd3JhcHBlclwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCInZXhjLScgKyBzdGVwLmlkXCJcbiAgICAgICAgICAgIFtjbGFzcy5sb2FkZWRdPVwiIWlzTmVzdGVkU3RlcExvYWRpbmcoc3RlcClcIj5cbiAgICAgICAgICAgIDwhLS0gTG9hZGluZyBza2VsZXRvbiBvdmVybGF5IC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaXNOZXN0ZWRTdGVwTG9hZGluZyhzdGVwKVwiIGNsYXNzPVwiY3FhLXN0ZXAtc2tlbGV0b24tb3ZlcmxheVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXN0ZXAtc2tlbGV0b24gY3FhLW14LTMgY3FhLW15LTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwhLS0gVXNlIHN0ZXAtcmVuZGVyZXIgZm9yIGFsbCBuZXN0ZWQgc3RlcHMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIC0tPlxuICAgICAgICAgICAgPCEtLSBUaGUgc3RlcC1yZW5kZXJlciB3aWxsIGR5bmFtaWNhbGx5IGxvYWQgdGhlIGFwcHJvcHJpYXRlIGNvbXBvbmVudCBhbmQgcGFzcyBoYW5kbGVycyAtLT5cbiAgICAgICAgICAgIDxjcWEtc3RlcC1yZW5kZXJlciBcbiAgICAgICAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgICAgICAgIFtzdGVwTnVtYmVyXT1cInN0ZXBOdW1iZXIgKyAnLicgKyAoaSArIDEpXCJcbiAgICAgICAgICAgICAgW29uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXT1cIm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uRXhwYW5kSGFuZGxlcl09XCJvbkV4cGFuZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyXT1cImdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtpc1N0ZXBMb2FkaW5nSGFuZGxlcl09XCJpc1N0ZXBMb2FkaW5nSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtpc1N0ZXBFeHBhbmRlZEhhbmRsZXJdPVwiaXNTdGVwRXhwYW5kZWRIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2p1bXBUb1RpbWVzdGFtcEhhbmRsZXJdPVwianVtcFRvVGltZXN0YW1wSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtjb252ZXJ0TXNUb1NlY29uZHNIYW5kbGVyXT1cImNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyXT1cImZvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcl09XCJnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRMb29wSXRlcmF0aW9uc0hhbmRsZXJdPVwiZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2dldEFwaUFzc2VydGlvbnNIYW5kbGVyXT1cImdldEFwaUFzc2VydGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2Zvcm1hdEFjdGlvbnNIYW5kbGVyXT1cImZvcm1hdEFjdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyXT1cIm9uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXJdPVwib25NYWtlQ3VycmVudEJhc2VsaW5lSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvblVwbG9hZEJhc2VsaW5lSGFuZGxlcl09XCJvblVwbG9hZEJhc2VsaW5lSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyXT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25BbmFseXplSGFuZGxlcl09XCJvbkFuYWx5emVIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uVmlld0Z1bGxMb2dzSGFuZGxlcl09XCJvblZpZXdGdWxsTG9nc0hhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25TZWxmSGVhbEFjdGlvbkhhbmRsZXJdPVwib25TZWxmSGVhbEFjdGlvbkhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25TdGVwQ2xpY2tIYW5kbGVyXT1cIm9uU3RlcENsaWNrSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvbkpzb25QYXRoQ29waWVkSGFuZGxlcl09XCJvbkpzb25QYXRoQ29waWVkSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvbkRvd25sb2FkSGFuZGxlcl09XCJvbkRvd25sb2FkSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvbkZpbGVQYXRoQ29waWVkSGFuZGxlcl09XCJvbkZpbGVQYXRoQ29waWVkSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtvblRleHRDb3BpZWRIYW5kbGVyXT1cIm9uVGV4dENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZG93bmxvYWRpbmdTdGVwSWRdPVwiZG93bmxvYWRpbmdTdGVwSWRcIlxuICAgICAgICAgICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgICAgICAgICAgW2lzTWFraW5nQ3VycmVudEJhc2VsaW5lXT1cImlzTWFraW5nQ3VycmVudEJhc2VsaW5lXCJcbiAgICAgICAgICAgICAgW3NlbGVjdGVkSXRlcmF0aW9uSWRdPVwic3RlcD8uc2VsZWN0ZWRJdGVyYXRpb25JZCB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtpc0xpdmVdPVwiaXNMaXZlXCJcbiAgICAgICAgICAgICAgW2lzRGVidWddPVwiaXNEZWJ1Z1wiXG4gICAgICAgICAgICAgIFtwYXJlbnRTa2lwcGVkXT1cInNlbGZEZWJ1Z0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2RlYnVnUG9pbnRTZXRdPVwiZ2V0RGVidWdQb2ludFNldEhhbmRsZXIgPyBnZXREZWJ1Z1BvaW50U2V0SGFuZGxlcihzdGVwKSA6IGRlYnVnUG9pbnRTZXRcIlxuICAgICAgICAgICAgICBbZ2V0RGVidWdQb2ludFNldEhhbmRsZXJdPVwiZ2V0RGVidWdQb2ludFNldEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbb25EZWJ1Z1BvaW50Q2hhbmdlSGFuZGxlcl09XCJvbkRlYnVnUG9pbnRDaGFuZ2VIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW29uRWRpdFN0ZXBIYW5kbGVyXT1cIm9uRWRpdFN0ZXBIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2FkZFN0ZXBNZW51T3B0aW9uc109XCJnZXRBZGRTdGVwTWVudU9wdGlvbnNGb3JOZXN0ZWQgPyBnZXRBZGRTdGVwTWVudU9wdGlvbnNGb3JOZXN0ZWQoc3RlcCkgOiBhZGRTdGVwTWVudU9wdGlvbnNcIlxuICAgICAgICAgICAgICBbb25BZGRTdGVwT3B0aW9uU2VsZWN0SGFuZGxlcl09XCJvbkFkZFN0ZXBPcHRpb25TZWxlY3RIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW3N0ZXBNb3JlTWVudU9wdGlvbnNdPVwiZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZCA/IGdldFN0ZXBNb3JlTWVudU9wdGlvbnNGb3JOZXN0ZWQoc3RlcCkgOiBzdGVwTW9yZU1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgW29uU3RlcE1vcmVPcHRpb25TZWxlY3RIYW5kbGVyXT1cIm9uU3RlcE1vcmVPcHRpb25TZWxlY3RIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2dldEFkZFN0ZXBNZW51T3B0aW9uc0Zvck5lc3RlZF09XCJnZXRBZGRTdGVwTWVudU9wdGlvbnNGb3JOZXN0ZWRcIlxuICAgICAgICAgICAgICBbZ2V0U3RlcE1vcmVNZW51T3B0aW9uc0Zvck5lc3RlZF09XCJnZXRTdGVwTW9yZU1lbnVPcHRpb25zRm9yTmVzdGVkXCJcbiAgICAgICAgICAgICAgKGNvbXBvbmVudFJlYWR5KT1cIm1hcmtTdGVwTG9hZGVkKHN0ZXApXCI+XG4gICAgICAgICAgICA8L2NxYS1zdGVwLXJlbmRlcmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNlbGYgSGVhbCBBbmFseXNpcyAtLT5cbiAgICA8Y3FhLXNlbGYtaGVhbC1hbmFseXNpcyBcbiAgICAgICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIFxuICAgICAgW2lkXT1cInN0ZXA/LnRlc3RTdGVwSWRcIlxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICBbaXNMb2FkaW5nQWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nQWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICBbaXNMb2FkaW5nTW9kaWZ5QWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nTW9kaWZ5QWNjZXB0Py5bc3RlcD8udGVzdFN0ZXBJZF0gOiBmYWxzZVwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICAgIDwhLS0gVGltaW5nIEJyZWFrZG93biAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC0xLjUgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZGlhbG9nLW11dGVkIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQXBwIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTS0zLjgxNDdlLTA2IDEwLjMyVi03LjE1MjU2ZS0wN0gwLjk1OTk5NlYxMC4zMkgtMy44MTQ3ZS0wNlpcIiBmaWxsPVwiI0U1RTdFQlwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uICYmICFpc0xvYWRpbmdcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbc3ViU3RlcHNdPVwiZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKClcIlxuICAgICAgW2ZhaWx1cmVEZXRhaWxzXT1cImZhaWx1cmVEZXRhaWxzXCJcbiAgICAgIFtpc0V4cGFuZGVkXT1cInNob3dGYWlsZWRTdGVwRGV0YWlsc1wiXG4gICAgICAodmlld01vcmVDbGljayk9XCJvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKCRldmVudClcIj5cbiAgICA8L2NxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFVwZGF0ZWQgRmFpbGVkIFN0ZXAgQ29tcG9uZW50IC0gc2hvd24gd2hlbiBidXR0b24gaXMgY2xpY2tlZCAtLT5cbiAgPGRpdiAqbmdJZj1cInNob3dWaWV3TW9yZUJ1dHRvbiAmJiBzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS11cGRhdGVkLWZhaWxlZC1zdGVwXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgIFtleHBhbmRlZF09XCJ0cnVlXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgW3JlYXNvbmluZ109XCJyZWFzb25pbmdcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgIFtpc01ha2luZ0N1cnJlbnRCYXNlbGluZV09XCJpc01ha2luZ0N1cnJlbnRCYXNlbGluZVwiXG4gICAgICBbaXNMaXZlXT1cImlzTGl2ZVwiXG4gICAgICAobWFrZUN1cnJlbnRCYXNlbGluZSk9XCJvbk1ha2VDdXJyZW50QmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAodXBsb2FkQmFzZWxpbmUpPVwib25VcGxvYWRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgIChhbmFseXplKT1cIm9uQW5hbHl6ZSgpXCJcbiAgICAgICh2aWV3RnVsbExvZ3MpPVwib25WaWV3RnVsbExvZ3MoKVwiPlxuICAgIDwvY3FhLXVwZGF0ZWQtZmFpbGVkLXN0ZXA+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|