@cqa-lib/cqa-ui 1.1.261 → 1.1.263
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-agent-step/ai-agent-step.component.mjs +11 -6
- package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +3 -3
- package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +198 -5
- package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +105 -8
- package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +123 -13
- package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +65 -5
- package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +3 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +656 -185
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +642 -183
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +31 -2
- package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +24 -5
- package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +28 -2
- package/lib/test-case-details/api-edit-step/api-edit-step.component.d.ts +18 -1
- package/package.json +1 -1
|
@@ -115,10 +115,10 @@ export class DeleteStepsComponent {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
DeleteStepsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
118
|
-
DeleteStepsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DeleteStepsComponent, selector: "cqa-delete-steps", outputs: { confirmDelete: "confirmDelete", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ getStepNumber(step, i) }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + getStepNumber(step, i)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n
|
|
118
|
+
DeleteStepsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DeleteStepsComponent, selector: "cqa-delete-steps", outputs: { confirmDelete: "confirmDelete", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ getStepNumber(step, i) }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + getStepNumber(step, i)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span [innerHTML]=\"getStepDisplayLabel(step, i)\" class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
119
119
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, decorators: [{
|
|
120
120
|
type: Component,
|
|
121
|
-
args: [{ selector: 'cqa-delete-steps', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ getStepNumber(step, i) }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + getStepNumber(step, i)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n
|
|
121
|
+
args: [{ selector: 'cqa-delete-steps', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ getStepNumber(step, i) }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + getStepNumber(step, i)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span [innerHTML]=\"getStepDisplayLabel(step, i)\" class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n" }]
|
|
122
122
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
123
123
|
type: Optional
|
|
124
124
|
}, {
|
|
@@ -129,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
129
129
|
}], cancelled: [{
|
|
130
130
|
type: Output
|
|
131
131
|
}] } });
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGVsZXRlLXN0ZXBzL2RlbGV0ZS1zdGVwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RlbGV0ZS1zdGVwcy9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFJTCxrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUVsQzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUF3RCxJQUl2RDtRQUp1RCxTQUFJLEdBQUosSUFBSSxDQUkzRDtRQWJELHNEQUFzRDtRQUN0RCxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFFekMsNkVBQTZFO1FBQzdFLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLCtEQUErRDtRQUMvRCxlQUFVLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFlM0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBVDdDLDBDQUEwQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElB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LENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsYUFBYSxDQUFDLElBQXdCLEVBQUUsS0FBYTtRQUNuRCxNQUFNLE9BQU8sR0FBSSxJQUFZLEVBQUUsVUFBVSxDQUFDO1FBQzFDLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQ3JDLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7O2lIQTFIVSxvQkFBb0Isa0JBVUMsZUFBZTtxR0FWcEMsb0JBQW9CLHNLQ25CakMsdTdIQXlFQTsyRkR0RGEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQixRQUV0QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OzBCQVlqQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7NENBYXJDLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VTdGVwQ29uZmlnLFxuICBOb3JtYWxTdGVwQ29uZmlnLFxuICBUZXN0Q2FzZUV2ZW50VHlwZSxcbiAgaXNOb3JtYWxTdGVwQ29uZmlnLFxufSBmcm9tICcuLi90ZXN0LWNhc2Utc3RlcC5tb2RlbHMnO1xuXG4vKipcbiAqIERlbGV0ZSBTdGVwcyBjb25maXJtYXRpb24gbW9kYWwgZm9yIFRlc3QgQ2FzZSBEZXRhaWxzLlxuICogTWF0Y2hlcyB0aGUgZGVzaWduIG9mIENyZWF0ZSBTdGVwIEdyb3VwOiBzaG93cyBzZWxlY3RlZCBzdGVwcyB3aXRoIGNvbnRleHQgKGUuZy4gXCJJRiBsYW5lXCIpLFxuICogd2FybmluZyB0ZXh0LCBhbmQgQ2FuY2VsIC8gRGVsZXRlIGFjdGlvbnMuIFN0ZXBzIGFyZSBzaG93biB3aXRoIHJlZC9kYW5nZXIgc3R5bGluZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWRlbGV0ZS1zdGVwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIERlbGV0ZVN0ZXBzQ29tcG9uZW50IHtcbiAgLyoqIFN0ZXBzIHRoYXQgd2lsbCBiZSBkZWxldGVkIChzaG93biBpbiB0aGUgbGlzdCkuICovXG4gIHN0ZXBzVG9EZWxldGU6IFRlc3RDYXNlU3RlcENvbmZpZ1tdID0gW107XG5cbiAgLyoqIENvbnRleHQgbGFiZWwgZm9yIHRoZSBzdWItaGVhZGluZywgZS5nLiBcIklGIGxhbmVcIiwgXCJFTFNFXCIsIFwiRm9yIGxvb3BcIi4gKi9cbiAgY29udGV4dExhYmVsID0gJyc7XG5cbiAgLyoqIE9wdGlvbmFsIHN0ZXAgaW1hZ2VzL3NjcmVlbnNob3RzIG1hcDogc3RlcElkIC0+IGltYWdlVXJsICovXG4gIHN0ZXBJbWFnZXM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhPzoge1xuICAgIHN0ZXBzVG9EZWxldGU/OiBUZXN0Q2FzZVN0ZXBDb25maWdbXTtcbiAgICBjb250ZXh0TGFiZWw/OiBzdHJpbmc7XG4gICAgc3RlcEltYWdlcz86IE1hcDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZz47XG4gIH0pIHtcbiAgICAvLyBJbml0aWFsaXplIGZyb20gZGlhbG9nIGRhdGEgaWYgcHJvdmlkZWRcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5zdGVwc1RvRGVsZXRlID0gZGF0YS5zdGVwc1RvRGVsZXRlIHx8IFtdO1xuICAgICAgdGhpcy5jb250ZXh0TGFiZWwgPSBkYXRhLmNvbnRleHRMYWJlbCB8fCAnJztcbiAgICAgIHRoaXMuc3RlcEltYWdlcyA9IGRhdGEuc3RlcEltYWdlcyB8fCBuZXcgTWFwKCk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIGNvbmZpcm1EZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZ2V0IHN0ZXBzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwc1RvRGVsZXRlPy5sZW5ndGggPz8gMDtcbiAgfVxuXG4gIGdldCB0aXRsZVRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuID0gdGhpcy5zdGVwc0NvdW50O1xuICAgIHJldHVybiBuID09PSAxID8gJ0RlbGV0ZSAxIHN0ZXA/JyA6IGBEZWxldGUgJHtufSBzdGVwcz9gO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkU3RlcHNTdWJ0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgU2VsZWN0ZWQgKCR7dGhpcy5zdGVwc0NvdW50fSkgc3RlcHMgZm9yIGRlbGV0aW9uLCBhcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZXNlIHN0ZXBzP2A7XG4gIH1cblxuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgYSBzdGVwIGluIHRoZSBsaXN0IChzYW1lIHBhdHRlcm4gYXMgY3JlYXRlLXN0ZXAtZ3JvdXApLiAqL1xuICBnZXRTdGVwRGlzcGxheUxhYmVsKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGlzTm9ybWFsU3RlcENvbmZpZyhzdGVwKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Tm9ybWFsU3RlcExhYmVsKHN0ZXApO1xuICAgIH1cbiAgICBpZiAoJ2dyb3VwTmFtZScgaW4gc3RlcCAmJiBzdGVwLmdyb3VwTmFtZSkge1xuICAgICAgcmV0dXJuIHN0ZXAuZ3JvdXBOYW1lO1xuICAgIH1cbiAgICBpZiAoJ2NvbmRpdGlvbicgaW4gc3RlcCAmJiBzdGVwLmNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIHN0ZXAuY29uZGl0aW9uO1xuICAgIH1cbiAgICBpZiAoJ2xvb3BUeXBlJyBpbiBzdGVwKSB7XG4gICAgICBjb25zdCBsb29wID0gc3RlcCBhcyB7IGxvb3BUeXBlOiBzdHJpbmc7IHRlc3REYXRhUHJvZmlsZT86IHN0cmluZzsgY29uZGl0aW9uPzogc3RyaW5nIH07XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ2ZvcicgJiYgbG9vcC50ZXN0RGF0YVByb2ZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGBGb3IgbG9vcDogJHtsb29wLnRlc3REYXRhUHJvZmlsZX1gO1xuICAgICAgfVxuICAgICAgaWYgKGxvb3AubG9vcFR5cGUgPT09ICd3aGlsZScgJiYgbG9vcC5jb25kaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGBXaGlsZTogJHtsb29wLmNvbmRpdGlvbn1gO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RlcC5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHN0ZXAuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiBgU3RlcCAke2luZGV4ICsgMX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb3JtYWxTdGVwTGFiZWwoc3RlcDogTm9ybWFsU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyYW1zID0gc3RlcC5wYXJhbWV0ZXJzID8/IFtdO1xuICAgIGNvbnN0IGdldFBhcmFtID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICAgIHBhcmFtcy5maW5kKChwKSA9PiBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgdmFsID0gKHA6IHsgdmFsdWU/OiBzdHJpbmc7IGRpc3BsYXlWYWx1ZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkKSA9PlxuICAgICAgcD8uZGlzcGxheVZhbHVlID8/IHA/LnZhbHVlID8/ICcnO1xuXG4gICAgc3dpdGNoIChzdGVwLmV2ZW50VHlwZSBhcyBUZXN0Q2FzZUV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnbmF2aWdhdGUnOiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGdldFBhcmFtKCd1cmwnKTtcbiAgICAgICAgcmV0dXJuIHVybCA/IGBOYXZpZ2F0ZSB0byAke3ZhbCh1cmwpfWAgOiAnTmF2aWdhdGUgdG8nO1xuICAgICAgfVxuICAgICAgY2FzZSAnYWktYWdlbnQnOiB7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IGdldFBhcmFtKCdpbnN0cnVjdGlvbnMnKSA/PyBnZXRQYXJhbSgnZGVzY3JpcHRpb24nKTtcbiAgICAgICAgcmV0dXJuIHZhbChpbnN0cnVjdGlvbnMpIHx8ICdBSSBBZ2VudCBzdGVwJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCd0ZXh0JykpIHx8ICdUeXBlJztcbiAgICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnc2VsZWN0b3InKSkgPyBgQ2xpY2sgJHt2YWwoZ2V0UGFyYW0oJ3NlbGVjdG9yJykpfWAgOiAnQ2xpY2snO1xuICAgICAgY2FzZSAndmVyaWZ5JzpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSkgfHwgJ1ZlcmlmeSc7XG4gICAgICBjYXNlICdjdXN0b20nOiB7XG4gICAgICAgIGNvbnN0IGRlc2MgPSBnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSA/PyBnZXRQYXJhbSgnYWN0aW9uJyk7XG4gICAgICAgIHJldHVybiB2YWwoZGVzYykgfHwgJ0N1c3RvbSBzdGVwJztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ2Rlc2NyaXB0aW9uJykpIHx8IHZhbChwYXJhbXNbMF0pIHx8ICdTdGVwJztcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpcm1EZWxldGUuZW1pdCgpO1xuICB9XG5cbiAgLyoqIEdldCBzdGVwIGltYWdlIFVSTCBpZiBhdmFpbGFibGUgKi9cbiAgZ2V0U3RlcEltYWdlKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghc3RlcD8uaWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnN0ZXBJbWFnZXMuZ2V0KHN0ZXAuaWQpIHx8IG51bGw7XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgc3RlcCBoYXMgYW4gaW1hZ2UgKi9cbiAgaGFzU3RlcEltYWdlKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBJbWFnZShzdGVwKSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKiBHZXQgc3RlcCBudW1iZXIgZnJvbSBzdGVwIGRhdGEsIGZhbGxpbmcgYmFjayB0byBpbmRleCArIDEgKi9cbiAgZ2V0U3RlcE51bWJlcihzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgIGNvbnN0IHN0ZXBOdW0gPSAoc3RlcCBhcyBhbnkpPy5zdGVwTnVtYmVyO1xuICAgIGlmIChzdGVwTnVtICE9IG51bGwgJiYgc3RlcE51bSAhPT0gJycpIHtcbiAgICAgIHJldHVybiBzdGVwTnVtO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXggKyAxO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1yb3VuZGVkLVsxMnB4XSBjcWEtc2hhZG93LWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtdy1mdWxsIGNxYS1tYXgtdy1bNTAwcHhdIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXAtNiBjcWEtYm94LWJvcmRlciBjcWEtbWluLWgtMFwiPlxuICA8IS0tIEhlYWRlcjogdGl0bGUgKyBjbG9zZSAoWCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RhcnQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtbWluLXctMFwiPlxuICAgICAgPGgyIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsyMnB4XSBjcWEtbGVhZGluZy1bMjhweF0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzEwMTgyOF0gY3FhLW0tMFwiPlxuICAgICAgICB7eyB0aXRsZVRleHQgfX1cbiAgICAgIDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzIxcHhdIGNxYS10cmFja2luZy1bLTAuMTVweF0gY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tLTBcIj5cbiAgICAgICAgVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSwgYnV0IHlvdSBjYW4gdXNlIHRoZSB1bmRvIGZ1bmN0aW9uIGluIHRoZSB0b29sYmFyLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbWluLWgtNyBjcWEtbWluLXctNyBjcWEtcm91bmRlZCBjcWEtdGV4dC1bIzZCNzI4MF0gaG92ZXI6Y3FhLWJnLVsjRjNGNEY2XSBjcWEtcC0wIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPHBhdGggZD1cIk0xOCA2TDYgMThNNiA2bDEyIDEyXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFNlbGVjdGVkIHN0ZXBzIGZvciBbY29udGV4dF0gKE4pIOKAkyBzY3JvbGwgd2hlbiBtYW55IHN0ZXBzLCBzY3JvbGxiYXIgaGlkZGVuIChzYW1lIGFzIGNyZWF0ZS1zdGVwLWdyb3VwKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1pbi1oLTBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1hbGlnbi1taWRkbGVcIj5cbiAgICAgIHt7IHNlbGVjdGVkU3RlcHNTdWJ0aXRsZSB9fVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cInN0ZXBzQ291bnQgPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXAtNCBjcWEtdGV4dC1jZW50ZXJcIj5cbiAgICAgIE5vIHN0ZXBzIHNlbGVjdGVkLiBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBzdGVwIHRvIGRlbGV0ZS5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RlcHNDb3VudCA+IDBcIiBjbGFzcz1cImNxYS1zY3JvbGxiYXItaGlkZSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYXgtaC1bMjAwcHhdIGNxYS1taW4taC0wIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLW92ZXJmbG93LXgtaGlkZGVuIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1wLVs2cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVtyZ2JhKDAsMCwwLDAuMSldXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzVG9EZWxldGU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bOHB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHQtWzRweF0gY3FhLXBiLVs0cHhdIGNxYS1wbC1bOHB4XSBjcWEtcHItWzhweF0gY3FhLWJnLVtyZ2JhKDIzOCw2Myw2MywwLjEpXVwiPlxuICAgICAgICA8IS0tIE51bWJlcmVkIGJhZGdlIChyZWQpIC0tPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctNyBjcWEtaC03IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjQzYzNTM1XSBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIHt7IGdldFN0ZXBOdW1iZXIoc3RlcCwgaSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8IS0tIFN0ZXAgaW1hZ2UgaWYgYXZhaWxhYmxlIC0tPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJoYXNTdGVwSW1hZ2Uoc3RlcClcIlxuICAgICAgICAgIFtzcmNdPVwiZ2V0U3RlcEltYWdlKHN0ZXApXCJcbiAgICAgICAgICBbYWx0XT1cIidTdGVwICcgKyBnZXRTdGVwTnVtYmVyKHN0ZXAsIGkpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS13LTggY3FhLWgtOCBjcWEtcm91bmRlZC1bNHB4XSBjcWEtb2JqZWN0LWNvdmVyIGNxYS1mbGV4LXNocmluay0wIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVtyZ2JhKDIyMCwzOCwzOCwwLjIpXVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10cmFja2luZy1bMHB4XSBjcWEtdGV4dC1bI0RDMjYyNl0gY3FhLWZsZXgtMSBjcWEtbWluLXctMCBjcWEtdHJ1bmNhdGVcIj5cbiAgICAgICAgICB7eyBnZXRTdGVwRGlzcGxheUxhYmVsKHN0ZXAsIGkpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj4gIFxuXG4gIDwhLS0gQWN0aW9uczogQ2FuY2VsIHwgRGVsZXRlIChyaWdodC1hbGlnbmVkKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktZW5kIGNxYS13LWZ1bGwgY3FhLWdhcC0zXCI+XG4gICAgPGNxYS1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICBidG5TaXplPVwibGdcIlxuICAgICAgdGV4dD1cIkNhbmNlbFwiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLWJnLXdoaXRlIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjNDE0MTQ2XSBjcWEtdGV4dC1bIzQxNDE0Nl0nXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJmaWxsZWRcIlxuICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgIHRleHQ9XCJEZWxldGVcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1ib3JkZXItMCBjcWEtYmctWyNFRTNGM0ZdIGNxYS10ZXh0LXdoaXRlJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwic3RlcHNDb3VudCA9PT0gMFwiXG4gICAgICAoY2xpY2tlZCk9XCJvbkRlbGV0ZSgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGVsZXRlLXN0ZXBzL2RlbGV0ZS1zdGVwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RlbGV0ZS1zdGVwcy9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFJTCxrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUVsQzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUF3RCxJQUl2RDtRQUp1RCxTQUFJLEdBQUosSUFBSSxDQUkzRDtRQWJELHNEQUFzRDtRQUN0RCxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFFekMsNkVBQTZFO1FBQzdFLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLCtEQUErRDtRQUMvRCxlQUFVLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFlM0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBVDdDLDBDQUEwQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElB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LENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsYUFBYSxDQUFDLElBQXdCLEVBQUUsS0FBYTtRQUNuRCxNQUFNLE9BQU8sR0FBSSxJQUFZLEVBQUUsVUFBVSxDQUFDO1FBQzFDLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO1lBQ3JDLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7O2lIQTFIVSxvQkFBb0Isa0JBVUMsZUFBZTtxR0FWcEMsb0JBQW9CLHNLQ25CakMsczdIQXdFQTsyRkRyRGEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQixRQUV0QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OzBCQVlqQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7NENBYXJDLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VTdGVwQ29uZmlnLFxuICBOb3JtYWxTdGVwQ29uZmlnLFxuICBUZXN0Q2FzZUV2ZW50VHlwZSxcbiAgaXNOb3JtYWxTdGVwQ29uZmlnLFxufSBmcm9tICcuLi90ZXN0LWNhc2Utc3RlcC5tb2RlbHMnO1xuXG4vKipcbiAqIERlbGV0ZSBTdGVwcyBjb25maXJtYXRpb24gbW9kYWwgZm9yIFRlc3QgQ2FzZSBEZXRhaWxzLlxuICogTWF0Y2hlcyB0aGUgZGVzaWduIG9mIENyZWF0ZSBTdGVwIEdyb3VwOiBzaG93cyBzZWxlY3RlZCBzdGVwcyB3aXRoIGNvbnRleHQgKGUuZy4gXCJJRiBsYW5lXCIpLFxuICogd2FybmluZyB0ZXh0LCBhbmQgQ2FuY2VsIC8gRGVsZXRlIGFjdGlvbnMuIFN0ZXBzIGFyZSBzaG93biB3aXRoIHJlZC9kYW5nZXIgc3R5bGluZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWRlbGV0ZS1zdGVwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIERlbGV0ZVN0ZXBzQ29tcG9uZW50IHtcbiAgLyoqIFN0ZXBzIHRoYXQgd2lsbCBiZSBkZWxldGVkIChzaG93biBpbiB0aGUgbGlzdCkuICovXG4gIHN0ZXBzVG9EZWxldGU6IFRlc3RDYXNlU3RlcENvbmZpZ1tdID0gW107XG5cbiAgLyoqIENvbnRleHQgbGFiZWwgZm9yIHRoZSBzdWItaGVhZGluZywgZS5nLiBcIklGIGxhbmVcIiwgXCJFTFNFXCIsIFwiRm9yIGxvb3BcIi4gKi9cbiAgY29udGV4dExhYmVsID0gJyc7XG5cbiAgLyoqIE9wdGlvbmFsIHN0ZXAgaW1hZ2VzL3NjcmVlbnNob3RzIG1hcDogc3RlcElkIC0+IGltYWdlVXJsICovXG4gIHN0ZXBJbWFnZXM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhPzoge1xuICAgIHN0ZXBzVG9EZWxldGU/OiBUZXN0Q2FzZVN0ZXBDb25maWdbXTtcbiAgICBjb250ZXh0TGFiZWw/OiBzdHJpbmc7XG4gICAgc3RlcEltYWdlcz86IE1hcDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZz47XG4gIH0pIHtcbiAgICAvLyBJbml0aWFsaXplIGZyb20gZGlhbG9nIGRhdGEgaWYgcHJvdmlkZWRcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5zdGVwc1RvRGVsZXRlID0gZGF0YS5zdGVwc1RvRGVsZXRlIHx8IFtdO1xuICAgICAgdGhpcy5jb250ZXh0TGFiZWwgPSBkYXRhLmNvbnRleHRMYWJlbCB8fCAnJztcbiAgICAgIHRoaXMuc3RlcEltYWdlcyA9IGRhdGEuc3RlcEltYWdlcyB8fCBuZXcgTWFwKCk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIGNvbmZpcm1EZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZ2V0IHN0ZXBzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwc1RvRGVsZXRlPy5sZW5ndGggPz8gMDtcbiAgfVxuXG4gIGdldCB0aXRsZVRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBuID0gdGhpcy5zdGVwc0NvdW50O1xuICAgIHJldHVybiBuID09PSAxID8gJ0RlbGV0ZSAxIHN0ZXA/JyA6IGBEZWxldGUgJHtufSBzdGVwcz9gO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkU3RlcHNTdWJ0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgU2VsZWN0ZWQgKCR7dGhpcy5zdGVwc0NvdW50fSkgc3RlcHMgZm9yIGRlbGV0aW9uLCBhcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZXNlIHN0ZXBzP2A7XG4gIH1cblxuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgYSBzdGVwIGluIHRoZSBsaXN0IChzYW1lIHBhdHRlcm4gYXMgY3JlYXRlLXN0ZXAtZ3JvdXApLiAqL1xuICBnZXRTdGVwRGlzcGxheUxhYmVsKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGlzTm9ybWFsU3RlcENvbmZpZyhzdGVwKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Tm9ybWFsU3RlcExhYmVsKHN0ZXApO1xuICAgIH1cbiAgICBpZiAoJ2dyb3VwTmFtZScgaW4gc3RlcCAmJiBzdGVwLmdyb3VwTmFtZSkge1xuICAgICAgcmV0dXJuIHN0ZXAuZ3JvdXBOYW1lO1xuICAgIH1cbiAgICBpZiAoJ2NvbmRpdGlvbicgaW4gc3RlcCAmJiBzdGVwLmNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIHN0ZXAuY29uZGl0aW9uO1xuICAgIH1cbiAgICBpZiAoJ2xvb3BUeXBlJyBpbiBzdGVwKSB7XG4gICAgICBjb25zdCBsb29wID0gc3RlcCBhcyB7IGxvb3BUeXBlOiBzdHJpbmc7IHRlc3REYXRhUHJvZmlsZT86IHN0cmluZzsgY29uZGl0aW9uPzogc3RyaW5nIH07XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ2ZvcicgJiYgbG9vcC50ZXN0RGF0YVByb2ZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGBGb3IgbG9vcDogJHtsb29wLnRlc3REYXRhUHJvZmlsZX1gO1xuICAgICAgfVxuICAgICAgaWYgKGxvb3AubG9vcFR5cGUgPT09ICd3aGlsZScgJiYgbG9vcC5jb25kaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGBXaGlsZTogJHtsb29wLmNvbmRpdGlvbn1gO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RlcC5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHN0ZXAuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiBgU3RlcCAke2luZGV4ICsgMX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb3JtYWxTdGVwTGFiZWwoc3RlcDogTm9ybWFsU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyYW1zID0gc3RlcC5wYXJhbWV0ZXJzID8/IFtdO1xuICAgIGNvbnN0IGdldFBhcmFtID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICAgIHBhcmFtcy5maW5kKChwKSA9PiBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgdmFsID0gKHA6IHsgdmFsdWU/OiBzdHJpbmc7IGRpc3BsYXlWYWx1ZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkKSA9PlxuICAgICAgcD8uZGlzcGxheVZhbHVlID8/IHA/LnZhbHVlID8/ICcnO1xuXG4gICAgc3dpdGNoIChzdGVwLmV2ZW50VHlwZSBhcyBUZXN0Q2FzZUV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnbmF2aWdhdGUnOiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGdldFBhcmFtKCd1cmwnKTtcbiAgICAgICAgcmV0dXJuIHVybCA/IGBOYXZpZ2F0ZSB0byAke3ZhbCh1cmwpfWAgOiAnTmF2aWdhdGUgdG8nO1xuICAgICAgfVxuICAgICAgY2FzZSAnYWktYWdlbnQnOiB7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IGdldFBhcmFtKCdpbnN0cnVjdGlvbnMnKSA/PyBnZXRQYXJhbSgnZGVzY3JpcHRpb24nKTtcbiAgICAgICAgcmV0dXJuIHZhbChpbnN0cnVjdGlvbnMpIHx8ICdBSSBBZ2VudCBzdGVwJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCd0ZXh0JykpIHx8ICdUeXBlJztcbiAgICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnc2VsZWN0b3InKSkgPyBgQ2xpY2sgJHt2YWwoZ2V0UGFyYW0oJ3NlbGVjdG9yJykpfWAgOiAnQ2xpY2snO1xuICAgICAgY2FzZSAndmVyaWZ5JzpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSkgfHwgJ1ZlcmlmeSc7XG4gICAgICBjYXNlICdjdXN0b20nOiB7XG4gICAgICAgIGNvbnN0IGRlc2MgPSBnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSA/PyBnZXRQYXJhbSgnYWN0aW9uJyk7XG4gICAgICAgIHJldHVybiB2YWwoZGVzYykgfHwgJ0N1c3RvbSBzdGVwJztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ2Rlc2NyaXB0aW9uJykpIHx8IHZhbChwYXJhbXNbMF0pIHx8ICdTdGVwJztcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICBvbkRlbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpcm1EZWxldGUuZW1pdCgpO1xuICB9XG5cbiAgLyoqIEdldCBzdGVwIGltYWdlIFVSTCBpZiBhdmFpbGFibGUgKi9cbiAgZ2V0U3RlcEltYWdlKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghc3RlcD8uaWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnN0ZXBJbWFnZXMuZ2V0KHN0ZXAuaWQpIHx8IG51bGw7XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgc3RlcCBoYXMgYW4gaW1hZ2UgKi9cbiAgaGFzU3RlcEltYWdlKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFN0ZXBJbWFnZShzdGVwKSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKiBHZXQgc3RlcCBudW1iZXIgZnJvbSBzdGVwIGRhdGEsIGZhbGxpbmcgYmFjayB0byBpbmRleCArIDEgKi9cbiAgZ2V0U3RlcE51bWJlcihzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgIGNvbnN0IHN0ZXBOdW0gPSAoc3RlcCBhcyBhbnkpPy5zdGVwTnVtYmVyO1xuICAgIGlmIChzdGVwTnVtICE9IG51bGwgJiYgc3RlcE51bSAhPT0gJycpIHtcbiAgICAgIHJldHVybiBzdGVwTnVtO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXggKyAxO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1yb3VuZGVkLVsxMnB4XSBjcWEtc2hhZG93LWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtdy1mdWxsIGNxYS1tYXgtdy1bNTAwcHhdIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXAtNiBjcWEtYm94LWJvcmRlciBjcWEtbWluLWgtMFwiPlxuICA8IS0tIEhlYWRlcjogdGl0bGUgKyBjbG9zZSAoWCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RhcnQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtbWluLXctMFwiPlxuICAgICAgPGgyIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsyMnB4XSBjcWEtbGVhZGluZy1bMjhweF0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzEwMTgyOF0gY3FhLW0tMFwiPlxuICAgICAgICB7eyB0aXRsZVRleHQgfX1cbiAgICAgIDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzIxcHhdIGNxYS10cmFja2luZy1bLTAuMTVweF0gY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tLTBcIj5cbiAgICAgICAgVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSwgYnV0IHlvdSBjYW4gdXNlIHRoZSB1bmRvIGZ1bmN0aW9uIGluIHRoZSB0b29sYmFyLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbWluLWgtNyBjcWEtbWluLXctNyBjcWEtcm91bmRlZCBjcWEtdGV4dC1bIzZCNzI4MF0gaG92ZXI6Y3FhLWJnLVsjRjNGNEY2XSBjcWEtcC0wIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPHBhdGggZD1cIk0xOCA2TDYgMThNNiA2bDEyIDEyXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFNlbGVjdGVkIHN0ZXBzIGZvciBbY29udGV4dF0gKE4pIOKAkyBzY3JvbGwgd2hlbiBtYW55IHN0ZXBzLCBzY3JvbGxiYXIgaGlkZGVuIChzYW1lIGFzIGNyZWF0ZS1zdGVwLWdyb3VwKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1pbi1oLTBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1hbGlnbi1taWRkbGVcIj5cbiAgICAgIHt7IHNlbGVjdGVkU3RlcHNTdWJ0aXRsZSB9fVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cInN0ZXBzQ291bnQgPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXAtNCBjcWEtdGV4dC1jZW50ZXJcIj5cbiAgICAgIE5vIHN0ZXBzIHNlbGVjdGVkLiBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBzdGVwIHRvIGRlbGV0ZS5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RlcHNDb3VudCA+IDBcIiBjbGFzcz1cImNxYS1zY3JvbGxiYXItaGlkZSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYXgtaC1bMjAwcHhdIGNxYS1taW4taC0wIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLW92ZXJmbG93LXgtaGlkZGVuIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1wLVs2cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVtyZ2JhKDAsMCwwLDAuMSldXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzVG9EZWxldGU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bOHB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHQtWzRweF0gY3FhLXBiLVs0cHhdIGNxYS1wbC1bOHB4XSBjcWEtcHItWzhweF0gY3FhLWJnLVtyZ2JhKDIzOCw2Myw2MywwLjEpXVwiPlxuICAgICAgICA8IS0tIE51bWJlcmVkIGJhZGdlIChyZWQpIC0tPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctNyBjcWEtaC03IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjQzYzNTM1XSBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIHt7IGdldFN0ZXBOdW1iZXIoc3RlcCwgaSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8IS0tIFN0ZXAgaW1hZ2UgaWYgYXZhaWxhYmxlIC0tPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJoYXNTdGVwSW1hZ2Uoc3RlcClcIlxuICAgICAgICAgIFtzcmNdPVwiZ2V0U3RlcEltYWdlKHN0ZXApXCJcbiAgICAgICAgICBbYWx0XT1cIidTdGVwICcgKyBnZXRTdGVwTnVtYmVyKHN0ZXAsIGkpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS13LTggY3FhLWgtOCBjcWEtcm91bmRlZC1bNHB4XSBjcWEtb2JqZWN0LWNvdmVyIGNxYS1mbGV4LXNocmluay0wIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVtyZ2JhKDIyMCwzOCwzOCwwLjIpXVwiPlxuICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcCwgaSlcIiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10cmFja2luZy1bMHB4XSBjcWEtdGV4dC1bI0RDMjYyNl0gY3FhLWZsZXgtMSBjcWEtbWluLXctMCBjcWEtdHJ1bmNhdGVcIj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAgXG5cbiAgPCEtLSBBY3Rpb25zOiBDYW5jZWwgfCBEZWxldGUgKHJpZ2h0LWFsaWduZWQpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLXctZnVsbCBjcWEtZ2FwLTNcIj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiQ2FuY2VsXCJcbiAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtYmctd2hpdGUgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM0MTQxNDZdIGNxYS10ZXh0LVsjNDE0MTQ2XSdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICBidG5TaXplPVwibGdcIlxuICAgICAgdGV4dD1cIkRlbGV0ZVwiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLXJvdW5kZWQtWzhweF0gY3FhLWJvcmRlci0wIGNxYS1iZy1bI0VFM0YzRl0gY3FhLXRleHQtd2hpdGUnXCJcbiAgICAgIFtkaXNhYmxlZF09XCJzdGVwc0NvdW50ID09PSAwXCJcbiAgICAgIChjbGlja2VkKT1cIm9uRGVsZXRlKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|