@libs-ui/components-datetime-picker 0.2.356-3 → 0.2.356-5

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.
@@ -1279,10 +1279,10 @@ export class LibsUiComponentsDatetimePickerCustomRangesCalendarComponent {
1279
1279
  return;
1280
1280
  }
1281
1281
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1282
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, isStandalone: true, selector: "libs_ui-components-datetime-picker-custom_ranges-calendar", inputs: { quickRangesArray: { classPropertyName: "quickRangesArray", publicName: "quickRangesArray", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, isSingle: { classPropertyName: "isSingle", publicName: "isSingle", isSignal: true, isRequired: false, transformFunction: null }, showDropdownsSelect: { classPropertyName: "showDropdownsSelect", publicName: "showDropdownsSelect", isSignal: true, isRequired: false, transformFunction: null }, hasTimePicker: { classPropertyName: "hasTimePicker", publicName: "hasTimePicker", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, dateOptions: { classPropertyName: "dateOptions", publicName: "dateOptions", isSignal: true, isRequired: false, transformFunction: null }, autoApply: { classPropertyName: "autoApply", publicName: "autoApply", isSignal: true, isRequired: false, transformFunction: null }, hasSecondPicker: { classPropertyName: "hasSecondPicker", publicName: "hasSecondPicker", isSignal: true, isRequired: false, transformFunction: null }, showRangeLabelOnInput: { classPropertyName: "showRangeLabelOnInput", publicName: "showRangeLabelOnInput", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, listYearHiddenInputSearch: { classPropertyName: "listYearHiddenInputSearch", publicName: "listYearHiddenInputSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange", outChangStageFlagMouse: "outChangStageFlagMouse", outPickerDate: "outPickerDate", outCancel: "outCancel", outUpdateWidth: "outUpdateWidth", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "pickerContainer", first: true, predicate: ["pickerContainer"], descendants: true, isSignal: true }, { propertyName: "inputTimeHours", predicate: LibsUiComponentsInputsInputComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-component-custom_ranges-calendar test-class\">\n <div class=\"relative flex\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar\"\n [class.right]=\"isSingle()\"\n [class.left]=\"!isSingle()\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables(); as calendarVariables) {\n <table>\n <thead>\n <tr>\n <th\n colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables.left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class=\"mr-[8px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[130px]', position: { mode: 'center', distance: 0 } }\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().left()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyFromSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [listHiddenInputSearch]=\"true\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'month')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'month')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'month']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'month'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown\n [listMaxItemShow]=\"10\"\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[110px]', position: { mode: 'center', distance: 0 } }\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"listYearHiddenInputSearch()\"\n [listConfig]=\"listLeftYearConfig()\"\n [listKeySelected]=\"listKeyFromSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"leftYearHttpDetailConfig()\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'year')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'year')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'year']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(' YYYY') }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'year'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n\n <div class=\"w-1/4 flex items-center relative\">\n @if (!calendarVariables.left().minDate || calendarVariables.left().minDate?.isBefore(calendarVariables.left().calendar && calendarVariables.left().calendar?.firstDay)) {\n <div (click)=\"handlerClickPrev(sideEnum.left)\">\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n @if ((!calendarVariables.left().maxDate || calendarVariables.left().maxDate?.isAfter(calendarVariables.left().calendar && calendarVariables.left().calendar?.lastDay)) && isSingle()) {\n <div (click)=\"handlerClickNext(sideEnum.left)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables.left().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(' YYYY') }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span\n class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dayofweek }}\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"drp-animate\">\n @for (row of calendarVariables.left().calRows?.(); track row) {\n <tr\n class=\"h-[32px]\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.classList\">\n @for (col of calendarVariables.left().calCols?.(); track col) {\n <td\n class=\"libs-ui-font-h5r\"\n [class.today]=\"\n calendarVariables.left().calendar &&\n calendarVariables.left().calendar?.[row]?.[col]?.date() === today().date() &&\n calendarVariables.left().calendar?.[row]?.[col]?.month() === today().month() &&\n calendarVariables.left().calendar?.[row]?.[col]?.year() === today().year()\n \"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.[col]\"\n (click)=\"handlerPickerDate($event, sideEnum.left, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.left, row, col)\">\n <span class=\"libs-ui-font-h5r\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center column items-center pt-[12px]\">\n <div\n class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().lefthour()\"\n (outInputEvent)=\"handlerInputEvent($event, 'lefthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'hour')\"\n (outChange)=\"handlerChangeTimeValue($event, 'lefthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'lefthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().leftminute()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'minute')\"\n (outInputEvent)=\"handlerInputEvent($event, 'leftminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'leftminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'leftminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-calendar right ml-[24px]\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables()) {\n <table>\n <thead>\n <tr>\n <th\n colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables().left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class=\"mr-[8px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[130px]', position: { mode: 'center', distance: 0 } }\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().right()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyToSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'month')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'month')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'month']\">\n <div\n class=\"libs-ui-font-h4m\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'month'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown\n [listMaxItemShow]=\"10\"\n [zIndex]=\"zIndex() + 1\"\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[110px]', position: { mode: 'center', distance: 0 } }\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"listYearHiddenInputSearch()\"\n [listConfig]=\"listRightYearConfig()\"\n [listKeySelected]=\"listKeyToSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"rightYearHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'year')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'year')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'year']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format('YYYY') }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'year'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n <div class=\"w-1/4 flex items-center relative\">\n @if (\n (listKeyFromSelected().year &&\n listKeyToSelected().year &&\n !(listKeyFromSelected().year + 1 === listKeyToSelected().year && listKeyFromSelected().month === 12 && listKeyToSelected().month === 1) &&\n listKeyFromSelected().year < listKeyToSelected().year) ||\n (listKeyFromSelected().month && listKeyToSelected().month && listKeyFromSelected().month + 1 < +listKeyToSelected().month)\n ) {\n <div\n class=\"flex items-center justify-center absolute left-0 top-[-3px]\"\n (click)=\"handlerClickPrev(sideEnum.right)\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n }\n @if (\n listKeyFromSelected().month &&\n listKeyToSelected().month &&\n listKeyFromSelected().month > listKeyToSelected().month &&\n listKeyFromSelected().year &&\n listKeyToSelected().year &&\n listKeyFromSelected().year === listKeyToSelected().year\n ) {\n <div class=\"bg-[#ffffff] w-[21px] h-[21px] cursor-none flex items-center justify-center rounded-[50px]\"></div>\n }\n @if (\n !calendarVariables().right().maxDate ||\n calendarVariables()\n .right()\n .maxDate?.isAfter(calendarVariables().right().calendar && calendarVariables().right().calendar?.lastDay)\n ) {\n <div (click)=\"handlerClickNext(sideEnum.right)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables().right().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format('YYYY') }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span\n class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dayofweek }}\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of calendarVariables().right().calRows?.(); track row) {\n <tr\n class=\"h-[32px]\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.classList\">\n @for (col of calendarVariables().right().calCols?.(); track col) {\n <td\n class=\"libs-ui-font-h5r\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.[col]\"\n [class.today]=\"\n calendarVariables().right().calendar &&\n calendarVariables().right().calendar?.[row]?.[col]?.date() === today().date() &&\n calendarVariables().right().calendar?.[row]?.[col]?.month() === today().month() &&\n calendarVariables().right().calendar &&\n calendarVariables().right().calendar?.[row]?.[col]?.year() === today().year()\n \"\n (click)=\"handlerPickerDate($event, sideEnum.right, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.right, row, col)\">\n <span>{{ calendarVariables().right().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center items-center pt-[12px]\">\n <div\n class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().righthour()\"\n (outChange)=\"handlerChangeTimeValue($event, 'righthour')\"\n (outInputEvent)=\"handlerInputEvent($event, 'righthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'righthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'righthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().rightminute()\"\n (outInputEvent)=\"handlerInputEvent($event, 'rightminute')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'rightminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'rightminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'rightminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div>\n <div class=\"flex w-full\">\n @if (!isSingle() && hasTimePicker()) {\n <div class=\"mt-[8px] libs-ui-font-h7r text-[#ff5454] h-[14px]\">\n @if (timePickerError()) {\n <span>{{ 'i18n_date_compare_start_end_message_error' | translate }}</span>\n }\n </div>\n }\n </div>\n @if (!quickRangesArray().length || !isSingle()) {\n <div class=\"flex w-full pt-[16px] justify-between\">\n <div class=\"flex items-center\">\n @if (!isSingle()) {\n @if (!endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeLeft() }}</span>\n }\n &hyphen;\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n @if (endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeLeft() }}</span>\n }\n &hyphen;\n <span>{{ endDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"flex\">\n <libs_ui-components-buttons-button\n class=\"mr-[12px]\"\n label=\"i18n_cancel\"\n type=\"button-third\"\n (outClick)=\"handlerClickCancel($event)\" />\n <libs_ui-components-buttons-button\n label=\"i18n_select\"\n (outClick)=\"handlerClickApply($event)\" />\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown{display:flex;align-items:center}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar table{border-collapse:inherit;border-spacing:0 2px}.libs-ui-component-custom_ranges-calendar th,.libs-ui-component-custom_ranges-calendar td{padding:0;text-align:center;min-width:32px}.libs-ui-component-custom_ranges-calendar th span,.libs-ui-component-custom_ranges-calendar td span{pointer-events:none}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:before{font-size:20px}.libs-ui-component-custom_ranges-calendar td,.libs-ui-component-custom_ranges-calendar th{cursor:pointer;height:2em;width:2em}.libs-ui-component-custom_ranges-calendar td.available:hover,.libs-ui-component-custom_ranges-calendar th.available:hover{background-color:#f8f5fe;border-color:transparent;border-radius:8px;color:inherit;background-repeat:no-repeat;background-size:.5em;background-position:center;margin:.25em 0;opacity:.8;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms}.libs-ui-component-custom_ranges-calendar td{margin:.25em 0;background-color:#fff;transition:background-color .2s ease;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms;color:#071631!important}.libs-ui-component-custom_ranges-calendar td:hover{color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.off,.libs-ui-component-custom_ranges-calendar td.off.in-range,.libs-ui-component-custom_ranges-calendar td.off.start-date,.libs-ui-component-custom_ranges-calendar td.off.end-date{background-color:#fff;border-color:transparent;color:#cdd0d6!important}.libs-ui-component-custom_ranges-calendar td.focus-off{background-color:#f8f5fe!important}.libs-ui-component-custom_ranges-calendar td.in-range{background-color:#f8f5fe;border-color:transparent;border-radius:0;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today{position:relative;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today:after{position:absolute;content:\"\";width:2px;height:2px;background-color:#8e61ee;left:49%;bottom:5px}.libs-ui-component-custom_ranges-calendar td.active{transition:background .3s ease-out;background:#0000001a}.libs-ui-component-custom_ranges-calendar td.active.today:after{position:absolute;content:\"\";background-color:#fff}.libs-ui-component-custom_ranges-calendar td.active.start-date{border-radius:8px 0 0 8px}.libs-ui-component-custom_ranges-calendar td.active.end-date{border-radius:0 8px 8px 0}.libs-ui-component-custom_ranges-calendar td.active.full-date{border-radius:8px}.libs-ui-component-custom_ranges-calendar td.active,.libs-ui-component-custom_ranges-calendar td.active:hover{background-color:#8e61ee;border-color:transparent;color:#fff!important}.libs-ui-component-custom_ranges-calendar th.month{width:auto}.libs-ui-component-custom_ranges-calendar td.disabled,.libs-ui-component-custom_ranges-calendar option.disabled{color:#999!important;cursor:not-allowed;text-decoration:line-through;background-color:#f4f5f7}.libs-ui-component-custom_ranges-calendar .dropdowns{background-repeat:no-repeat;background-size:10px;background-position-y:center;background-position-x:right}.libs-ui-component-custom_ranges-calendar th.month>div{position:relative;display:inline-block}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "typeInput", "modeInput", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "selectAllTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iframeTextareaCustomStyle", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1282
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, isStandalone: true, selector: "libs_ui-components-datetime-picker-custom_ranges-calendar", inputs: { quickRangesArray: { classPropertyName: "quickRangesArray", publicName: "quickRangesArray", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, isSingle: { classPropertyName: "isSingle", publicName: "isSingle", isSignal: true, isRequired: false, transformFunction: null }, showDropdownsSelect: { classPropertyName: "showDropdownsSelect", publicName: "showDropdownsSelect", isSignal: true, isRequired: false, transformFunction: null }, hasTimePicker: { classPropertyName: "hasTimePicker", publicName: "hasTimePicker", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, dateOptions: { classPropertyName: "dateOptions", publicName: "dateOptions", isSignal: true, isRequired: false, transformFunction: null }, autoApply: { classPropertyName: "autoApply", publicName: "autoApply", isSignal: true, isRequired: false, transformFunction: null }, hasSecondPicker: { classPropertyName: "hasSecondPicker", publicName: "hasSecondPicker", isSignal: true, isRequired: false, transformFunction: null }, showRangeLabelOnInput: { classPropertyName: "showRangeLabelOnInput", publicName: "showRangeLabelOnInput", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, listYearHiddenInputSearch: { classPropertyName: "listYearHiddenInputSearch", publicName: "listYearHiddenInputSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange", outChangStageFlagMouse: "outChangStageFlagMouse", outPickerDate: "outPickerDate", outCancel: "outCancel", outUpdateWidth: "outUpdateWidth", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "pickerContainer", first: true, predicate: ["pickerContainer"], descendants: true, isSignal: true }, { propertyName: "inputTimeHours", predicate: LibsUiComponentsInputsInputComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-component-custom_ranges-calendar test-class\">\n <div class=\"relative flex\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar\"\n [class.right]=\"isSingle()\"\n [class.left]=\"!isSingle()\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables(); as calendarVariables) {\n <table>\n <thead>\n <tr>\n <th\n colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables.left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class=\"mr-[8px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[130px]', position: { mode: 'center', distance: 0 } }\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().left()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyFromSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [listHiddenInputSearch]=\"true\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'month')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'month')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'month']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'month'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown\n [listMaxItemShow]=\"10\"\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[110px]', position: { mode: 'center', distance: 0 } }\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"listYearHiddenInputSearch()\"\n [listConfig]=\"listLeftYearConfig()\"\n [listKeySelected]=\"listKeyFromSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"leftYearHttpDetailConfig()\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'year')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'year')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'year']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(' YYYY') }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'year'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n\n <div class=\"w-1/4 flex items-center relative\">\n @if (!calendarVariables.left().minDate || calendarVariables.left().minDate?.isBefore(calendarVariables.left().calendar && calendarVariables.left().calendar?.firstDay)) {\n <div (click)=\"handlerClickPrev(sideEnum.left)\">\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n @if ((!calendarVariables.left().maxDate || calendarVariables.left().maxDate?.isAfter(calendarVariables.left().calendar && calendarVariables.left().calendar?.lastDay)) && isSingle()) {\n <div (click)=\"handlerClickNext(sideEnum.left)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables.left().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(' YYYY') }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span\n class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dayofweek }}\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"drp-animate\">\n @for (row of calendarVariables.left().calRows?.(); track row) {\n <tr\n class=\"h-[32px]\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.classList\">\n @for (col of calendarVariables.left().calCols?.(); track col) {\n <td\n class=\"libs-ui-font-h5r\"\n [class.today]=\"\n calendarVariables.left().calendar &&\n calendarVariables.left().calendar?.[row]?.[col]?.date() === today().date() &&\n calendarVariables.left().calendar?.[row]?.[col]?.month() === today().month() &&\n calendarVariables.left().calendar?.[row]?.[col]?.year() === today().year()\n \"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.[col]\"\n (click)=\"handlerPickerDate($event, sideEnum.left, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.left, row, col)\">\n <span class=\"libs-ui-font-h5r\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center column items-center pt-[12px]\">\n <div\n class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().lefthour()\"\n (outInputEvent)=\"handlerInputEvent($event, 'lefthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'hour')\"\n (outChange)=\"handlerChangeTimeValue($event, 'lefthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'lefthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().leftminute()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'minute')\"\n (outInputEvent)=\"handlerInputEvent($event, 'leftminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'leftminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'leftminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-calendar right ml-[24px]\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables()) {\n <table>\n <thead>\n <tr>\n <th\n colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables().left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class=\"mr-[8px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[130px]', position: { mode: 'center', distance: 0 } }\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().right()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyToSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'month')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'month')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'month']\">\n <div\n class=\"libs-ui-font-h4m\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'month'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown\n [listMaxItemShow]=\"10\"\n [zIndex]=\"zIndex() + 1\"\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[110px]', position: { mode: 'center', distance: 0 } }\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"listYearHiddenInputSearch()\"\n [listConfig]=\"listRightYearConfig()\"\n [listKeySelected]=\"listKeyToSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"rightYearHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'year')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'year')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'year']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format('YYYY') }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'year'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n <div class=\"w-1/4 flex items-center relative\">\n @if (\n (listKeyFromSelected().year &&\n listKeyToSelected().year &&\n !(listKeyFromSelected().year + 1 === listKeyToSelected().year && listKeyFromSelected().month === 12 && listKeyToSelected().month === 1) &&\n listKeyFromSelected().year < listKeyToSelected().year) ||\n (listKeyFromSelected().month && listKeyToSelected().month && listKeyFromSelected().month + 1 < +listKeyToSelected().month)\n ) {\n <div\n class=\"flex items-center justify-center absolute left-0 top-[-3px]\"\n (click)=\"handlerClickPrev(sideEnum.right)\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n }\n @if (\n listKeyFromSelected().month &&\n listKeyToSelected().month &&\n listKeyFromSelected().month > listKeyToSelected().month &&\n listKeyFromSelected().year &&\n listKeyToSelected().year &&\n listKeyFromSelected().year === listKeyToSelected().year\n ) {\n <div class=\"bg-[#ffffff] w-[21px] h-[21px] cursor-none flex items-center justify-center rounded-[50px]\"></div>\n }\n @if (\n !calendarVariables().right().maxDate ||\n calendarVariables()\n .right()\n .maxDate?.isAfter(calendarVariables().right().calendar && calendarVariables().right().calendar?.lastDay)\n ) {\n <div (click)=\"handlerClickNext(sideEnum.right)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables().right().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format('YYYY') }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span\n class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dayofweek }}\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of calendarVariables().right().calRows?.(); track row) {\n <tr\n class=\"h-[32px]\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.classList\">\n @for (col of calendarVariables().right().calCols?.(); track col) {\n <td\n class=\"libs-ui-font-h5r\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.[col]\"\n [class.today]=\"\n calendarVariables().right().calendar &&\n calendarVariables().right().calendar?.[row]?.[col]?.date() === today().date() &&\n calendarVariables().right().calendar?.[row]?.[col]?.month() === today().month() &&\n calendarVariables().right().calendar &&\n calendarVariables().right().calendar?.[row]?.[col]?.year() === today().year()\n \"\n (click)=\"handlerPickerDate($event, sideEnum.right, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.right, row, col)\">\n <span>{{ calendarVariables().right().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center items-center pt-[12px]\">\n <div\n class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().righthour()\"\n (outChange)=\"handlerChangeTimeValue($event, 'righthour')\"\n (outInputEvent)=\"handlerInputEvent($event, 'righthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'righthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'righthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().rightminute()\"\n (outInputEvent)=\"handlerInputEvent($event, 'rightminute')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'rightminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'rightminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'rightminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div>\n <div class=\"flex w-full\">\n @if (!isSingle() && hasTimePicker()) {\n <div class=\"mt-[8px] libs-ui-font-h7r text-[#ff5454] h-[14px]\">\n @if (timePickerError()) {\n <span>{{ 'i18n_date_compare_start_end_message_error' | translate }}</span>\n }\n </div>\n }\n </div>\n @if (!quickRangesArray().length || !isSingle()) {\n <div class=\"flex w-full pt-[16px] justify-between\">\n <div class=\"flex items-center\">\n @if (!isSingle()) {\n @if (!endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeLeft() }}</span>\n }\n &hyphen;\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n @if (endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeLeft() }}</span>\n }\n &hyphen;\n <span>{{ endDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"flex\">\n <libs_ui-components-buttons-button\n class=\"mr-[12px]\"\n label=\"i18n_cancel\"\n type=\"button-third\"\n (outClick)=\"handlerClickCancel($event)\" />\n <libs_ui-components-buttons-button\n label=\"i18n_select\"\n (outClick)=\"handlerClickApply($event)\" />\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown{display:flex;align-items:center}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar table{border-collapse:inherit;border-spacing:0 2px}.libs-ui-component-custom_ranges-calendar th,.libs-ui-component-custom_ranges-calendar td{padding:0;text-align:center;min-width:32px}.libs-ui-component-custom_ranges-calendar th span,.libs-ui-component-custom_ranges-calendar td span{pointer-events:none}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:before{font-size:20px}.libs-ui-component-custom_ranges-calendar td,.libs-ui-component-custom_ranges-calendar th{cursor:pointer;height:2em;width:2em}.libs-ui-component-custom_ranges-calendar td.available:hover,.libs-ui-component-custom_ranges-calendar th.available:hover{background-color:#f8f5fe;border-color:transparent;border-radius:8px;color:inherit;background-repeat:no-repeat;background-size:.5em;background-position:center;margin:.25em 0;opacity:.8;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms}.libs-ui-component-custom_ranges-calendar td{margin:.25em 0;background-color:#fff;transition:background-color .2s ease;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms;color:#071631!important}.libs-ui-component-custom_ranges-calendar td:hover{color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.off,.libs-ui-component-custom_ranges-calendar td.off.in-range,.libs-ui-component-custom_ranges-calendar td.off.start-date,.libs-ui-component-custom_ranges-calendar td.off.end-date{background-color:#fff;border-color:transparent;color:#cdd0d6!important}.libs-ui-component-custom_ranges-calendar td.focus-off{background-color:#f8f5fe!important}.libs-ui-component-custom_ranges-calendar td.in-range{background-color:#f8f5fe;border-color:transparent;border-radius:0;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today{position:relative;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today:after{position:absolute;content:\"\";width:2px;height:2px;background-color:#8e61ee;left:49%;bottom:5px}.libs-ui-component-custom_ranges-calendar td.active{transition:background .3s ease-out;background:#0000001a}.libs-ui-component-custom_ranges-calendar td.active.today:after{position:absolute;content:\"\";background-color:#fff}.libs-ui-component-custom_ranges-calendar td.active.start-date{border-radius:8px 0 0 8px}.libs-ui-component-custom_ranges-calendar td.active.end-date{border-radius:0 8px 8px 0}.libs-ui-component-custom_ranges-calendar td.active.full-date{border-radius:8px}.libs-ui-component-custom_ranges-calendar td.active,.libs-ui-component-custom_ranges-calendar td.active:hover{background-color:#8e61ee;border-color:transparent;color:#fff!important}.libs-ui-component-custom_ranges-calendar th.month{width:auto}.libs-ui-component-custom_ranges-calendar td.disabled,.libs-ui-component-custom_ranges-calendar option.disabled{color:#999!important;cursor:not-allowed;text-decoration:line-through;background-color:#f4f5f7}.libs-ui-component-custom_ranges-calendar .dropdowns{background-repeat:no-repeat;background-size:10px;background-position-y:center;background-position-x:right}.libs-ui-component-custom_ranges-calendar th.month>div{position:relative;display:inline-block}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "dropdownTemplateRefNotSearchNoData", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsInputsInputComponent, selector: "libs_ui-components-inputs-input", inputs: ["tagInput", "dataType", "typeInput", "modeInput", "tabInsertContentTagInput", "textAreaEnterNotNewLine", "emitEmptyInDataTypeNumber", "keepZeroInTypeInt", "autoAddZeroLessThan10InTypeInt", "ignoreBlockInputMaxValue", "maxValueNumber", "minValueNumber", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "classInclude", "maxLength", "readonly", "disable", "noBorder", "backgroundNone", "borderError", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "value", "autoRemoveEmoji", "defaultHeight", "minHeightTextArea", "maxHeightTextArea", "focusTimeOut", "selectAllTimeOut", "blurTimeOut", "zIndexPopoverContent", "classContainerInput", "showCount", "ignoreStopPropagationEvent", "resize", "templateLeftBottomInput", "templateRightBottomInput", "classContainerBottomInput", "ignoreWidthInput100", "iframeTextareaCustomStyle", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "resetAutoCompletePassword", "acceptOnlyClickIcon", "setIconRightColorSameColorDisableReadOnly", "onlyAcceptNegativeValue", "maxLengthNumberCount", "focusInput"], outputs: ["maxValueNumberChange", "minValueNumberChange", "fixedFloatChange", "acceptNegativeValueChange", "maxLengthChange", "valueChange", "maxLengthNumberCountChange", "outHeightAreaChange", "outChange", "outFocusAndBlurEvent", "outEnterEvent", "outInputEvent", "outIconLeft", "outIconRight", "outFunctionsControl", "outFilesDrop", "outFileDrop", "outChangeValueByButtonUpDown"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1283
1283
  }
1284
1284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, decorators: [{
1285
1285
  type: Component,
1286
1286
  args: [{ selector: 'libs_ui-components-datetime-picker-custom_ranges-calendar', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule, LibsUiComponentsDropdownComponent, LibsUiComponentsInputsInputComponent, LibsUiComponentsButtonsButtonComponent], template: "<div class=\"libs-ui-component-custom_ranges-calendar test-class\">\n <div class=\"relative flex\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar\"\n [class.right]=\"isSingle()\"\n [class.left]=\"!isSingle()\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables(); as calendarVariables) {\n <table>\n <thead>\n <tr>\n <th\n colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables.left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class=\"mr-[8px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[130px]', position: { mode: 'center', distance: 0 } }\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().left()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyFromSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [listHiddenInputSearch]=\"true\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'month')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'month')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'month']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'month']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'month'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown\n [listMaxItemShow]=\"10\"\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[110px]', position: { mode: 'center', distance: 0 } }\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"listYearHiddenInputSearch()\"\n [listConfig]=\"listLeftYearConfig()\"\n [listKeySelected]=\"listKeyFromSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"leftYearHttpDetailConfig()\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.left + 'year')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.left + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'year')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.left + 'year']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(' YYYY') }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.left + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.left + 'year'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n\n <div class=\"w-1/4 flex items-center relative\">\n @if (!calendarVariables.left().minDate || calendarVariables.left().minDate?.isBefore(calendarVariables.left().calendar && calendarVariables.left().calendar?.firstDay)) {\n <div (click)=\"handlerClickPrev(sideEnum.left)\">\n <div class=\"flex items-center justify-center absolute left-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n @if ((!calendarVariables.left().maxDate || calendarVariables.left().maxDate?.isAfter(calendarVariables.left().calendar && calendarVariables.left().calendar?.lastDay)) && isSingle()) {\n <div (click)=\"handlerClickNext(sideEnum.left)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables.left().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables.left().calendar && dateOptions().monthNames[calendarVariables.left().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[1]?.[1]?.format(' YYYY') }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span\n class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dayofweek }}\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"drp-animate\">\n @for (row of calendarVariables.left().calRows?.(); track row) {\n <tr\n class=\"h-[32px]\"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.classList\">\n @for (col of calendarVariables.left().calCols?.(); track col) {\n <td\n class=\"libs-ui-font-h5r\"\n [class.today]=\"\n calendarVariables.left().calendar &&\n calendarVariables.left().calendar?.[row]?.[col]?.date() === today().date() &&\n calendarVariables.left().calendar?.[row]?.[col]?.month() === today().month() &&\n calendarVariables.left().calendar?.[row]?.[col]?.year() === today().year()\n \"\n [class]=\"calendarVariables.left().classes && calendarVariables.left().classes?.[row]?.[col]\"\n (click)=\"handlerPickerDate($event, sideEnum.left, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.left, row, col)\">\n <span class=\"libs-ui-font-h5r\">{{ calendarVariables.left().calendar && calendarVariables.left().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center column items-center pt-[12px]\">\n <div\n class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().lefthour()\"\n (outInputEvent)=\"handlerInputEvent($event, 'lefthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'hour')\"\n (outChange)=\"handlerChangeTimeValue($event, 'lefthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'lefthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n dataType=\"int\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().leftminute()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.left + 'minute')\"\n (outInputEvent)=\"handlerInputEvent($event, 'leftminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'leftminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'leftminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-calendar right ml-[24px]\">\n <div class=\"rounded-[4px] bg-[#ffffff]\">\n @if (calendarVariables()) {\n <table>\n <thead>\n <tr>\n <th\n colspan=\"7\"\n class=\"month\">\n @if (showDropdownsSelect() && calendarVariables().left().dropdowns?.()) {\n <div class=\"!flex mb-[10px] w-full\">\n <div class=\"w-3/4 flex items-center\">\n <div class=\"mr-[8px]\">\n <libs_ui-components-dropdown\n [isNgContent]=\"true\"\n [zIndex]=\"zIndex() + 1\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[130px]', position: { mode: 'center', distance: 0 } }\"\n [listMaxItemShow]=\"10\"\n [listClickExactly]=\"false\"\n [listKeysDisable]=\"disableMonth().right()\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemMonth\"\n [listHiddenInputSearch]=\"true\"\n [listConfig]=\"listMonthsConfig()\"\n [listKeySelected]=\"listKeyToSelected().month\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"monthHttpDetailConfig()\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'month')\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'month')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'month')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'month']\">\n <div\n class=\"libs-ui-font-h4m\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'month']\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'month'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n <div>\n <libs_ui-components-dropdown\n [listMaxItemShow]=\"10\"\n [zIndex]=\"zIndex() + 1\"\n [isNgContent]=\"true\"\n [popoverCustomConfig]=\"{ widthByParent: false, ignoreArrow: true, paddingLeftItem: true, classInclude: '!w-[110px]', position: { mode: 'center', distance: 0 } }\"\n [listClickExactly]=\"false\"\n [listHasButtonUnSelectOption]=\"false\"\n [convertItemSelected]=\"convertItemYear\"\n [listHiddenInputSearch]=\"listYearHiddenInputSearch()\"\n [listConfig]=\"listRightYearConfig()\"\n [listKeySelected]=\"listKeyToSelected().year\"\n [flagMouse]=\"flagMouse()\"\n [httpRequestDetailItemById]=\"rightYearHttpDetailConfig()\"\n (outSelectKey)=\"handlerSelectedDropdown($event, sideEnum.right + 'year')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, sideEnum.right + 'year')\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\"\n (outShowList)=\"handlerShowListDropdown($event, sideEnum.right + 'year')\">\n <div\n class=\"libs-ui-component-custom_ranges-calendar-dropdown\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [class.text-[#6a7383]]=\"!checkShowListDropdown()[sideEnum.right + 'year']\">\n <div\n class=\"libs-ui-font-h4m\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format('YYYY') }}\n </div>\n <i\n class=\"libs-ui-icon-chevron-right text-[13px] text-[#6a7383]\"\n [class.text-[var(--libs-ui-color-dark)]]=\"checkShowListDropdown()[sideEnum.right + 'year']\"\n [style.fontWeight]=\"500\"\n [style.rotate]=\"!checkShowListDropdown()[sideEnum.right + 'year'] ? '90deg' : '270deg'\"></i>\n </div>\n </libs_ui-components-dropdown>\n </div>\n </div>\n <div class=\"w-1/4 flex items-center relative\">\n @if (\n (listKeyFromSelected().year &&\n listKeyToSelected().year &&\n !(listKeyFromSelected().year + 1 === listKeyToSelected().year && listKeyFromSelected().month === 12 && listKeyToSelected().month === 1) &&\n listKeyFromSelected().year < listKeyToSelected().year) ||\n (listKeyFromSelected().month && listKeyToSelected().month && listKeyFromSelected().month + 1 < +listKeyToSelected().month)\n ) {\n <div\n class=\"flex items-center justify-center absolute left-0 top-[-3px]\"\n (click)=\"handlerClickPrev(sideEnum.right)\">\n <i class=\"libs-ui-icon-chevron-right rotate-[180deg] text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n }\n @if (\n listKeyFromSelected().month &&\n listKeyToSelected().month &&\n listKeyFromSelected().month > listKeyToSelected().month &&\n listKeyFromSelected().year &&\n listKeyToSelected().year &&\n listKeyFromSelected().year === listKeyToSelected().year\n ) {\n <div class=\"bg-[#ffffff] w-[21px] h-[21px] cursor-none flex items-center justify-center rounded-[50px]\"></div>\n }\n @if (\n !calendarVariables().right().maxDate ||\n calendarVariables()\n .right()\n .maxDate?.isAfter(calendarVariables().right().calendar && calendarVariables().right().calendar?.lastDay)\n ) {\n <div (click)=\"handlerClickNext(sideEnum.right)\">\n <div class=\"flex items-center justify-center ml-[12px] absolute right-0 top-[-3px]\">\n <i class=\"libs-ui-icon-chevron-right text-[#6a7383] cursor-pointer libs-ui-component-custom_ranges-calendar-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n }\n @if (!showDropdownsSelect() || !calendarVariables().right().dropdowns) {\n {{ dateOptions().monthNames && calendarVariables().right().calendar && dateOptions().monthNames[calendarVariables().right().calendar?.[1]?.[1]?.month() ?? -1] }}\n {{ calendarVariables().right().calendar && calendarVariables().right().calendar?.[1]?.[1]?.format('YYYY') }}\n }\n </th>\n </tr>\n <tr class=\"week-days\">\n @for (dayofweek of dateOptions().daysOfWeek; track dayofweek) {\n <th>\n <span\n class=\"libs-ui-font-h6m text-[#6a7383]\"\n [style.fontWeight]=\"500\"\n [style.fontStyle]=\"'normal'\">\n {{ dayofweek }}\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of calendarVariables().right().calRows?.(); track row) {\n <tr\n class=\"h-[32px]\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.classList\">\n @for (col of calendarVariables().right().calCols?.(); track col) {\n <td\n class=\"libs-ui-font-h5r\"\n [class]=\"calendarVariables().right().classes && calendarVariables().right().classes?.[row]?.[col]\"\n [class.today]=\"\n calendarVariables().right().calendar &&\n calendarVariables().right().calendar?.[row]?.[col]?.date() === today().date() &&\n calendarVariables().right().calendar?.[row]?.[col]?.month() === today().month() &&\n calendarVariables().right().calendar &&\n calendarVariables().right().calendar?.[row]?.[col]?.year() === today().year()\n \"\n (click)=\"handlerPickerDate($event, sideEnum.right, row, col)\"\n (mouseenter)=\"handlerHoverDate($event, sideEnum.right, row, col)\">\n <span>{{ calendarVariables().right().calendar?.[row]?.[col]?.date() }}</span>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n @if (hasTimePicker()) {\n <div>\n <div class=\"flex justify-center items-center pt-[12px]\">\n <div\n class=\"w-full flex justify-center items-center rounded-[4px] border\"\n [class.border-[#e6e8ed]]=\"!timePickerError()\"\n [class.border-[#ff5454]]=\"timePickerError()\">\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center !libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"23\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().righthour()\"\n (outChange)=\"handlerChangeTimeValue($event, 'righthour')\"\n (outInputEvent)=\"handlerInputEvent($event, 'righthour')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'righthour')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'righthour')\" />\n <span class=\"libs-ui-font-h3s text-[#333333]\">:</span>\n <libs_ui-components-inputs-input\n classInclude=\"!w-[30px] !p-0 !border-none !text-center libs-ui-font-h4s !text-[#071631]\"\n dataType=\"int\"\n [autoAddZeroLessThan10InTypeInt]=\"true\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [maxValueNumber]=\"59\"\n [minValueNumber]=\"0\"\n [focusTimeOut]=\"0\"\n [blurTimeOut]=\"0\"\n [maxLength]=\"2\"\n [value]=\"timepickerValueItem().rightminute()\"\n (outInputEvent)=\"handlerInputEvent($event, 'rightminute')\"\n (outFunctionsControl)=\"handlerFunctionControl($event, 'rightminute')\"\n (outChange)=\"handlerChangeTimeValue($event, 'rightminute')\"\n (outFocusAndBlurEvent)=\"handlerFocusAndBlurTime($event, 'rightminute')\" />\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div>\n <div class=\"flex w-full\">\n @if (!isSingle() && hasTimePicker()) {\n <div class=\"mt-[8px] libs-ui-font-h7r text-[#ff5454] h-[14px]\">\n @if (timePickerError()) {\n <span>{{ 'i18n_date_compare_start_end_message_error' | translate }}</span>\n }\n </div>\n }\n </div>\n @if (!quickRangesArray().length || !isSingle()) {\n <div class=\"flex w-full pt-[16px] justify-between\">\n <div class=\"flex items-center\">\n @if (!isSingle()) {\n @if (!endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeLeft() }}</span>\n }\n &hyphen;\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n @if (endDate()) {\n <div class=\"text-[#cdd0d6] libs-ui-font-h6r\">\n <span>{{ startDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeLeft() }}</span>\n }\n &hyphen;\n <span>{{ endDate()?.format('DD/MM/YYYY') }}</span>\n @if (hasTimePicker()) {\n <span>{{ computedDisplayTimeRight() }}</span>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"flex\">\n <libs_ui-components-buttons-button\n class=\"mr-[12px]\"\n label=\"i18n_cancel\"\n type=\"button-third\"\n (outClick)=\"handlerClickCancel($event)\" />\n <libs_ui-components-buttons-button\n label=\"i18n_select\"\n (outClick)=\"handlerClickApply($event)\" />\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [".libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown{display:flex;align-items:center}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-dropdown:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar table{border-collapse:inherit;border-spacing:0 2px}.libs-ui-component-custom_ranges-calendar th,.libs-ui-component-custom_ranges-calendar td{padding:0;text-align:center;min-width:32px}.libs-ui-component-custom_ranges-calendar th span,.libs-ui-component-custom_ranges-calendar td span{pointer-events:none}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover{color:var(--libs-ui-color-light-1)}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:before,.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:hover i:after{color:var(--libs-ui-color-light-1)!important}.libs-ui-component-custom_ranges-calendar .libs-ui-component-custom_ranges-calendar-icon:before{font-size:20px}.libs-ui-component-custom_ranges-calendar td,.libs-ui-component-custom_ranges-calendar th{cursor:pointer;height:2em;width:2em}.libs-ui-component-custom_ranges-calendar td.available:hover,.libs-ui-component-custom_ranges-calendar th.available:hover{background-color:#f8f5fe;border-color:transparent;border-radius:8px;color:inherit;background-repeat:no-repeat;background-size:.5em;background-position:center;margin:.25em 0;opacity:.8;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms}.libs-ui-component-custom_ranges-calendar td{margin:.25em 0;background-color:#fff;transition:background-color .2s ease;transform:scale(1);transition:all .45s cubic-bezier(.23,1,.32,1) 0ms;color:#071631!important}.libs-ui-component-custom_ranges-calendar td:hover{color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.off,.libs-ui-component-custom_ranges-calendar td.off.in-range,.libs-ui-component-custom_ranges-calendar td.off.start-date,.libs-ui-component-custom_ranges-calendar td.off.end-date{background-color:#fff;border-color:transparent;color:#cdd0d6!important}.libs-ui-component-custom_ranges-calendar td.focus-off{background-color:#f8f5fe!important}.libs-ui-component-custom_ranges-calendar td.in-range{background-color:#f8f5fe;border-color:transparent;border-radius:0;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today{position:relative;color:#8e61ee!important}.libs-ui-component-custom_ranges-calendar td.today:after{position:absolute;content:\"\";width:2px;height:2px;background-color:#8e61ee;left:49%;bottom:5px}.libs-ui-component-custom_ranges-calendar td.active{transition:background .3s ease-out;background:#0000001a}.libs-ui-component-custom_ranges-calendar td.active.today:after{position:absolute;content:\"\";background-color:#fff}.libs-ui-component-custom_ranges-calendar td.active.start-date{border-radius:8px 0 0 8px}.libs-ui-component-custom_ranges-calendar td.active.end-date{border-radius:0 8px 8px 0}.libs-ui-component-custom_ranges-calendar td.active.full-date{border-radius:8px}.libs-ui-component-custom_ranges-calendar td.active,.libs-ui-component-custom_ranges-calendar td.active:hover{background-color:#8e61ee;border-color:transparent;color:#fff!important}.libs-ui-component-custom_ranges-calendar th.month{width:auto}.libs-ui-component-custom_ranges-calendar td.disabled,.libs-ui-component-custom_ranges-calendar option.disabled{color:#999!important;cursor:not-allowed;text-decoration:line-through;background-color:#f4f5f7}.libs-ui-component-custom_ranges-calendar .dropdowns{background-repeat:no-repeat;background-size:10px;background-position-y:center;background-position-x:right}.libs-ui-component-custom_ranges-calendar th.month>div{position:relative;display:inline-block}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"] }]
1287
1287
  }], ctorParameters: () => [] });
1288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL3BpY2tlci9zcmMvY3VzdG9tLXJhbmdlcy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9jdXN0b20tcmFuZ2VzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5TSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQWlELGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEksT0FBTyxFQUFrRCxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3hJLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV4RixPQUFPLEVBQStELFFBQVEsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7QUFJdEksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQVV0QixNQUFNLE9BQU8sMkRBQTJEO0lBQ3RFLGVBQWU7SUFDSSxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzdCLGlCQUFpQixHQUFHLE1BQU0sQ0FBcUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLG1CQUFtQixHQUFHLE1BQU0sQ0FBdUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEssWUFBWSxHQUFHLE1BQU0sQ0FBMEUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hJLEtBQUssR0FBRyxNQUFNLENBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsQyxtQkFBbUIsR0FBRyxNQUFNLENBQTRCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMvRixpQkFBaUIsR0FBRyxNQUFNLENBQTRCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM3RixxQkFBcUIsR0FBRyxNQUFNLENBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELGtCQUFrQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUN4QyxZQUFZLEdBQUcsTUFBTSxDQUEwQyxFQUFFLENBQUMsQ0FBQztJQUNuRSxhQUFhLEdBQUcsTUFBTSxDQUEwQyxFQUFFLENBQUMsQ0FBQztJQUVwRSxnQkFBZ0IsR0FBRyxNQUFNLENBQThCLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLHFCQUFxQixHQUFHLE1BQU0sQ0FBcUIsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLGtCQUFrQixHQUFHLE1BQU0sQ0FBOEIsU0FBUyxDQUFDLENBQUM7SUFDcEUsbUJBQW1CLEdBQUcsTUFBTSxDQUE4QixTQUFTLENBQUMsQ0FBQztJQUNyRSxjQUFjLEdBQUcsTUFBTSxDQUE4QixTQUFTLENBQUMsQ0FBQztJQUNoRSx3QkFBd0IsR0FBRyxNQUFNLENBQWlDLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLHlCQUF5QixHQUFHLE1BQU0sQ0FBaUMsU0FBUyxDQUFDLENBQUM7SUFFOUUsZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6Qyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyTCx3QkFBd0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4TCxnQ0FBZ0MsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RyxrQ0FBa0MsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RyxpQ0FBaUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxRyxtQ0FBbUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5RyxtQkFBbUIsR0FBRyxNQUFNLENBQXVCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbkosZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQXNFLENBQUM7SUFDakcsV0FBVyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNyQyxPQUFPLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLGNBQWMsR0FBRyxNQUFNLENBQWUsSUFBSSxDQUFDLENBQUM7SUFDNUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELGdCQUFnQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUMxQyxtQkFBbUIsR0FBRyxNQUFNLENBQXVCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakosTUFBTSxHQUFHLE1BQU0sQ0FBc0IsU0FBUyxDQUFDLENBQUM7SUFDaEQsT0FBTyxHQUFHLE1BQU0sQ0FBZSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkUsY0FBYyxHQUFHLE1BQU0sQ0FBMkIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5SCxlQUFlLEdBQUcsTUFBTSxDQUFtQixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUUzTCxZQUFZO0lBQ0gsZ0JBQWdCLEdBQUcsS0FBSyxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsS0FBSyxDQUFpQixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLFlBQVksR0FBRyxLQUFLLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDakMsUUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNqQyxtQkFBbUIsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDM0MsYUFBYSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUNyQyxTQUFTLEdBQUcsS0FBSyxDQUFhLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLFdBQVcsR0FBRyxLQUFLLENBQXFCLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxFQUFFLEdBQUcsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLFNBQVMsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDbEMsZUFBZSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN4QyxxQkFBcUIsR0FBRyxLQUFLLENBQXNCLFNBQVMsQ0FBQyxDQUFDO0lBRTlELFNBQVMsR0FBRyxLQUFLLENBQW9CLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLE9BQU8sR0FBRyxLQUFLLENBQW9CLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVELE9BQU8sR0FBRyxLQUFLLENBQXlELFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2SSxPQUFPLEdBQUcsS0FBSyxDQUF5RCxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkkseUJBQXlCLEdBQUcsS0FBSyxDQUErQixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hILGFBQWE7SUFDSixzQkFBc0IsR0FBRyxNQUFNLEVBQWMsQ0FBQztJQUM5QyxhQUFhLEdBQUcsTUFBTSxFQUFxQixDQUFDO0lBQzVDLFNBQVMsR0FBRyxNQUFNLEVBQVUsQ0FBQztJQUM3QixjQUFjLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFDbEMsbUJBQW1CLEdBQUcsTUFBTSxFQUFpQyxDQUFDO0lBRXZFLGdCQUFnQjtJQUNSLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVwQyxlQUFlLEdBQUcsU0FBUyxDQUFhLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsY0FBYyxHQUFHLFlBQVksQ0FBdUMsb0NBQW9DLENBQUMsQ0FBQztJQUVuSDtRQUNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFL0QsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTNELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDbkMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFbEUsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNqQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUU5RCxPQUFPLFdBQVcsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQXVCLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ2pJLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBdUIsRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDbEksQ0FBQztRQUNILENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDO1lBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ2hFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ2xFLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQ3BFLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsY0FBYyxDQUFDO1NBQ3ZFLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ3ZDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUNELHdJQUF3STtJQUMxSSxDQUFDO0lBRU8sZUFBZSxDQUFDLElBQWMsRUFBRSxTQUFrQjtRQUN4RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVuRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDeEIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksZ0JBQWdCLENBQUM7WUFDbEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLGdCQUFnQixDQUFDO1lBQ2hELEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbEMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDaEIsRUFBRSxFQUFFLENBQUM7b0JBQ0wsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2lCQUNkLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBRXBFLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLGdCQUFnQixDQUFDO1FBQ2xELE1BQU0sR0FBRyxHQUFHLFNBQVMsSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLEVBQUUsRUFBRSxDQUFDO2dCQUNMLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTthQUNkLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxTQUFxQjtRQUNwRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFXO1FBQ3BDLElBQUksR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFcEQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFL0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLElBQUksR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxlQUFlO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMxQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN0QixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDO1lBRTFFLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hHLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUM7WUFFM0UsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBcUM7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsK0JBQStCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdILENBQUM7UUFDRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsK0JBQStCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRWhFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDaEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0Qsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDekQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPO1lBQ1QsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1lBRXZHLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLFVBQVUsQ0FBQyxPQUFtQztRQUNwRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSwrQkFBK0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekgsQ0FBQztRQUNELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSwrQkFBK0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM5QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2IsT0FBTztnQkFDVCxDQUFDO2dCQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2dCQUV2RyxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELDREQUE0RDtRQUM1RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ1MsZ0JBQWdCLENBQUMsS0FBWSxFQUFFLElBQWMsRUFBRSxHQUFXLEVBQUUsR0FBVztRQUMvRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2RCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDTyxVQUFVLENBQUMsSUFBc0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbkQsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFakMsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUVoQixPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ25FLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQy9DLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRWhCLE9BQU8sT0FBTyxDQUFDO29CQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRWhCLE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pFLEtBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRWhCLE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNuRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVoQixPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxJQUFjO1FBQ3ZDLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVwRCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDMUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBRWpELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFcEQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUVsRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxJQUFjO1FBQ3ZDLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFL0MsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUVqRCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzdJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3BDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUUvQyxPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUN4QyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9ELE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFFbEQsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFekIsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFL0MsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUVsRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ1MsaUJBQWlCLENBQUMsS0FBVSxFQUFFLElBQWMsRUFBRSxHQUFXLEVBQUUsR0FBVztRQUM5RSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVFLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RJLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN0QyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3ZFLFdBQVcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUU5QixPQUFPLFdBQVcsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXJCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVTLGlCQUFpQixDQUFDLEtBQWE7UUFDdkMsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xLLENBQUM7SUFDSCxDQUFDO0lBQ1Msa0JBQWtCLENBQUMsS0FBWTtRQUN2QyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVTLHNCQUFzQixDQUFDLEtBQWlFLEVBQUUsSUFBWTtRQUM5RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRVMsdUJBQXVCLENBQUMsS0FBaUMsRUFBRSxJQUFZO1FBQy9FLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDL0IsWUFBWSxFQUFFLEtBQUs7WUFDbkIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixvQkFBb0IsRUFBRSxLQUFLO1NBQzVCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU87UUFDVCxDQUFDO1FBQ0QsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUM7WUFDN0IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLE9BQU87Z0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBRXBDLE1BQU07WUFFUixLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDO1lBQzVCLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxNQUFNO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBRVI7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3RDLElBQUksSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksT0FBTyxJQUFJLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUN4RSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUM3QixJQUFJLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUNyQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFhLENBQUM7b0JBQ3BDLENBQUM7b0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDcEMsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBYSxDQUFDO29CQUNuQyxDQUFDO29CQUVELE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7WUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN6QixJQUFJLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUN0QyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFhLENBQUM7Z0JBQ2xDLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDckMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBYSxDQUFDO2dCQUNqQyxDQUFDO2dCQUVELE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFxQixFQUFFLElBQVk7UUFDM0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDM0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLFdBQVcsSUFBSSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5RixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQyxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3JDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUUxQixPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFekIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFFMUIsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkosSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBRXRDLE9BQU8sT0FBTyxDQUFDO29CQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUN4QyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzt3QkFDbEIsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7d0JBRWxCLE9BQU8sT0FBTyxDQUFDO29CQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3JDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO29CQUUzQixPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFekIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFFMUIsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0EsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQW1DLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFFakYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ08sZ0JBQWdCLENBQUMsS0FBcUIsRUFBRSxJQUFZO1FBQzFELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBRTNFLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDckMsT0FBTyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBRXpCLE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixpRUFBaUU7Z0JBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFtQyxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUVqRixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUN6QixPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDeEMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUN6QixPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUN2RixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDN0QsT0FBTyxPQUFPLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUNoRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUN6RCxPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFjLENBQUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBbUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUNuRixDQUFDO1FBQ0QsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNyQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFFMUIsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXpCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN4QyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBRXpCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUN2RixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFFN0QsT0FBTyxPQUFPLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUNoRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUV6RCxPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUvQixJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hFLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9ELEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDTyxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLElBQWM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDdEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbkQsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFFN0QsSUFBSSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDbEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMzQixPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDM0IsT0FBTyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBRTdCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkQsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDcEMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEMsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVTLGlCQUFpQixDQUFDLEtBQWEsRUFBRSxJQUE2RDtRQUN0RyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsS0FBSyxDQUFDLE9BQU87Z0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVyQixPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWpDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxZQUFZO2dCQUNmLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7NEJBRXZDLE9BQU8sT0FBTyxDQUFDO3dCQUNqQixDQUFDLENBQUMsQ0FBQzt3QkFFSCxPQUFPO29CQUNULENBQUM7b0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUVyQixPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDN0YsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxhQUFhO2dCQUNoQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3BELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFOzRCQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUV2QyxPQUFPLE9BQU8sQ0FBQzt3QkFDakIsQ0FBQyxDQUFDLENBQUM7d0JBRUgsT0FBTztvQkFDVCxDQUFDO29CQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTt3QkFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFckIsT0FBTyxPQUFPLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxDQUFDO29CQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQWdDLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBQzlGLENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBRVMsdUJBQXVCLENBQUMsS0FBeUIsRUFBRSxJQUE2RDtRQUN4SCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBZSxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFFakMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ2pELE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFakgsT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3hHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTt3QkFDMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRXhCLE9BQU8sT0FBTyxDQUFDO29CQUNqQixDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztvQkFFcEIsTUFBTTtnQkFDUixDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQ3ZELE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxDQUFDO2dCQUNELE1BQU07WUFFUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNsRCxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRW5ILE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMxRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQzFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUV6QixPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBRXBCLE1BQU07Z0JBQ1IsQ0FBQztnQkFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUN4RCxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdEUsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxZQUFZO2dCQUNmLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDakQsT0FBTyxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUV2SCxPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDNUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUMxQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFMUIsT0FBTyxPQUFPLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxDQUFDO29CQUNILE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUVwQixNQUFNO2dCQUNSLENBQUM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDekQsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZFLENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssYUFBYTtnQkFDaEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNsRCxPQUFPLENBQUMsY0FBYyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXpILE9BQU8sT0FBTyxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUM5RyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQzFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUUzQixPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBRXBCLE1BQU07Z0JBQ1IsQ0FBQztnQkFFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUMxRCxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsQ0FBQztnQkFDRCxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxLQUFzQixFQUFFLElBQTZEO1FBQ3BILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBRW5DLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDM0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN0QyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3ZFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFlLENBQUM7Z0JBRXBDLE9BQU8sV0FBVyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXZCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5SixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLFFBQVEsQ0FBZ0MsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUUvSSxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEIsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0lBRVMsdUJBQXVCLENBQUMsS0FBYyxFQUFFLElBQVk7UUFDNUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFFdEIsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxHQUFHLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFDUSxlQUFlLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtRQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXBGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbkIsSUFDRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLO2dCQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSztnQkFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNsTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUMzSyxDQUFDO2dCQUNELE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDbkMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVuRCxPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDakgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTt3QkFDcEMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUVqRCxPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDLENBQUM7b0JBRUgsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3BDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUVwRSxPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQ0UsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSztZQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSztZQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNwRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUNyRixDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDbkMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVuRCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3BDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUVwRSxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLElBQWM7UUFDakMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUVoRixJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQy9DLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUV0QyxLQUFLLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixLQUFLLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5SCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUUvRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUM1RCxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzt3QkFDNUIsT0FBTyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7d0JBRWhDLE9BQU8sT0FBTyxDQUFDO29CQUNqQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNuQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFFbEMsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsR0FBRyxHQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBYztRQUNuQyxZQUFZO1FBQ1osTUFBTSxZQUFZLEdBQTRDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVsSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xILE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJ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Q1IsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFaFAsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDZCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPO0lBQ1QsQ0FBQzt3R0E1OUNVLDJEQUEyRDs0RkFBM0QsMkRBQTJELDR1RkF5RU8sb0NBQW9DLGdFQ3pHbkgsdS8zQkF5ZEEsNG9JRDNiWSxlQUFlLDRGQUFFLGlDQUFpQyxpMURBQUUsb0NBQW9DLHdoREFBRSxzQ0FBc0M7OzRGQUUvSCwyREFBMkQ7a0JBVHZFLFNBQVM7K0JBRUUsMkRBQTJELGNBR3pELElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSxpQ0FBaUMsRUFBRSxvQ0FBb0MsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkLCB2aWV3Q2hpbGRyZW4sIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IElGb2N1c0FuZEJsdXJFdmVudCwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0JztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJRmxhZ01vdXNlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgSUh0dHBSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtaHR0cC1yZXF1ZXN0JztcbmltcG9ydCB7IGdldERheWpzLCBpc05pbCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgZGF5anMsIHsgRGF5anMgfSBmcm9tICdkYXlqcyc7XG5pbXBvcnQgaXNvV2VlayBmcm9tICdkYXlqcy9wbHVnaW4vaXNvV2Vlayc7XG5pbXBvcnQgeyBnZXRNb250aHNEZXRhaWxCeUlkLCBnZXRNb250aHNMaXN0Q29uZmlnLCBnZXRZZWFyc0RldGFpbEJ5SWQsIGdldFllYXJzTGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL2RlZmluZXMvY2FsZW5kYXIuZGVmaW5lJztcbmltcG9ydCB7IERFRkFVTFRfTUFYX1lFQVIsIERFRkFVTFRfTUlOX1lFQVIgfSBmcm9tICcuLi8uLi9kZWZpbmVzL2NvbW1vbi1kYXRlLmRlZmluZSc7XG5pbXBvcnQgeyBkZWZhdWx0TG9jYWxlQ29uZmlnLCBnZXREYXRlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RlZmluZXMvZGF0ZS1vcHRpb25zLmRlZmluZSc7XG5pbXBvcnQgeyBJRW1pdERhdGVDYWxlbmRhciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2FsZW5kYXItZW1pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNhbGVuZGFyLCBJQ2FsZW5kYXJWYXJpYWJsZXMsIElEYXRlUmFuZ2UsIElTcGxpdFBpY2tlckRhdGUsIFNpZGVFbnVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jYWxlbmRhci12YXJpYWJsZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IElDYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Db25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BpY2tlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNoZWNrVGltZXBpY2tlclNlbGVjdGVkLCBJU2VsZWN0ZWRPbGQsIElUaW1lcGlja2VySXRlbVZhbHVlLCBJVGltZXBpY2tlclZhcmlhYmxlcywgSVRpbWVwaWNrZXJWYXJpYWJsZXNTaWRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90aW1lLXZhcmlhYmxlcy5pbnRlcmZhY2UnO1xuZGF5anMuZXh0ZW5kKGlzb1dlZWspO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlci1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpZGVFbnVtID0gU2lkZUVudW07XG4gIHByb3RlY3RlZCBjYWxlbmRhclZhcmlhYmxlcyA9IHNpZ25hbDxJQ2FsZW5kYXJWYXJpYWJsZXM+KHsgbGVmdDogc2lnbmFsKHt9KSwgcmlnaHQ6IHNpZ25hbCh7fSkgfSk7XG4gIHByb3RlY3RlZCB0aW1lcGlja2VyVmFyaWFibGVzID0gc2lnbmFsPElUaW1lcGlja2VyVmFyaWFibGVzPih7IGxlZnQ6IHNpZ25hbCh7IHNlbGVjdGVkSG91cjogMCwgc2VsZWN0ZWRNaW51dGU6IDAgfSksIHJpZ2h0OiBzaWduYWwoeyBzZWxlY3RlZEhvdXI6IDIzLCBzZWxlY3RlZE1pbnV0ZTogNTkgfSkgfSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlTW9udGggPSBzaWduYWw8eyBsZWZ0OiBXcml0YWJsZVNpZ25hbDxBcnJheTxhbnk+PjsgcmlnaHQ6IFdyaXRhYmxlU2lnbmFsPEFycmF5PGFueT4+IH0+KHsgbGVmdDogc2lnbmFsKFtdKSwgcmlnaHQ6IHNpZ25hbChbXSkgfSk7XG4gIHByb3RlY3RlZCB0b2RheSA9IHNpZ25hbDxEYXlqcz4oZ2V0RGF5anMoKSk7XG4gIHByb3RlY3RlZCBsaXN0S2V5RnJvbVNlbGVjdGVkID0gc2lnbmFsPHsgbW9udGg6IGFueTsgeWVhcjogYW55IH0+KHsgbW9udGg6IHVuZGVmaW5lZCwgeWVhcjogdW5kZWZpbmVkIH0pO1xuICBwcm90ZWN0ZWQgbGlzdEtleVRvU2VsZWN0ZWQgPSBzaWduYWw8eyBtb250aDogYW55OyB5ZWFyOiBhbnkgfT4oeyBtb250aDogdW5kZWZpbmVkLCB5ZWFyOiB1bmRlZmluZWQgfSk7XG4gIHByb3RlY3RlZCBjaGVja1Nob3dMaXN0RHJvcGRvd24gPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkUXVpY2tSYW5nZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGxlZnRDYWxlbmRhciA9IHNpZ25hbDx7IGNhbGVuZGFyPzogSUNhbGVuZGFyOyBtb250aD86IERheWpzIH0+KHt9KTtcbiAgcHJvdGVjdGVkIHJpZ2h0Q2FsZW5kYXIgPSBzaWduYWw8eyBjYWxlbmRhcj86IElDYWxlbmRhcjsgbW9udGg/OiBEYXlqcyB9Pih7fSk7XG5cbiAgcHJvdGVjdGVkIGxpc3RNb250aHNDb25maWcgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbW9udGhIdHRwRGV0YWlsQ29uZmlnID0gc2lnbmFsPElIdHRwUmVxdWVzdENvbmZpZz4oZ2V0TW9udGhzRGV0YWlsQnlJZCgpKTtcbiAgcHJvdGVjdGVkIGxpc3RMZWZ0WWVhckNvbmZpZyA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsaXN0UmlnaHRZZWFyQ29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxpc3RZZWFyQ29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxlZnRZZWFySHR0cERldGFpbENvbmZpZyA9IHNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByaWdodFllYXJIdHRwRGV0YWlsQ29uZmlnID0gc2lnbmFsPElIdHRwUmVxdWVzdENvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgdGltZVBpY2tlckVycm9yID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lKHsgc2VsZWN0ZWRIb3VyOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpLCBzZWxlY3RlZE1pbnV0ZTogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpIH0pKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcHV0ZWREaXNwbGF5VGltZSh7IHNlbGVjdGVkSG91cjogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRob3VyKCksIHNlbGVjdGVkTWludXRlOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpIH0pKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0SW5wdXRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ubGVmdCwgJ2hvdXInKSk7XG4gIHByb3RlY3RlZCBjb21wdXRlZERpc3BsYXlUaW1lTGVmdElucHV0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ubGVmdCwgJ21pbnV0ZScpKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodElucHV0SG91ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcHV0ZWREaXNwbGF5VGltZUlucHV0KFNpZGVFbnVtLnJpZ2h0LCAnaG91cicpKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodElucHV0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ucmlnaHQsICdtaW51dGUnKSk7XG4gIHByb3RlY3RlZCB0aW1lcGlja2VyVmFsdWVJdGVtID0gc2lnbmFsPElUaW1lcGlja2VySXRlbVZhbHVlPih7IGxlZnRob3VyOiBzaWduYWwoMCksIGxlZnRtaW51dGU6IHNpZ25hbCgwKSwgcmlnaHRob3VyOiBzaWduYWwoMCksIHJpZ2h0bWludXRlOiBzaWduYWwoMCkgfSk7XG5cbiAgcHJpdmF0ZSBmdW5jdGlvbkNvbnRyb2xzID0gbmV3IE1hcDxzdHJpbmcsIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHByaXZhdGUgcGlja2luZ0RhdGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzU2hvd24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIG5vd0hvdmVyZWREYXRlID0gc2lnbmFsPERheWpzIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgdGltZVBpY2tlckluY3JlbWVudCA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcml2YXRlIHNlbGVjdGVkTGFiZWwgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGtleUNvZGVCYWNrc3BhY2UgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGNoZWNrQmFja3NwYWNlRm9jdXMgPSBzaWduYWw8SVRpbWVwaWNrZXJJdGVtVmFsdWU+KHsgbGVmdGhvdXI6IHNpZ25hbCgxKSwgbGVmdG1pbnV0ZTogc2lnbmFsKDEpLCByaWdodGhvdXI6IHNpZ25hbCgxKSwgcmlnaHRtaW51dGU6IHNpZ25hbCgxKSB9KTtcbiAgcHJpdmF0ZSBpc1plcm8gPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbGREYXRlID0gc2lnbmFsPElTZWxlY3RlZE9sZD4oeyBzdGFydDogZGF5anMoMCksIGVuZDogZGF5anMoMCkgfSk7XG4gIHByaXZhdGUgaXNTZWxlY3RlZERhdGEgPSBzaWduYWw8SUNoZWNrVGltZXBpY2tlclNlbGVjdGVkPih7IGxlZnRtb250aDogZmFsc2UsIGxlZnR5ZWFyOiBmYWxzZSwgcmlnaHRtb250aDogZmFsc2UsIHJpZ2h0eWVhcjogZmFsc2UgfSk7XG4gIHByaXZhdGUgc3BsaXRQaWNrZXJEYXRlID0gc2lnbmFsPElTcGxpdFBpY2tlckRhdGU+KHsgc3RhcnQ6IHNpZ25hbCh7IG1vbnRoOiAwLCB5ZWFyOiAwLCBkYXk6IDAsIGhvdXI6IDAsIG1pbnV0ZTogMCB9KSwgZW5kOiBzaWduYWwoeyBtb250aDogMCwgeWVhcjogMCwgZGF5OiAwLCBob3VyOiAyMywgbWludXRlOiA1OSB9KSB9KTtcblxuICAvKiogSU5QVVQgKi9cbiAgcmVhZG9ubHkgcXVpY2tSYW5nZXNBcnJheSA9IGlucHV0PEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaXNTaW5nbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dEcm9wZG93bnNTZWxlY3QgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgaGFzVGltZVBpY2tlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBpbnB1dDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSBkYXRlT3B0aW9ucyA9IGlucHV0PExvY2FsaXphdGlvbkNvbmZpZz4oeyAuLi5kZWZhdWx0TG9jYWxlQ29uZmlnKCksIC4uLmdldERhdGVPcHRpb25zKCkgfSk7XG4gIHJlYWRvbmx5IGF1dG9BcHBseSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzU2Vjb25kUGlja2VyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzaG93UmFuZ2VMYWJlbE9uSW5wdXQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZSA9IG1vZGVsPERheWpzIHwgdW5kZWZpbmVkPihnZXREYXlqcygpLnN0YXJ0T2YoJ2RheScpKTtcbiAgcmVhZG9ubHkgZW5kRGF0ZSA9IG1vZGVsPERheWpzIHwgdW5kZWZpbmVkPihnZXREYXlqcygpLmVuZE9mKCdkYXknKSk7XG4gIHJlYWRvbmx5IG1pbkRhdGUgPSBpbnB1dDxEYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCwgRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyB0cmFuc2Zvcm06IHRoaXMudHJhbnNmb3JtTWluTWF4RGF0ZS5iaW5kKHRoaXMpIH0pO1xuICByZWFkb25seSBtYXhEYXRlID0gaW5wdXQ8RGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQsIERheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0aGlzLnRyYW5zZm9ybU1pbk1heERhdGUuYmluZCh0aGlzKSB9KTtcbiAgcmVhZG9ubHkgbGlzdFllYXJIaWRkZW5JbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIC8qKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXRQaWNrZXJEYXRlID0gb3V0cHV0PElFbWl0RGF0ZUNhbGVuZGFyPigpO1xuICByZWFkb25seSBvdXRDYW5jZWwgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRVcGRhdGVXaWR0aCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUNhbGVuZGFyRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgLyoqIElOSkVDVElPTiAqL1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICByZWFkb25seSBwaWNrZXJDb250YWluZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3BpY2tlckNvbnRhaW5lcicpO1xuICByZWFkb25seSBpbnB1dFRpbWVIb3VycyA9IHZpZXdDaGlsZHJlbjxMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQ+KExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0TW9udGhzQ29uZmlnLnNldChnZXRNb250aHNMaXN0Q29uZmlnKHRoaXMudHJhbnNsYXRlKSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb2xkU3RhcnQgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCkgfSk7XG4gICAgICBjb25zdCBvbGRFbmQgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpIH0pO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLm9sZERhdGUuc2V0KHsgc3RhcnQ6IG9sZFN0YXJ0LCBlbmQ6IG9sZEVuZCB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpIH0pO1xuICAgIGNvbnN0IGVuZERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpIH0pO1xuXG4gICAgdGhpcy5zcGxpdFBpY2tlckRhdGUudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50LnN0YXJ0LnVwZGF0ZSgoc2lkZUN1cnJlbnQpID0+IHtcbiAgICAgICAgc2lkZUN1cnJlbnQuZGF5ID0gKHN0YXJ0RGF0ZSA/PyBnZXREYXlqcygpLnN0YXJ0T2YoJ2RheScpKS5kYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBjdXJyZW50LmVuZC51cGRhdGUoKHNpZGVDdXJyZW50KSA9PiB7XG4gICAgICAgIHNpZGVDdXJyZW50LmRheSA9IChlbmREYXRlID8/IGdldERheWpzKCkuZW5kT2YoJ2RheScpKS5kYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgIH1cbiAgICBpZiAoc3RhcnREYXRlICYmIHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShzdGFydERhdGUpO1xuICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKFNpZGVFbnVtLmxlZnQpO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlICYmIHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUoZW5kRGF0ZSk7XG4gICAgICB0aGlzLnJlbmRlclRpbWVQaWNrZXIoU2lkZUVudW0ucmlnaHQpO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkQ29uZmlnWWVhcihTaWRlRW51bS5sZWZ0KTtcbiAgICB0aGlzLmJ1aWxkQ29uZmlnWWVhcihTaWRlRW51bS5yaWdodCwgc3RhcnREYXRlPy55ZWFyKCkpO1xuICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcihTaWRlRW51bS5sZWZ0KTtcbiAgICBpZiAoKGdldERheWpzKHsgZGF0ZTogdGhpcy5tYXhEYXRlKCkgfSk/LnllYXIoKSA/PyBERUZBVUxUX01BWF9ZRUFSKSA8IChzdGFydERhdGU/LnllYXIoKSB8fCAwKSkge1xuICAgICAgdGhpcy5oYW5kbGVyU2VsZWN0ZWREcm9wZG93bih7IGtleTogZ2V0RGF5anMoeyBkYXRlOiB0aGlzLm1heERhdGUoKSB9KT8ueWVhcigpIGFzIHVua25vd24gYXMgc3RyaW5nIH0sIFNpZGVFbnVtLmxlZnQgKyAneWVhcicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgICAgIGlmICgoZ2V0RGF5anMoeyBkYXRlOiB0aGlzLm1heERhdGUoKSB9KT8ueWVhcigpID8/IERFRkFVTFRfTUFYX1lFQVIpIDwgKGVuZERhdGU/LnllYXIoKSB8fCAwKSkge1xuICAgICAgICB0aGlzLmhhbmRsZXJTZWxlY3RlZERyb3Bkb3duKHsga2V5OiBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pPy55ZWFyKCkgYXMgdW5rbm93biBhcyBzdHJpbmcgfSwgU2lkZUVudW0ucmlnaHQgKyAneWVhcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMucmVuZGVyUmFuZ2VzKCk7XG4gICAgdGhpcy5mb3JtYXRNb250aFllYXIoKTtcbiAgICB0aGlzLm91dFVwZGF0ZVdpZHRoLmVtaXQoMSk7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50KCk7XG4gICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnNldCh7XG4gICAgICBsZWZ0aG91cjogc2lnbmFsKHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLmxlZnQoKS5zZWxlY3RlZEhvdXIpLFxuICAgICAgcmlnaHRob3VyOiBzaWduYWwodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkucmlnaHQoKS5zZWxlY3RlZEhvdXIpLFxuICAgICAgbGVmdG1pbnV0ZTogc2lnbmFsKHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLmxlZnQoKS5zZWxlY3RlZE1pbnV0ZSksXG4gICAgICByaWdodG1pbnV0ZTogc2lnbmFsKHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLnJpZ2h0KCkuc2VsZWN0ZWRNaW51dGUpLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dFRpbWVIb3VycygpPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgIGlucHV0LkZ1bmN0aW9uc0NvbnRyb2wuYmx1cih0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgLy8gdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoeyBidWlsZERlZmF1bHRSYW5nZTogdGhpcy5idWlsZERlZmF1bHRSYW5nZS5iaW5kKHRoaXMpLCBhcHBseVRvU2VsZWN0OiB0aGlzLmFwcGx5VG9TZWxlY3QuYmluZCh0aGlzKSB9KVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmZpZ1llYXIoc2lkZTogU2lkZUVudW0sIHN0YXJ0WWVhcj86IG51bWJlcikge1xuICAgIGNvbnN0IG1pbkRhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWluRGF0ZSgpIH0pO1xuICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuXG4gICAgY29uc3QgbGlzdExlZnRZZWFyID0gW107XG4gICAgY29uc3QgbGlzdFJpZ2h0WWVhciA9IFtdO1xuXG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbWF4RGF0ZT8ueWVhcigpID8/IERFRkFVTFRfTUFYX1lFQVI7XG4gICAgICBjb25zdCBlbmQgPSBtaW5EYXRlPy55ZWFyKCkgPz8gREVGQVVMVF9NSU5fWUVBUjtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA+PSBlbmQ7IGktLSkge1xuICAgICAgICBsaXN0TGVmdFllYXIucHVzaCh7XG4gICAgICAgICAgaWQ6IGksXG4gICAgICAgICAgbGFiZWw6IGAke2l9YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmxpc3RMZWZ0WWVhckNvbmZpZy5zZXQoZ2V0WWVhcnNMaXN0Q29uZmlnKGxpc3RMZWZ0WWVhcikpO1xuICAgICAgdGhpcy5sZWZ0WWVhckh0dHBEZXRhaWxDb25maWcuc2V0KGdldFllYXJzRGV0YWlsQnlJZChsaXN0TGVmdFllYXIpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gbWF4RGF0ZT8ueWVhcigpID8/IERFRkFVTFRfTUFYX1lFQVI7XG4gICAgY29uc3QgZW5kID0gc3RhcnRZZWFyID8/IG1pbkRhdGU/LnllYXIoKSA/PyBnZXREYXlqcygpLnllYXIoKTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPj0gZW5kOyBpLS0pIHtcbiAgICAgIGxpc3RSaWdodFllYXIucHVzaCh7XG4gICAgICAgIGlkOiBpLFxuICAgICAgICBsYWJlbDogYCR7aX1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5saXN0UmlnaHRZZWFyQ29uZmlnLnNldChnZXRZZWFyc0xpc3RDb25maWcobGlzdFJpZ2h0WWVhcikpO1xuICAgIHRoaXMucmlnaHRZZWFySHR0cERldGFpbENvbmZpZy5zZXQoZ2V0WWVhcnNEZXRhaWxCeUlkKGxpc3RSaWdodFllYXIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKGZsYWdNb3VzZTogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZS5lbWl0KGZsYWdNb3VzZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXJ0RW5kRGF0ZShkYXRlOiBEYXlqcykge1xuICAgIGRhdGUgPSBnZXREYXlqcyh7IGRhdGUgfSk7XG4gICAgaWYgKHRoaXMuZW5kRGF0ZSgpIHx8IGRhdGUuaXNCZWZvcmUoZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpIH0pLCAnZGF5JykpIHtcbiAgICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBkYXRlID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoZGF0ZSwgU2lkZUVudW0ubGVmdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShnZXREYXlqcyh7IGRhdGU6IGRhdGUuY2xvbmUoKSB9KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuZERhdGUoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpICYmIGRhdGUuaXNCZWZvcmUoZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpIH0pKSkge1xuICAgICAgdGhpcy5zZXRFbmREYXRlKGdldERheWpzKHsgZGF0ZTogdGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSB9KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBkYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLmdldERhdGVXaXRoVGltZShkYXRlLCBTaWRlRW51bS5yaWdodCkgfSk7XG4gICAgfVxuICAgIGlmICghZGF0ZS5pc0JlZm9yZShnZXREYXlqcyh7IGRhdGU6IHRoaXMuc3RhcnREYXRlKCkgfSksICdkYXknKSkge1xuICAgICAgdGhpcy5zZXRFbmREYXRlKGdldERheWpzKHsgZGF0ZTogZGF0ZS5jbG9uZSgpIH0pKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0b0FwcGx5KCkpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlU2VsZWN0ZWRMYWJlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlU2VsZWN0ZWRMYWJlbCgpIHtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9udGhZZWFyKCkge1xuICAgIGNvbnN0IG1vbnRoID0gKHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5sZWZ0KCkuZHJvcGRvd25zPy4oKT8uY3VycmVudE1vbnRoID8/IDApICsgMTtcbiAgICB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gbW9udGg7XG4gICAgICBjdXJyZW50LnllYXIgPSB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKCkubGVmdCgpLmRyb3Bkb3ducz8uKCk/LmN1cnJlbnRZZWFyO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnNldCh7IGxlZnRtb250aDogdHJ1ZSwgbGVmdHllYXI6IHRydWUsIHJpZ2h0bW9udGg6IHRydWUsIHJpZ2h0eWVhcjogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmlnaHRNb250aCA9ICh0aGlzLmNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5kcm9wZG93bnM/LigpPy5jdXJyZW50TW9udGggPz8gMCkgKyAxO1xuICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gcmlnaHRNb250aDtcbiAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducz8uKCk/LmN1cnJlbnRZZWFyO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnNldCh7IGxlZnRtb250aDogdHJ1ZSwgbGVmdHllYXI6IHRydWUsIHJpZ2h0bW9udGg6IHRydWUsIHJpZ2h0eWVhcjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhcnREYXRlKHN0YXJ0RGF0ZTogRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdGFydERhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZ2V0RGF5anMoeyBkYXRlOiBkYXlqcyhzdGFydERhdGUsIHRoaXMuZGF0ZU9wdGlvbnMoKS5mb3JtYXQpLCByZXR1cm5EYXlqc0lmQ29uZmlnRGF0ZU5vdEV4aXN0OiB0cnVlIH0pKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdGFydERhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnBpY2tpbmdEYXRlLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldChnZXREYXlqcyh7IGRhdGU6IHN0YXJ0RGF0ZSwgcmV0dXJuRGF5anNJZkNvbmZpZ0RhdGVOb3RFeGlzdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucGlja2luZ0RhdGUuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0KGdldERheWpzKHsgZGF0ZTogdGhpcy5zdGFydERhdGUoKT8uc3RhcnRPZignZGF5JykgfSkpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXJ0RGF0ZUluVGltZVBpY2tlcigpO1xuXG4gICAgaWYgKHRoaXMubWluRGF0ZSgpICYmIHRoaXMuc3RhcnREYXRlKCk/LmlzQmVmb3JlKHRoaXMubWluRGF0ZSgpKSkge1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0KGdldERheWpzKHsgZGF0ZTogdGhpcy5taW5EYXRlKCkgfSk/LmNsb25lKCkpO1xuXG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZUluVGltZVBpY2tlcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhEYXRlKCkgJiYgdGhpcy5zdGFydERhdGUoKT8uaXNBZnRlcih0aGlzLm1heERhdGUoKSkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldChnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pPy5jbG9uZSgpKTtcbiAgICAgIHRoaXMuc2V0U3RhcnREYXRlSW5UaW1lUGlja2VyKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgIH1cbiAgICAvLyB0aGlzLm91dFN0YXJ0RGF0ZUNoYW5nZWQuZW1pdCh7IHN0YXJ0RGF0ZTogdGhpcy5zdGFydERhdGUoKSB9KTtcbiAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdGFydERhdGVJblRpbWVQaWNrZXIoKSB7XG4gICAgaWYgKCF0aGlzLmhhc1RpbWVQaWNrZXIoKSB8fCAhdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjdXJyZW50Lm1pbnV0ZShNYXRoLnJvdW5kKGN1cnJlbnQubWludXRlKCkgLyB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSkgKiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgc2V0RW5kRGF0ZShlbmREYXRlOiBEYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5kRGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZ2V0RGF5anMoeyBkYXRlOiBkYXlqcyhlbmREYXRlLCB0aGlzLmRhdGVPcHRpb25zKCkuZm9ybWF0KSwgcmV0dXJuRGF5anNJZkNvbmZpZ0RhdGVOb3RFeGlzdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5kRGF0ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMucGlja2luZ0RhdGUuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZ2V0RGF5anMoeyBkYXRlOiBkYXlqcyhlbmREYXRlKSwgcmV0dXJuRGF5anNJZkNvbmZpZ0RhdGVOb3RFeGlzdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmREYXRlKCkgfHwgIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICB0aGlzLnBpY2tpbmdEYXRlLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KHRoaXMuZW5kRGF0ZSgpPy5hZGQoMSwgJ2QnKS5zdGFydE9mKCdkYXknKS5zdWJ0cmFjdCgxLCAnc2Vjb25kJykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkgJiYgdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQubWludXRlKE1hdGgucm91bmQoY3VycmVudC5taW51dGUoKSAvIHRoaXMudGltZVBpY2tlckluY3JlbWVudCgpKSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCgpKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbmREYXRlKCk/LmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKCkpKSB7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhEYXRlKCkgJiYgdGhpcy5lbmREYXRlKCk/LmlzQWZ0ZXIodGhpcy5tYXhEYXRlKCkpKSB7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KGdldERheWpzKHsgZGF0ZTogdGhpcy5tYXhEYXRlKCkgfSk/LmNsb25lKCkpO1xuICAgIH1cbiAgICAvLyB0aGlzLm91dEVuZERhdGVDaGFuZ2VkLmVtaXQoeyBlbmREYXRlOiB0aGlzLmVuZERhdGUoKSB9KTtcbiAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVySG92ZXJEYXRlKGV2ZW50OiBFdmVudCwgc2lkZTogU2lkZUVudW0sIHJvdzogbnVtYmVyLCBjb2w6IG51bWJlcikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbGVmdENhbERhdGUgPSB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKCkubGVmdCgpLmNhbGVuZGFyPy5bcm93XVtjb2xdO1xuICAgIGNvbnN0IHJpZ2h0Q2FsRGF0ZSA9IHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bcm93XVtjb2xdO1xuXG4gICAgaWYgKCF0aGlzLnBpY2tpbmdEYXRlIHx8ICFyaWdodENhbERhdGUgfHwgIWxlZnRDYWxEYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubm93SG92ZXJlZERhdGUuc2V0KHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyBsZWZ0Q2FsRGF0ZSA6IHJpZ2h0Q2FsRGF0ZSk7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcihTaWRlRW51bS5sZWZ0KTtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgfVxuICBwcml2YXRlIGdldERpc2FibGUodHlwZTogJ2xlZnQnIHwgJ3JpZ2h0Jykge1xuICAgIGNvbnN0IG1pbkRhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWluRGF0ZSgpIH0pO1xuICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuXG4gICAgaWYgKHR5cGUgPT09ICdsZWZ0Jykge1xuICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5sZWZ0LnNldChbXSk7XG5cbiAgICAgIGlmIChtaW5EYXRlICYmIG1pbkRhdGU/LnllYXIoKSA9PT0gdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhcikge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG1pbkRhdGU/Lm1vbnRoKCkgKyAxOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVNb250aCgpLmxlZnQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWF4RGF0ZSAmJiBtYXhEYXRlPy55ZWFyKCkgPT09IHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG1heERhdGU/Lm1vbnRoKCkgKyAyOyBpIDwgMTM7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkubGVmdC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQucHVzaChpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkucmlnaHQuc2V0KFtdKTtcbiAgICBpZiAobWluRGF0ZSAmJiBtaW5EYXRlPy55ZWFyKCkgPT09IHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG1pbkRhdGU/Lm1vbnRoKCkgKyAxOyBpKyspIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5yaWdodC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtYXhEYXRlICYmIG1heERhdGU/LnllYXIoKSA9PT0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgIGZvciAobGV0IGkgPSBtYXhEYXRlPy5tb250aCgpICsgMjsgaSA8IDEzOyBpKyspIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5yaWdodC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChOdW1iZXIodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhcikgPT09IE51bWJlcih0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCk7IGkrKykge1xuICAgICAgICB0aGlzLmRpc2FibGVNb250aCgpLnJpZ2h0LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucHVzaChpKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrUHJldihzaWRlOiBTaWRlRW51bSkge1xuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0ICYmIHRoaXMubGVmdENhbGVuZGFyKCkubW9udGgpIHtcbiAgICAgIHRoaXMubGVmdENhbGVuZGFyLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uc3VidHJhY3QoMSwgJ21vbnRoJyk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uc3VidHJhY3QoMSwgJ21vbnRoJyk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gKHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy55ZWFyKCk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMuZ2V0RGlzYWJsZSgncmlnaHQnKTtcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja05leHQoc2lkZTogU2lkZUVudW0pIHtcbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA9PT0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLm1vbnRoICYmIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgPT09IHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSB7XG4gICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uYWRkKDEsICdtb250aCcpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQubW9udGggPSAodGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/Lm1vbnRoKCkgPz8gMCkgKyAxO1xuICAgICAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy55ZWFyKCk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uYWRkKDEsICdtb250aCcpO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ubW9udGgoKSA/PyAwKSArIDE7XG4gICAgICBjdXJyZW50LnllYXIgPSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVyUGlja2VyRGF0ZShldmVudDogYW55LCBzaWRlOiBTaWRlRW51bSwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0Py50YWdOYW1lID09PSAnVEQnKSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdCAmJiAhZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYXZhaWxhYmxlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdTUEFOJykge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50ICYmIGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdCAmJiAhZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhdmFpbGFibGUnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRlT3B0aW9ucygpLmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVpY2tSYW5nZXNBcnJheSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2Uuc2V0KHRoaXMuZGF0ZU9wdGlvbnMoKS5jdXN0b21SYW5nZUxhYmVsKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyB0aGlzLmxlZnRDYWxlbmRhcigpLmNhbGVuZGFyPy5bcm93XVtjb2xdIDogdGhpcy5yaWdodENhbGVuZGFyKCkuY2FsZW5kYXI/Lltyb3ddW2NvbF07XG5cbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zcGxpdFBpY2tlckRhdGUudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50W3NpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyAnc3RhcnQnIDogJ2VuZCddLnVwZGF0ZSgoc2lkZUN1cnJlbnQpID0+IHtcbiAgICAgICAgc2lkZUN1cnJlbnQuZGF5ID0gZGF0ZS5kYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlU3RhcnRFbmREYXRlKGRhdGUpO1xuXG4gICAgaWYgKHRoaXMuaXNTaW5nbGUoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUodGhpcy5zdGFydERhdGUoKSk7XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcblxuICAgICAgaWYgKHRoaXMuYXV0b0FwcGx5KCkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tBcHBseSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgIGlmICh0aGlzLmF1dG9BcHBseSgpICYmIHRoaXMuc3RhcnREYXRlKCkgJiYgdGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlckNsaWNrQXBwbHkoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQXBwbHkoZXZlbnQ/OiBFdmVudCkge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMuc2V0VGltZUlucHV0KFNpZGVFbnVtLmxlZnQpO1xuICAgICAgdGhpcy5zZXRUaW1lSW5wdXQoU2lkZUVudW0ucmlnaHQpO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZVNlbGVjdGVkTGFiZWwoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTGFiZWwoKSkge1xuICAgICAgdGhpcy5vdXRQaWNrZXJEYXRlLmVtaXQoeyBkaXNwbGF5TGFiZWw6IHRoaXMuc2VsZWN0ZWRMYWJlbCgpLCBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlKCksIGVuZERhdGU6IHRoaXMuZW5kRGF0ZSgpLCBkZXRhaWxEYXRlUGlja2VyOiB0aGlzLnNwbGl0UGlja2VyRGF0ZSgpIH0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQ2FuY2VsKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3RhcnREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5lbmREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5vdXRDYW5jZWwuZW1pdCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQgfCBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xzLnNldCh0eXBlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdCh7XG4gICAgICBpc01vdXNlRW50ZXI6IGZhbHNlLFxuICAgICAgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UsXG4gICAgICBpc0NvbnRhaW5lckhhc1Njcm9sbDogZmFsc2UsXG4gICAgfSk7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgYCR7U2lkZUVudW0ubGVmdH1tb250aGA6XG4gICAgICBjYXNlIGAke1NpZGVFbnVtLnJpZ2h0fW1vbnRoYDpcbiAgICAgICAgdGhpcy51cGRhdGVNb250aFNlbGVjdChldmVudCwgdHlwZSk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgYCR7U2lkZUVudW0ubGVmdH15ZWFyYDpcbiAgICAgIGNhc2UgYCR7U2lkZUVudW0ucmlnaHR9eWVhcmA6XG4gICAgICAgIHRoaXMudXBkYXRlWWVhclNlbGVjdChldmVudCwgdHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnNwbGl0UGlja2VyRGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fW1vbnRoYCB8fCB0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fXllYXJgKSB7XG4gICAgICAgIGN1cnJlbnQuc3RhcnQudXBkYXRlKChzdGFydCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fW1vbnRoYCkge1xuICAgICAgICAgICAgc3RhcnQubW9udGggPSBldmVudC5rZXkgYXMgbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZSA9PT0gYCR7U2lkZUVudW0ubGVmdH15ZWFyYCkge1xuICAgICAgICAgICAgc3RhcnQueWVhciA9IGV2ZW50LmtleSBhcyBudW1iZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0YXJ0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5lbmQudXBkYXRlKChlbmQpID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IGAke1NpZGVFbnVtLnJpZ2h0fW1vbnRoYCkge1xuICAgICAgICAgIGVuZC5tb250aCA9IGV2ZW50LmtleSBhcyBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IGAke1NpZGVFbnVtLnJpZ2h0fXllYXJgKSB7XG4gICAgICAgICAgZW5kLnllYXIgPSBldmVudC5rZXkgYXMgbnVtYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9udGhTZWxlY3QoZXZlbnQ6IElFbWl0U2VsZWN0S2V5LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzaWRlID0gdHlwZS5pbmNsdWRlcyhTaWRlRW51bS5sZWZ0KSA/IFNpZGVFbnVtLmxlZnQgOiBTaWRlRW51bS5yaWdodDtcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkuZHJvcGRvd25zPy4oKT8uY3VycmVudFllYXIgfHwgZ2V0RGF5anMoKS55ZWFyKCk7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIoZXZlbnQua2V5KSAtIDE7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZERhdGEoKS5sZWZ0bW9udGgpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkRGF0YS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LmxlZnRtb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50Lm1vbnRoID0gZXZlbnQua2V5O1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBpZiAoTnVtYmVyKGV2ZW50LmtleSkgPj0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSAmJiBOdW1iZXIodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhcikgPT09IE51bWJlcih0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikpIHtcbiAgICAgICAgaWYgKE51bWJlcihldmVudC5rZXkpIDw9IDExKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQubW9udGggPSBOdW1iZXIoZXZlbnQua2V5KSArIDE7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChOdW1iZXIoZXZlbnQua2V5KSA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IDE7XG4gICAgICAgICAgICBjdXJyZW50LnllYXIgKz0gMTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ucmlnaHQpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWREYXRhKCkucmlnaHRtb250aCkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucmlnaHRtb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IGV2ZW50LmtleTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldCh0eXBlKSBhcyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCk/LnJlbW92ZUxpc3QoKTtcblxuICAgIHRoaXMuZ2V0RGlzYWJsZSgncmlnaHQnKTtcbiAgICB0aGlzLm1vbnRoT3JZZWFyQ2hhbmdlZChtb250aCwgeWVhciwgc2lkZSk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVZZWFyU2VsZWN0KGV2ZW50OiBJRW1pdFNlbGVjdEtleSwgdHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2lkZSA9IHR5cGUuaW5jbHVkZXMoU2lkZUVudW0ubGVmdCkgPyBTaWRlRW51bS5sZWZ0IDogU2lkZUVudW0ucmlnaHQ7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZERhdGEoKT8ubGVmdHllYXIpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkRGF0YS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LmxlZnR5ZWFyID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0RGlzYWJsZSgnbGVmdCcpO1xuICAgICAgICAvLyB0aGlzLlNldExpc3RZZWFyUmlnaHQodGhpcy5saXN0Vmlld0tleVNlbGVjdGVkWWVhciBhcyBudW1iZXIpO1xuICAgICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldCh0eXBlKSBhcyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCk/LnJlbW92ZUxpc3QoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQueWVhciA9IGV2ZW50LmtleTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgPj0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LnllYXIgPSBldmVudC5rZXk7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSA8PSAxMSkge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSArIDE7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQubW9udGggPSBOdW1iZXIodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGgpO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZ2V0RGlzYWJsZSgnbGVmdCcpO1xuICAgICAgdGhpcy5idWlsZENvbmZpZ1llYXIoU2lkZUVudW0ucmlnaHQsIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgYXMgbnVtYmVyKTtcbiAgICAgICh0aGlzLmZ1bmN0aW9uQ29udHJvbHMuZ2V0KHR5cGUpIGFzIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50KT8ucmVtb3ZlTGlzdCgpO1xuICAgIH1cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ucmlnaHQpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWREYXRhKCkucmlnaHR5ZWFyKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZERhdGEudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgY3VycmVudC5yaWdodHllYXIgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQueWVhciA9IGV2ZW50LmtleTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgJiYgdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIgJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhciA+PSB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikge1xuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSA8PSAxMSkge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSArIDE7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCAmJiB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2V0RGlzYWJsZSgncmlnaHQnKTtcbiAgICBsZXQgbW9udGggPSBnZXREYXlqcygpLm1vbnRoKCk7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ucmlnaHQgJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGgpIHtcbiAgICAgIG1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSAtIDE7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0ICYmIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSB7XG4gICAgICBtb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkgLSAxO1xuICAgIH1cbiAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGV2ZW50LmtleSk7XG5cbiAgICB0aGlzLm1vbnRoT3JZZWFyQ2hhbmdlZChtb250aCwgeWVhciwgc2lkZSk7XG4gIH1cbiAgcHJpdmF0ZSBtb250aE9yWWVhckNoYW5nZWQobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyLCBzaWRlOiBTaWRlRW51bSkge1xuICAgIGNvbnN0IGlzTGVmdCA9IHNpZGUgPT09IFNpZGVFbnVtLmxlZnQ7XG4gICAgY29uc3QgbWluRGF0ZSA9IGdldERheWpzKHsgZGF0ZTogdGhpcy5taW5EYXRlKCkgfSk7XG4gICAgY29uc3QgbWF4RGF0ZSA9IGdldERheWpzKHsgZGF0ZTogdGhpcy5tYXhEYXRlKCkgfSk7XG5cbiAgICBpZiAobWluRGF0ZSAmJiAoeWVhciA8IG1pbkRhdGU/LnllYXIoKSB8fCAoeWVhciA9PT0gbWluRGF0ZT8ueWVhcigpICYmIG1vbnRoIDwgbWluRGF0ZT8ubW9udGgoKSkpKSB7XG4gICAgICBtb250aCA9IG1pbkRhdGU/Lm1vbnRoKCk7XG4gICAgICB5ZWFyID0gbWluRGF0ZT8ueWVhcigpO1xuICAgIH1cblxuICAgIGlmIChtYXhEYXRlICYmICh5ZWFyID4gbWF4RGF0ZT8ueWVhcigpIHx8ICh5ZWFyID09PSBtYXhEYXRlPy55ZWFyKCkgJiYgbW9udGggPiBtYXhEYXRlPy5tb250aCgpKSkpIHtcbiAgICAgIG1vbnRoID0gbWF4RGF0ZT8ubW9udGgoKTtcbiAgICAgIHllYXIgPSBtYXhEYXRlPy55ZWFyKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZHJvcGRvd25zID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkuZHJvcGRvd25zO1xuXG4gICAgaWYgKGRyb3Bkb3ducz8uKCkpIHtcbiAgICAgIGRyb3Bkb3ducy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5jdXJyZW50WWVhciA9IHllYXI7XG4gICAgICAgIGN1cnJlbnQuY3VycmVudE1vbnRoID0gbW9udGg7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzTGVmdCAmJiB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoKSB7XG4gICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IGN1cnJlbnQubW9udGg/Lm1vbnRoKG1vbnRoKS55ZWFyKHllYXIpO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICB9XG5cbiAgICBpZiAobW9udGggPT09IDEyKSB7XG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gICAgfVxuICAgIHRoaXMucmlnaHRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5tb250aChtb250aCkueWVhcih5ZWFyKTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlcklucHV0RXZlbnQoZXZlbnQ6IElFdmVudCwgdHlwZTogYGxlZnRob3VyYCB8IGBsZWZ0bWludXRlYCB8IGByaWdodGhvdXJgIHwgYHJpZ2h0bWludXRlYCkge1xuICAgIGlmIChldmVudC5rZXlDb2RlICE9PSA4KSB7XG4gICAgICBldmVudC5rZXlDb2RlICYmXG4gICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldCgxKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5rZXlDb2RlQmFja3NwYWNlLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmtleUNvZGVCYWNrc3BhY2Uuc2V0KHRydWUpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdsZWZ0bWludXRlJzpcbiAgICAgICAgaWYgKGlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5jaGVja0JhY2tzcGFjZUZvY3VzKClbdHlwZV0oKSA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0JhY2tzcGFjZUZvY3VzLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldChjdXJyZW50W3R5cGVdKCkgKyAxKTtcblxuICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldChgJHtTaWRlRW51bS5sZWZ0fWhvdXJgKSBhcyBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCk/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0bWludXRlJzpcbiAgICAgICAgaWYgKGlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cygpW3R5cGVdKCkgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgICAgY3VycmVudFt0eXBlXS5zZXQoY3VycmVudFt0eXBlXSgpICsgMSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNoZWNrQmFja3NwYWNlRm9jdXMudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldCgxKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQoYCR7U2lkZUVudW0ucmlnaHR9aG91cmApIGFzIElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KT8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoZXZlbnQ6IElGb2N1c0FuZEJsdXJFdmVudCwgdHlwZTogYGxlZnRob3VyYCB8IGBsZWZ0bWludXRlYCB8IGByaWdodGhvdXJgIHwgYHJpZ2h0bWludXRlYCkge1xuICAgIGlmIChldmVudC5uYW1lID09PSAnZm9jdXMnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50SW5wdXQgPSBldmVudC5ldmVudCBhcyBJRXZlbnQ7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnRJbnB1dC50YXJnZXQ7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2xlZnRob3VyJzpcbiAgICAgICAgdGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkubGVmdC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkSG91ciA9ICFpc05pbCh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpKSA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkgOiAwO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpID09PSAwIHx8IGlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpKSB7XG4gICAgICAgICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5sZWZ0aG91ci5zZXQoMCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9ICcwMCc7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpIDwgMTApIHtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSBgMCR7TnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0aG91cic6XG4gICAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLnJpZ2h0LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRIb3VyID0gIWlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpKSA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpIDogMDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSkgPT09IDAgfHwgaXNOaWwodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRob3VyKCkpKSB7XG4gICAgICAgICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5yaWdodGhvdXIuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSl9YDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdG1pbnV0ZSc6XG4gICAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLmxlZnQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgY3VycmVudC5zZWxlY3RlZE1pbnV0ZSA9ICFpc05pbCh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpID8gdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpIDogMDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpID09PSAwIHx8IGlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSkpIHtcbiAgICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LmxlZnRtaW51dGUuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSkgPCAxMCkge1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9IGAwJHtOdW1iZXIodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodG1pbnV0ZSc6XG4gICAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLnJpZ2h0LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSAhaXNOaWwodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRtaW51dGUoKSkgPyB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpIDogMDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSA9PT0gMCB8fCBpc05pbCh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSkge1xuICAgICAgICAgIHRoaXMudGltZXBpY2tlclZhbHVlSXRlbS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQucmlnaHRtaW51dGUuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpIDwgMTApIHtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSBgMCR7TnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VUaW1lVmFsdWUoZXZlbnQ6IHN0cmluZyB8IG51bWJlciwgdHlwZTogYGxlZnRob3VyYCB8IGBsZWZ0bWludXRlYCB8IGByaWdodGhvdXJgIHwgYHJpZ2h0bWludXRlYCkge1xuICAgIHRoaXMudGltZXBpY2tlclZhbHVlSXRlbS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KGV2ZW50IGFzIG51bWJlcik7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2lkZSA9IHR5cGUuaW5jbHVkZXMoU2lkZUVudW0ubGVmdCkgPyBTaWRlRW51bS5sZWZ0IDogU2lkZUVudW0ucmlnaHQ7XG4gICAgY29uc3QgYXR0ciA9IHR5cGUuaW5jbHVkZXMoJ2hvdXInKSA/ICdob3VyJyA6ICdtaW51dGUnO1xuXG4gICAgdGhpcy5zcGxpdFBpY2tlckRhdGUudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50W3NpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyAnc3RhcnQnIDogJ2VuZCddLnVwZGF0ZSgoc2lkZUN1cnJlbnQpID0+IHtcbiAgICAgICAgc2lkZUN1cnJlbnRbYXR0cl0gPSBldmVudCBhcyBudW1iZXI7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIGlmICgodHlwZSAhPT0gJ2xlZnRob3VyJyAmJiB0eXBlICE9PSAncmlnaHRob3VyJykgfHwgZXZlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc1plcm8uc2V0KGZhbHNlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYCR7ZXZlbnR9YC5sZW5ndGggPT09IDIgfHwgTnVtYmVyKGV2ZW50KSA+IDIgfHwgKE51bWJlcihldmVudCkgPD0gMiAmJiBOdW1iZXIoZXZlbnQpID4gMCAmJiB0aGlzLmlzWmVybygpKSB8fCAodGhpcy5pc1plcm8oKSAmJiAhdGhpcy5rZXlDb2RlQmFja3NwYWNlKCkpKSB7XG4gICAgICB0aGlzLmlzWmVyby5zZXQoZmFsc2UpO1xuICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQodHlwZSA9PT0gJ2xlZnRob3VyJyA/IGAke1NpZGVFbnVtLmxlZnR9bWludXRlYCA6IGAke1NpZGVFbnVtLnJpZ2h0fW1pbnV0ZWApIGFzIElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KT8uZm9jdXMoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoTnVtYmVyKGV2ZW50KSA9PT0gMCAmJiAhdGhpcy5rZXlDb2RlQmFja3NwYWNlKCkpIHtcbiAgICAgIHRoaXMuaXNaZXJvLnNldCh0cnVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2hvd0xpc3REcm9wZG93bihldmVudDogYm9vbGVhbiwgdHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jaGVja1Nob3dMaXN0RHJvcGRvd24udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50W3R5cGVdID0gZXZlbnQ7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnZlcnRJdGVtTW9udGggPSAoaXRlbTogYW55KSA9PiB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHNldChpdGVtLCAnbGFiZWxEaXNwbGF5JywgdGhpcy50cmFuc2xhdGUuaW5zdGFudChpdGVtLmxhYmVsIHx8ICcgJywgeyB5ZWFyOiAnJyB9KSk7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcbiAgcHJvdGVjdGVkIGNvbnZlcnRJdGVtWWVhciA9IChpdGVtOiBhbnkpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaXRlbS5sYWJlbERpc3BsYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX3llYXJfcGFyYW0nLCB7IHllYXI6IGl0ZW0ubGFiZWwgfSk7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoc0luVmlldygpIHtcbiAgICBpZiAodGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuaXNTaW5nbGUoKSAmJlxuICAgICAgICB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoICYmXG4gICAgICAgIHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoICYmXG4gICAgICAgICgodGhpcy5sZWZ0Q2FsZW5kYXIoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ1lZWVktTU0nKSA9PT0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykpIHx8ICh0aGlzLnJpZ2h0Q2FsZW5kYXIoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ1lZWVktTU0nKSA9PT0gdGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/LmZvcm1hdCgnWVlZWS1NTScpKSkgJiZcbiAgICAgICAgKHRoaXMuZW5kRGF0ZSgpPy5mb3JtYXQoJ1lZWVktTU0nKSA9PT0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykgfHwgdGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpID09PSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydERhdGUoKSkge1xuICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gdGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKT8uZGF0ZSgyKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5lbmREYXRlKCk/Lm1vbnRoKCkgIT09IHRoaXMuc3RhcnREYXRlKCk/Lm1vbnRoKCkgfHwgdGhpcy5lbmREYXRlKCk/LnllYXIoKSAhPT0gdGhpcy5zdGFydERhdGUoKT8ueWVhcigpKSB7XG4gICAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpPy5kYXRlKDIpO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCk/LmRhdGUoMik/LmFkZCgxLCAnbW9udGgnKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0RGF0ZSgpICYmXG4gICAgICB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoICYmXG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aCAmJlxuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykgIT09IHRoaXMuc3RhcnREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpICYmXG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykgIT09IHRoaXMuc3RhcnREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpXG4gICAgKSB7XG4gICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCk/LmRhdGUoMik7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmlnaHRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCk/LmRhdGUoMik/LmFkZCgxLCAnbW9udGgnKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VGltZUlucHV0KHNpZGU6IFNpZGVFbnVtKSB7XG4gICAgY29uc3QgaG91ciA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRIb3VyfWApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRNaW51dGV9YCk7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCAmJiB0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpO1xuXG4gICAgICBzdGFydCA9IHN0YXJ0Py5ob3VyKGhvdXIpO1xuICAgICAgc3RhcnQgPSBzdGFydD8ubWludXRlKG1pbnV0ZSk7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShzdGFydCk7XG4gICAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmREYXRlKCkgJiYgdGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzdGFydD8uZm9ybWF0KCdZWVlZLU1NLUREJykgJiYgdGhpcy5lbmREYXRlKCk/LmlzQmVmb3JlKHN0YXJ0KSkge1xuICAgICAgICB0aGlzLnNldEVuZERhdGUoc3RhcnQ/LmNsb25lKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmVuZERhdGUoKSAmJiBzdGFydCAmJiB0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBjb25zdCBzdGFydENsb25lID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoc3RhcnQsIFNpZGVFbnVtLnJpZ2h0KTtcblxuICAgICAgICBpZiAoc3RhcnRDbG9uZS5pc0JlZm9yZShzdGFydCkpIHtcbiAgICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtTaWRlRW51bS5yaWdodF0udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkSG91ciA9IGhvdXI7XG4gICAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkTWludXRlID0gbWludXRlO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZERhdGUoKSkge1xuICAgICAgbGV0IGVuZCA9IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpO1xuXG4gICAgICBlbmQgPSBlbmQ/LmhvdXIoaG91cik7XG4gICAgICBlbmQgPSBlbmQ/Lm1pbnV0ZShtaW51dGUpO1xuICAgICAgdGhpcy5zZXRFbmREYXRlKGVuZCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKFNpZGVFbnVtLmxlZnQpO1xuICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5yaWdodCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNhbGVuZGFycygpIHtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLmxlZnQpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoU2lkZUVudW0ucmlnaHQpO1xuICAgIGlmICh0aGlzLmVuZERhdGUoKSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZVNlbGVjdGVkTGFiZWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ2FsZW5kYXIoc2lkZTogU2lkZUVudW0pIHtcbiAgICAvLyBzaWRlIGVudW1cbiAgICBjb25zdCBtYWluQ2FsZW5kYXI6IHsgY2FsZW5kYXI/OiBJQ2FsZW5kYXI7IG1vbnRoPzogRGF5anMgfSA9IHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyB0aGlzLmxlZnRDYWxlbmRhcigpIDogdGhpcy5yaWdodENhbGVuZGFyKCk7XG5cbiAgICBpZiAoIW1haW5DYWxlbmRhci5tb250aCB8fCB0aGlzLmRhdGVPcHRpb25zKCkuZmlyc3REYXkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmRhdGVPcHRpb25zKCkuZmlyc3REYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtb250aCA9IG1haW5DYWxlbmRhci5tb250aC5tb250aCgpO1xuICAgIGNvbnN0IHllYXIgPSBtYWluQ2FsZW5kYXIubW9udGgueWVhcigpO1xuICAgIGNvbnN0IGhvdXIgPSBtYWluQ2FsZW5kYXIubW9udGguaG91cigpO1xuICAgIGNvbnN0IG1pbnV0ZSA9IG1haW5DYWxlbmRhci5tb250aC5taW51dGUoKTtcbiAgICBjb25zdCBzZWNvbmQgPSBtYWluQ2FsZW5kYXIubW9udGguc2Vjb25kKCk7XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBnZXREYXlqcyh7IGRhdGU6IG5ldyBEYXRlKHllYXIsIG1vbnRoKSB9KS5kYXlzSW5Nb250aCgpO1xuICAgIGNvbnN0IGZpcnN0RGF5ID0gZ2V0RGF5anMoeyBkYXRlOiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkgfSk7XG4gICAgY29uc3QgbGFzdERheSA9IGdldERheWpzKHsgZGF0ZTogbmV3IERhdGUoeWVhciwgbW9udGgsIGRheXNJbk1vbnRoKSB9KTtcbiAgICBjb25zdCBsYXN0TW9udGggPSBnZXREYXlqcyh7IGRhdGU6IGZpcnN0RGF5LnN1YnRyYWN0KDEsICdtb250aCcpIH0pLm1vbnRoKCk7XG4gICAgY29uc3QgbGFzdFllYXIgPSBnZXREYXlqcyh7IGRhdGU6IGZpcnN0RGF5LnN1YnRyYWN0KDEsICdtb250aCcpIH0pLnllYXIoKTtcbiAgICBjb25zdCBkYXlzSW5MYXN0TW9udGggPSBnZXREYXlqcyh7IGRhdGU6IG5ldyBEYXRlKGxhc3RZZWFyLCBsYXN0TW9udGgpIH0pLmRheXNJbk1vbnRoKCk7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZmlyc3REYXkuZGF5KCk7XG4gICAgY29uc3QgY2FsZW5kYXI6IElDYWxlbmRhciA9IHt9O1xuXG4gICAgY2FsZW5kYXIuZmlyc3REYXkgPSBmaXJzdERheTtcbiAgICBjYWxlbmRhci5sYXN0RGF5ID0gbGFzdERheTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgY2FsZW5kYXJbaV0gPSBbXTtcbiAgICB9XG4gICAgbGV0IHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gZGF5T2ZXZWVrICsgKHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSA/PyAxKSArIDE7XG5cbiAgICBpZiAoc3RhcnREYXkgPiBkYXlzSW5MYXN0TW9udGgpIHtcbiAgICAgIHN0YXJ0RGF5IC09IDc7XG4gICAgfVxuICAgIGlmIChkYXlPZldlZWsgPT09IHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSkge1xuICAgICAgc3RhcnREYXkgPSBkYXlzSW5MYXN0TW9udGggLSA2O1xuICAgIH1cbiAgICBsZXQgY3VyRGF0ZSA9IGdldERheWpzKHsgZGF0ZTogbmV3IERhdGUobGFzdFllYXIsIGxhc3RNb250aCwgc3RhcnREYXksIDEyLCBtaW51dGUsIHNlY29uZCkgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgY29sID0gMCwgcm93ID0gMDsgaSA8IDQyOyBpKyssIGNvbCsrLCBjdXJEYXRlID0gZ2V0RGF5anMoeyBkYXRlOiBjdXJEYXRlIH0pLmFkZCgyNCwgJ2hvdXInKSkge1xuICAgICAgaWYgKGkgPiAwICYmIGNvbCAlIDcgPT09IDApIHtcbiAgICAgICAgY29sID0gMDtcbiAgICAgICAgcm93Kys7XG4gICAgICB9XG4gICAgICBjYWxlbmRhcltyb3ddW2NvbF0gPSBjdXJEYXRlLmNsb25lKCkuaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcbiAgICAgIGN1ckRhdGUgPSBjdXJEYXRlLmhvdXIoMTIpO1xuXG4gICAgICBjb25zdCBtaW5EYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLm1pbkRhdGUoKSB9KTtcbiAgICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuICAgICAgaWYgKG1pbkRhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBtaW5EYXRlPy5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUobWluRGF0ZSkgJiYgc2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGNhbGVuZGFyW3Jvd11bY29sXSA9IG1pbkRhdGU/LmNsb25lKCk7XG4gICAgICB9XG4gICAgICBpZiAobWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IG1heERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0FmdGVyKG1heERhdGUpICYmIHNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gbWF4RGF0ZT8uY2xvbmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQuY2FsZW5kYXIgPSBjYWxlbmRhcjtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ucmlnaHQpIHtcbiAgICAgIHRoaXMucmlnaHRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5jYWxlbmRhciA9IGNhbGVuZGFyO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1pbkRhdGUgPSBzaWRlID09PSAnbGVmdCcgPyBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWluRGF0ZSgpIH0pIDogZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpIH0pO1xuICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuXG4gICAgdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdLnNldCh7XG4gICAgICBtb250aDogbW9udGgsXG4gICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgaG91cjogaG91cixcbiAgICAgIG1pbnV0ZTogbWludXRlLFxuICAgICAgc2Vjb25kOiBzZWNvbmQsXG4gICAgICBkYXlzSW5Nb250aDogZGF5c0luTW9udGgsXG4gICAgICBmaXJzdERheTogZmlyc3REYXksXG4gICAgICBsYXN0RGF5OiBsYXN0RGF5LFxuICAgICAgbGFzdE1vbnRoOiBsYXN0TW9udGgsXG4gICAgICBsYXN0WWVhcjogbGFzdFllYXIsXG4gICAgICBkYXlzSW5MYXN0TW9udGg6IGRheXNJbkxhc3RNb250aCxcbiAgICAgIGRheU9mV2VlazogZGF5T2ZXZWVrLFxuICAgICAgY2FsUm93czogc2lnbmFsKEFycmF5LmZyb20oQXJyYXkoNikua2V5cygpKSksXG4gICAgICBjYWxDb2xzOiBzaWduYWwoQXJyYXkuZnJvbShBcnJheSg3KS5rZXlzKCkpKSxcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgbWluRGF0ZTogbWluRGF0ZSxcbiAgICAgIG1heERhdGU6IG1heERhdGUsXG4gICAgICBjYWxlbmRhcjogY2FsZW5kYXIsXG4gICAgICBkcm9wZG93bnM6IHNpZ25hbCh7fSksXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuc2hvd0Ryb3Bkb3duc1NlbGVjdCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50TW9udGggPSBjYWxlbmRhclsxXVsxXS5tb250aCgpO1xuICAgICAgY29uc3QgY3VycmVudFllYXIgPSBjYWxlbmRhclsxXVsxXS55ZWFyKCk7XG4gICAgICBjb25zdCBtYXhZZWFyID0gbWF4RGF0ZT8ueWVhcigpID8/IERFRkFVTFRfTUFYX1lFQVI7XG4gICAgICBjb25zdCBtaW5ZZWFyID0gbWluRGF0ZT8ueWVhcigpID8/IERFRkFVTFRfTUlOX1lFQVI7XG4gICAgICBjb25zdCBpbk1pblllYXIgPSBjdXJyZW50WWVhciA9PT0gbWluWWVhcjtcbiAgICAgIGNvbnN0IGluTWF4WWVhciA9IGN1cnJlbnRZZWFyID09PSBtYXhZZWFyO1xuICAgICAgY29uc3QgeWVhcnMgPSBbXTtcblxuICAgICAgZm9yIChsZXQgeSA9IG1pblllYXI7IHkgPD0gbWF4WWVhcjsgeSsrKSB7XG4gICAgICAgIHllYXJzLnB1c2goeSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKClcbiAgICAgICAgW3NpZGVdKClcbiAgICAgICAgLmRyb3Bkb3ducz8uc2V0KHtcbiAgICAgICAgICBjdXJyZW50TW9udGg6IGN1cnJlbnRNb250aCxcbiAgICAgICAgICBjdXJyZW50WWVhcjogY3VycmVudFllYXIsXG4gICAgICAgICAgbWF4WWVhcjogbWF4WWVhcixcbiAgICAgICAgICBtaW5ZZWFyOiBtaW5ZZWFyLFxuICAgICAgICAgIGluTWluWWVhcjogaW5NaW5ZZWFyLFxuICAgICAgICAgIGluTWF4WWVhcjogaW5NYXhZZWFyLFxuICAgICAgICAgIG1vbnRoQXJyYXlzOiBzaWduYWwoQXJyYXkuZnJvbShBcnJheSgxMikua2V5cygpKSksXG4gICAgICAgICAgeWVhckFycmF5czogc2lnbmFsKHllYXJzKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRDZWxscyhjYWxlbmRhciwgc2lkZSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ2VsbHMoY2FsZW5kYXI6IElDYWxlbmRhciwgc2lkZTogU2lkZUVudW0pIHtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCA2OyByb3crKykge1xuICAgICAgY29uc3QgY2xhc3NsZXNzID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCk7XG5cbiAgICAgIGlmIChjbGFzc2xlc3MuY2xhc3Nlcykge1xuICAgICAgICBjbGFzc2xlc3MuY2xhc3Nlc1tyb3ddID0ge307XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCA3OyBjb2wrKykge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gW107XG5cbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpIH0pO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLmVuZERhdGUoKSB9KTtcbiAgICAgICAgY29uc3Qgbm93SG92ZXJlZERhdGUgPSB0aGlzLm5vd0hvdmVyZWREYXRlKCk7XG5cbiAgICAgICAgaWYgKGNhbGVuZGFyW3Jvd11bY29sXS5pc1NhbWUobmV3IERhdGUoKSwgJ2RheScpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCd0b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uaXNvV2Vla2RheSgpID4gNSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnd2Vla2VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0ubW9udGgoKSAhPT0gY2FsZW5kYXJbMV1bMV0ubW9udGgoKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluRGF0ZSgpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0JlZm9yZSh0aGlzLm1pbkRhdGUoKSwgJ2RheScpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdvZmYnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkubWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNBZnRlcih0aGlzLmNhbGVuZGFyVmFyaWFibGVzKClbc2lkZV0oKS5tYXhEYXRlLCAnZGF5JykpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ29mZicsICdkaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydERhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzdGFydERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdhY3RpdmUnLCAnc3RhcnQtZGF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmREYXRlICE9PSBudWxsICYmIGNhbGVuZGFyW3Jvd11bY29sXS5mb3JtYXQoJ1lZWVktTU0tREQnKSA9PT0gZW5kRGF0ZT8uZm9ybWF0KCdZWVlZLU1NLUREJykpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2FjdGl2ZScsICdlbmQtZGF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydERhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzdGFydERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmICghZW5kRGF0ZSB8fCAoZW5kRGF0ZSAhPT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IGVuZERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpKSkpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2FjdGl2ZScsICdmdWxsLWRhdGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGFydERhdGUgJiZcbiAgICAgICAgICBlbmREYXRlICYmXG4gICAgICAgICAgKChub3dIb3ZlcmVkRGF0ZSAhPT0gbnVsbCAmJiB0aGlzLnBpY2tpbmdEYXRlKCkpIHx8IGVuZERhdGUgIT09IG51bGwpICYmXG4gICAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID4gc3RhcnREYXRlICYmXG4gICAgICAgICAgKGNhbGVuZGFyW3Jvd11bY29sXSA8IGVuZERhdGUgfHwgKG5vd0hvdmVyZWREYXRlICYmIGNhbGVuZGFyW3Jvd11bY29sXSA8IG5vd0hvdmVyZWREYXRlICYmIHRoaXMucGlja2luZ0RhdGUoKSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCghY2xhc3Nlcy5maW5kKChlbCkgPT4gZWwgPT09ICdvZmYnKSA/ICdpbi1yYW5nZScgOiAnZm9jdXMtb2ZmJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNuYW1lID0gJycsXG4gICAgICAgICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjbmFtZSArPSBjbGFzc2VzW2ldICsgJyAnO1xuXG4gICAgICAgICAgaWYgKGNsYXNzZXNbaV0gPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgIGNuYW1lICs9ICdhdmFpbGFibGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsYXNzbGVzcy5jbGFzc2VzKSB7XG4gICAgICAgICAgY2xhc3NsZXNzLmNsYXNzZXNbcm93XVtjb2xdID0gY25hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUaW1lUGlja2VyKHNpZGU6IFNpZGVFbnVtKSB7XG4gICAgbGV0IHNlbGVjdGVkOiBEYXlqcyA9IGdldERheWpzKCksXG4gICAgICBtaW5EYXRlO1xuICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGdldERheWpzKHsgZGF0ZTogdGhpcy5zdGFydERhdGUoKSB9KTtcbiAgICBjb25zdCBlbmREYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLmVuZERhdGUoKSB9KTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0ICYmIHN0YXJ0RGF0ZSkge1xuICAgICAgc2VsZWN0ZWQgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgIG1pbkRhdGUgPSB0aGlzLm1heERhdGUoKTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLnJpZ2h0ICYmIGVuZERhdGUpIHtcbiAgICAgIHNlbGVjdGVkID0gZW5kRGF0ZS5jbG9uZSgpO1xuICAgICAgbWluRGF0ZSA9IHRoaXMuc3RhcnREYXRlKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCAmJiAhZW5kRGF0ZSkge1xuICAgICAgaWYgKCFzdGFydERhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMuZ2V0RGF0ZVdpdGhUaW1lKHN0YXJ0RGF0ZSwgU2lkZUVudW0ucmlnaHQpIH0pO1xuICAgICAgaWYgKHNlbGVjdGVkLmlzQmVmb3JlKHN0YXJ0RGF0ZSkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgIH1cbiAgICAgIG1pbkRhdGUgPSBzdGFydERhdGU7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gMDtcbiAgICBjb25zdCBlbmQgPSAyMztcblxuICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdLnNldCh7XG4gICAgICBob3VyczogW10sXG4gICAgICBtaW51dGVzOiBbXSxcbiAgICAgIG1pbnV0ZXNMYWJlbDogW10sXG4gICAgICBzZWNvbmRzOiBbXSxcbiAgICAgIHNlY29uZHNMYWJlbDogW10sXG4gICAgICBkaXNhYmxlZEhvdXJzOiBbXSxcbiAgICAgIGRpc2FibGVkTWludXRlczogW10sXG4gICAgICBkaXNhYmxlZFNlY29uZHM6IFtdLFxuICAgICAgc2VsZWN0ZWRIb3VyOiAwLFxuICAgICAgc2VsZWN0ZWRNaW51dGU6IDAsXG4gICAgICBzZWxlY3RlZFNlY29uZDogMCxcbiAgICB9KTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgIGNvbnN0IGlfaW5fMjQgPSBpO1xuXG4gICAgICBjb25zdCB0aW1lID0gc2VsZWN0ZWQuY2xvbmUoKS5ob3VyKGlfaW5fMjQpO1xuICAgICAgbGV0IGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUubWludXRlKDU5KS5pc0JlZm9yZShtaW5EYXRlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLm1pbnV0ZSgwKS5pc0FmdGVyKG1heERhdGUpKSB7XG4gICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50LmhvdXJzPy5wdXNoKGkpO1xuICAgICAgICBpZiAoaV9pbl8yNCA9PT0gc2VsZWN0ZWQuaG91cigpICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRIb3VyID0gaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICBjdXJyZW50LmRpc2FibGVkSG91cnM/LnB1c2goaSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDYwOyBpICs9IHRoaXMudGltZVBpY2tlckluY3JlbWVudCgpKSB7XG4gICAgICBjb25zdCBwYWRkZWQgPSBpIDwgMTAgPyAnMCcgKyBpIDogYCR7aX1gO1xuICAgICAgY29uc3QgdGltZSA9IHNlbGVjdGVkLmNsb25lKCkubWludXRlKGkpO1xuXG4gICAgICBsZXQgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKG1pbkRhdGUgJiYgdGltZS5zZWNvbmQoNTkpLmlzQmVmb3JlKG1pbkRhdGUpKSB7XG4gICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhEYXRlICYmIHRpbWUuc2Vjb25kKDApLmlzQWZ0ZXIobWF4RGF0ZSkpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQubWludXRlcz8ucHVzaChpKTtcbiAgICAgICAgY3VycmVudC5taW51dGVzTGFiZWw/LnB1c2gocGFkZGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkLm1pbnV0ZSgpID09PSBpICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSBpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuZGlzYWJsZWRNaW51dGVzPy5wdXNoKGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGN1cnJlbnQuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2luZ2xlKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbC5zZXQodGhpcy5zdGFydERhdGUoKT8uZm9ybWF0KCdERC9NTS9ZWVlZJykpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZERhdGUoKSkge1xuICAgICAgLy8gaWYgd2UgdXNlIHJhbmdlcyBhbmQgc2hvdWxkIHNob3cgcmFuZ2UgbGFiZWwgb24gaW5wdXRcbiAgICAgIGlmICh0aGlzLnF1aWNrUmFuZ2VzQXJyYXkoKS5sZW5ndGggJiYgdGhpcy5zaG93UmFuZ2VMYWJlbE9uSW5wdXQoKSAmJiB0aGlzLnNlbGVjdGVkUXVpY2tSYW5nZSgpICYmIHRoaXMuZGF0ZU9wdGlvbnMoKS5jdXN0b21SYW5nZUxhYmVsICE9PSB0aGlzLnNlbGVjdGVkUXVpY2tSYW5nZSgpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbC5zZXQodGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2UoKSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZExhYmVsLnNldChgJHt0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKX0ke3RoaXMuZGF0ZU9wdGlvbnMoKS5zZXBhcmF0b3J9JHt0aGlzLmVuZERhdGUoKT8uZm9ybWF0KCdERC9NTS9ZWVlZJyl9YCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZExhYmVsLnNldChgJHt0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKX0ke3RoaXMuZGF0ZU9wdGlvbnMoKS5zZXBhcmF0b3J9JHt0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlldygpIHtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5yaWdodCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVdpdGhUaW1lKGRhdGU6IERheWpzLCBzaWRlOiBTaWRlRW51bSk6IERheWpzIHtcbiAgICBjb25zdCBob3VyID0gcGFyc2VJbnQoYCR7dGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0oKS5zZWxlY3RlZEhvdXJ9YCwgMTApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRNaW51dGV9YCwgMTApO1xuICAgIGNvbnN0IHNlY29uZCA9IHRoaXMuaGFzU2Vjb25kUGlja2VyKCkgJiYgIWlzTmlsKHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRTZWNvbmQpID8gcGFyc2VJbnQoYCR7dGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0oKS5zZWxlY3RlZFNlY29uZH1gLCAxMCkgOiAwO1xuXG4gICAgcmV0dXJuIGRhdGUuY2xvbmUoKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1NaW5NYXhEYXRlKHZhbHVlOiBEYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IERheWpzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoZGF5anMuaXNEYXlqcyh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBnZXREYXlqcyh7IGRhdGU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkRGlzcGxheVRpbWUoc2lkZTogSVRpbWVwaWNrZXJWYXJpYWJsZXNTaWRlKSB7XG4gICAgbGV0IHN0ckhvdXJzOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSBzaWRlLnNlbGVjdGVkSG91cjtcbiAgICBsZXQgc3RyTWludXRlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSBzaWRlLnNlbGVjdGVkTWludXRlO1xuXG4gICAgaWYgKChzaWRlLnNlbGVjdGVkSG91ciB8fCAwKSA8IDEwKSB7XG4gICAgICBzdHJIb3VycyA9IGAwJHtzaWRlLnNlbGVjdGVkSG91ciA/PyAwfWA7XG4gICAgfVxuXG4gICAgaWYgKChzaWRlLnNlbGVjdGVkTWludXRlIHx8IDApIDwgMTApIHtcbiAgICAgIHN0ck1pbnV0ZSA9IGAwJHtzaWRlLnNlbGVjdGVkTWludXRlID8/IDB9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7c3RySG91cnN9OiR7c3RyTWludXRlfWA7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkRGlzcGxheVRpbWVJbnB1dChzaWRlOiBTaWRlRW51bSwgdGltZVR5cGU6ICdob3VyJyB8ICdtaW51dGUnKSB7XG4gICAgY29uc3QgdGltZSA9XG4gICAgICB0aW1lVHlwZSA9PT0gJ2hvdXInID8gKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpIDogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRob3VyKCkpIDogc2lkZSA9PT0gU2lkZUVudW0ubGVmdCA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSA6IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCk7XG5cbiAgICBpZiAoIXRpbWUpIHtcbiAgICAgIHJldHVybiAnMDAnO1xuICAgIH1cbiAgICBpZiAodGltZSA8IDEwKSB7XG4gICAgICByZXR1cm4gYDAke3RpbWV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGltZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHJldHVybjtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXIgdGVzdC1jbGFzc1wiPlxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhclwiXG4gICAgICBbY2xhc3MucmlnaHRdPVwiaXNTaW5nbGUoKVwiXG4gICAgICBbY2xhc3MubGVmdF09XCIhaXNTaW5nbGUoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdXCI+XG4gICAgICAgIEBpZiAoY2FsZW5kYXJWYXJpYWJsZXMoKTsgYXMgY2FsZW5kYXJWYXJpYWJsZXMpIHtcbiAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgIGNvbHNwYW49XCI3XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGhcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0Ryb3Bkb3duc1NlbGVjdCgpICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5kcm9wZG93bnM/LigpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIhZmxleCBtYi1bMTBweF0gdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMy80IGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzhweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwieyB3aWR0aEJ5UGFyZW50OiBmYWxzZSwgaWdub3JlQXJyb3c6IHRydWUsIHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzEzMHB4XScsIHBvc2l0aW9uOiB7IG1vZGU6ICdjZW50ZXInLCBkaXN0YW5jZTogMCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEtleXNEaXNhYmxlXT1cImRpc2FibGVNb250aCgpLmxlZnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnZlcnRJdGVtU2VsZWN0ZWRdPVwiY29udmVydEl0ZW1Nb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdE1vbnRoc0NvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEtleVNlbGVjdGVkXT1cImxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZF09XCJtb250aEh0dHBEZXRhaWxDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWREcm9wZG93bigkZXZlbnQsIHNpZGVFbnVtLmxlZnQgKyAnbW9udGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsIHNpZGVFbnVtLmxlZnQgKyAnbW9udGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nZUZsYWdNb3VzZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2hvd0xpc3QpPVwiaGFuZGxlclNob3dMaXN0RHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ21vbnRoJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXItZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAnbW9udGgnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oNG1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGVPcHRpb25zKCkubW9udGhOYW1lcyAmJiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzW2NhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bMTNweF0gdGV4dC1bIzZhNzM4M11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICdtb250aCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJvdGF0ZV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICdtb250aCddID8gJzkwZGVnJyA6ICcyNzBkZWcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwieyB3aWR0aEJ5UGFyZW50OiBmYWxzZSwgaWdub3JlQXJyb3c6IHRydWUsIHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzExMHB4XScsIHBvc2l0aW9uOiB7IG1vZGU6ICdjZW50ZXInLCBkaXN0YW5jZTogMCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udmVydEl0ZW1TZWxlY3RlZF09XCJjb252ZXJ0SXRlbVllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwibGlzdFllYXJIaWRkZW5JbnB1dFNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdENvbmZpZ109XCJsaXN0TGVmdFllYXJDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlTZWxlY3RlZF09XCJsaXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2h0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRdPVwibGVmdFllYXJIdHRwRGV0YWlsQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNob3dMaXN0KT1cImhhbmRsZXJTaG93TGlzdERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ubGVmdCArICd5ZWFyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ3llYXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsIHNpZGVFbnVtLmxlZnQgKyAneWVhcicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRhcmspXV09XCJjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5sZWZ0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAneWVhciddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg0bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/LmZvcm1hdCgnIFlZWVknKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHRleHQtWzEzcHhdIHRleHQtWyM2YTczODNdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAneWVhciddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJvdGF0ZV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICd5ZWFyJ10gPyAnOTBkZWcnIDogJzI3MGRlZydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgZmxleCBpdGVtcy1jZW50ZXIgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5taW5EYXRlIHx8IGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5taW5EYXRlPy5pc0JlZm9yZShjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5maXJzdERheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlckNsaWNrUHJldihzaWRlRW51bS5sZWZ0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBhYnNvbHV0ZSBsZWZ0LTAgdG9wLVstM3B4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCByb3RhdGUtWzE4MGRlZ10gdGV4dC1bIzZhNzM4M10gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKCFjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkubWF4RGF0ZSB8fCBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkubWF4RGF0ZT8uaXNBZnRlcihjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5sYXN0RGF5KSkgJiYgaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJoYW5kbGVyQ2xpY2tOZXh0KHNpZGVFbnVtLmxlZnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1sLVsxMnB4XSBhYnNvbHV0ZSByaWdodC0wIHRvcC1bLTNweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bIzZhNzM4M10gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKCFzaG93RHJvcGRvd25zU2VsZWN0KCkgfHwgIWNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5kcm9wZG93bnMpIHtcbiAgICAgICAgICAgICAgICAgICAge3sgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhciAmJiBkYXRlT3B0aW9ucygpLm1vbnRoTmFtZXNbY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8ubW9udGgoKSA/PyAtMV0gfX1cbiAgICAgICAgICAgICAgICAgICAge3sgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/LmZvcm1hdCgnIFlZWVknKSB9fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cIndlZWstZGF5c1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGRheW9md2VlayBvZiBkYXRlT3B0aW9ucygpLmRheXNPZldlZWs7IHRyYWNrIGRheW9md2Vlaykge1xuICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg2bSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF5b2Z3ZWVrIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImRycC1hbmltYXRlXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsUm93cz8uKCk7IHRyYWNrIHJvdykge1xuICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVszMnB4XVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXM/Lltyb3ddPy5jbGFzc0xpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsQ29scz8uKCk7IHRyYWNrIGNvbCkge1xuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oNXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50b2RheV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LmRhdGUoKSA9PT0gdG9kYXkoKS5kYXRlKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5tb250aCgpID09PSB0b2RheSgpLm1vbnRoKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy55ZWFyKCkgPT09IHRvZGF5KCkueWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXM/Lltyb3ddPy5bY29sXVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQaWNrZXJEYXRlKCRldmVudCwgc2lkZUVudW0ubGVmdCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVySG92ZXJEYXRlKCRldmVudCwgc2lkZUVudW0ubGVmdCwgcm93LCBjb2wpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyXCI+e3sgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5kYXRlKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgY29sdW1uIGl0ZW1zLWNlbnRlciBwdC1bMTJweF1cIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1bNHB4XSBib3JkZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLVsjZTZlOGVkXV09XCIhdGltZVBpY2tlckVycm9yKClcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLVsjZmY1NDU0XV09XCJ0aW1lUGlja2VyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzSW5jbHVkZT1cIiF3LVszMHB4XSAhcC0wICFib3JkZXItbm9uZSAhdGV4dC1jZW50ZXIgbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwiaW50XCJcbiAgICAgICAgICAgICAgICBbZm9jdXNUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgIFtibHVyVGltZU91dF09XCIwXCJcbiAgICAgICAgICAgICAgICBbYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIyM1wiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMlwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpXCJcbiAgICAgICAgICAgICAgICAob3V0SW5wdXRFdmVudCk9XCJoYW5kbGVySW5wdXRFdmVudCgkZXZlbnQsICdsZWZ0aG91cicpXCJcbiAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ubGVmdCArICdob3VyJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdsZWZ0aG91cicpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoJGV2ZW50LCAnbGVmdGhvdXInKVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWgzcyB0ZXh0LVsjMzMzMzMzXVwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3NJbmNsdWRlPVwiIXctWzMwcHhdICFwLTAgIWJvcmRlci1ub25lICF0ZXh0LWNlbnRlciAhbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgIFthdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2VtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJpbnRcIlxuICAgICAgICAgICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgW2JsdXJUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCI1OVwiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMlwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKClcIlxuICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ21pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAob3V0SW5wdXRFdmVudCk9XCJoYW5kbGVySW5wdXRFdmVudCgkZXZlbnQsICdsZWZ0bWludXRlJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdsZWZ0bWludXRlJylcIlxuICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyVGltZSgkZXZlbnQsICdsZWZ0bWludXRlJylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmICghaXNTaW5nbGUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXIgcmlnaHQgbWwtWzI0cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLVs0cHhdIGJnLVsjZmZmZmZmXVwiPlxuICAgICAgICAgIEBpZiAoY2FsZW5kYXJWYXJpYWJsZXMoKSkge1xuICAgICAgICAgICAgPHRhYmxlPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgIGNvbHNwYW49XCI3XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb250aFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dEcm9wZG93bnNTZWxlY3QoKSAmJiBjYWxlbmRhclZhcmlhYmxlcygpLmxlZnQoKS5kcm9wZG93bnM/LigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiFmbGV4IG1iLVsxMHB4XSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTMvNCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzhweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7IHdpZHRoQnlQYXJlbnQ6IGZhbHNlLCBpZ25vcmVBcnJvdzogdHJ1ZSwgcGFkZGluZ0xlZnRJdGVtOiB0cnVlLCBjbGFzc0luY2x1ZGU6ICchdy1bMTMwcHhdJywgcG9zaXRpb246IHsgbW9kZTogJ2NlbnRlcicsIGRpc3RhbmNlOiAwIH0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0S2V5c0Rpc2FibGVdPVwiZGlzYWJsZU1vbnRoKCkucmlnaHQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb252ZXJ0SXRlbVNlbGVjdGVkXT1cImNvbnZlcnRJdGVtTW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RNb250aHNDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEtleVNlbGVjdGVkXT1cImxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZF09XCJtb250aEh0dHBEZXRhaWxDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNob3dMaXN0KT1cImhhbmRsZXJTaG93TGlzdERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXItZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhciAmJiBkYXRlT3B0aW9ucygpLm1vbnRoTmFtZXNbY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8ubW9udGgoKSA/PyAtMV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsxM3B4XSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucm90YXRlXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICdtb250aCddID8gJzkwZGVnJyA6ICcyNzBkZWcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwieyB3aWR0aEJ5UGFyZW50OiBmYWxzZSwgaWdub3JlQXJyb3c6IHRydWUsIHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzExMHB4XScsIHBvc2l0aW9uOiB7IG1vZGU6ICdjZW50ZXInLCBkaXN0YW5jZTogMCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDbGlja0V4YWN0bHldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udmVydEl0ZW1TZWxlY3RlZF09XCJjb252ZXJ0SXRlbVllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJsaXN0WWVhckhpZGRlbklucHV0U2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdFJpZ2h0WWVhckNvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0S2V5U2VsZWN0ZWRdPVwibGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2h0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRdPVwicmlnaHRZZWFySHR0cERldGFpbENvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICd5ZWFyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsIHNpZGVFbnVtLnJpZ2h0ICsgJ3llYXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNob3dMaXN0KT1cImhhbmRsZXJTaG93TGlzdERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAneWVhcicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRhcmspXV09XCJjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICd5ZWFyJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ3llYXInXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8uZm9ybWF0KCdZWVlZJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsxM3B4XSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucm90YXRlXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICd5ZWFyJ10gPyAnOTBkZWcnIDogJzI3MGRlZydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvNCBmbGV4IGl0ZW1zLWNlbnRlciByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICsgMSA9PT0gbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmIGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA9PT0gMTIgJiYgbGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aCA9PT0gMSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyIDwgbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgbGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aCAmJiBsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggKyAxIDwgK2xpc3RLZXlUb1NlbGVjdGVkKCkubW9udGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYWJzb2x1dGUgbGVmdC0wIHRvcC1bLTNweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja1ByZXYoc2lkZUVudW0ucmlnaHQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHJvdGF0ZS1bMTgwZGVnXSB0ZXh0LVsjNmE3MzgzXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0S2V5VG9TZWxlY3RlZCgpLm1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoID4gbGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgPT09IGxpc3RLZXlUb1NlbGVjdGVkKCkueWVhclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctWyNmZmZmZmZdIHctWzIxcHhdIGgtWzIxcHhdIGN1cnNvci1ub25lIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtWzUwcHhdXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLm1heERhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhclZhcmlhYmxlcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmlnaHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1heERhdGU/LmlzQWZ0ZXIoY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8ubGFzdERheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlckNsaWNrTmV4dChzaWRlRW51bS5yaWdodClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtbC1bMTJweF0gYWJzb2x1dGUgcmlnaHQtMCB0b3AtWy0zcHhdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bIzZhNzM4M10gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXNob3dEcm9wZG93bnNTZWxlY3QoKSB8fCAhY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducykge1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGVPcHRpb25zKCkubW9udGhOYW1lcyAmJiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzW2NhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAge3sgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/LmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ3ZWVrLWRheXNcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGRheW9md2VlayBvZiBkYXRlT3B0aW9ucygpLmRheXNPZldlZWs7IHRyYWNrIGRheW9md2Vlaykge1xuICAgICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg2bSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRTdHlsZV09XCInbm9ybWFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF5b2Z3ZWVrIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbFJvd3M/LigpOyB0cmFjayByb3cpIHtcbiAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtWzMycHhdXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jbGFzc2VzICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jbGFzc2VzPy5bcm93XT8uY2xhc3NMaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsQ29scz8uKCk7IHRyYWNrIGNvbCkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2xhc3NlcyAmJiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2xhc3Nlcz8uW3Jvd10/Lltjb2xdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50b2RheV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5kYXRlKCkgPT09IHRvZGF5KCkuZGF0ZSgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5tb250aCgpID09PSB0b2RheSgpLm1vbnRoKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy55ZWFyKCkgPT09IHRvZGF5KCkueWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQaWNrZXJEYXRlKCRldmVudCwgc2lkZUVudW0ucmlnaHQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVySG92ZXJEYXRlKCRldmVudCwgc2lkZUVudW0ucmlnaHQsIHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LmRhdGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHB0LVsxMnB4XVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1bNHB4XSBib3JkZXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItWyNlNmU4ZWRdXT1cIiF0aW1lUGlja2VyRXJyb3IoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1bI2ZmNTQ1NF1dPVwidGltZVBpY2tlckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3NJbmNsdWRlPVwiIXctWzMwcHhdICFwLTAgIWJvcmRlci1ub25lICF0ZXh0LWNlbnRlciAhbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJpbnRcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjIzXCJcbiAgICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbYmx1clRpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKVwiXG4gICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VUaW1lVmFsdWUoJGV2ZW50LCAncmlnaHRob3VyJylcIlxuICAgICAgICAgICAgICAgICAgKG91dElucHV0RXZlbnQpPVwiaGFuZGxlcklucHV0RXZlbnQoJGV2ZW50LCAncmlnaHRob3VyJylcIlxuICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsICdyaWdodGhvdXInKVwiXG4gICAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoJGV2ZW50LCAncmlnaHRob3VyJylcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWgzcyB0ZXh0LVsjMzMzMzMzXVwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzSW5jbHVkZT1cIiF3LVszMHB4XSAhcC0wICFib3JkZXItbm9uZSAhdGV4dC1jZW50ZXIgbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJpbnRcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjU5XCJcbiAgICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbYmx1clRpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRJbnB1dEV2ZW50KT1cImhhbmRsZXJJbnB1dEV2ZW50KCRldmVudCwgJ3JpZ2h0bWludXRlJylcIlxuICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyVGltZSgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgPGRpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGxcIj5cbiAgICAgIEBpZiAoIWlzU2luZ2xlKCkgJiYgaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC1bOHB4XSBsaWJzLXVpLWZvbnQtaDdyIHRleHQtWyNmZjU0NTRdIGgtWzE0cHhdXCI+XG4gICAgICAgICAgQGlmICh0aW1lUGlja2VyRXJyb3IoKSkge1xuICAgICAgICAgICAgPHNwYW4+e3sgJ2kxOG5fZGF0ZV9jb21wYXJlX3N0YXJ0X2VuZF9tZXNzYWdlX2Vycm9yJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoIXF1aWNrUmFuZ2VzQXJyYXkoKS5sZW5ndGggfHwgIWlzU2luZ2xlKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBwdC1bMTZweF0ganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIEBpZiAoIWlzU2luZ2xlKCkpIHtcbiAgICAgICAgICAgIEBpZiAoIWVuZERhdGUoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bI2NkZDBkNl0gbGlicy11aS1mb250LWg2clwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29tcHV0ZWREaXNwbGF5VGltZUxlZnQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJmh5cGhlbjtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzdGFydERhdGUoKT8uZm9ybWF0KCdERC9NTS9ZWVlZJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmIChoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGVuZERhdGUoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bI2NkZDBkNl0gbGlicy11aS1mb250LWg2clwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29tcHV0ZWREaXNwbGF5VGltZUxlZnQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJmh5cGhlbjtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBlbmREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb21wdXRlZERpc3BsYXlUaW1lUmlnaHQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1yLVsxMnB4XVwiXG4gICAgICAgICAgICBsYWJlbD1cImkxOG5fY2FuY2VsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b24tdGhpcmRcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0NhbmNlbCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cImkxOG5fc2VsZWN0XCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tBcHBseSgkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
1288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL3BpY2tlci9zcmMvY3VzdG9tLXJhbmdlcy9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9jdXN0b20tcmFuZ2VzL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5TSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQWlELGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEksT0FBTyxFQUFrRCxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3hJLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FB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Q2xILE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJ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Q1IsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFaFAsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDZCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPO0lBQ1QsQ0FBQzt3R0E1OUNVLDJEQUEyRDs0RkFBM0QsMkRBQTJELDR1RkF5RU8sb0NBQW9DLGdFQ3pHbkgsdS8zQkF5ZEEsNG9JRDNiWSxlQUFlLDRGQUFFLGlDQUFpQyx1M0RBQUUsb0NBQW9DLHdoREFBRSxzQ0FBc0M7OzRGQUUvSCwyREFBMkQ7a0JBVHZFLFNBQVM7K0JBRUUsMkRBQTJELGNBR3pELElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGVBQWUsRUFBRSxpQ0FBaUMsRUFBRSxvQ0FBb0MsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCwgdmlld0NoaWxkLCB2aWV3Q2hpbGRyZW4sIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQsIElFbWl0U2VsZWN0S2V5LCBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyb3Bkb3duJztcbmltcG9ydCB7IElGb2N1c0FuZEJsdXJFdmVudCwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW5wdXRzLWlucHV0JztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJRmxhZ01vdXNlIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgSUh0dHBSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtaHR0cC1yZXF1ZXN0JztcbmltcG9ydCB7IGdldERheWpzLCBpc05pbCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgZGF5anMsIHsgRGF5anMgfSBmcm9tICdkYXlqcyc7XG5pbXBvcnQgaXNvV2VlayBmcm9tICdkYXlqcy9wbHVnaW4vaXNvV2Vlayc7XG5pbXBvcnQgeyBnZXRNb250aHNEZXRhaWxCeUlkLCBnZXRNb250aHNMaXN0Q29uZmlnLCBnZXRZZWFyc0RldGFpbEJ5SWQsIGdldFllYXJzTGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL2RlZmluZXMvY2FsZW5kYXIuZGVmaW5lJztcbmltcG9ydCB7IERFRkFVTFRfTUFYX1lFQVIsIERFRkFVTFRfTUlOX1lFQVIgfSBmcm9tICcuLi8uLi9kZWZpbmVzL2NvbW1vbi1kYXRlLmRlZmluZSc7XG5pbXBvcnQgeyBkZWZhdWx0TG9jYWxlQ29uZmlnLCBnZXREYXRlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2RlZmluZXMvZGF0ZS1vcHRpb25zLmRlZmluZSc7XG5pbXBvcnQgeyBJRW1pdERhdGVDYWxlbmRhciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2FsZW5kYXItZW1pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNhbGVuZGFyLCBJQ2FsZW5kYXJWYXJpYWJsZXMsIElEYXRlUmFuZ2UsIElTcGxpdFBpY2tlckRhdGUsIFNpZGVFbnVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jYWxlbmRhci12YXJpYWJsZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IElDYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Db25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BpY2tlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNoZWNrVGltZXBpY2tlclNlbGVjdGVkLCBJU2VsZWN0ZWRPbGQsIElUaW1lcGlja2VySXRlbVZhbHVlLCBJVGltZXBpY2tlclZhcmlhYmxlcywgSVRpbWVwaWNrZXJWYXJpYWJsZXNTaWRlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90aW1lLXZhcmlhYmxlcy5pbnRlcmZhY2UnO1xuZGF5anMuZXh0ZW5kKGlzb1dlZWspO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlci1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsZW5kYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c0lucHV0Q29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNpZGVFbnVtID0gU2lkZUVudW07XG4gIHByb3RlY3RlZCBjYWxlbmRhclZhcmlhYmxlcyA9IHNpZ25hbDxJQ2FsZW5kYXJWYXJpYWJsZXM+KHsgbGVmdDogc2lnbmFsKHt9KSwgcmlnaHQ6IHNpZ25hbCh7fSkgfSk7XG4gIHByb3RlY3RlZCB0aW1lcGlja2VyVmFyaWFibGVzID0gc2lnbmFsPElUaW1lcGlja2VyVmFyaWFibGVzPih7IGxlZnQ6IHNpZ25hbCh7IHNlbGVjdGVkSG91cjogMCwgc2VsZWN0ZWRNaW51dGU6IDAgfSksIHJpZ2h0OiBzaWduYWwoeyBzZWxlY3RlZEhvdXI6IDIzLCBzZWxlY3RlZE1pbnV0ZTogNTkgfSkgfSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlTW9udGggPSBzaWduYWw8eyBsZWZ0OiBXcml0YWJsZVNpZ25hbDxBcnJheTxhbnk+PjsgcmlnaHQ6IFdyaXRhYmxlU2lnbmFsPEFycmF5PGFueT4+IH0+KHsgbGVmdDogc2lnbmFsKFtdKSwgcmlnaHQ6IHNpZ25hbChbXSkgfSk7XG4gIHByb3RlY3RlZCB0b2RheSA9IHNpZ25hbDxEYXlqcz4oZ2V0RGF5anMoKSk7XG4gIHByb3RlY3RlZCBsaXN0S2V5RnJvbVNlbGVjdGVkID0gc2lnbmFsPHsgbW9udGg6IGFueTsgeWVhcjogYW55IH0+KHsgbW9udGg6IHVuZGVmaW5lZCwgeWVhcjogdW5kZWZpbmVkIH0pO1xuICBwcm90ZWN0ZWQgbGlzdEtleVRvU2VsZWN0ZWQgPSBzaWduYWw8eyBtb250aDogYW55OyB5ZWFyOiBhbnkgfT4oeyBtb250aDogdW5kZWZpbmVkLCB5ZWFyOiB1bmRlZmluZWQgfSk7XG4gIHByb3RlY3RlZCBjaGVja1Nob3dMaXN0RHJvcGRvd24gPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0+KHt9KTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkUXVpY2tSYW5nZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGxlZnRDYWxlbmRhciA9IHNpZ25hbDx7IGNhbGVuZGFyPzogSUNhbGVuZGFyOyBtb250aD86IERheWpzIH0+KHt9KTtcbiAgcHJvdGVjdGVkIHJpZ2h0Q2FsZW5kYXIgPSBzaWduYWw8eyBjYWxlbmRhcj86IElDYWxlbmRhcjsgbW9udGg/OiBEYXlqcyB9Pih7fSk7XG5cbiAgcHJvdGVjdGVkIGxpc3RNb250aHNDb25maWcgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgbW9udGhIdHRwRGV0YWlsQ29uZmlnID0gc2lnbmFsPElIdHRwUmVxdWVzdENvbmZpZz4oZ2V0TW9udGhzRGV0YWlsQnlJZCgpKTtcbiAgcHJvdGVjdGVkIGxpc3RMZWZ0WWVhckNvbmZpZyA9IHNpZ25hbDxJTGlzdENvbmZpZ0l0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBsaXN0UmlnaHRZZWFyQ29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxpc3RZZWFyQ29uZmlnID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGxlZnRZZWFySHR0cERldGFpbENvbmZpZyA9IHNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCByaWdodFllYXJIdHRwRGV0YWlsQ29uZmlnID0gc2lnbmFsPElIdHRwUmVxdWVzdENvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgdGltZVBpY2tlckVycm9yID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lKHsgc2VsZWN0ZWRIb3VyOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpLCBzZWxlY3RlZE1pbnV0ZTogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpIH0pKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcHV0ZWREaXNwbGF5VGltZSh7IHNlbGVjdGVkSG91cjogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRob3VyKCksIHNlbGVjdGVkTWludXRlOiB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpIH0pKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVMZWZ0SW5wdXRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ubGVmdCwgJ2hvdXInKSk7XG4gIHByb3RlY3RlZCBjb21wdXRlZERpc3BsYXlUaW1lTGVmdElucHV0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ubGVmdCwgJ21pbnV0ZScpKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodElucHV0SG91ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29tcHV0ZWREaXNwbGF5VGltZUlucHV0KFNpZGVFbnVtLnJpZ2h0LCAnaG91cicpKTtcbiAgcHJvdGVjdGVkIGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodElucHV0TWludXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZERpc3BsYXlUaW1lSW5wdXQoU2lkZUVudW0ucmlnaHQsICdtaW51dGUnKSk7XG4gIHByb3RlY3RlZCB0aW1lcGlja2VyVmFsdWVJdGVtID0gc2lnbmFsPElUaW1lcGlja2VySXRlbVZhbHVlPih7IGxlZnRob3VyOiBzaWduYWwoMCksIGxlZnRtaW51dGU6IHNpZ25hbCgwKSwgcmlnaHRob3VyOiBzaWduYWwoMCksIHJpZ2h0bWludXRlOiBzaWduYWwoMCkgfSk7XG5cbiAgcHJpdmF0ZSBmdW5jdGlvbkNvbnRyb2xzID0gbmV3IE1hcDxzdHJpbmcsIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgSUlucHV0RnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHByaXZhdGUgcGlja2luZ0RhdGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlzU2hvd24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIG5vd0hvdmVyZWREYXRlID0gc2lnbmFsPERheWpzIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgdGltZVBpY2tlckluY3JlbWVudCA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICBwcml2YXRlIHNlbGVjdGVkTGFiZWwgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGtleUNvZGVCYWNrc3BhY2UgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGNoZWNrQmFja3NwYWNlRm9jdXMgPSBzaWduYWw8SVRpbWVwaWNrZXJJdGVtVmFsdWU+KHsgbGVmdGhvdXI6IHNpZ25hbCgxKSwgbGVmdG1pbnV0ZTogc2lnbmFsKDEpLCByaWdodGhvdXI6IHNpZ25hbCgxKSwgcmlnaHRtaW51dGU6IHNpZ25hbCgxKSB9KTtcbiAgcHJpdmF0ZSBpc1plcm8gPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbGREYXRlID0gc2lnbmFsPElTZWxlY3RlZE9sZD4oeyBzdGFydDogZGF5anMoMCksIGVuZDogZGF5anMoMCkgfSk7XG4gIHByaXZhdGUgaXNTZWxlY3RlZERhdGEgPSBzaWduYWw8SUNoZWNrVGltZXBpY2tlclNlbGVjdGVkPih7IGxlZnRtb250aDogZmFsc2UsIGxlZnR5ZWFyOiBmYWxzZSwgcmlnaHRtb250aDogZmFsc2UsIHJpZ2h0eWVhcjogZmFsc2UgfSk7XG4gIHByaXZhdGUgc3BsaXRQaWNrZXJEYXRlID0gc2lnbmFsPElTcGxpdFBpY2tlckRhdGU+KHsgc3RhcnQ6IHNpZ25hbCh7IG1vbnRoOiAwLCB5ZWFyOiAwLCBkYXk6IDAsIGhvdXI6IDAsIG1pbnV0ZTogMCB9KSwgZW5kOiBzaWduYWwoeyBtb250aDogMCwgeWVhcjogMCwgZGF5OiAwLCBob3VyOiAyMywgbWludXRlOiA1OSB9KSB9KTtcblxuICAvKiogSU5QVVQgKi9cbiAgcmVhZG9ubHkgcXVpY2tSYW5nZXNBcnJheSA9IGlucHV0PEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaXNTaW5nbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dEcm9wZG93bnNTZWxlY3QgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgaGFzVGltZVBpY2tlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBpbnB1dDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSBkYXRlT3B0aW9ucyA9IGlucHV0PExvY2FsaXphdGlvbkNvbmZpZz4oeyAuLi5kZWZhdWx0TG9jYWxlQ29uZmlnKCksIC4uLmdldERhdGVPcHRpb25zKCkgfSk7XG4gIHJlYWRvbmx5IGF1dG9BcHBseSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzU2Vjb25kUGlja2VyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzaG93UmFuZ2VMYWJlbE9uSW5wdXQgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZSA9IG1vZGVsPERheWpzIHwgdW5kZWZpbmVkPihnZXREYXlqcygpLnN0YXJ0T2YoJ2RheScpKTtcbiAgcmVhZG9ubHkgZW5kRGF0ZSA9IG1vZGVsPERheWpzIHwgdW5kZWZpbmVkPihnZXREYXlqcygpLmVuZE9mKCdkYXknKSk7XG4gIHJlYWRvbmx5IG1pbkRhdGUgPSBpbnB1dDxEYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCwgRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyB0cmFuc2Zvcm06IHRoaXMudHJhbnNmb3JtTWluTWF4RGF0ZS5iaW5kKHRoaXMpIH0pO1xuICByZWFkb25seSBtYXhEYXRlID0gaW5wdXQ8RGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQsIERheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB0aGlzLnRyYW5zZm9ybU1pbk1heERhdGUuYmluZCh0aGlzKSB9KTtcbiAgcmVhZG9ubHkgbGlzdFllYXJIaWRkZW5JbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIC8qKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXRQaWNrZXJEYXRlID0gb3V0cHV0PElFbWl0RGF0ZUNhbGVuZGFyPigpO1xuICByZWFkb25seSBvdXRDYW5jZWwgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRVcGRhdGVXaWR0aCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SUNhbGVuZGFyRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgLyoqIElOSkVDVElPTiAqL1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICByZWFkb25seSBwaWNrZXJDb250YWluZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3BpY2tlckNvbnRhaW5lcicpO1xuICByZWFkb25seSBpbnB1dFRpbWVIb3VycyA9IHZpZXdDaGlsZHJlbjxMaWJzVWlDb21wb25lbnRzSW5wdXRzSW5wdXRDb21wb25lbnQ+KExpYnNVaUNvbXBvbmVudHNJbnB1dHNJbnB1dENvbXBvbmVudCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5saXN0TW9udGhzQ29uZmlnLnNldChnZXRNb250aHNMaXN0Q29uZmlnKHRoaXMudHJhbnNsYXRlKSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgb2xkU3RhcnQgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCkgfSk7XG4gICAgICBjb25zdCBvbGRFbmQgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpIH0pO1xuXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLm9sZERhdGUuc2V0KHsgc3RhcnQ6IG9sZFN0YXJ0LCBlbmQ6IG9sZEVuZCB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpIH0pO1xuICAgIGNvbnN0IGVuZERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpIH0pO1xuXG4gICAgdGhpcy5zcGxpdFBpY2tlckRhdGUudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50LnN0YXJ0LnVwZGF0ZSgoc2lkZUN1cnJlbnQpID0+IHtcbiAgICAgICAgc2lkZUN1cnJlbnQuZGF5ID0gKHN0YXJ0RGF0ZSA/PyBnZXREYXlqcygpLnN0YXJ0T2YoJ2RheScpKS5kYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBjdXJyZW50LmVuZC51cGRhdGUoKHNpZGVDdXJyZW50KSA9PiB7XG4gICAgICAgIHNpZGVDdXJyZW50LmRheSA9IChlbmREYXRlID8/IGdldERheWpzKCkuZW5kT2YoJ2RheScpKS5kYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgIH1cbiAgICBpZiAoc3RhcnREYXRlICYmIHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShzdGFydERhdGUpO1xuICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKFNpZGVFbnVtLmxlZnQpO1xuICAgIH1cblxuICAgIGlmIChlbmREYXRlICYmIHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUoZW5kRGF0ZSk7XG4gICAgICB0aGlzLnJlbmRlclRpbWVQaWNrZXIoU2lkZUVudW0ucmlnaHQpO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkQ29uZmlnWWVhcihTaWRlRW51bS5sZWZ0KTtcbiAgICB0aGlzLmJ1aWxkQ29uZmlnWWVhcihTaWRlRW51bS5yaWdodCwgc3RhcnREYXRlPy55ZWFyKCkpO1xuICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcihTaWRlRW51bS5sZWZ0KTtcbiAgICBpZiAoKGdldERheWpzKHsgZGF0ZTogdGhpcy5tYXhEYXRlKCkgfSk/LnllYXIoKSA/PyBERUZBVUxUX01BWF9ZRUFSKSA8IChzdGFydERhdGU/LnllYXIoKSB8fCAwKSkge1xuICAgICAgdGhpcy5oYW5kbGVyU2VsZWN0ZWREcm9wZG93bih7IGtleTogZ2V0RGF5anMoeyBkYXRlOiB0aGlzLm1heERhdGUoKSB9KT8ueWVhcigpIGFzIHVua25vd24gYXMgc3RyaW5nIH0sIFNpZGVFbnVtLmxlZnQgKyAneWVhcicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgICAgIGlmICgoZ2V0RGF5anMoeyBkYXRlOiB0aGlzLm1heERhdGUoKSB9KT8ueWVhcigpID8/IERFRkFVTFRfTUFYX1lFQVIpIDwgKGVuZERhdGU/LnllYXIoKSB8fCAwKSkge1xuICAgICAgICB0aGlzLmhhbmRsZXJTZWxlY3RlZERyb3Bkb3duKHsga2V5OiBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pPy55ZWFyKCkgYXMgdW5rbm93biBhcyBzdHJpbmcgfSwgU2lkZUVudW0ucmlnaHQgKyAneWVhcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMucmVuZGVyUmFuZ2VzKCk7XG4gICAgdGhpcy5mb3JtYXRNb250aFllYXIoKTtcbiAgICB0aGlzLm91dFVwZGF0ZVdpZHRoLmVtaXQoMSk7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50KCk7XG4gICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnNldCh7XG4gICAgICBsZWZ0aG91cjogc2lnbmFsKHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLmxlZnQoKS5zZWxlY3RlZEhvdXIpLFxuICAgICAgcmlnaHRob3VyOiBzaWduYWwodGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkucmlnaHQoKS5zZWxlY3RlZEhvdXIpLFxuICAgICAgbGVmdG1pbnV0ZTogc2lnbmFsKHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLmxlZnQoKS5zZWxlY3RlZE1pbnV0ZSksXG4gICAgICByaWdodG1pbnV0ZTogc2lnbmFsKHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLnJpZ2h0KCkuc2VsZWN0ZWRNaW51dGUpLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dFRpbWVIb3VycygpPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgIGlucHV0LkZ1bmN0aW9uc0NvbnRyb2wuYmx1cih0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gICAgLy8gdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoeyBidWlsZERlZmF1bHRSYW5nZTogdGhpcy5idWlsZERlZmF1bHRSYW5nZS5iaW5kKHRoaXMpLCBhcHBseVRvU2VsZWN0OiB0aGlzLmFwcGx5VG9TZWxlY3QuYmluZCh0aGlzKSB9KVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmZpZ1llYXIoc2lkZTogU2lkZUVudW0sIHN0YXJ0WWVhcj86IG51bWJlcikge1xuICAgIGNvbnN0IG1pbkRhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWluRGF0ZSgpIH0pO1xuICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuXG4gICAgY29uc3QgbGlzdExlZnRZZWFyID0gW107XG4gICAgY29uc3QgbGlzdFJpZ2h0WWVhciA9IFtdO1xuXG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbWF4RGF0ZT8ueWVhcigpID8/IERFRkFVTFRfTUFYX1lFQVI7XG4gICAgICBjb25zdCBlbmQgPSBtaW5EYXRlPy55ZWFyKCkgPz8gREVGQVVMVF9NSU5fWUVBUjtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA+PSBlbmQ7IGktLSkge1xuICAgICAgICBsaXN0TGVmdFllYXIucHVzaCh7XG4gICAgICAgICAgaWQ6IGksXG4gICAgICAgICAgbGFiZWw6IGAke2l9YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmxpc3RMZWZ0WWVhckNvbmZpZy5zZXQoZ2V0WWVhcnNMaXN0Q29uZmlnKGxpc3RMZWZ0WWVhcikpO1xuICAgICAgdGhpcy5sZWZ0WWVhckh0dHBEZXRhaWxDb25maWcuc2V0KGdldFllYXJzRGV0YWlsQnlJZChsaXN0TGVmdFllYXIpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gbWF4RGF0ZT8ueWVhcigpID8/IERFRkFVTFRfTUFYX1lFQVI7XG4gICAgY29uc3QgZW5kID0gc3RhcnRZZWFyID8/IG1pbkRhdGU/LnllYXIoKSA/PyBnZXREYXlqcygpLnllYXIoKTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPj0gZW5kOyBpLS0pIHtcbiAgICAgIGxpc3RSaWdodFllYXIucHVzaCh7XG4gICAgICAgIGlkOiBpLFxuICAgICAgICBsYWJlbDogYCR7aX1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5saXN0UmlnaHRZZWFyQ29uZmlnLnNldChnZXRZZWFyc0xpc3RDb25maWcobGlzdFJpZ2h0WWVhcikpO1xuICAgIHRoaXMucmlnaHRZZWFySHR0cERldGFpbENvbmZpZy5zZXQoZ2V0WWVhcnNEZXRhaWxCeUlkKGxpc3RSaWdodFllYXIpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKGZsYWdNb3VzZTogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZS5lbWl0KGZsYWdNb3VzZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXJ0RW5kRGF0ZShkYXRlOiBEYXlqcykge1xuICAgIGRhdGUgPSBnZXREYXlqcyh7IGRhdGUgfSk7XG4gICAgaWYgKHRoaXMuZW5kRGF0ZSgpIHx8IGRhdGUuaXNCZWZvcmUoZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpIH0pLCAnZGF5JykpIHtcbiAgICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBkYXRlID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoZGF0ZSwgU2lkZUVudW0ubGVmdCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShnZXREYXlqcyh7IGRhdGU6IGRhdGUuY2xvbmUoKSB9KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuZERhdGUoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpICYmIGRhdGUuaXNCZWZvcmUoZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpIH0pKSkge1xuICAgICAgdGhpcy5zZXRFbmREYXRlKGdldERheWpzKHsgZGF0ZTogdGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSB9KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBkYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLmdldERhdGVXaXRoVGltZShkYXRlLCBTaWRlRW51bS5yaWdodCkgfSk7XG4gICAgfVxuICAgIGlmICghZGF0ZS5pc0JlZm9yZShnZXREYXlqcyh7IGRhdGU6IHRoaXMuc3RhcnREYXRlKCkgfSksICdkYXknKSkge1xuICAgICAgdGhpcy5zZXRFbmREYXRlKGdldERheWpzKHsgZGF0ZTogZGF0ZS5jbG9uZSgpIH0pKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0b0FwcGx5KCkpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlU2VsZWN0ZWRMYWJlbCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlU2VsZWN0ZWRMYWJlbCgpIHtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TW9udGhZZWFyKCkge1xuICAgIGNvbnN0IG1vbnRoID0gKHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5sZWZ0KCkuZHJvcGRvd25zPy4oKT8uY3VycmVudE1vbnRoID8/IDApICsgMTtcbiAgICB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gbW9udGg7XG4gICAgICBjdXJyZW50LnllYXIgPSB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKCkubGVmdCgpLmRyb3Bkb3ducz8uKCk/LmN1cnJlbnRZZWFyO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnNldCh7IGxlZnRtb250aDogdHJ1ZSwgbGVmdHllYXI6IHRydWUsIHJpZ2h0bW9udGg6IHRydWUsIHJpZ2h0eWVhcjogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmlnaHRNb250aCA9ICh0aGlzLmNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5kcm9wZG93bnM/LigpPy5jdXJyZW50TW9udGggPz8gMCkgKyAxO1xuICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gcmlnaHRNb250aDtcbiAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducz8uKCk/LmN1cnJlbnRZZWFyO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnNldCh7IGxlZnRtb250aDogdHJ1ZSwgbGVmdHllYXI6IHRydWUsIHJpZ2h0bW9udGg6IHRydWUsIHJpZ2h0eWVhcjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhcnREYXRlKHN0YXJ0RGF0ZTogRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdGFydERhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZ2V0RGF5anMoeyBkYXRlOiBkYXlqcyhzdGFydERhdGUsIHRoaXMuZGF0ZU9wdGlvbnMoKS5mb3JtYXQpLCByZXR1cm5EYXlqc0lmQ29uZmlnRGF0ZU5vdEV4aXN0OiB0cnVlIH0pKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzdGFydERhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnBpY2tpbmdEYXRlLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldChnZXREYXlqcyh7IGRhdGU6IHN0YXJ0RGF0ZSwgcmV0dXJuRGF5anNJZkNvbmZpZ0RhdGVOb3RFeGlzdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucGlja2luZ0RhdGUuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0KGdldERheWpzKHsgZGF0ZTogdGhpcy5zdGFydERhdGUoKT8uc3RhcnRPZignZGF5JykgfSkpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXJ0RGF0ZUluVGltZVBpY2tlcigpO1xuXG4gICAgaWYgKHRoaXMubWluRGF0ZSgpICYmIHRoaXMuc3RhcnREYXRlKCk/LmlzQmVmb3JlKHRoaXMubWluRGF0ZSgpKSkge1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0KGdldERheWpzKHsgZGF0ZTogdGhpcy5taW5EYXRlKCkgfSk/LmNsb25lKCkpO1xuXG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZUluVGltZVBpY2tlcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhEYXRlKCkgJiYgdGhpcy5zdGFydERhdGUoKT8uaXNBZnRlcih0aGlzLm1heERhdGUoKSkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldChnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pPy5jbG9uZSgpKTtcbiAgICAgIHRoaXMuc2V0U3RhcnREYXRlSW5UaW1lUGlja2VyKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgIH1cbiAgICAvLyB0aGlzLm91dFN0YXJ0RGF0ZUNoYW5nZWQuZW1pdCh7IHN0YXJ0RGF0ZTogdGhpcy5zdGFydERhdGUoKSB9KTtcbiAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdGFydERhdGVJblRpbWVQaWNrZXIoKSB7XG4gICAgaWYgKCF0aGlzLmhhc1RpbWVQaWNrZXIoKSB8fCAhdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0RGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjdXJyZW50Lm1pbnV0ZShNYXRoLnJvdW5kKGN1cnJlbnQubWludXRlKCkgLyB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSkgKiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQoKSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgc2V0RW5kRGF0ZShlbmREYXRlOiBEYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZW5kRGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZ2V0RGF5anMoeyBkYXRlOiBkYXlqcyhlbmREYXRlLCB0aGlzLmRhdGVPcHRpb25zKCkuZm9ybWF0KSwgcmV0dXJuRGF5anNJZkNvbmZpZ0RhdGVOb3RFeGlzdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5kRGF0ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMucGlja2luZ0RhdGUuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZ2V0RGF5anMoeyBkYXRlOiBkYXlqcyhlbmREYXRlKSwgcmV0dXJuRGF5anNJZkNvbmZpZ0RhdGVOb3RFeGlzdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmREYXRlKCkgfHwgIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICB0aGlzLnBpY2tpbmdEYXRlLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KHRoaXMuZW5kRGF0ZSgpPy5hZGQoMSwgJ2QnKS5zdGFydE9mKCdkYXknKS5zdWJ0cmFjdCgxLCAnc2Vjb25kJykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkgJiYgdGhpcy50aW1lUGlja2VySW5jcmVtZW50KCkpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQubWludXRlKE1hdGgucm91bmQoY3VycmVudC5taW51dGUoKSAvIHRoaXMudGltZVBpY2tlckluY3JlbWVudCgpKSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCgpKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbmREYXRlKCk/LmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKCkpKSB7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhEYXRlKCkgJiYgdGhpcy5lbmREYXRlKCk/LmlzQWZ0ZXIodGhpcy5tYXhEYXRlKCkpKSB7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KGdldERheWpzKHsgZGF0ZTogdGhpcy5tYXhEYXRlKCkgfSk/LmNsb25lKCkpO1xuICAgIH1cbiAgICAvLyB0aGlzLm91dEVuZERhdGVDaGFuZ2VkLmVtaXQoeyBlbmREYXRlOiB0aGlzLmVuZERhdGUoKSB9KTtcbiAgICB0aGlzLnVwZGF0ZU1vbnRoc0luVmlldygpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVySG92ZXJEYXRlKGV2ZW50OiBFdmVudCwgc2lkZTogU2lkZUVudW0sIHJvdzogbnVtYmVyLCBjb2w6IG51bWJlcikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbGVmdENhbERhdGUgPSB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKCkubGVmdCgpLmNhbGVuZGFyPy5bcm93XVtjb2xdO1xuICAgIGNvbnN0IHJpZ2h0Q2FsRGF0ZSA9IHRoaXMuY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bcm93XVtjb2xdO1xuXG4gICAgaWYgKCF0aGlzLnBpY2tpbmdEYXRlIHx8ICFyaWdodENhbERhdGUgfHwgIWxlZnRDYWxEYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubm93SG92ZXJlZERhdGUuc2V0KHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyBsZWZ0Q2FsRGF0ZSA6IHJpZ2h0Q2FsRGF0ZSk7XG4gICAgdGhpcy5yZW5kZXJDYWxlbmRhcihTaWRlRW51bS5sZWZ0KTtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgfVxuICBwcml2YXRlIGdldERpc2FibGUodHlwZTogJ2xlZnQnIHwgJ3JpZ2h0Jykge1xuICAgIGNvbnN0IG1pbkRhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWluRGF0ZSgpIH0pO1xuICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuXG4gICAgaWYgKHR5cGUgPT09ICdsZWZ0Jykge1xuICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5sZWZ0LnNldChbXSk7XG5cbiAgICAgIGlmIChtaW5EYXRlICYmIG1pbkRhdGU/LnllYXIoKSA9PT0gdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhcikge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG1pbkRhdGU/Lm1vbnRoKCkgKyAxOyBpKyspIHtcbiAgICAgICAgICB0aGlzLmRpc2FibGVNb250aCgpLmxlZnQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobWF4RGF0ZSAmJiBtYXhEYXRlPy55ZWFyKCkgPT09IHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG1heERhdGU/Lm1vbnRoKCkgKyAyOyBpIDwgMTM7IGkrKykge1xuICAgICAgICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkubGVmdC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQucHVzaChpKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzYWJsZU1vbnRoKCkucmlnaHQuc2V0KFtdKTtcbiAgICBpZiAobWluRGF0ZSAmJiBtaW5EYXRlPy55ZWFyKCkgPT09IHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG1pbkRhdGU/Lm1vbnRoKCkgKyAxOyBpKyspIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5yaWdodC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChtYXhEYXRlICYmIG1heERhdGU/LnllYXIoKSA9PT0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgIGZvciAobGV0IGkgPSBtYXhEYXRlPy5tb250aCgpICsgMjsgaSA8IDEzOyBpKyspIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTW9udGgoKS5yaWdodC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LnB1c2goaSk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChOdW1iZXIodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhcikgPT09IE51bWJlcih0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCk7IGkrKykge1xuICAgICAgICB0aGlzLmRpc2FibGVNb250aCgpLnJpZ2h0LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucHVzaChpKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrUHJldihzaWRlOiBTaWRlRW51bSkge1xuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0ICYmIHRoaXMubGVmdENhbGVuZGFyKCkubW9udGgpIHtcbiAgICAgIHRoaXMubGVmdENhbGVuZGFyLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uc3VidHJhY3QoMSwgJ21vbnRoJyk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uc3VidHJhY3QoMSwgJ21vbnRoJyk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gKHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy55ZWFyKCk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMuZ2V0RGlzYWJsZSgncmlnaHQnKTtcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja05leHQoc2lkZTogU2lkZUVudW0pIHtcbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoPy5tb250aCgpID8/IDApICsgMTtcbiAgICAgICAgY3VycmVudC55ZWFyID0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA9PT0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLm1vbnRoICYmIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgPT09IHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSB7XG4gICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uYWRkKDEsICdtb250aCcpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQubW9udGggPSAodGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/Lm1vbnRoKCkgPz8gMCkgKyAxO1xuICAgICAgICAgIGN1cnJlbnQueWVhciA9IHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoPy55ZWFyKCk7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIH1cbiAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50Lm1vbnRoID0gY3VycmVudC5tb250aD8uYWRkKDEsICdtb250aCcpO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgY3VycmVudC5tb250aCA9ICh0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ubW9udGgoKSA/PyAwKSArIDE7XG4gICAgICBjdXJyZW50LnllYXIgPSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8ueWVhcigpO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVyUGlja2VyRGF0ZShldmVudDogYW55LCBzaWRlOiBTaWRlRW51bSwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoZXZlbnQudGFyZ2V0Py50YWdOYW1lID09PSAnVEQnKSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdCAmJiAhZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYXZhaWxhYmxlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdTUEFOJykge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50ICYmIGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdCAmJiAhZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhdmFpbGFibGUnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRlT3B0aW9ucygpLmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVpY2tSYW5nZXNBcnJheSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2Uuc2V0KHRoaXMuZGF0ZU9wdGlvbnMoKS5jdXN0b21SYW5nZUxhYmVsKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyB0aGlzLmxlZnRDYWxlbmRhcigpLmNhbGVuZGFyPy5bcm93XVtjb2xdIDogdGhpcy5yaWdodENhbGVuZGFyKCkuY2FsZW5kYXI/Lltyb3ddW2NvbF07XG5cbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zcGxpdFBpY2tlckRhdGUudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50W3NpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyAnc3RhcnQnIDogJ2VuZCddLnVwZGF0ZSgoc2lkZUN1cnJlbnQpID0+IHtcbiAgICAgICAgc2lkZUN1cnJlbnQuZGF5ID0gZGF0ZS5kYXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlU3RhcnRFbmREYXRlKGRhdGUpO1xuXG4gICAgaWYgKHRoaXMuaXNTaW5nbGUoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICB0aGlzLnNldEVuZERhdGUodGhpcy5zdGFydERhdGUoKSk7XG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcblxuICAgICAgaWYgKHRoaXMuYXV0b0FwcGx5KCkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tBcHBseSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVmlldygpO1xuICAgIGlmICh0aGlzLmF1dG9BcHBseSgpICYmIHRoaXMuc3RhcnREYXRlKCkgJiYgdGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlckNsaWNrQXBwbHkoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQXBwbHkoZXZlbnQ/OiBFdmVudCkge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMuc2V0VGltZUlucHV0KFNpZGVFbnVtLmxlZnQpO1xuICAgICAgdGhpcy5zZXRUaW1lSW5wdXQoU2lkZUVudW0ucmlnaHQpO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZVNlbGVjdGVkTGFiZWwoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkTGFiZWwoKSkge1xuICAgICAgdGhpcy5vdXRQaWNrZXJEYXRlLmVtaXQoeyBkaXNwbGF5TGFiZWw6IHRoaXMuc2VsZWN0ZWRMYWJlbCgpLCBzdGFydERhdGU6IHRoaXMuc3RhcnREYXRlKCksIGVuZERhdGU6IHRoaXMuZW5kRGF0ZSgpLCBkZXRhaWxEYXRlUGlja2VyOiB0aGlzLnNwbGl0UGlja2VyRGF0ZSgpIH0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQ2FuY2VsKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3RhcnREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5lbmREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5vdXRDYW5jZWwuZW1pdCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSURyb3Bkb3duRnVuY3Rpb25Db250cm9sRXZlbnQgfCBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCwgdHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5mdW5jdGlvbkNvbnRyb2xzLnNldCh0eXBlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkLCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdCh7XG4gICAgICBpc01vdXNlRW50ZXI6IGZhbHNlLFxuICAgICAgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UsXG4gICAgICBpc0NvbnRhaW5lckhhc1Njcm9sbDogZmFsc2UsXG4gICAgfSk7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgYCR7U2lkZUVudW0ubGVmdH1tb250aGA6XG4gICAgICBjYXNlIGAke1NpZGVFbnVtLnJpZ2h0fW1vbnRoYDpcbiAgICAgICAgdGhpcy51cGRhdGVNb250aFNlbGVjdChldmVudCwgdHlwZSk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgYCR7U2lkZUVudW0ubGVmdH15ZWFyYDpcbiAgICAgIGNhc2UgYCR7U2lkZUVudW0ucmlnaHR9eWVhcmA6XG4gICAgICAgIHRoaXMudXBkYXRlWWVhclNlbGVjdChldmVudCwgdHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnNwbGl0UGlja2VyRGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGlmICh0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fW1vbnRoYCB8fCB0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fXllYXJgKSB7XG4gICAgICAgIGN1cnJlbnQuc3RhcnQudXBkYXRlKChzdGFydCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlID09PSBgJHtTaWRlRW51bS5sZWZ0fW1vbnRoYCkge1xuICAgICAgICAgICAgc3RhcnQubW9udGggPSBldmVudC5rZXkgYXMgbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZSA9PT0gYCR7U2lkZUVudW0ubGVmdH15ZWFyYCkge1xuICAgICAgICAgICAgc3RhcnQueWVhciA9IGV2ZW50LmtleSBhcyBudW1iZXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0YXJ0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5lbmQudXBkYXRlKChlbmQpID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IGAke1NpZGVFbnVtLnJpZ2h0fW1vbnRoYCkge1xuICAgICAgICAgIGVuZC5tb250aCA9IGV2ZW50LmtleSBhcyBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IGAke1NpZGVFbnVtLnJpZ2h0fXllYXJgKSB7XG4gICAgICAgICAgZW5kLnllYXIgPSBldmVudC5rZXkgYXMgbnVtYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTW9udGhTZWxlY3QoZXZlbnQ6IElFbWl0U2VsZWN0S2V5LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzaWRlID0gdHlwZS5pbmNsdWRlcyhTaWRlRW51bS5sZWZ0KSA/IFNpZGVFbnVtLmxlZnQgOiBTaWRlRW51bS5yaWdodDtcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkuZHJvcGRvd25zPy4oKT8uY3VycmVudFllYXIgfHwgZ2V0RGF5anMoKS55ZWFyKCk7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIoZXZlbnQua2V5KSAtIDE7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZERhdGEoKS5sZWZ0bW9udGgpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkRGF0YS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LmxlZnRtb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50Lm1vbnRoID0gZXZlbnQua2V5O1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgICBpZiAoTnVtYmVyKGV2ZW50LmtleSkgPj0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSAmJiBOdW1iZXIodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhcikgPT09IE51bWJlcih0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikpIHtcbiAgICAgICAgaWYgKE51bWJlcihldmVudC5rZXkpIDw9IDExKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQubW9udGggPSBOdW1iZXIoZXZlbnQua2V5KSArIDE7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChOdW1iZXIoZXZlbnQua2V5KSA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IDE7XG4gICAgICAgICAgICBjdXJyZW50LnllYXIgKz0gMTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ucmlnaHQpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWREYXRhKCkucmlnaHRtb250aCkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0ZWREYXRhLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQucmlnaHRtb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldERpc2FibGUoJ3JpZ2h0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IGV2ZW50LmtleTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldCh0eXBlKSBhcyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCk/LnJlbW92ZUxpc3QoKTtcblxuICAgIHRoaXMuZ2V0RGlzYWJsZSgncmlnaHQnKTtcbiAgICB0aGlzLm1vbnRoT3JZZWFyQ2hhbmdlZChtb250aCwgeWVhciwgc2lkZSk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVZZWFyU2VsZWN0KGV2ZW50OiBJRW1pdFNlbGVjdEtleSwgdHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2lkZSA9IHR5cGUuaW5jbHVkZXMoU2lkZUVudW0ubGVmdCkgPyBTaWRlRW51bS5sZWZ0IDogU2lkZUVudW0ucmlnaHQ7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZERhdGEoKT8ubGVmdHllYXIpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkRGF0YS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LmxlZnR5ZWFyID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0RGlzYWJsZSgnbGVmdCcpO1xuICAgICAgICAvLyB0aGlzLlNldExpc3RZZWFyUmlnaHQodGhpcy5saXN0Vmlld0tleVNlbGVjdGVkWWVhciBhcyBudW1iZXIpO1xuICAgICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldCh0eXBlKSBhcyBJRHJvcGRvd25GdW5jdGlvbkNvbnRyb2xFdmVudCk/LnJlbW92ZUxpc3QoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQueWVhciA9IGV2ZW50LmtleTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgPj0gdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIpIHtcbiAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LnllYXIgPSBldmVudC5rZXk7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSA8PSAxMSkge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSArIDE7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5saXN0S2V5VG9TZWxlY3RlZC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQubW9udGggPSBOdW1iZXIodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGgpO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZ2V0RGlzYWJsZSgnbGVmdCcpO1xuICAgICAgdGhpcy5idWlsZENvbmZpZ1llYXIoU2lkZUVudW0ucmlnaHQsIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgYXMgbnVtYmVyKTtcbiAgICAgICh0aGlzLmZ1bmN0aW9uQ29udHJvbHMuZ2V0KHR5cGUpIGFzIElEcm9wZG93bkZ1bmN0aW9uQ29udHJvbEV2ZW50KT8ucmVtb3ZlTGlzdCgpO1xuICAgIH1cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ucmlnaHQpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWREYXRhKCkucmlnaHR5ZWFyKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZERhdGEudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgY3VycmVudC5yaWdodHllYXIgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXREaXNhYmxlKCdyaWdodCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQueWVhciA9IGV2ZW50LmtleTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgJiYgdGhpcy5saXN0S2V5VG9TZWxlY3RlZCgpLnllYXIgJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhciA+PSB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkKCkueWVhcikge1xuICAgICAgICBpZiAodGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSA8PSAxMSkge1xuICAgICAgICAgIHRoaXMubGlzdEtleVRvU2VsZWN0ZWQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSArIDE7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCAmJiB0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLmxpc3RLZXlUb1NlbGVjdGVkLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2V0RGlzYWJsZSgncmlnaHQnKTtcbiAgICBsZXQgbW9udGggPSBnZXREYXlqcygpLm1vbnRoKCk7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ucmlnaHQgJiYgdGhpcy5saXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGgpIHtcbiAgICAgIG1vbnRoID0gTnVtYmVyKHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSAtIDE7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0ICYmIHRoaXMubGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoKSB7XG4gICAgICBtb250aCA9IE51bWJlcih0aGlzLmxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCkgLSAxO1xuICAgIH1cbiAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGV2ZW50LmtleSk7XG5cbiAgICB0aGlzLm1vbnRoT3JZZWFyQ2hhbmdlZChtb250aCwgeWVhciwgc2lkZSk7XG4gIH1cbiAgcHJpdmF0ZSBtb250aE9yWWVhckNoYW5nZWQobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyLCBzaWRlOiBTaWRlRW51bSkge1xuICAgIGNvbnN0IGlzTGVmdCA9IHNpZGUgPT09IFNpZGVFbnVtLmxlZnQ7XG4gICAgY29uc3QgbWluRGF0ZSA9IGdldERheWpzKHsgZGF0ZTogdGhpcy5taW5EYXRlKCkgfSk7XG4gICAgY29uc3QgbWF4RGF0ZSA9IGdldERheWpzKHsgZGF0ZTogdGhpcy5tYXhEYXRlKCkgfSk7XG5cbiAgICBpZiAobWluRGF0ZSAmJiAoeWVhciA8IG1pbkRhdGU/LnllYXIoKSB8fCAoeWVhciA9PT0gbWluRGF0ZT8ueWVhcigpICYmIG1vbnRoIDwgbWluRGF0ZT8ubW9udGgoKSkpKSB7XG4gICAgICBtb250aCA9IG1pbkRhdGU/Lm1vbnRoKCk7XG4gICAgICB5ZWFyID0gbWluRGF0ZT8ueWVhcigpO1xuICAgIH1cblxuICAgIGlmIChtYXhEYXRlICYmICh5ZWFyID4gbWF4RGF0ZT8ueWVhcigpIHx8ICh5ZWFyID09PSBtYXhEYXRlPy55ZWFyKCkgJiYgbW9udGggPiBtYXhEYXRlPy5tb250aCgpKSkpIHtcbiAgICAgIG1vbnRoID0gbWF4RGF0ZT8ubW9udGgoKTtcbiAgICAgIHllYXIgPSBtYXhEYXRlPy55ZWFyKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZHJvcGRvd25zID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkuZHJvcGRvd25zO1xuXG4gICAgaWYgKGRyb3Bkb3ducz8uKCkpIHtcbiAgICAgIGRyb3Bkb3ducy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5jdXJyZW50WWVhciA9IHllYXI7XG4gICAgICAgIGN1cnJlbnQuY3VycmVudE1vbnRoID0gbW9udGg7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzTGVmdCAmJiB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoKSB7XG4gICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IGN1cnJlbnQubW9udGg/Lm1vbnRoKG1vbnRoKS55ZWFyKHllYXIpO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICB9XG5cbiAgICBpZiAobW9udGggPT09IDEyKSB7XG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gICAgfVxuICAgIHRoaXMucmlnaHRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGN1cnJlbnQubW9udGggPSBjdXJyZW50Lm1vbnRoPy5tb250aChtb250aCkueWVhcih5ZWFyKTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlcklucHV0RXZlbnQoZXZlbnQ6IElFdmVudCwgdHlwZTogYGxlZnRob3VyYCB8IGBsZWZ0bWludXRlYCB8IGByaWdodGhvdXJgIHwgYHJpZ2h0bWludXRlYCkge1xuICAgIGlmIChldmVudC5rZXlDb2RlICE9PSA4KSB7XG4gICAgICBldmVudC5rZXlDb2RlICYmXG4gICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldCgxKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5rZXlDb2RlQmFja3NwYWNlLnNldChmYWxzZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmtleUNvZGVCYWNrc3BhY2Uuc2V0KHRydWUpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdsZWZ0bWludXRlJzpcbiAgICAgICAgaWYgKGlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5jaGVja0JhY2tzcGFjZUZvY3VzKClbdHlwZV0oKSA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0JhY2tzcGFjZUZvY3VzLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldChjdXJyZW50W3R5cGVdKCkgKyAxKTtcblxuICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KDEpO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAodGhpcy5mdW5jdGlvbkNvbnRyb2xzLmdldChgJHtTaWRlRW51bS5sZWZ0fWhvdXJgKSBhcyBJSW5wdXRGdW5jdGlvbkNvbnRyb2xFdmVudCk/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0bWludXRlJzpcbiAgICAgICAgaWYgKGlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cygpW3R5cGVdKCkgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCYWNrc3BhY2VGb2N1cy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgICAgY3VycmVudFt0eXBlXS5zZXQoY3VycmVudFt0eXBlXSgpICsgMSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNoZWNrQmFja3NwYWNlRm9jdXMudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50W3R5cGVdLnNldCgxKTtcblxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQoYCR7U2lkZUVudW0ucmlnaHR9aG91cmApIGFzIElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KT8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoZXZlbnQ6IElGb2N1c0FuZEJsdXJFdmVudCwgdHlwZTogYGxlZnRob3VyYCB8IGBsZWZ0bWludXRlYCB8IGByaWdodGhvdXJgIHwgYHJpZ2h0bWludXRlYCkge1xuICAgIGlmIChldmVudC5uYW1lID09PSAnZm9jdXMnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50SW5wdXQgPSBldmVudC5ldmVudCBhcyBJRXZlbnQ7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnRJbnB1dC50YXJnZXQ7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2xlZnRob3VyJzpcbiAgICAgICAgdGhpcy50aW1lcGlja2VyVmFyaWFibGVzKCkubGVmdC51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkSG91ciA9ICFpc05pbCh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpKSA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkgOiAwO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpID09PSAwIHx8IGlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpKSB7XG4gICAgICAgICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5sZWZ0aG91ci5zZXQoMCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9ICcwMCc7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpIDwgMTApIHtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSBgMCR7TnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRob3VyKCkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0aG91cic6XG4gICAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLnJpZ2h0LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRIb3VyID0gIWlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpKSA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpIDogMDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSkgPT09IDAgfHwgaXNOaWwodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRob3VyKCkpKSB7XG4gICAgICAgICAgdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5yaWdodGhvdXIuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0aG91cigpKSA8IDEwKSB7XG4gICAgICAgICAgdGFyZ2V0LnZhbHVlID0gYDAke051bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKSl9YDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdG1pbnV0ZSc6XG4gICAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLmxlZnQudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgY3VycmVudC5zZWxlY3RlZE1pbnV0ZSA9ICFpc05pbCh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpID8gdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpIDogMDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKCkpID09PSAwIHx8IGlzTmlsKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSkpIHtcbiAgICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LmxlZnRtaW51dGUuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSkgPCAxMCkge1xuICAgICAgICAgIHRhcmdldC52YWx1ZSA9IGAwJHtOdW1iZXIodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkubGVmdG1pbnV0ZSgpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodG1pbnV0ZSc6XG4gICAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpLnJpZ2h0LnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSAhaXNOaWwodGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRtaW51dGUoKSkgPyB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpIDogMDtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE51bWJlcih0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSA9PT0gMCB8fCBpc05pbCh0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpKSkge1xuICAgICAgICAgIHRoaXMudGltZXBpY2tlclZhbHVlSXRlbS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGN1cnJlbnQucmlnaHRtaW51dGUuc2V0KDApO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSAnMDAnO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpIDwgMTApIHtcbiAgICAgICAgICB0YXJnZXQudmFsdWUgPSBgMCR7TnVtYmVyKHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCkpfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VUaW1lVmFsdWUoZXZlbnQ6IHN0cmluZyB8IG51bWJlciwgdHlwZTogYGxlZnRob3VyYCB8IGBsZWZ0bWludXRlYCB8IGByaWdodGhvdXJgIHwgYHJpZ2h0bWludXRlYCkge1xuICAgIHRoaXMudGltZXBpY2tlclZhbHVlSXRlbS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGN1cnJlbnRbdHlwZV0uc2V0KGV2ZW50IGFzIG51bWJlcik7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuXG4gICAgY29uc3Qgc2lkZSA9IHR5cGUuaW5jbHVkZXMoU2lkZUVudW0ubGVmdCkgPyBTaWRlRW51bS5sZWZ0IDogU2lkZUVudW0ucmlnaHQ7XG4gICAgY29uc3QgYXR0ciA9IHR5cGUuaW5jbHVkZXMoJ2hvdXInKSA/ICdob3VyJyA6ICdtaW51dGUnO1xuXG4gICAgdGhpcy5zcGxpdFBpY2tlckRhdGUudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50W3NpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyAnc3RhcnQnIDogJ2VuZCddLnVwZGF0ZSgoc2lkZUN1cnJlbnQpID0+IHtcbiAgICAgICAgc2lkZUN1cnJlbnRbYXR0cl0gPSBldmVudCBhcyBudW1iZXI7XG5cbiAgICAgICAgcmV0dXJuIHNpZGVDdXJyZW50O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICAgIGlmICgodHlwZSAhPT0gJ2xlZnRob3VyJyAmJiB0eXBlICE9PSAncmlnaHRob3VyJykgfHwgZXZlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc1plcm8uc2V0KGZhbHNlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYCR7ZXZlbnR9YC5sZW5ndGggPT09IDIgfHwgTnVtYmVyKGV2ZW50KSA+IDIgfHwgKE51bWJlcihldmVudCkgPD0gMiAmJiBOdW1iZXIoZXZlbnQpID4gMCAmJiB0aGlzLmlzWmVybygpKSB8fCAodGhpcy5pc1plcm8oKSAmJiAhdGhpcy5rZXlDb2RlQmFja3NwYWNlKCkpKSB7XG4gICAgICB0aGlzLmlzWmVyby5zZXQoZmFsc2UpO1xuICAgICAgKHRoaXMuZnVuY3Rpb25Db250cm9scy5nZXQodHlwZSA9PT0gJ2xlZnRob3VyJyA/IGAke1NpZGVFbnVtLmxlZnR9bWludXRlYCA6IGAke1NpZGVFbnVtLnJpZ2h0fW1pbnV0ZWApIGFzIElJbnB1dEZ1bmN0aW9uQ29udHJvbEV2ZW50KT8uZm9jdXMoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoTnVtYmVyKGV2ZW50KSA9PT0gMCAmJiAhdGhpcy5rZXlDb2RlQmFja3NwYWNlKCkpIHtcbiAgICAgIHRoaXMuaXNaZXJvLnNldCh0cnVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2hvd0xpc3REcm9wZG93bihldmVudDogYm9vbGVhbiwgdHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jaGVja1Nob3dMaXN0RHJvcGRvd24udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjdXJyZW50W3R5cGVdID0gZXZlbnQ7XG5cbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnZlcnRJdGVtTW9udGggPSAoaXRlbTogYW55KSA9PiB7XG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHNldChpdGVtLCAnbGFiZWxEaXNwbGF5JywgdGhpcy50cmFuc2xhdGUuaW5zdGFudChpdGVtLmxhYmVsIHx8ICcgJywgeyB5ZWFyOiAnJyB9KSk7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcbiAgcHJvdGVjdGVkIGNvbnZlcnRJdGVtWWVhciA9IChpdGVtOiBhbnkpID0+IHtcbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaXRlbS5sYWJlbERpc3BsYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX3llYXJfcGFyYW0nLCB7IHllYXI6IGl0ZW0ubGFiZWwgfSk7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoc0luVmlldygpIHtcbiAgICBpZiAodGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuaXNTaW5nbGUoKSAmJlxuICAgICAgICB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoICYmXG4gICAgICAgIHRoaXMucmlnaHRDYWxlbmRhcigpLm1vbnRoICYmXG4gICAgICAgICgodGhpcy5sZWZ0Q2FsZW5kYXIoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ1lZWVktTU0nKSA9PT0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykpIHx8ICh0aGlzLnJpZ2h0Q2FsZW5kYXIoKSAmJiB0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ1lZWVktTU0nKSA9PT0gdGhpcy5yaWdodENhbGVuZGFyKCkubW9udGg/LmZvcm1hdCgnWVlZWS1NTScpKSkgJiZcbiAgICAgICAgKHRoaXMuZW5kRGF0ZSgpPy5mb3JtYXQoJ1lZWVktTU0nKSA9PT0gdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykgfHwgdGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpID09PSB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdGFydERhdGUoKSkge1xuICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjdXJyZW50Lm1vbnRoID0gdGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKT8uZGF0ZSgyKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5lbmREYXRlKCk/Lm1vbnRoKCkgIT09IHRoaXMuc3RhcnREYXRlKCk/Lm1vbnRoKCkgfHwgdGhpcy5lbmREYXRlKCk/LnllYXIoKSAhPT0gdGhpcy5zdGFydERhdGUoKT8ueWVhcigpKSB7XG4gICAgICAgICAgdGhpcy5yaWdodENhbGVuZGFyLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpPy5kYXRlKDIpO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCk/LmRhdGUoMik/LmFkZCgxLCAnbW9udGgnKTtcblxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXJ0RGF0ZSgpICYmXG4gICAgICB0aGlzLmxlZnRDYWxlbmRhcigpLm1vbnRoICYmXG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aCAmJlxuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykgIT09IHRoaXMuc3RhcnREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpICYmXG4gICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIoKS5tb250aD8uZm9ybWF0KCdZWVlZLU1NJykgIT09IHRoaXMuc3RhcnREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTScpXG4gICAgKSB7XG4gICAgICB0aGlzLmxlZnRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCk/LmRhdGUoMik7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmlnaHRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5tb250aCA9IHRoaXMuc3RhcnREYXRlKCk/LmNsb25lKCk/LmRhdGUoMik/LmFkZCgxLCAnbW9udGgnKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VGltZUlucHV0KHNpZGU6IFNpZGVFbnVtKSB7XG4gICAgY29uc3QgaG91ciA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRIb3VyfWApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRNaW51dGV9YCk7XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCAmJiB0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICBsZXQgc3RhcnQgPSB0aGlzLnN0YXJ0RGF0ZSgpPy5jbG9uZSgpO1xuXG4gICAgICBzdGFydCA9IHN0YXJ0Py5ob3VyKGhvdXIpO1xuICAgICAgc3RhcnQgPSBzdGFydD8ubWludXRlKG1pbnV0ZSk7XG4gICAgICB0aGlzLnNldFN0YXJ0RGF0ZShzdGFydCk7XG4gICAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5zdGFydERhdGUoKT8uY2xvbmUoKSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmREYXRlKCkgJiYgdGhpcy5lbmREYXRlKCk/LmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzdGFydD8uZm9ybWF0KCdZWVlZLU1NLUREJykgJiYgdGhpcy5lbmREYXRlKCk/LmlzQmVmb3JlKHN0YXJ0KSkge1xuICAgICAgICB0aGlzLnNldEVuZERhdGUoc3RhcnQ/LmNsb25lKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmVuZERhdGUoKSAmJiBzdGFydCAmJiB0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBjb25zdCBzdGFydENsb25lID0gdGhpcy5nZXREYXRlV2l0aFRpbWUoc3RhcnQsIFNpZGVFbnVtLnJpZ2h0KTtcblxuICAgICAgICBpZiAoc3RhcnRDbG9uZS5pc0JlZm9yZShzdGFydCkpIHtcbiAgICAgICAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtTaWRlRW51bS5yaWdodF0udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkSG91ciA9IGhvdXI7XG4gICAgICAgICAgICBjdXJyZW50LnNlbGVjdGVkTWludXRlID0gbWludXRlO1xuXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZERhdGUoKSkge1xuICAgICAgbGV0IGVuZCA9IHRoaXMuZW5kRGF0ZSgpPy5jbG9uZSgpO1xuXG4gICAgICBlbmQgPSBlbmQ/LmhvdXIoaG91cik7XG4gICAgICBlbmQgPSBlbmQ/Lm1pbnV0ZShtaW51dGUpO1xuICAgICAgdGhpcy5zZXRFbmREYXRlKGVuZCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKFNpZGVFbnVtLmxlZnQpO1xuICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5yaWdodCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNhbGVuZGFycygpIHtcbiAgICB0aGlzLnJlbmRlckNhbGVuZGFyKFNpZGVFbnVtLmxlZnQpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoU2lkZUVudW0ucmlnaHQpO1xuICAgIGlmICh0aGlzLmVuZERhdGUoKSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZVNlbGVjdGVkTGFiZWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ2FsZW5kYXIoc2lkZTogU2lkZUVudW0pIHtcbiAgICAvLyBzaWRlIGVudW1cbiAgICBjb25zdCBtYWluQ2FsZW5kYXI6IHsgY2FsZW5kYXI/OiBJQ2FsZW5kYXI7IG1vbnRoPzogRGF5anMgfSA9IHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyB0aGlzLmxlZnRDYWxlbmRhcigpIDogdGhpcy5yaWdodENhbGVuZGFyKCk7XG5cbiAgICBpZiAoIW1haW5DYWxlbmRhci5tb250aCB8fCB0aGlzLmRhdGVPcHRpb25zKCkuZmlyc3REYXkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmRhdGVPcHRpb25zKCkuZmlyc3REYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtb250aCA9IG1haW5DYWxlbmRhci5tb250aC5tb250aCgpO1xuICAgIGNvbnN0IHllYXIgPSBtYWluQ2FsZW5kYXIubW9udGgueWVhcigpO1xuICAgIGNvbnN0IGhvdXIgPSBtYWluQ2FsZW5kYXIubW9udGguaG91cigpO1xuICAgIGNvbnN0IG1pbnV0ZSA9IG1haW5DYWxlbmRhci5tb250aC5taW51dGUoKTtcbiAgICBjb25zdCBzZWNvbmQgPSBtYWluQ2FsZW5kYXIubW9udGguc2Vjb25kKCk7XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBnZXREYXlqcyh7IGRhdGU6IG5ldyBEYXRlKHllYXIsIG1vbnRoKSB9KS5kYXlzSW5Nb250aCgpO1xuICAgIGNvbnN0IGZpcnN0RGF5ID0gZ2V0RGF5anMoeyBkYXRlOiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkgfSk7XG4gICAgY29uc3QgbGFzdERheSA9IGdldERheWpzKHsgZGF0ZTogbmV3IERhdGUoeWVhciwgbW9udGgsIGRheXNJbk1vbnRoKSB9KTtcbiAgICBjb25zdCBsYXN0TW9udGggPSBnZXREYXlqcyh7IGRhdGU6IGZpcnN0RGF5LnN1YnRyYWN0KDEsICdtb250aCcpIH0pLm1vbnRoKCk7XG4gICAgY29uc3QgbGFzdFllYXIgPSBnZXREYXlqcyh7IGRhdGU6IGZpcnN0RGF5LnN1YnRyYWN0KDEsICdtb250aCcpIH0pLnllYXIoKTtcbiAgICBjb25zdCBkYXlzSW5MYXN0TW9udGggPSBnZXREYXlqcyh7IGRhdGU6IG5ldyBEYXRlKGxhc3RZZWFyLCBsYXN0TW9udGgpIH0pLmRheXNJbk1vbnRoKCk7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZmlyc3REYXkuZGF5KCk7XG4gICAgY29uc3QgY2FsZW5kYXI6IElDYWxlbmRhciA9IHt9O1xuXG4gICAgY2FsZW5kYXIuZmlyc3REYXkgPSBmaXJzdERheTtcbiAgICBjYWxlbmRhci5sYXN0RGF5ID0gbGFzdERheTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgY2FsZW5kYXJbaV0gPSBbXTtcbiAgICB9XG4gICAgbGV0IHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gZGF5T2ZXZWVrICsgKHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSA/PyAxKSArIDE7XG5cbiAgICBpZiAoc3RhcnREYXkgPiBkYXlzSW5MYXN0TW9udGgpIHtcbiAgICAgIHN0YXJ0RGF5IC09IDc7XG4gICAgfVxuICAgIGlmIChkYXlPZldlZWsgPT09IHRoaXMuZGF0ZU9wdGlvbnMoKS5maXJzdERheSkge1xuICAgICAgc3RhcnREYXkgPSBkYXlzSW5MYXN0TW9udGggLSA2O1xuICAgIH1cbiAgICBsZXQgY3VyRGF0ZSA9IGdldERheWpzKHsgZGF0ZTogbmV3IERhdGUobGFzdFllYXIsIGxhc3RNb250aCwgc3RhcnREYXksIDEyLCBtaW51dGUsIHNlY29uZCkgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgY29sID0gMCwgcm93ID0gMDsgaSA8IDQyOyBpKyssIGNvbCsrLCBjdXJEYXRlID0gZ2V0RGF5anMoeyBkYXRlOiBjdXJEYXRlIH0pLmFkZCgyNCwgJ2hvdXInKSkge1xuICAgICAgaWYgKGkgPiAwICYmIGNvbCAlIDcgPT09IDApIHtcbiAgICAgICAgY29sID0gMDtcbiAgICAgICAgcm93Kys7XG4gICAgICB9XG4gICAgICBjYWxlbmRhcltyb3ddW2NvbF0gPSBjdXJEYXRlLmNsb25lKCkuaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcbiAgICAgIGN1ckRhdGUgPSBjdXJEYXRlLmhvdXIoMTIpO1xuXG4gICAgICBjb25zdCBtaW5EYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLm1pbkRhdGUoKSB9KTtcbiAgICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuICAgICAgaWYgKG1pbkRhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBtaW5EYXRlPy5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUobWluRGF0ZSkgJiYgc2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGNhbGVuZGFyW3Jvd11bY29sXSA9IG1pbkRhdGU/LmNsb25lKCk7XG4gICAgICB9XG4gICAgICBpZiAobWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IG1heERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0FmdGVyKG1heERhdGUpICYmIHNpZGUgPT09ICdyaWdodCcpIHtcbiAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gbWF4RGF0ZT8uY2xvbmUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ubGVmdCkge1xuICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQuY2FsZW5kYXIgPSBjYWxlbmRhcjtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2lkZSA9PT0gU2lkZUVudW0ucmlnaHQpIHtcbiAgICAgIHRoaXMucmlnaHRDYWxlbmRhci51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgICAgY3VycmVudC5jYWxlbmRhciA9IGNhbGVuZGFyO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1pbkRhdGUgPSBzaWRlID09PSAnbGVmdCcgPyBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWluRGF0ZSgpIH0pIDogZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpIH0pO1xuICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuXG4gICAgdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdLnNldCh7XG4gICAgICBtb250aDogbW9udGgsXG4gICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgaG91cjogaG91cixcbiAgICAgIG1pbnV0ZTogbWludXRlLFxuICAgICAgc2Vjb25kOiBzZWNvbmQsXG4gICAgICBkYXlzSW5Nb250aDogZGF5c0luTW9udGgsXG4gICAgICBmaXJzdERheTogZmlyc3REYXksXG4gICAgICBsYXN0RGF5OiBsYXN0RGF5LFxuICAgICAgbGFzdE1vbnRoOiBsYXN0TW9udGgsXG4gICAgICBsYXN0WWVhcjogbGFzdFllYXIsXG4gICAgICBkYXlzSW5MYXN0TW9udGg6IGRheXNJbkxhc3RNb250aCxcbiAgICAgIGRheU9mV2VlazogZGF5T2ZXZWVrLFxuICAgICAgY2FsUm93czogc2lnbmFsKEFycmF5LmZyb20oQXJyYXkoNikua2V5cygpKSksXG4gICAgICBjYWxDb2xzOiBzaWduYWwoQXJyYXkuZnJvbShBcnJheSg3KS5rZXlzKCkpKSxcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgbWluRGF0ZTogbWluRGF0ZSxcbiAgICAgIG1heERhdGU6IG1heERhdGUsXG4gICAgICBjYWxlbmRhcjogY2FsZW5kYXIsXG4gICAgICBkcm9wZG93bnM6IHNpZ25hbCh7fSksXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuc2hvd0Ryb3Bkb3duc1NlbGVjdCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50TW9udGggPSBjYWxlbmRhclsxXVsxXS5tb250aCgpO1xuICAgICAgY29uc3QgY3VycmVudFllYXIgPSBjYWxlbmRhclsxXVsxXS55ZWFyKCk7XG4gICAgICBjb25zdCBtYXhZZWFyID0gbWF4RGF0ZT8ueWVhcigpID8/IERFRkFVTFRfTUFYX1lFQVI7XG4gICAgICBjb25zdCBtaW5ZZWFyID0gbWluRGF0ZT8ueWVhcigpID8/IERFRkFVTFRfTUlOX1lFQVI7XG4gICAgICBjb25zdCBpbk1pblllYXIgPSBjdXJyZW50WWVhciA9PT0gbWluWWVhcjtcbiAgICAgIGNvbnN0IGluTWF4WWVhciA9IGN1cnJlbnRZZWFyID09PSBtYXhZZWFyO1xuICAgICAgY29uc3QgeWVhcnMgPSBbXTtcblxuICAgICAgZm9yIChsZXQgeSA9IG1pblllYXI7IHkgPD0gbWF4WWVhcjsgeSsrKSB7XG4gICAgICAgIHllYXJzLnB1c2goeSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNhbGVuZGFyVmFyaWFibGVzKClcbiAgICAgICAgW3NpZGVdKClcbiAgICAgICAgLmRyb3Bkb3ducz8uc2V0KHtcbiAgICAgICAgICBjdXJyZW50TW9udGg6IGN1cnJlbnRNb250aCxcbiAgICAgICAgICBjdXJyZW50WWVhcjogY3VycmVudFllYXIsXG4gICAgICAgICAgbWF4WWVhcjogbWF4WWVhcixcbiAgICAgICAgICBtaW5ZZWFyOiBtaW5ZZWFyLFxuICAgICAgICAgIGluTWluWWVhcjogaW5NaW5ZZWFyLFxuICAgICAgICAgIGluTWF4WWVhcjogaW5NYXhZZWFyLFxuICAgICAgICAgIG1vbnRoQXJyYXlzOiBzaWduYWwoQXJyYXkuZnJvbShBcnJheSgxMikua2V5cygpKSksXG4gICAgICAgICAgeWVhckFycmF5czogc2lnbmFsKHllYXJzKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuYnVpbGRDZWxscyhjYWxlbmRhciwgc2lkZSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ2VsbHMoY2FsZW5kYXI6IElDYWxlbmRhciwgc2lkZTogU2lkZUVudW0pIHtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCA2OyByb3crKykge1xuICAgICAgY29uc3QgY2xhc3NsZXNzID0gdGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCk7XG5cbiAgICAgIGlmIChjbGFzc2xlc3MuY2xhc3Nlcykge1xuICAgICAgICBjbGFzc2xlc3MuY2xhc3Nlc1tyb3ddID0ge307XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCA3OyBjb2wrKykge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gW107XG5cbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLnN0YXJ0RGF0ZSgpIH0pO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLmVuZERhdGUoKSB9KTtcbiAgICAgICAgY29uc3Qgbm93SG92ZXJlZERhdGUgPSB0aGlzLm5vd0hvdmVyZWREYXRlKCk7XG5cbiAgICAgICAgaWYgKGNhbGVuZGFyW3Jvd11bY29sXS5pc1NhbWUobmV3IERhdGUoKSwgJ2RheScpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCd0b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uaXNvV2Vla2RheSgpID4gNSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnd2Vla2VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0ubW9udGgoKSAhPT0gY2FsZW5kYXJbMV1bMV0ubW9udGgoKSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluRGF0ZSgpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0JlZm9yZSh0aGlzLm1pbkRhdGUoKSwgJ2RheScpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdvZmYnLCAnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jYWxlbmRhclZhcmlhYmxlcygpW3NpZGVdKCkubWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNBZnRlcih0aGlzLmNhbGVuZGFyVmFyaWFibGVzKClbc2lkZV0oKS5tYXhEYXRlLCAnZGF5JykpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ29mZicsICdkaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydERhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzdGFydERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdhY3RpdmUnLCAnc3RhcnQtZGF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmREYXRlICE9PSBudWxsICYmIGNhbGVuZGFyW3Jvd11bY29sXS5mb3JtYXQoJ1lZWVktTU0tREQnKSA9PT0gZW5kRGF0ZT8uZm9ybWF0KCdZWVlZLU1NLUREJykpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2FjdGl2ZScsICdlbmQtZGF0ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydERhdGUgJiYgY2FsZW5kYXJbcm93XVtjb2xdLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzdGFydERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmICghZW5kRGF0ZSB8fCAoZW5kRGF0ZSAhPT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IGVuZERhdGU/LmZvcm1hdCgnWVlZWS1NTS1ERCcpKSkpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ2FjdGl2ZScsICdmdWxsLWRhdGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBzdGFydERhdGUgJiZcbiAgICAgICAgICBlbmREYXRlICYmXG4gICAgICAgICAgKChub3dIb3ZlcmVkRGF0ZSAhPT0gbnVsbCAmJiB0aGlzLnBpY2tpbmdEYXRlKCkpIHx8IGVuZERhdGUgIT09IG51bGwpICYmXG4gICAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID4gc3RhcnREYXRlICYmXG4gICAgICAgICAgKGNhbGVuZGFyW3Jvd11bY29sXSA8IGVuZERhdGUgfHwgKG5vd0hvdmVyZWREYXRlICYmIGNhbGVuZGFyW3Jvd11bY29sXSA8IG5vd0hvdmVyZWREYXRlICYmIHRoaXMucGlja2luZ0RhdGUoKSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCghY2xhc3Nlcy5maW5kKChlbCkgPT4gZWwgPT09ICdvZmYnKSA/ICdpbi1yYW5nZScgOiAnZm9jdXMtb2ZmJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNuYW1lID0gJycsXG4gICAgICAgICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjbmFtZSArPSBjbGFzc2VzW2ldICsgJyAnO1xuXG4gICAgICAgICAgaWYgKGNsYXNzZXNbaV0gPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICAgIGNuYW1lICs9ICdhdmFpbGFibGUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsYXNzbGVzcy5jbGFzc2VzKSB7XG4gICAgICAgICAgY2xhc3NsZXNzLmNsYXNzZXNbcm93XVtjb2xdID0gY25hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUaW1lUGlja2VyKHNpZGU6IFNpZGVFbnVtKSB7XG4gICAgbGV0IHNlbGVjdGVkOiBEYXlqcyA9IGdldERheWpzKCksXG4gICAgICBtaW5EYXRlO1xuICAgIGNvbnN0IG1heERhdGUgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMubWF4RGF0ZSgpIH0pO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGdldERheWpzKHsgZGF0ZTogdGhpcy5zdGFydERhdGUoKSB9KTtcbiAgICBjb25zdCBlbmREYXRlID0gZ2V0RGF5anMoeyBkYXRlOiB0aGlzLmVuZERhdGUoKSB9KTtcblxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5sZWZ0ICYmIHN0YXJ0RGF0ZSkge1xuICAgICAgc2VsZWN0ZWQgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgIG1pbkRhdGUgPSB0aGlzLm1heERhdGUoKTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09IFNpZGVFbnVtLnJpZ2h0ICYmIGVuZERhdGUpIHtcbiAgICAgIHNlbGVjdGVkID0gZW5kRGF0ZS5jbG9uZSgpO1xuICAgICAgbWluRGF0ZSA9IHRoaXMuc3RhcnREYXRlKCk7XG4gICAgfVxuICAgIGlmIChzaWRlID09PSBTaWRlRW51bS5yaWdodCAmJiAhZW5kRGF0ZSkge1xuICAgICAgaWYgKCFzdGFydERhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSBnZXREYXlqcyh7IGRhdGU6IHRoaXMuZ2V0RGF0ZVdpdGhUaW1lKHN0YXJ0RGF0ZSwgU2lkZUVudW0ucmlnaHQpIH0pO1xuICAgICAgaWYgKHNlbGVjdGVkLmlzQmVmb3JlKHN0YXJ0RGF0ZSkpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBzdGFydERhdGUuY2xvbmUoKTtcbiAgICAgIH1cbiAgICAgIG1pbkRhdGUgPSBzdGFydERhdGU7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gMDtcbiAgICBjb25zdCBlbmQgPSAyMztcblxuICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdLnNldCh7XG4gICAgICBob3VyczogW10sXG4gICAgICBtaW51dGVzOiBbXSxcbiAgICAgIG1pbnV0ZXNMYWJlbDogW10sXG4gICAgICBzZWNvbmRzOiBbXSxcbiAgICAgIHNlY29uZHNMYWJlbDogW10sXG4gICAgICBkaXNhYmxlZEhvdXJzOiBbXSxcbiAgICAgIGRpc2FibGVkTWludXRlczogW10sXG4gICAgICBkaXNhYmxlZFNlY29uZHM6IFtdLFxuICAgICAgc2VsZWN0ZWRIb3VyOiAwLFxuICAgICAgc2VsZWN0ZWRNaW51dGU6IDAsXG4gICAgICBzZWxlY3RlZFNlY29uZDogMCxcbiAgICB9KTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgIGNvbnN0IGlfaW5fMjQgPSBpO1xuXG4gICAgICBjb25zdCB0aW1lID0gc2VsZWN0ZWQuY2xvbmUoKS5ob3VyKGlfaW5fMjQpO1xuICAgICAgbGV0IGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUubWludXRlKDU5KS5pc0JlZm9yZShtaW5EYXRlKSkge1xuICAgICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLm1pbnV0ZSgwKS5pc0FmdGVyKG1heERhdGUpKSB7XG4gICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdLnVwZGF0ZSgoY3VycmVudCkgPT4ge1xuICAgICAgICBjdXJyZW50LmhvdXJzPy5wdXNoKGkpO1xuICAgICAgICBpZiAoaV9pbl8yNCA9PT0gc2VsZWN0ZWQuaG91cigpICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRIb3VyID0gaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICBjdXJyZW50LmRpc2FibGVkSG91cnM/LnB1c2goaSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDYwOyBpICs9IHRoaXMudGltZVBpY2tlckluY3JlbWVudCgpKSB7XG4gICAgICBjb25zdCBwYWRkZWQgPSBpIDwgMTAgPyAnMCcgKyBpIDogYCR7aX1gO1xuICAgICAgY29uc3QgdGltZSA9IHNlbGVjdGVkLmNsb25lKCkubWludXRlKGkpO1xuXG4gICAgICBsZXQgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKG1pbkRhdGUgJiYgdGltZS5zZWNvbmQoNTkpLmlzQmVmb3JlKG1pbkRhdGUpKSB7XG4gICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhEYXRlICYmIHRpbWUuc2Vjb25kKDApLmlzQWZ0ZXIobWF4RGF0ZSkpIHtcbiAgICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0udXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICAgIGN1cnJlbnQubWludXRlcz8ucHVzaChpKTtcbiAgICAgICAgY3VycmVudC5taW51dGVzTGFiZWw/LnB1c2gocGFkZGVkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkLm1pbnV0ZSgpID09PSBpICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRNaW51dGUgPSBpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGN1cnJlbnQuZGlzYWJsZWRNaW51dGVzPy5wdXNoKGkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMoKVtzaWRlXS51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGN1cnJlbnQuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcblxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzU2luZ2xlKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbC5zZXQodGhpcy5zdGFydERhdGUoKT8uZm9ybWF0KCdERC9NTS9ZWVlZJykpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZERhdGUoKSkge1xuICAgICAgLy8gaWYgd2UgdXNlIHJhbmdlcyBhbmQgc2hvdWxkIHNob3cgcmFuZ2UgbGFiZWwgb24gaW5wdXRcbiAgICAgIGlmICh0aGlzLnF1aWNrUmFuZ2VzQXJyYXkoKS5sZW5ndGggJiYgdGhpcy5zaG93UmFuZ2VMYWJlbE9uSW5wdXQoKSAmJiB0aGlzLnNlbGVjdGVkUXVpY2tSYW5nZSgpICYmIHRoaXMuZGF0ZU9wdGlvbnMoKS5jdXN0b21SYW5nZUxhYmVsICE9PSB0aGlzLnNlbGVjdGVkUXVpY2tSYW5nZSgpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbC5zZXQodGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2UoKSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZExhYmVsLnNldChgJHt0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKX0ke3RoaXMuZGF0ZU9wdGlvbnMoKS5zZXBhcmF0b3J9JHt0aGlzLmVuZERhdGUoKT8uZm9ybWF0KCdERC9NTS9ZWVlZJyl9YCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZExhYmVsLnNldChgJHt0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKX0ke3RoaXMuZGF0ZU9wdGlvbnMoKS5zZXBhcmF0b3J9JHt0aGlzLnN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlldygpIHtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5yaWdodCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XG4gICAgdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVdpdGhUaW1lKGRhdGU6IERheWpzLCBzaWRlOiBTaWRlRW51bSk6IERheWpzIHtcbiAgICBjb25zdCBob3VyID0gcGFyc2VJbnQoYCR7dGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0oKS5zZWxlY3RlZEhvdXJ9YCwgMTApO1xuICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGAke3RoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRNaW51dGV9YCwgMTApO1xuICAgIGNvbnN0IHNlY29uZCA9IHRoaXMuaGFzU2Vjb25kUGlja2VyKCkgJiYgIWlzTmlsKHRoaXMudGltZXBpY2tlclZhcmlhYmxlcygpW3NpZGVdKCkuc2VsZWN0ZWRTZWNvbmQpID8gcGFyc2VJbnQoYCR7dGhpcy50aW1lcGlja2VyVmFyaWFibGVzKClbc2lkZV0oKS5zZWxlY3RlZFNlY29uZH1gLCAxMCkgOiAwO1xuXG4gICAgcmV0dXJuIGRhdGUuY2xvbmUoKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1NaW5NYXhEYXRlKHZhbHVlOiBEYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IERheWpzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoZGF5anMuaXNEYXlqcyh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBnZXREYXlqcyh7IGRhdGU6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkRGlzcGxheVRpbWUoc2lkZTogSVRpbWVwaWNrZXJWYXJpYWJsZXNTaWRlKSB7XG4gICAgbGV0IHN0ckhvdXJzOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSBzaWRlLnNlbGVjdGVkSG91cjtcbiAgICBsZXQgc3RyTWludXRlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSBzaWRlLnNlbGVjdGVkTWludXRlO1xuXG4gICAgaWYgKChzaWRlLnNlbGVjdGVkSG91ciB8fCAwKSA8IDEwKSB7XG4gICAgICBzdHJIb3VycyA9IGAwJHtzaWRlLnNlbGVjdGVkSG91ciA/PyAwfWA7XG4gICAgfVxuXG4gICAgaWYgKChzaWRlLnNlbGVjdGVkTWludXRlIHx8IDApIDwgMTApIHtcbiAgICAgIHN0ck1pbnV0ZSA9IGAwJHtzaWRlLnNlbGVjdGVkTWludXRlID8/IDB9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7c3RySG91cnN9OiR7c3RyTWludXRlfWA7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkRGlzcGxheVRpbWVJbnB1dChzaWRlOiBTaWRlRW51bSwgdGltZVR5cGU6ICdob3VyJyB8ICdtaW51dGUnKSB7XG4gICAgY29uc3QgdGltZSA9XG4gICAgICB0aW1lVHlwZSA9PT0gJ2hvdXInID8gKHNpZGUgPT09IFNpZGVFbnVtLmxlZnQgPyB0aGlzLnRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpIDogdGhpcy50aW1lcGlja2VyVmFsdWVJdGVtKCkucmlnaHRob3VyKCkpIDogc2lkZSA9PT0gU2lkZUVudW0ubGVmdCA/IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLmxlZnRtaW51dGUoKSA6IHRoaXMudGltZXBpY2tlclZhbHVlSXRlbSgpLnJpZ2h0bWludXRlKCk7XG5cbiAgICBpZiAoIXRpbWUpIHtcbiAgICAgIHJldHVybiAnMDAnO1xuICAgIH1cbiAgICBpZiAodGltZSA8IDEwKSB7XG4gICAgICByZXR1cm4gYDAke3RpbWV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGltZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHJldHVybjtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXIgdGVzdC1jbGFzc1wiPlxuICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhclwiXG4gICAgICBbY2xhc3MucmlnaHRdPVwiaXNTaW5nbGUoKVwiXG4gICAgICBbY2xhc3MubGVmdF09XCIhaXNTaW5nbGUoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdXCI+XG4gICAgICAgIEBpZiAoY2FsZW5kYXJWYXJpYWJsZXMoKTsgYXMgY2FsZW5kYXJWYXJpYWJsZXMpIHtcbiAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgIGNvbHNwYW49XCI3XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGhcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd0Ryb3Bkb3duc1NlbGVjdCgpICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5kcm9wZG93bnM/LigpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIhZmxleCBtYi1bMTBweF0gdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMy80IGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzhweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwieyB3aWR0aEJ5UGFyZW50OiBmYWxzZSwgaWdub3JlQXJyb3c6IHRydWUsIHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzEzMHB4XScsIHBvc2l0aW9uOiB7IG1vZGU6ICdjZW50ZXInLCBkaXN0YW5jZTogMCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEtleXNEaXNhYmxlXT1cImRpc2FibGVNb250aCgpLmxlZnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnZlcnRJdGVtU2VsZWN0ZWRdPVwiY29udmVydEl0ZW1Nb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdE1vbnRoc0NvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEtleVNlbGVjdGVkXT1cImxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZF09XCJtb250aEh0dHBEZXRhaWxDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWREcm9wZG93bigkZXZlbnQsIHNpZGVFbnVtLmxlZnQgKyAnbW9udGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsIHNpZGVFbnVtLmxlZnQgKyAnbW9udGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nZUZsYWdNb3VzZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2hvd0xpc3QpPVwiaGFuZGxlclNob3dMaXN0RHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ21vbnRoJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXItZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAnbW9udGgnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oNG1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGVPcHRpb25zKCkubW9udGhOYW1lcyAmJiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzW2NhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bMTNweF0gdGV4dC1bIzZhNzM4M11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICdtb250aCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJvdGF0ZV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICdtb250aCddID8gJzkwZGVnJyA6ICcyNzBkZWcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwieyB3aWR0aEJ5UGFyZW50OiBmYWxzZSwgaWdub3JlQXJyb3c6IHRydWUsIHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzExMHB4XScsIHBvc2l0aW9uOiB7IG1vZGU6ICdjZW50ZXInLCBkaXN0YW5jZTogMCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udmVydEl0ZW1TZWxlY3RlZF09XCJjb252ZXJ0SXRlbVllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0SGlkZGVuSW5wdXRTZWFyY2hdPVwibGlzdFllYXJIaWRkZW5JbnB1dFNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdENvbmZpZ109XCJsaXN0TGVmdFllYXJDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RLZXlTZWxlY3RlZF09XCJsaXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2h0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRdPVwibGVmdFllYXJIdHRwRGV0YWlsQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNob3dMaXN0KT1cImhhbmRsZXJTaG93TGlzdERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ubGVmdCArICd5ZWFyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ3llYXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsIHNpZGVFbnVtLmxlZnQgKyAneWVhcicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRhcmspXV09XCJjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5sZWZ0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAneWVhciddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg0bVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/LmZvcm1hdCgnIFlZWVknKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHRleHQtWzEzcHhdIHRleHQtWyM2YTczODNdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLmxlZnQgKyAneWVhciddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJvdGF0ZV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ubGVmdCArICd5ZWFyJ10gPyAnOTBkZWcnIDogJzI3MGRlZydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgZmxleCBpdGVtcy1jZW50ZXIgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5taW5EYXRlIHx8IGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5taW5EYXRlPy5pc0JlZm9yZShjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5maXJzdERheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlckNsaWNrUHJldihzaWRlRW51bS5sZWZ0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBhYnNvbHV0ZSBsZWZ0LTAgdG9wLVstM3B4XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCByb3RhdGUtWzE4MGRlZ10gdGV4dC1bIzZhNzM4M10gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKCFjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkubWF4RGF0ZSB8fCBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkubWF4RGF0ZT8uaXNBZnRlcihjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5sYXN0RGF5KSkgJiYgaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJoYW5kbGVyQ2xpY2tOZXh0KHNpZGVFbnVtLmxlZnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1sLVsxMnB4XSBhYnNvbHV0ZSByaWdodC0wIHRvcC1bLTNweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bIzZhNzM4M10gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKCFzaG93RHJvcGRvd25zU2VsZWN0KCkgfHwgIWNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5kcm9wZG93bnMpIHtcbiAgICAgICAgICAgICAgICAgICAge3sgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhciAmJiBkYXRlT3B0aW9ucygpLm1vbnRoTmFtZXNbY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8ubW9udGgoKSA/PyAtMV0gfX1cbiAgICAgICAgICAgICAgICAgICAge3sgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/LmZvcm1hdCgnIFlZWVknKSB9fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cIndlZWstZGF5c1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGRheW9md2VlayBvZiBkYXRlT3B0aW9ucygpLmRheXNPZldlZWs7IHRyYWNrIGRheW9md2Vlaykge1xuICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg2bSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF5b2Z3ZWVrIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImRycC1hbmltYXRlXCI+XG4gICAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsUm93cz8uKCk7IHRyYWNrIHJvdykge1xuICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLVszMnB4XVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXM/Lltyb3ddPy5jbGFzc0xpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjYWxlbmRhclZhcmlhYmxlcy5sZWZ0KCkuY2FsQ29scz8uKCk7IHRyYWNrIGNvbCkge1xuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oNXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50b2RheV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LmRhdGUoKSA9PT0gdG9kYXkoKS5kYXRlKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5tb250aCgpID09PSB0b2RheSgpLm1vbnRoKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy55ZWFyKCkgPT09IHRvZGF5KCkueWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXMgJiYgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNsYXNzZXM/Lltyb3ddPy5bY29sXVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQaWNrZXJEYXRlKCRldmVudCwgc2lkZUVudW0ubGVmdCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVySG92ZXJEYXRlKCRldmVudCwgc2lkZUVudW0ubGVmdCwgcm93LCBjb2wpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyXCI+e3sgY2FsZW5kYXJWYXJpYWJsZXMubGVmdCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzLmxlZnQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5kYXRlKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgY29sdW1uIGl0ZW1zLWNlbnRlciBwdC1bMTJweF1cIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1bNHB4XSBib3JkZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLVsjZTZlOGVkXV09XCIhdGltZVBpY2tlckVycm9yKClcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLVsjZmY1NDU0XV09XCJ0aW1lUGlja2VyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzSW5jbHVkZT1cIiF3LVszMHB4XSAhcC0wICFib3JkZXItbm9uZSAhdGV4dC1jZW50ZXIgbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwiaW50XCJcbiAgICAgICAgICAgICAgICBbZm9jdXNUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgIFtibHVyVGltZU91dF09XCIwXCJcbiAgICAgICAgICAgICAgICBbYXV0b0FkZFplcm9MZXNzVGhhbjEwSW5UeXBlSW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCIyM1wiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMlwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0aG91cigpXCJcbiAgICAgICAgICAgICAgICAob3V0SW5wdXRFdmVudCk9XCJoYW5kbGVySW5wdXRFdmVudCgkZXZlbnQsICdsZWZ0aG91cicpXCJcbiAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ubGVmdCArICdob3VyJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdsZWZ0aG91cicpXCJcbiAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoJGV2ZW50LCAnbGVmdGhvdXInKVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWgzcyB0ZXh0LVsjMzMzMzMzXVwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLWlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3NJbmNsdWRlPVwiIXctWzMwcHhdICFwLTAgIWJvcmRlci1ub25lICF0ZXh0LWNlbnRlciAhbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgIFthdXRvQWRkWmVyb0xlc3NUaGFuMTBJblR5cGVJbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2VtaXRFbXB0eUluRGF0YVR5cGVOdW1iZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJpbnRcIlxuICAgICAgICAgICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgW2JsdXJUaW1lT3V0XT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhWYWx1ZU51bWJlcl09XCI1OVwiXG4gICAgICAgICAgICAgICAgW21pblZhbHVlTnVtYmVyXT1cIjBcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMlwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5sZWZ0bWludXRlKClcIlxuICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50LCBzaWRlRW51bS5sZWZ0ICsgJ21pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAob3V0SW5wdXRFdmVudCk9XCJoYW5kbGVySW5wdXRFdmVudCgkZXZlbnQsICdsZWZ0bWludXRlJylcIlxuICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdsZWZ0bWludXRlJylcIlxuICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyVGltZSgkZXZlbnQsICdsZWZ0bWludXRlJylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmICghaXNTaW5nbGUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXIgcmlnaHQgbWwtWzI0cHhdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLVs0cHhdIGJnLVsjZmZmZmZmXVwiPlxuICAgICAgICAgIEBpZiAoY2FsZW5kYXJWYXJpYWJsZXMoKSkge1xuICAgICAgICAgICAgPHRhYmxlPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgIGNvbHNwYW49XCI3XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtb250aFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dEcm9wZG93bnNTZWxlY3QoKSAmJiBjYWxlbmRhclZhcmlhYmxlcygpLmxlZnQoKS5kcm9wZG93bnM/LigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiFmbGV4IG1iLVsxMHB4XSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTMvNCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzhweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNOZ0NvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3ZlckN1c3RvbUNvbmZpZ109XCJ7IHdpZHRoQnlQYXJlbnQ6IGZhbHNlLCBpZ25vcmVBcnJvdzogdHJ1ZSwgcGFkZGluZ0xlZnRJdGVtOiB0cnVlLCBjbGFzc0luY2x1ZGU6ICchdy1bMTMwcHhdJywgcG9zaXRpb246IHsgbW9kZTogJ2NlbnRlcicsIGRpc3RhbmNlOiAwIH0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdE1heEl0ZW1TaG93XT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q2xpY2tFeGFjdGx5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0S2V5c0Rpc2FibGVdPVwiZGlzYWJsZU1vbnRoKCkucmlnaHQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb252ZXJ0SXRlbVNlbGVjdGVkXT1cImNvbnZlcnRJdGVtTW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0Q29uZmlnXT1cImxpc3RNb250aHNDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdEtleVNlbGVjdGVkXT1cImxpc3RLZXlUb1NlbGVjdGVkKCkubW9udGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHR0cFJlcXVlc3REZXRhaWxJdGVtQnlJZF09XCJtb250aEh0dHBEZXRhaWxDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNob3dMaXN0KT1cImhhbmRsZXJTaG93TGlzdERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtY2FsZW5kYXItZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIhY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kYXJrKV1dPVwiY2hlY2tTaG93TGlzdERyb3Bkb3duKClbc2lkZUVudW0ucmlnaHQgKyAnbW9udGgnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFN0eWxlXT1cIidub3JtYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhciAmJiBkYXRlT3B0aW9ucygpLm1vbnRoTmFtZXNbY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8ubW9udGgoKSA/PyAtMV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsxM3B4XSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucm90YXRlXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICdtb250aCddID8gJzkwZGVnJyA6ICcyNzBkZWcnXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJDdXN0b21Db25maWddPVwieyB3aWR0aEJ5UGFyZW50OiBmYWxzZSwgaWdub3JlQXJyb3c6IHRydWUsIHBhZGRpbmdMZWZ0SXRlbTogdHJ1ZSwgY2xhc3NJbmNsdWRlOiAnIXctWzExMHB4XScsIHBvc2l0aW9uOiB7IG1vZGU6ICdjZW50ZXInLCBkaXN0YW5jZTogMCB9IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDbGlja0V4YWN0bHldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udmVydEl0ZW1TZWxlY3RlZF09XCJjb252ZXJ0SXRlbVllYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RIaWRkZW5JbnB1dFNlYXJjaF09XCJsaXN0WWVhckhpZGRlbklucHV0U2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdFJpZ2h0WWVhckNvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0S2V5U2VsZWN0ZWRdPVwibGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2h0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRdPVwicmlnaHRZZWFySHR0cERldGFpbENvbmZpZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkRHJvcGRvd24oJGV2ZW50LCBzaWRlRW51bS5yaWdodCArICd5ZWFyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsIHNpZGVFbnVtLnJpZ2h0ICsgJ3llYXInKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG91dFNob3dMaXN0KT1cImhhbmRsZXJTaG93TGlzdERyb3Bkb3duKCRldmVudCwgc2lkZUVudW0ucmlnaHQgKyAneWVhcicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRhcmspXV09XCJjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICd5ZWFyJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ3llYXInXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDRtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U3R5bGVdPVwiJ25vcm1hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bMV0/LlsxXT8uZm9ybWF0KCdZWVlZJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWljb24tY2hldnJvbi1yaWdodCB0ZXh0LVsxM3B4XSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGFyayldXT1cImNoZWNrU2hvd0xpc3REcm9wZG93bigpW3NpZGVFbnVtLnJpZ2h0ICsgJ3llYXInXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucm90YXRlXT1cIiFjaGVja1Nob3dMaXN0RHJvcGRvd24oKVtzaWRlRW51bS5yaWdodCArICd5ZWFyJ10gPyAnOTBkZWcnIDogJzI3MGRlZydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvNCBmbGV4IGl0ZW1zLWNlbnRlciByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0S2V5RnJvbVNlbGVjdGVkKCkueWVhciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICsgMSA9PT0gbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmIGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS5tb250aCA9PT0gMTIgJiYgbGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aCA9PT0gMSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyIDwgbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiYgbGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aCAmJiBsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggKyAxIDwgK2xpc3RLZXlUb1NlbGVjdGVkKCkubW9udGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYWJzb2x1dGUgbGVmdC0wIHRvcC1bLTNweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja1ByZXYoc2lkZUVudW0ucmlnaHQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jaGV2cm9uLXJpZ2h0IHJvdGF0ZS1bMTgwZGVnXSB0ZXh0LVsjNmE3MzgzXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyLWljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0S2V5RnJvbVNlbGVjdGVkKCkubW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0S2V5VG9TZWxlY3RlZCgpLm1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleUZyb21TZWxlY3RlZCgpLm1vbnRoID4gbGlzdEtleVRvU2VsZWN0ZWQoKS5tb250aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RLZXlGcm9tU2VsZWN0ZWQoKS55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleVRvU2VsZWN0ZWQoKS55ZWFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleUZyb21TZWxlY3RlZCgpLnllYXIgPT09IGxpc3RLZXlUb1NlbGVjdGVkKCkueWVhclxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctWyNmZmZmZmZdIHctWzIxcHhdIGgtWzIxcHhdIGN1cnNvci1ub25lIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtWzUwcHhdXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLm1heERhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhclZhcmlhYmxlcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmlnaHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1heERhdGU/LmlzQWZ0ZXIoY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8ubGFzdERheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlckNsaWNrTmV4dChzaWRlRW51bS5yaWdodClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtbC1bMTJweF0gYWJzb2x1dGUgcmlnaHQtMCB0b3AtWy0zcHhdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZXZyb24tcmlnaHQgdGV4dC1bIzZhNzM4M10gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1jYWxlbmRhci1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXNob3dEcm9wZG93bnNTZWxlY3QoKSB8fCAhY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmRyb3Bkb3ducykge1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGVPcHRpb25zKCkubW9udGhOYW1lcyAmJiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsZW5kYXIgJiYgZGF0ZU9wdGlvbnMoKS5tb250aE5hbWVzW2NhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/Lm1vbnRoKCkgPz8gLTFdIH19XG4gICAgICAgICAgICAgICAgICAgICAge3sgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uWzFdPy5bMV0/LmZvcm1hdCgnWVlZWScpIH19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ3ZWVrLWRheXNcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGRheW9md2VlayBvZiBkYXRlT3B0aW9ucygpLmRheXNPZldlZWs7IHRyYWNrIGRheW9md2Vlaykge1xuICAgICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlicy11aS1mb250LWg2bSB0ZXh0LVsjNmE3MzgzXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRTdHlsZV09XCInbm9ybWFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF5b2Z3ZWVrIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICBAZm9yIChyb3cgb2YgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbFJvd3M/LigpOyB0cmFjayByb3cpIHtcbiAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtWzMycHhdXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jbGFzc2VzICYmIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jbGFzc2VzPy5bcm93XT8uY2xhc3NMaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2FsQ29scz8uKCk7IHRyYWNrIGNvbCkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2xhc3NlcyAmJiBjYWxlbmRhclZhcmlhYmxlcygpLnJpZ2h0KCkuY2xhc3Nlcz8uW3Jvd10/Lltjb2xdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50b2RheV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5kYXRlKCkgPT09IHRvZGF5KCkuZGF0ZSgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy5tb250aCgpID09PSB0b2RheSgpLm1vbnRoKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyVmFyaWFibGVzKCkucmlnaHQoKS5jYWxlbmRhcj8uW3Jvd10/Lltjb2xdPy55ZWFyKCkgPT09IHRvZGF5KCkueWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJQaWNrZXJEYXRlKCRldmVudCwgc2lkZUVudW0ucmlnaHQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVySG92ZXJEYXRlKCRldmVudCwgc2lkZUVudW0ucmlnaHQsIHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2FsZW5kYXJWYXJpYWJsZXMoKS5yaWdodCgpLmNhbGVuZGFyPy5bcm93XT8uW2NvbF0/LmRhdGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHB0LVsxMnB4XVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgcm91bmRlZC1bNHB4XSBib3JkZXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItWyNlNmU4ZWRdXT1cIiF0aW1lUGlja2VyRXJyb3IoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1bI2ZmNTQ1NF1dPVwidGltZVBpY2tlckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1pbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3NJbmNsdWRlPVwiIXctWzMwcHhdICFwLTAgIWJvcmRlci1ub25lICF0ZXh0LWNlbnRlciAhbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJpbnRcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjIzXCJcbiAgICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbYmx1clRpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodGhvdXIoKVwiXG4gICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJDaGFuZ2VUaW1lVmFsdWUoJGV2ZW50LCAncmlnaHRob3VyJylcIlxuICAgICAgICAgICAgICAgICAgKG91dElucHV0RXZlbnQpPVwiaGFuZGxlcklucHV0RXZlbnQoJGV2ZW50LCAncmlnaHRob3VyJylcIlxuICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsICdyaWdodGhvdXInKVwiXG4gICAgICAgICAgICAgICAgICAob3V0Rm9jdXNBbmRCbHVyRXZlbnQpPVwiaGFuZGxlckZvY3VzQW5kQmx1clRpbWUoJGV2ZW50LCAncmlnaHRob3VyJylcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWgzcyB0ZXh0LVsjMzMzMzMzXVwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtaW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzSW5jbHVkZT1cIiF3LVszMHB4XSAhcC0wICFib3JkZXItbm9uZSAhdGV4dC1jZW50ZXIgbGlicy11aS1mb250LWg0cyAhdGV4dC1bIzA3MTYzMV1cIlxuICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJpbnRcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BZGRaZXJvTGVzc1RoYW4xMEluVHlwZUludF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbWl0RW1wdHlJbkRhdGFUeXBlTnVtYmVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIjU5XCJcbiAgICAgICAgICAgICAgICAgIFttaW5WYWx1ZU51bWJlcl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c1RpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbYmx1clRpbWVPdXRdPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRpbWVwaWNrZXJWYWx1ZUl0ZW0oKS5yaWdodG1pbnV0ZSgpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRJbnB1dEV2ZW50KT1cImhhbmRsZXJJbnB1dEV2ZW50KCRldmVudCwgJ3JpZ2h0bWludXRlJylcIlxuICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlckNoYW5nZVRpbWVWYWx1ZSgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRGb2N1c0FuZEJsdXJFdmVudCk9XCJoYW5kbGVyRm9jdXNBbmRCbHVyVGltZSgkZXZlbnQsICdyaWdodG1pbnV0ZScpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgPGRpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGxcIj5cbiAgICAgIEBpZiAoIWlzU2luZ2xlKCkgJiYgaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC1bOHB4XSBsaWJzLXVpLWZvbnQtaDdyIHRleHQtWyNmZjU0NTRdIGgtWzE0cHhdXCI+XG4gICAgICAgICAgQGlmICh0aW1lUGlja2VyRXJyb3IoKSkge1xuICAgICAgICAgICAgPHNwYW4+e3sgJ2kxOG5fZGF0ZV9jb21wYXJlX3N0YXJ0X2VuZF9tZXNzYWdlX2Vycm9yJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoIXF1aWNrUmFuZ2VzQXJyYXkoKS5sZW5ndGggfHwgIWlzU2luZ2xlKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBwdC1bMTZweF0ganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIEBpZiAoIWlzU2luZ2xlKCkpIHtcbiAgICAgICAgICAgIEBpZiAoIWVuZERhdGUoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bI2NkZDBkNl0gbGlicy11aS1mb250LWg2clwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29tcHV0ZWREaXNwbGF5VGltZUxlZnQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJmh5cGhlbjtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzdGFydERhdGUoKT8uZm9ybWF0KCdERC9NTS9ZWVlZJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmIChoYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbXB1dGVkRGlzcGxheVRpbWVSaWdodCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGVuZERhdGUoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1bI2NkZDBkNl0gbGlicy11aS1mb250LWg2clwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0YXJ0RGF0ZSgpPy5mb3JtYXQoJ0REL01NL1lZWVknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29tcHV0ZWREaXNwbGF5VGltZUxlZnQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJmh5cGhlbjtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBlbmREYXRlKCk/LmZvcm1hdCgnREQvTU0vWVlZWScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb21wdXRlZERpc3BsYXlUaW1lUmlnaHQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1yLVsxMnB4XVwiXG4gICAgICAgICAgICBsYWJlbD1cImkxOG5fY2FuY2VsXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b24tdGhpcmRcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDbGlja0NhbmNlbCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cImkxOG5fc2VsZWN0XCJcbiAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ2xpY2tBcHBseSgkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=