@acorex/components 20.1.10 → 20.1.12
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.
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"acorex-components-scheduler.mjs","sources":["../tmp-esm2022/scheduler/lib/scheduler.service.js","../tmp-esm2022/scheduler/lib/views/agenda/scheduler-agenda-view.component.js","../tmp-esm2022/scheduler/lib/views/day/scheduler-day-view.component.js","../tmp-esm2022/scheduler/lib/views/month/scheduler-month-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-day/scheduler-timeline-day-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-month/scheduler-timeline-month-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.js","../tmp-esm2022/scheduler/lib/views/week/scheduler-week-view.component.js","../tmp-esm2022/scheduler/lib/scheduler.component.js","../tmp-esm2022/scheduler/lib/scheduler.module.js","../tmp-esm2022/scheduler/acorex-components-scheduler.js"],"sourcesContent":["import { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerService {\n constructor() {\n this.formatService = inject(AXFormatService);\n this.calendarService = inject(AXCalendarService);\n this.HOURS_PER_DAY = 24;\n this.MINUTES_PER_HOUR = 60;\n this.BLOCK_DURATION_MINUTES = 30;\n this.MILLISECONDS_PER_MINUTE = 60 * 1000;\n this.MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;\n }\n /**\n * Checks if two appointments overlap in time.\n */\n doAppointmentsOverlap(appointmentA, appointmentB) {\n if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {\n return false;\n }\n const startA = appointmentA.startDate.getTime();\n const endA = appointmentA.endDate.getTime();\n const startB = appointmentB.startDate.getTime();\n const endB = appointmentB.endDate.getTime();\n // Uses strict overlap check (change < / > to <= / >= if touching boundaries count)\n return startA < endB && endA > startB;\n }\n /**\n * Calculates appointment duration in minutes.\n */\n calculateDurationInMinutes(Appointment) {\n if (!Appointment?.startDate || !Appointment.endDate)\n return 0;\n const durationMillis = Appointment.endDate.getTime() - Appointment.startDate.getTime();\n return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);\n }\n /**\n * Calculates appointment duration in blocks (default 30 min).\n */\n calculateDurationInBlocks(appointment) {\n const durationMinutes = this.calculateDurationInMinutes(appointment);\n return Math.ceil(durationMinutes / this.BLOCK_DURATION_MINUTES);\n }\n /**\n * Gets the day index (relative to view start) and block index (relative to start hour)\n * for a given date time within the view context. Returns null if outside view.\n */\n getBlockIdentifier(dateTime, viewStartDate, startHour, endHour, // Exclusive end hour\n viewTotalDays = 1) {\n if (!viewStartDate || !dateTime || typeof startHour !== 'number' || typeof endHour !== 'number') {\n return null;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Calculate exclusive end date\n // Check if dateTime is within the view's date and time range\n if (dateTime.compare(viewStartDate, 'day') < 0 ||\n dateTime.compare(viewEndDate, 'day') >= 0 || // Check against exclusive end date\n dateTime.hour < startHour ||\n dateTime.hour >= endHour // Check against exclusive end hour\n ) {\n return null;\n }\n // Calculate day index relative to view start\n const dayIndex = Math.floor((dateTime.date.getTime() - viewStartDate.date.getTime()) / this.MILLISECONDS_PER_DAY);\n // Ensure dayIndex is valid for the view duration\n if (dayIndex < 0 || dayIndex >= viewTotalDays) {\n return null;\n }\n const minutesIntoDay = dateTime.hour * this.MINUTES_PER_HOUR + dateTime.minute;\n const minutesIntoViewHours = minutesIntoDay - startHour * this.MINUTES_PER_HOUR;\n // This check should be redundant due to initial hour check, but safe to keep\n if (minutesIntoViewHours < 0)\n return null;\n const blockIndex = Math.floor(minutesIntoViewHours / this.BLOCK_DURATION_MINUTES);\n return { dayIndex, blockIndex };\n }\n /**\n * Groups appointments by the blocks they are ACTIVE in for a given view.\n * @param viewTotalDays - Number of days in the current view (1 for Day, 7 for Week, etc.)\n */\n calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, viewTotalDays) {\n const blocks = {};\n if (!viewStartDate || typeof startHour !== 'number' || typeof endHour !== 'number' || viewTotalDays <= 0) {\n return blocks;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Exclusive end date\n // Calculate total blocks based on consistent block duration\n const totalBlocksPerDay = Math.max(0, (endHour - startHour) * (this.MINUTES_PER_HOUR / this.BLOCK_DURATION_MINUTES));\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id)\n return;\n const appointmentEndDate = this.calendarService.create(appointment.endDate);\n const appointmentStartDate = this.calendarService.create(appointment.startDate);\n // Clamp appointment start/end times to the view boundaries (days and hours)\n let effectiveStart = appointmentStartDate.compare(viewStartDate) < 0 ? viewStartDate : appointmentStartDate;\n if (effectiveStart.hour < startHour)\n effectiveStart = effectiveStart.set('hour', startHour).startOf('hour');\n let effectiveEnd = appointmentEndDate.compare(viewEndDate) >= 0 ? viewEndDate : appointmentEndDate;\n if (effectiveEnd.hour >= endHour) {\n const endDayBase = effectiveEnd.compare(viewEndDate) >= 0 ? viewEndDate.add('day', -1) : effectiveEnd;\n effectiveEnd = endDayBase.set('hour', endHour).startOf('hour');\n }\n // Get start block info using the specified viewTotalDays\n const startInfo = this.getBlockIdentifier(effectiveStart, viewStartDate, startHour, endHour, viewTotalDays);\n if (!startInfo)\n return; // Appointment starts completely outside view\n // Get end block info (last block occupied) using the specified viewTotalDays\n const timeBeforeEnd = effectiveEnd.add('minute', -1);\n const endInfo = this.getBlockIdentifier(timeBeforeEnd, viewStartDate, startHour, endHour, viewTotalDays);\n // If endInfo is null, it means the appointment ends before the viewable part starts,\n // or exactly at the start, so it occupies no blocks. Handle this case.\n if (!endInfo ||\n endInfo.dayIndex < startInfo.dayIndex ||\n (endInfo.dayIndex === startInfo.dayIndex && endInfo.blockIndex < startInfo.blockIndex)) {\n return; // Appointment effectively has no duration within the viewable blocks\n }\n // Iterate through the days and blocks the appointment spans within the view\n for (let dIdx = startInfo.dayIndex; dIdx <= endInfo.dayIndex; dIdx++) {\n // Clamp day index just in case (should be handled by getBlockIdentifier checks)\n if (dIdx < 0 || dIdx >= viewTotalDays)\n continue;\n const startBlock = dIdx === startInfo.dayIndex ? startInfo.blockIndex : 0;\n // Make sure endBlock doesn't exceed the calculated totalBlocksPerDay\n const endBlock = dIdx === endInfo.dayIndex ? endInfo.blockIndex : totalBlocksPerDay - 1;\n if (!blocks[dIdx])\n blocks[dIdx] = {};\n for (let bIdx = startBlock; bIdx <= endBlock; bIdx++) {\n // Final check for block index validity\n if (bIdx >= 0 && bIdx < totalBlocksPerDay) {\n if (!blocks[dIdx][bIdx])\n blocks[dIdx][bIdx] = [];\n // Avoid duplicates if the same appointment is processed multiple times (shouldn't happen with outer loop)\n if (!blocks[dIdx][bIdx].some((e) => e.id === appointment.id)) {\n blocks[dIdx][bIdx].push(appointment);\n }\n }\n }\n }\n });\n return blocks;\n }\n /**\n * Calculates max concurrency and effective total columns for Day View appointments.\n */\n calculateDayViewConcurrencyInfo(singleDayAppointments, // These are segments for the current day\n viewStartDate, startHour, endHour) {\n const resultInfo = new Map();\n if (singleDayAppointments.length === 0)\n return resultInfo;\n const activeAppointmentsMap = this.calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, 1);\n const blocks = activeAppointmentsMap[0] ?? {};\n // 1. Calculate initial maxConcurrency for each appointment segment\n const maxConcurrencyMap = new Map();\n singleDayAppointments.forEach((segment) => {\n let maxOverlapInSegmentBlocks = 0;\n const segmentStartMinutes = segment.startDate.getHours() * this.MINUTES_PER_HOUR + segment.startDate.getMinutes();\n const segmentEndMinutes = segment.endDate.getHours() * this.MINUTES_PER_HOUR + segment.endDate.getMinutes();\n // Determine blocks this segment occupies relative to view's startHour\n const viewRelativeStartMinutes = Math.max(0, segmentStartMinutes - startHour * this.MINUTES_PER_HOUR);\n const viewRelativeEndMinutes = Math.min((endHour - startHour) * this.MINUTES_PER_HOUR, segmentEndMinutes - startHour * this.MINUTES_PER_HOUR);\n const firstBlockIndex = Math.floor(viewRelativeStartMinutes / this.BLOCK_DURATION_MINUTES);\n const lastBlockIndex = Math.floor((viewRelativeEndMinutes - 1) / this.BLOCK_DURATION_MINUTES); // -1 because end is exclusive for block counting\n for (let blockIdx = firstBlockIndex; blockIdx <= lastBlockIndex; blockIdx++) {\n const appointmentsInBlock = blocks[blockIdx];\n if (appointmentsInBlock) {\n maxOverlapInSegmentBlocks = Math.max(maxOverlapInSegmentBlocks, appointmentsInBlock.length);\n }\n }\n maxConcurrencyMap.set(segment.id, maxOverlapInSegmentBlocks || 1);\n });\n // 2. Iteratively determine effectiveTotalColumns for groups of overlapping appointments\n const initialEffectiveTotalColumns = new Map();\n singleDayAppointments.forEach((segment) => {\n initialEffectiveTotalColumns.set(segment.id, maxConcurrencyMap.get(segment.id) || 1);\n });\n let changed = true;\n while (changed) {\n changed = false;\n singleDayAppointments.forEach((segmentA) => {\n singleDayAppointments.forEach((segmentB) => {\n if (segmentA.id === segmentB.id)\n return;\n if (this.doAppointmentsOverlap(segmentA, segmentB)) {\n const etcA = initialEffectiveTotalColumns.get(segmentA.id) || 1;\n const etcB = initialEffectiveTotalColumns.get(segmentB.id) || 1;\n const maxETC = Math.max(etcA, etcB);\n if (etcA !== maxETC) {\n initialEffectiveTotalColumns.set(segmentA.id, maxETC);\n changed = true;\n }\n if (etcB !== maxETC) {\n initialEffectiveTotalColumns.set(segmentB.id, maxETC);\n changed = true;\n }\n }\n });\n });\n }\n // Populate final result\n singleDayAppointments.forEach((segment) => {\n resultInfo.set(segment.id, {\n maxConcurrency: maxConcurrencyMap.get(segment.id) || 1,\n effectiveTotalColumns: initialEffectiveTotalColumns.get(segment.id) || 1,\n });\n });\n return resultInfo;\n }\n /**\n * Groups appointments by the block they START in for Week View.\n */\n calculateWeekViewAppointmentsByStartBlock(singleDayAppointments, viewStartDate, startHour, endHour) {\n const blocks = {};\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate)\n return;\n const startInfo = this.getBlockIdentifier(this.calendarService.create(appointment.startDate), viewStartDate, startHour, endHour, 7);\n if (startInfo) {\n const { dayIndex, blockIndex } = startInfo;\n if (!blocks[dayIndex])\n blocks[dayIndex] = {};\n if (!blocks[dayIndex][blockIndex])\n blocks[dayIndex][blockIndex] = [];\n blocks[dayIndex][blockIndex].push(appointment);\n }\n });\n return blocks;\n }\n /**\n * Groups appointments by the day(s) they occur on within a given date range.\n * Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.\n */\n groupAppointmentsByDay(appointments, viewStartDate, // First day visible in the grid\n viewEndDate) {\n const groupedAppointments = new Map();\n if (!appointments || appointments.length === 0 || !viewStartDate || !viewEndDate) {\n return groupedAppointments;\n }\n // Pre-calculate the end date for comparison (exclusive)\n const exclusiveViewEndDate = viewEndDate.add('day', 1);\n appointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id)\n return;\n // Determine the effective start and end dates of the appointment clamped by the view range\n const appointmentStart = this.calendarService.create(appointment.startDate);\n const appointmentEnd = this.calendarService.create(appointment.endDate);\n // Skip if appointment ends before the view starts or starts after the view ends\n if (appointmentEnd.compare(viewStartDate, 'day') < 0 ||\n appointmentStart.compare(exclusiveViewEndDate, 'day') >= 0) {\n return;\n }\n // Clamp start date to the view start date\n let currentDay = appointmentStart.compare(viewStartDate, 'day') < 0 ? viewStartDate : appointmentStart.startOf('day');\n // Loop through each day the appointment spans within the view range\n let safeCount = 0; // Prevent infinite loops\n while (currentDay.compare(appointmentEnd, 'day') <= 0 &&\n currentDay.compare(exclusiveViewEndDate, 'day') < 0 &&\n safeCount < 100) {\n const dateString = this.formatService.format(currentDay, 'datetime', { format: 'YYYY-MM-DD' }); // Use a consistent key format\n if (!groupedAppointments.has(dateString)) {\n groupedAppointments.set(dateString, []);\n }\n // Add the appointment if it's not already in the list for that day\n if (!groupedAppointments.get(dateString).some((e) => e.id === appointment.id)) {\n groupedAppointments.get(dateString).push(appointment);\n }\n currentDay = currentDay.add('day', 1);\n safeCount++;\n }\n if (safeCount >= 100) {\n console.warn('Safety break hit in groupAppointmentsByDay loop for appointment:', appointment.id);\n }\n });\n return groupedAppointments;\n }\n getDayOfWeekNumber(dayName) {\n switch (dayName) {\n case 'sunday':\n return 1;\n case 'monday':\n return 2;\n case 'tuesday':\n return 3;\n case 'wednesday':\n return 4;\n case 'thursday':\n return 5;\n case 'friday':\n return 6;\n case 'saturday':\n return 7;\n default:\n console.warn(`Invalid day name: ${dayName}. Defaulting to Sunday (1).`);\n return 1;\n }\n }\n getSlotData(startDate, view) {\n let endDate;\n switch (view) {\n case 'day':\n case 'week':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES);\n break;\n case 'timeline-day':\n case 'timeline-multi-day':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES * 2);\n break;\n case 'month':\n case 'agenda':\n case 'timeline-month':\n startDate = startDate.startOf('day');\n endDate = startDate.endOf('day');\n break;\n }\n return { startDate, endDate, view };\n }\n handleEvent(event, eventOutputMap, eventType) {\n const mouseEvent = event.nativeEvent;\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n if (eventType === 'appointment') {\n const appointmentOutputMap = eventOutputMap[eventType];\n const emitter = appointmentOutputMap[mouseEvent.type];\n if (emitter)\n emitter.emit(event);\n }\n if (eventType === 'slot') {\n const slotOutputMap = eventOutputMap[eventType];\n const emitter = slotOutputMap[mouseEvent.type];\n if (emitter)\n emitter.emit(event);\n }\n }\n // --- Timeline Specific Helpers ---\n calculateTimelineLayout(\n // `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView\n appt, viewStartHour, // e.g., 8 for 8 AM\n viewEndHour) {\n if (!appt?.startDate ||\n !appt.endDate ||\n typeof viewStartHour !== 'number' ||\n typeof viewEndHour !== 'number' ||\n viewStartHour >= viewEndHour // Basic sanity check\n ) {\n console.warn('calculateTimelineLayout: Invalid input', { appt, viewStartHour, viewEndHour });\n return null;\n }\n const totalViewDurationMinutes = (viewEndHour - viewStartHour) * 60;\n if (totalViewDurationMinutes <= 0)\n return null; // No viewable duration\n // Segment's start and end times (these are already clipped to the day by getClonedAppointmentSegmentOnDay)\n const segmentStart = appt.startDate;\n const segmentEnd = appt.endDate;\n // --- Calculate Start Position (left) ---\n // Effective start of the segment within the view's hours for THIS day\n let effectiveSegmentStartMinutesInDay = segmentStart.getHours() * 60 + segmentStart.getMinutes();\n // Clamp to viewStartHour for calculation if segment starts before viewable hours (shouldn't happen if segmenter worked)\n effectiveSegmentStartMinutesInDay = Math.max(effectiveSegmentStartMinutesInDay, viewStartHour * 60);\n // Clamp to viewEndHour for calculation if segment starts after viewable hours (shouldn't happen)\n effectiveSegmentStartMinutesInDay = Math.min(effectiveSegmentStartMinutesInDay, viewEndHour * 60);\n const minutesFromViewStartToSegmentStart = effectiveSegmentStartMinutesInDay - viewStartHour * 60;\n // If segment effectively starts before the viewable part (after clamping), it means it's not visible or starts at 0%\n if (minutesFromViewStartToSegmentStart < 0 &&\n Math.abs(minutesFromViewStartToSegmentStart) > 1e-6 /*epsilon for float issues*/) {\n // This case should ideally be caught by the segmenter or initial overlap checks.\n // If it happens, treat as starting at 0% but it might mean no visible part.\n }\n const leftPercentage = (Math.max(0, minutesFromViewStartToSegmentStart) / totalViewDurationMinutes) * 100;\n // --- Calculate Duration and Width ---\n // Effective end of the segment within the view's hours for THIS day\n let effectiveSegmentEndMinutesInDay = segmentEnd.getHours() * 60 + segmentEnd.getMinutes();\n if (segmentEnd.getHours() === 0 && segmentEnd.getMinutes() === 0 && segmentEnd.getTime() > segmentStart.getTime()) {\n // If segment ends exactly at midnight (00:00 of next day, meaning it filled up to 24:00 of current day)\n effectiveSegmentEndMinutesInDay = 24 * 60;\n }\n // Clamp to viewEndHour for calculation\n effectiveSegmentEndMinutesInDay = Math.min(effectiveSegmentEndMinutesInDay, viewEndHour * 60);\n // Clamp to viewStartHour for calculation (if segment ends before view starts)\n effectiveSegmentEndMinutesInDay = Math.max(effectiveSegmentEndMinutesInDay, viewStartHour * 60);\n const segmentDurationMinutesInView = Math.max(0, effectiveSegmentEndMinutesInDay - effectiveSegmentStartMinutesInDay);\n if (segmentDurationMinutesInView <= 0) {\n // Segment has no visible duration within the timeline hours\n return null;\n }\n const widthPercentage = (segmentDurationMinutesInView / totalViewDurationMinutes) * 100;\n // Ensure percentages are valid\n if (leftPercentage > 100 ||\n leftPercentage < 0 ||\n widthPercentage <= 0 ||\n widthPercentage > 100 ||\n leftPercentage + widthPercentage > 100.0001 /*allow for float errors*/) {\n // This might indicate an issue with date clamping or logic.\n // For now, if it results in an invalid layout, return null.\n // console.warn(\"Timeline layout calculation resulted in out-of-bounds percentages:\",\n // {leftPercentage, widthPercentage, segmentStart, segmentEnd, viewStartHour, viewEndHour});\n // A common case for (left + width > 100) is if an event ends *exactly* at viewEndHour,\n // and viewEndHour itself is the boundary.\n // Let's be a bit tolerant here if width is positive.\n if (widthPercentage <= 0)\n return null;\n }\n return {\n left: `${Math.max(0, Math.min(100, leftPercentage))}%`,\n width: `${Math.max(0, Math.min(100, widthPercentage))}%`,\n };\n }\n /**\n * Calculates the visible segment of a timed appointment on a specific day,\n * constrained by the view's start and end hours.\n * Returns a new appointment-like object representing the segment.\n */\n getClonedAppointmentSegmentOnDay(appointment, // This is the ORIGINAL appointment\n day, viewStartHour, viewEndHour, isFullDayCellContext = false) {\n if (!appointment || !appointment.startDate || !appointment.endDate) {\n return null;\n }\n const appointmentStartDate = this.calendarService.create(appointment.startDate);\n const appointmentEndDate = this.calendarService.create(appointment.endDate);\n if (appointment.allDay) {\n const dayStartOf = day.clone().startOf('day');\n if (appointmentStartDate.startOf('day').equal(dayStartOf, 'day')) {\n return {\n ...appointment,\n startDate: dayStartOf.date,\n endDate: dayStartOf.clone().add('day', 1).startOf('day').date,\n allDay: true,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay: false,\n isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n }\n else if (appointmentStartDate.startOf('day').compare(dayStartOf, 'day') < 0 &&\n appointmentEndDate.startOf('day').compare(dayStartOf, 'day') >= 0) {\n return {\n ...appointment,\n startDate: dayStartOf.date,\n endDate: dayStartOf.clone().add('day', 1).startOf('day').date,\n allDay: true,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay: true,\n isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n }\n else {\n return null;\n }\n }\n const dayStartBoundary = isFullDayCellContext\n ? day.clone().startOf('day')\n : day.clone().set('hour', viewStartHour).startOf('hour');\n const dayEndBoundary = isFullDayCellContext\n ? day.clone().add('day', 1).startOf('day')\n : viewEndHour === 24 || (viewEndHour === 0 && viewStartHour === 0)\n ? day.clone().add('day', 1).startOf('day')\n : day.clone().set('hour', viewEndHour).startOf('hour');\n if (appointmentEndDate.compare(dayStartBoundary, 'second') <= 0 ||\n appointmentStartDate.compare(dayEndBoundary, 'second') >= 0) {\n return null;\n }\n const segmentStartDate = appointmentStartDate.compare(dayStartBoundary, 'second') > 0 ? appointmentStartDate : dayStartBoundary;\n const segmentEndDate = appointmentEndDate.compare(dayEndBoundary, 'second') < 0 ? appointmentEndDate : dayEndBoundary;\n if (segmentStartDate.compare(segmentEndDate, 'second') >= 0) {\n return null;\n }\n const isContinuationFromPreviousDay = appointmentStartDate.compare(segmentStartDate, 'second') < 0;\n const isContinuationToNextDay = appointmentEndDate.compare(segmentEndDate, 'second') > 0;\n const duration = appointmentStartDate.duration(appointmentEndDate);\n return {\n ...appointment,\n startDate: segmentStartDate.date,\n endDate: segmentEndDate.date,\n allDay: appointment.allDay || duration.total.miliseconds >= 24 * 60 * 60 * 1000 - 1,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay,\n isContinuationToNextDay,\n originalAppointmentRef: appointment,\n };\n }\n getOriginalAppointment(item) {\n const segment = item;\n if (segment.originalAppointmentRef) {\n return segment.originalAppointmentRef;\n }\n return item;\n }\n isHoliday(date) {\n return this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n }\n isWeekend(date, calendar) {\n const weekend = this.calendarService.resolveCalendar(calendar).weekend;\n return weekend.includes(date.dayOfWeek - 1);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root', // Provide service application-wide\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3NjaGVkdWxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFlbkQsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUlVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFM0Msa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1Qiw0QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLHlCQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztLQXNtQjNHO0lBcG1CQzs7T0FFRztJQUNILHFCQUFxQixDQUFDLFlBQW9DLEVBQUUsWUFBb0M7UUFDOUYsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzRyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLG1GQUFtRjtRQUNuRixPQUFPLE1BQU0sR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCwwQkFBMEIsQ0FBQyxXQUFtQztRQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsY0FBYyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7T0FFRztJQUNILHlCQUF5QixDQUFDLFdBQW1DO1FBQzNELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FDaEIsUUFBb0IsRUFDcEIsYUFBeUIsRUFDekIsU0FBaUIsRUFDakIsT0FBZSxFQUFFLHFCQUFxQjtJQUN0QyxhQUFhLEdBQUcsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoRyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUU1Riw2REFBNkQ7UUFDN0QsSUFDRSxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQzFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxtQ0FBbUM7WUFDaEYsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTO1lBQ3pCLFFBQVEsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLG1DQUFtQztVQUM1RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsNkNBQTZDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVsSCxpREFBaUQ7UUFDakQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLFFBQVEsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM5QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9FLE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFaEYsNkVBQTZFO1FBQzdFLElBQUksb0JBQW9CLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsa0NBQWtDLENBQ2hDLHFCQUFzRCxFQUN0RCxhQUF5QixFQUN6QixTQUFpQixFQUNqQixPQUFlLEVBQ2YsYUFBcUI7UUFFckIsTUFBTSxNQUFNLEdBQXlDLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pHLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtRQUNsRiw0REFBNEQ7UUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNoQyxDQUFDLEVBQ0QsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQzlFLENBQUM7UUFFRixxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBRTlFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWhGLDRFQUE0RTtZQUM1RSxJQUFJLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1lBQzVHLElBQUksY0FBYyxDQUFDLElBQUksR0FBRyxTQUFTO2dCQUFFLGNBQWMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFNUcsSUFBSSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztZQUNuRyxJQUFJLFlBQVksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQ3RHLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUVELHlEQUF5RDtZQUN6RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzVHLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sQ0FBQyw2Q0FBNkM7WUFFckUsNkVBQTZFO1lBQzdFLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN6RyxxRkFBcUY7WUFDckYsdUVBQXVFO1lBQ3ZFLElBQ0UsQ0FBQyxPQUFPO2dCQUNSLE9BQU8sQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVE7Z0JBQ3JDLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUN0RixDQUFDO2dCQUNELE9BQU8sQ0FBQyxxRUFBcUU7WUFDL0UsQ0FBQztZQUVELDRFQUE0RTtZQUM1RSxLQUFLLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDckUsZ0ZBQWdGO2dCQUNoRixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLGFBQWE7b0JBQUUsU0FBUztnQkFFaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUUscUVBQXFFO2dCQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO2dCQUV4RixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUVyQyxLQUFLLElBQUksSUFBSSxHQUFHLFVBQVUsRUFBRSxJQUFJLElBQUksUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQ3JELHVDQUF1QztvQkFDdkMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxpQkFBaUIsRUFBRSxDQUFDO3dCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQzs0QkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNqRCwwR0FBMEc7d0JBQzFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOzRCQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUN2QyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNILCtCQUErQixDQUM3QixxQkFBc0QsRUFBRSx5Q0FBeUM7SUFDakcsYUFBeUIsRUFDekIsU0FBaUIsRUFDakIsT0FBZTtRQUVmLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFrRSxDQUFDO1FBQzdGLElBQUkscUJBQXFCLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUUxRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxrQ0FBa0MsQ0FDbkUscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxFQUNQLENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTlDLG1FQUFtRTtRQUNuRSxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFDakQscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEMsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7WUFDbEMsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xILE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUU1RyxzRUFBc0U7WUFDdEUsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdEcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNyQyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQzdDLGlCQUFpQixHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQ3RELENBQUM7WUFFRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLGlEQUFpRDtZQUVoSixLQUFLLElBQUksUUFBUSxHQUFHLGVBQWUsRUFBRSxRQUFRLElBQUksY0FBYyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQzVFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLG1CQUFtQixFQUFFLENBQUM7b0JBQ3hCLHlCQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlGLENBQUM7WUFDSCxDQUFDO1lBQ0QsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUseUJBQXlCLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCx3RkFBd0Y7UUFDeEYsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBQzVELHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3hDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxPQUFPLEVBQUUsQ0FBQztZQUNmLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDaEIscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3pDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUN6QyxJQUFJLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUU7d0JBQUUsT0FBTztvQkFFeEMsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELE1BQU0sSUFBSSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNoRSxNQUFNLElBQUksR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBRXBDLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDOzRCQUNwQiw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQzs0QkFDdEQsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDakIsQ0FBQzt3QkFDRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQzs0QkFDcEIsNEJBQTRCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQ3RELE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ2pCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4QyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RELHFCQUFxQixFQUFFLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzthQUN6RSxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILHlDQUF5QyxDQUN2QyxxQkFBc0QsRUFDdEQsYUFBeUIsRUFDekIsU0FBaUIsRUFDakIsT0FBZTtRQUVmLE1BQU0sTUFBTSxHQUF3QyxFQUFFLENBQUM7UUFDdkQscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQ2xELGFBQWEsRUFDYixTQUFTLEVBQ1QsT0FBTyxFQUNQLENBQUMsQ0FDRixDQUFDO1lBQ0YsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUM7b0JBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDckUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0JBQXNCLENBQ3BCLFlBQXNDLEVBQ3RDLGFBQXlCLEVBQUUsZ0NBQWdDO0lBQzNELFdBQXVCO1FBRXZCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFDeEUsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pGLE9BQU8sbUJBQW1CLENBQUM7UUFDN0IsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZELFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBRTlFLDJGQUEyRjtZQUMzRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFeEUsZ0ZBQWdGO1lBQ2hGLElBQ0UsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDaEQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDMUQsQ0FBQztnQkFDRCxPQUFPO1lBQ1QsQ0FBQztZQUVELDBDQUEwQztZQUMxQyxJQUFJLFVBQVUsR0FDWixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdkcsb0VBQW9FO1lBQ3BFLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtZQUM1QyxPQUNFLFVBQVUsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQzlDLFVBQVUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFDbkQsU0FBUyxHQUFHLEdBQUcsRUFDZixDQUFDO2dCQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtnQkFFOUgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUN6QyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUNELG1FQUFtRTtnQkFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELENBQUM7Z0JBRUQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxTQUFTLEVBQUUsQ0FBQztZQUNkLENBQUM7WUFDRCxJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkcsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBd0I7UUFDekMsUUFBUSxPQUFPLEVBQUUsQ0FBQztZQUNoQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxDQUFDLENBQUM7WUFDWDtnQkFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixPQUFPLDZCQUE2QixDQUFDLENBQUM7Z0JBQ3hFLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQ1QsU0FBcUIsRUFDckIsSUFBcUI7UUFFckIsSUFBSSxPQUFtQixDQUFDO1FBQ3hCLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssTUFBTTtnQkFDVCxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQy9ELE1BQU07WUFDUixLQUFLLGNBQWMsQ0FBQztZQUNwQixLQUFLLG9CQUFvQjtnQkFDdkIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsTUFBTTtZQUNSLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLGdCQUFnQjtnQkFDbkIsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxNQUFNO1FBQ1YsQ0FBQztRQUNELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxXQUFXLENBQ1QsS0FBbUUsRUFDbkUsY0FBYyxFQUNkLFNBQWlDO1FBRWpDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QixJQUFJLFNBQVMsS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUNoQyxNQUFNLG9CQUFvQixHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBeUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksT0FBTztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQXlDLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDekIsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBa0MsQ0FBQyxDQUFDO1lBQzdFLElBQUksT0FBTztnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQWtDLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVELG9DQUFvQztJQUVwQyx1QkFBdUI7SUFDckIsNEZBQTRGO0lBQzVGLElBQTRCLEVBQzVCLGFBQXFCLEVBQUUsbUJBQW1CO0lBQzFDLFdBQW1CO1FBRW5CLElBQ0UsQ0FBQyxJQUFJLEVBQUUsU0FBUztZQUNoQixDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2IsT0FBTyxhQUFhLEtBQUssUUFBUTtZQUNqQyxPQUFPLFdBQVcsS0FBSyxRQUFRO1lBQy9CLGFBQWEsSUFBSSxXQUFXLENBQUMscUJBQXFCO1VBQ2xELENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BFLElBQUksd0JBQXdCLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsdUJBQXVCO1FBRXZFLDJHQUEyRztRQUMzRyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFaEMsMENBQTBDO1FBQzFDLHNFQUFzRTtRQUN0RSxJQUFJLGlDQUFpQyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWpHLHdIQUF3SDtRQUN4SCxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxFQUFFLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRyxpR0FBaUc7UUFDakcsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFbEcsTUFBTSxrQ0FBa0MsR0FBRyxpQ0FBaUMsR0FBRyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRWxHLHFIQUFxSDtRQUNySCxJQUNFLGtDQUFrQyxHQUFHLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFDaEYsQ0FBQztZQUNELGlGQUFpRjtZQUNqRiw0RUFBNEU7UUFDOUUsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0NBQWtDLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUUxRyx1Q0FBdUM7UUFDdkMsb0VBQW9FO1FBQ3BFLElBQUksK0JBQStCLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0YsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ2xILHdHQUF3RztZQUN4RywrQkFBK0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzVDLENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDOUYsOEVBQThFO1FBQzlFLCtCQUErQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDM0MsQ0FBQyxFQUNELCtCQUErQixHQUFHLGlDQUFpQyxDQUNwRSxDQUFDO1FBRUYsSUFBSSw0QkFBNEIsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN0Qyw0REFBNEQ7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUV4RiwrQkFBK0I7UUFDL0IsSUFDRSxjQUFjLEdBQUcsR0FBRztZQUNwQixjQUFjLEdBQUcsQ0FBQztZQUNsQixlQUFlLElBQUksQ0FBQztZQUNwQixlQUFlLEdBQUcsR0FBRztZQUNyQixjQUFjLEdBQUcsZUFBZSxHQUFHLFFBQVEsQ0FBQywwQkFBMEIsRUFDdEUsQ0FBQztZQUNELDREQUE0RDtZQUM1RCw0REFBNEQ7WUFDNUQscUZBQXFGO1lBQ3JGLHlHQUF5RztZQUN6Ryx1RkFBdUY7WUFDdkYsMENBQTBDO1lBQzFDLHFEQUFxRDtZQUNyRCxJQUFJLGVBQWUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hDLENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRztZQUN0RCxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHO1NBQ3pELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdDQUFnQyxDQUM5QixXQUFtQyxFQUFFLG1DQUFtQztJQUN4RSxHQUFlLEVBQ2YsYUFBcUIsRUFDckIsV0FBbUIsRUFDbkIsb0JBQW9CLEdBQUcsS0FBSztRQUU1QixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1RSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakUsT0FBTztvQkFDTCxHQUFHLFdBQVc7b0JBQ2QsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJO29CQUMxQixPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUk7b0JBQzdELE1BQU0sRUFBRSxJQUFJO29CQUNaLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDLElBQUk7b0JBQzVDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJO29CQUN4Qyw2QkFBNkIsRUFBRSxLQUFLO29CQUNwQyx1QkFBdUIsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUN6RixzQkFBc0IsRUFBRSxXQUFXO2lCQUNwQyxDQUFDO1lBQ0osQ0FBQztpQkFBTSxJQUNMLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ2xFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDakUsQ0FBQztnQkFDRCxPQUFPO29CQUNMLEdBQUcsV0FBVztvQkFDZCxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUk7b0JBQzFCLE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSTtvQkFDN0QsTUFBTSxFQUFFLElBQUk7b0JBQ1osaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsSUFBSTtvQkFDNUMsZUFBZSxFQUFFLGtCQUFrQixDQUFDLElBQUk7b0JBQ3hDLDZCQUE2QixFQUFFLElBQUk7b0JBQ25DLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQ3pGLHNCQUFzQixFQUFFLFdBQVc7aUJBQ3BDLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CO1lBQzNDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUM1QixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sY0FBYyxHQUFHLG9CQUFvQjtZQUN6QyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUMxQyxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0QsSUFDRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMzRCxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDM0QsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQ3BCLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6RyxNQUFNLGNBQWMsR0FDbEIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFFakcsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sNkJBQTZCLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRyxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRW5FLE9BQU87WUFDTCxHQUFHLFdBQVc7WUFDZCxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUNoQyxPQUFPLEVBQUUsY0FBYyxDQUFDLElBQUk7WUFDNUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDbkYsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsSUFBSTtZQUM1QyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtZQUN4Qyw2QkFBNkI7WUFDN0IsdUJBQXVCO1lBQ3ZCLHNCQUFzQixFQUFFLFdBQVc7U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUE0RDtRQUNqRixNQUFNLE9BQU8sR0FBRyxJQUFxQyxDQUFDO1FBQ3RELElBQUksT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkMsT0FBTyxPQUFPLENBQUMsc0JBQXNCLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFnQixFQUFFLFFBQWdCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDOzhHQTdtQlUsa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNLEVBQUUsbUNBQW1DO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhEYXlPZldlZWtOYW1lLFxuICBBWFNjaGVkdWxlckFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2ssXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJCbG9ja0lkZW50aWZpZXIsXG4gIEFYU2NoZWR1bGVyVmlldyxcbn0gZnJvbSAnLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfSBmcm9tICcuL3NjaGVkdWxlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JywgLy8gUHJvdmlkZSBzZXJ2aWNlIGFwcGxpY2F0aW9uLXdpZGVcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBIT1VSU19QRVJfREFZID0gMjQ7XG4gIHJlYWRvbmx5IE1JTlVURVNfUEVSX0hPVVIgPSA2MDtcbiAgcmVhZG9ubHkgQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyA9IDMwO1xuICByZWFkb25seSBNSUxMSVNFQ09ORFNfUEVSX01JTlVURSA9IDYwICogMTAwMDtcbiAgcmVhZG9ubHkgTUlMTElTRUNPTkRTX1BFUl9EQVkgPSB0aGlzLkhPVVJTX1BFUl9EQVkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKiB0aGlzLk1JTExJU0VDT05EU19QRVJfTUlOVVRFO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdHdvIGFwcG9pbnRtZW50cyBvdmVybGFwIGluIHRpbWUuXG4gICAqL1xuICBkb0FwcG9pbnRtZW50c092ZXJsYXAoYXBwb2ludG1lbnRBOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBhcHBvaW50bWVudEI6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIWFwcG9pbnRtZW50QT8uc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudEEuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnRCPy5zdGFydERhdGUgfHwgIWFwcG9pbnRtZW50Qi5lbmREYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0QSA9IGFwcG9pbnRtZW50QS5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZEEgPSBhcHBvaW50bWVudEEuZW5kRGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3Qgc3RhcnRCID0gYXBwb2ludG1lbnRCLnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZW5kQiA9IGFwcG9pbnRtZW50Qi5lbmREYXRlLmdldFRpbWUoKTtcbiAgICAvLyBVc2VzIHN0cmljdCBvdmVybGFwIGNoZWNrIChjaGFuZ2UgPCAvID4gdG8gPD0gLyA+PSBpZiB0b3VjaGluZyBib3VuZGFyaWVzIGNvdW50KVxuICAgIHJldHVybiBzdGFydEEgPCBlbmRCICYmIGVuZEEgPiBzdGFydEI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhcHBvaW50bWVudCBkdXJhdGlvbiBpbiBtaW51dGVzLlxuICAgKi9cbiAgY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoQXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBudW1iZXIge1xuICAgIGlmICghQXBwb2ludG1lbnQ/LnN0YXJ0RGF0ZSB8fCAhQXBwb2ludG1lbnQuZW5kRGF0ZSkgcmV0dXJuIDA7XG4gICAgY29uc3QgZHVyYXRpb25NaWxsaXMgPSBBcHBvaW50bWVudC5lbmREYXRlLmdldFRpbWUoKSAtIEFwcG9pbnRtZW50LnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGR1cmF0aW9uTWlsbGlzIC8gdGhpcy5NSUxMSVNFQ09ORFNfUEVSX01JTlVURSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhcHBvaW50bWVudCBkdXJhdGlvbiBpbiBibG9ja3MgKGRlZmF1bHQgMzAgbWluKS5cbiAgICovXG4gIGNhbGN1bGF0ZUR1cmF0aW9uSW5CbG9ja3MoYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IHRoaXMuY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoYXBwb2ludG1lbnQpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoZHVyYXRpb25NaW51dGVzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkYXkgaW5kZXggKHJlbGF0aXZlIHRvIHZpZXcgc3RhcnQpIGFuZCBibG9jayBpbmRleCAocmVsYXRpdmUgdG8gc3RhcnQgaG91cilcbiAgICogZm9yIGEgZ2l2ZW4gZGF0ZSB0aW1lIHdpdGhpbiB0aGUgdmlldyBjb250ZXh0LiBSZXR1cm5zIG51bGwgaWYgb3V0c2lkZSB2aWV3LlxuICAgKi9cbiAgZ2V0QmxvY2tJZGVudGlmaWVyKFxuICAgIGRhdGVUaW1lOiBBWERhdGVUaW1lLFxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLCAvLyBFeGNsdXNpdmUgZW5kIGhvdXJcbiAgICB2aWV3VG90YWxEYXlzID0gMSwgLy8gRGVmYXVsdCB0byAxIGZvciBkYXkgdmlld1xuICApOiBBWFNjaGVkdWxlckJsb2NrSWRlbnRpZmllciB8IG51bGwge1xuICAgIGlmICghdmlld1N0YXJ0RGF0ZSB8fCAhZGF0ZVRpbWUgfHwgdHlwZW9mIHN0YXJ0SG91ciAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEhvdXIgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgdmlld0VuZERhdGUgPSB2aWV3U3RhcnREYXRlLmFkZCgnZGF5Jywgdmlld1RvdGFsRGF5cyk7IC8vIENhbGN1bGF0ZSBleGNsdXNpdmUgZW5kIGRhdGVcblxuICAgIC8vIENoZWNrIGlmIGRhdGVUaW1lIGlzIHdpdGhpbiB0aGUgdmlldydzIGRhdGUgYW5kIHRpbWUgcmFuZ2VcbiAgICBpZiAoXG4gICAgICBkYXRlVGltZS5jb21wYXJlKHZpZXdTdGFydERhdGUsICdkYXknKSA8IDAgfHxcbiAgICAgIGRhdGVUaW1lLmNvbXBhcmUodmlld0VuZERhdGUsICdkYXknKSA+PSAwIHx8IC8vIENoZWNrIGFnYWluc3QgZXhjbHVzaXZlIGVuZCBkYXRlXG4gICAgICBkYXRlVGltZS5ob3VyIDwgc3RhcnRIb3VyIHx8XG4gICAgICBkYXRlVGltZS5ob3VyID49IGVuZEhvdXIgLy8gQ2hlY2sgYWdhaW5zdCBleGNsdXNpdmUgZW5kIGhvdXJcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBkYXkgaW5kZXggcmVsYXRpdmUgdG8gdmlldyBzdGFydFxuICAgIGNvbnN0IGRheUluZGV4ID0gTWF0aC5mbG9vcigoZGF0ZVRpbWUuZGF0ZS5nZXRUaW1lKCkgLSB2aWV3U3RhcnREYXRlLmRhdGUuZ2V0VGltZSgpKSAvIHRoaXMuTUlMTElTRUNPTkRTX1BFUl9EQVkpO1xuXG4gICAgLy8gRW5zdXJlIGRheUluZGV4IGlzIHZhbGlkIGZvciB0aGUgdmlldyBkdXJhdGlvblxuICAgIGlmIChkYXlJbmRleCA8IDAgfHwgZGF5SW5kZXggPj0gdmlld1RvdGFsRGF5cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWludXRlc0ludG9EYXkgPSBkYXRlVGltZS5ob3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSICsgZGF0ZVRpbWUubWludXRlO1xuICAgIGNvbnN0IG1pbnV0ZXNJbnRvVmlld0hvdXJzID0gbWludXRlc0ludG9EYXkgLSBzdGFydEhvdXIgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVI7XG5cbiAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBiZSByZWR1bmRhbnQgZHVlIHRvIGluaXRpYWwgaG91ciBjaGVjaywgYnV0IHNhZmUgdG8ga2VlcFxuICAgIGlmIChtaW51dGVzSW50b1ZpZXdIb3VycyA8IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgYmxvY2tJbmRleCA9IE1hdGguZmxvb3IobWludXRlc0ludG9WaWV3SG91cnMgLyB0aGlzLkJMT0NLX0RVUkFUSU9OX01JTlVURVMpO1xuXG4gICAgcmV0dXJuIHsgZGF5SW5kZXgsIGJsb2NrSW5kZXggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYXBwb2ludG1lbnRzIGJ5IHRoZSBibG9ja3MgdGhleSBhcmUgQUNUSVZFIGluIGZvciBhIGdpdmVuIHZpZXcuXG4gICAqIEBwYXJhbSB2aWV3VG90YWxEYXlzIC0gTnVtYmVyIG9mIGRheXMgaW4gdGhlIGN1cnJlbnQgdmlldyAoMSBmb3IgRGF5LCA3IGZvciBXZWVrLCBldGMuKVxuICAgKi9cbiAgY2FsY3VsYXRlQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayhcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICBzdGFydEhvdXI6IG51bWJlcixcbiAgICBlbmRIb3VyOiBudW1iZXIsXG4gICAgdmlld1RvdGFsRGF5czogbnVtYmVyLCAvLyBOb3cgcmVxdWlyZWRcbiAgKTogQVhTY2hlZHVsZXJBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrIHtcbiAgICBjb25zdCBibG9ja3M6IEFYU2NoZWR1bGVyQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayA9IHt9O1xuICAgIGlmICghdmlld1N0YXJ0RGF0ZSB8fCB0eXBlb2Ygc3RhcnRIb3VyICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgZW5kSG91ciAhPT0gJ251bWJlcicgfHwgdmlld1RvdGFsRGF5cyA8PSAwKSB7XG4gICAgICByZXR1cm4gYmxvY2tzO1xuICAgIH1cbiAgICBjb25zdCB2aWV3RW5kRGF0ZSA9IHZpZXdTdGFydERhdGUuYWRkKCdkYXknLCB2aWV3VG90YWxEYXlzKTsgLy8gRXhjbHVzaXZlIGVuZCBkYXRlXG4gICAgLy8gQ2FsY3VsYXRlIHRvdGFsIGJsb2NrcyBiYXNlZCBvbiBjb25zaXN0ZW50IGJsb2NrIGR1cmF0aW9uXG4gICAgY29uc3QgdG90YWxCbG9ja3NQZXJEYXkgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICAoZW5kSG91ciAtIHN0YXJ0SG91cikgKiAodGhpcy5NSU5VVEVTX1BFUl9IT1VSIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKSxcbiAgICApO1xuXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcG9pbnRtZW50KSA9PiB7XG4gICAgICBpZiAoIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnQuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnQuaWQpIHJldHVybjtcblxuICAgICAgY29uc3QgYXBwb2ludG1lbnRFbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LmVuZERhdGUpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuc3RhcnREYXRlKTtcblxuICAgICAgLy8gQ2xhbXAgYXBwb2ludG1lbnQgc3RhcnQvZW5kIHRpbWVzIHRvIHRoZSB2aWV3IGJvdW5kYXJpZXMgKGRheXMgYW5kIGhvdXJzKVxuICAgICAgbGV0IGVmZmVjdGl2ZVN0YXJ0ID0gYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZSh2aWV3U3RhcnREYXRlKSA8IDAgPyB2aWV3U3RhcnREYXRlIDogYXBwb2ludG1lbnRTdGFydERhdGU7XG4gICAgICBpZiAoZWZmZWN0aXZlU3RhcnQuaG91ciA8IHN0YXJ0SG91cikgZWZmZWN0aXZlU3RhcnQgPSBlZmZlY3RpdmVTdGFydC5zZXQoJ2hvdXInLCBzdGFydEhvdXIpLnN0YXJ0T2YoJ2hvdXInKTtcblxuICAgICAgbGV0IGVmZmVjdGl2ZUVuZCA9IGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKHZpZXdFbmREYXRlKSA+PSAwID8gdmlld0VuZERhdGUgOiBhcHBvaW50bWVudEVuZERhdGU7XG4gICAgICBpZiAoZWZmZWN0aXZlRW5kLmhvdXIgPj0gZW5kSG91cikge1xuICAgICAgICBjb25zdCBlbmREYXlCYXNlID0gZWZmZWN0aXZlRW5kLmNvbXBhcmUodmlld0VuZERhdGUpID49IDAgPyB2aWV3RW5kRGF0ZS5hZGQoJ2RheScsIC0xKSA6IGVmZmVjdGl2ZUVuZDtcbiAgICAgICAgZWZmZWN0aXZlRW5kID0gZW5kRGF5QmFzZS5zZXQoJ2hvdXInLCBlbmRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBzdGFydCBibG9jayBpbmZvIHVzaW5nIHRoZSBzcGVjaWZpZWQgdmlld1RvdGFsRGF5c1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIoZWZmZWN0aXZlU3RhcnQsIHZpZXdTdGFydERhdGUsIHN0YXJ0SG91ciwgZW5kSG91ciwgdmlld1RvdGFsRGF5cyk7XG4gICAgICBpZiAoIXN0YXJ0SW5mbykgcmV0dXJuOyAvLyBBcHBvaW50bWVudCBzdGFydHMgY29tcGxldGVseSBvdXRzaWRlIHZpZXdcblxuICAgICAgLy8gR2V0IGVuZCBibG9jayBpbmZvIChsYXN0IGJsb2NrIG9jY3VwaWVkKSB1c2luZyB0aGUgc3BlY2lmaWVkIHZpZXdUb3RhbERheXNcbiAgICAgIGNvbnN0IHRpbWVCZWZvcmVFbmQgPSBlZmZlY3RpdmVFbmQuYWRkKCdtaW51dGUnLCAtMSk7XG4gICAgICBjb25zdCBlbmRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIodGltZUJlZm9yZUVuZCwgdmlld1N0YXJ0RGF0ZSwgc3RhcnRIb3VyLCBlbmRIb3VyLCB2aWV3VG90YWxEYXlzKTtcbiAgICAgIC8vIElmIGVuZEluZm8gaXMgbnVsbCwgaXQgbWVhbnMgdGhlIGFwcG9pbnRtZW50IGVuZHMgYmVmb3JlIHRoZSB2aWV3YWJsZSBwYXJ0IHN0YXJ0cyxcbiAgICAgIC8vIG9yIGV4YWN0bHkgYXQgdGhlIHN0YXJ0LCBzbyBpdCBvY2N1cGllcyBubyBibG9ja3MuIEhhbmRsZSB0aGlzIGNhc2UuXG4gICAgICBpZiAoXG4gICAgICAgICFlbmRJbmZvIHx8XG4gICAgICAgIGVuZEluZm8uZGF5SW5kZXggPCBzdGFydEluZm8uZGF5SW5kZXggfHxcbiAgICAgICAgKGVuZEluZm8uZGF5SW5kZXggPT09IHN0YXJ0SW5mby5kYXlJbmRleCAmJiBlbmRJbmZvLmJsb2NrSW5kZXggPCBzdGFydEluZm8uYmxvY2tJbmRleClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIEFwcG9pbnRtZW50IGVmZmVjdGl2ZWx5IGhhcyBubyBkdXJhdGlvbiB3aXRoaW4gdGhlIHZpZXdhYmxlIGJsb2Nrc1xuICAgICAgfVxuXG4gICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGRheXMgYW5kIGJsb2NrcyB0aGUgYXBwb2ludG1lbnQgc3BhbnMgd2l0aGluIHRoZSB2aWV3XG4gICAgICBmb3IgKGxldCBkSWR4ID0gc3RhcnRJbmZvLmRheUluZGV4OyBkSWR4IDw9IGVuZEluZm8uZGF5SW5kZXg7IGRJZHgrKykge1xuICAgICAgICAvLyBDbGFtcCBkYXkgaW5kZXgganVzdCBpbiBjYXNlIChzaG91bGQgYmUgaGFuZGxlZCBieSBnZXRCbG9ja0lkZW50aWZpZXIgY2hlY2tzKVxuICAgICAgICBpZiAoZElkeCA8IDAgfHwgZElkeCA+PSB2aWV3VG90YWxEYXlzKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBzdGFydEJsb2NrID0gZElkeCA9PT0gc3RhcnRJbmZvLmRheUluZGV4ID8gc3RhcnRJbmZvLmJsb2NrSW5kZXggOiAwO1xuICAgICAgICAvLyBNYWtlIHN1cmUgZW5kQmxvY2sgZG9lc24ndCBleGNlZWQgdGhlIGNhbGN1bGF0ZWQgdG90YWxCbG9ja3NQZXJEYXlcbiAgICAgICAgY29uc3QgZW5kQmxvY2sgPSBkSWR4ID09PSBlbmRJbmZvLmRheUluZGV4ID8gZW5kSW5mby5ibG9ja0luZGV4IDogdG90YWxCbG9ja3NQZXJEYXkgLSAxO1xuXG4gICAgICAgIGlmICghYmxvY2tzW2RJZHhdKSBibG9ja3NbZElkeF0gPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBiSWR4ID0gc3RhcnRCbG9jazsgYklkeCA8PSBlbmRCbG9jazsgYklkeCsrKSB7XG4gICAgICAgICAgLy8gRmluYWwgY2hlY2sgZm9yIGJsb2NrIGluZGV4IHZhbGlkaXR5XG4gICAgICAgICAgaWYgKGJJZHggPj0gMCAmJiBiSWR4IDwgdG90YWxCbG9ja3NQZXJEYXkpIHtcbiAgICAgICAgICAgIGlmICghYmxvY2tzW2RJZHhdW2JJZHhdKSBibG9ja3NbZElkeF1bYklkeF0gPSBbXTtcbiAgICAgICAgICAgIC8vIEF2b2lkIGR1cGxpY2F0ZXMgaWYgdGhlIHNhbWUgYXBwb2ludG1lbnQgaXMgcHJvY2Vzc2VkIG11bHRpcGxlIHRpbWVzIChzaG91bGRuJ3QgaGFwcGVuIHdpdGggb3V0ZXIgbG9vcClcbiAgICAgICAgICAgIGlmICghYmxvY2tzW2RJZHhdW2JJZHhdLnNvbWUoKGUpID0+IGUuaWQgPT09IGFwcG9pbnRtZW50LmlkKSkge1xuICAgICAgICAgICAgICBibG9ja3NbZElkeF1bYklkeF0ucHVzaChhcHBvaW50bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGJsb2NrcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIG1heCBjb25jdXJyZW5jeSBhbmQgZWZmZWN0aXZlIHRvdGFsIGNvbHVtbnMgZm9yIERheSBWaWV3IGFwcG9pbnRtZW50cy5cbiAgICovXG4gIGNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdLCAvLyBUaGVzZSBhcmUgc2VnbWVudHMgZm9yIHRoZSBjdXJyZW50IGRheVxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLFxuICApOiBNYXA8YW55LCB7IG1heENvbmN1cnJlbmN5OiBudW1iZXI7IGVmZmVjdGl2ZVRvdGFsQ29sdW1uczogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXN1bHRJbmZvID0gbmV3IE1hcDxhbnksIHsgbWF4Q29uY3VycmVuY3k6IG51bWJlcjsgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBudW1iZXIgfT4oKTtcbiAgICBpZiAoc2luZ2xlRGF5QXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdEluZm87XG5cbiAgICBjb25zdCBhY3RpdmVBcHBvaW50bWVudHNNYXAgPSB0aGlzLmNhbGN1bGF0ZUFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soXG4gICAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMsXG4gICAgICB2aWV3U3RhcnREYXRlLFxuICAgICAgc3RhcnRIb3VyLFxuICAgICAgZW5kSG91cixcbiAgICAgIDEsIC8vIERheSB2aWV3XG4gICAgKTtcbiAgICBjb25zdCBibG9ja3MgPSBhY3RpdmVBcHBvaW50bWVudHNNYXBbMF0gPz8ge307XG5cbiAgICAvLyAxLiBDYWxjdWxhdGUgaW5pdGlhbCBtYXhDb25jdXJyZW5jeSBmb3IgZWFjaCBhcHBvaW50bWVudCBzZWdtZW50XG4gICAgY29uc3QgbWF4Q29uY3VycmVuY3lNYXAgPSBuZXcgTWFwPGFueSwgbnVtYmVyPigpO1xuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICBsZXQgbWF4T3ZlcmxhcEluU2VnbWVudEJsb2NrcyA9IDA7XG4gICAgICBjb25zdCBzZWdtZW50U3RhcnRNaW51dGVzID0gc2VnbWVudC5zdGFydERhdGUuZ2V0SG91cnMoKSAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUiArIHNlZ21lbnQuc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRFbmRNaW51dGVzID0gc2VnbWVudC5lbmREYXRlLmdldEhvdXJzKCkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKyBzZWdtZW50LmVuZERhdGUuZ2V0TWludXRlcygpO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgYmxvY2tzIHRoaXMgc2VnbWVudCBvY2N1cGllcyByZWxhdGl2ZSB0byB2aWV3J3Mgc3RhcnRIb3VyXG4gICAgICBjb25zdCB2aWV3UmVsYXRpdmVTdGFydE1pbnV0ZXMgPSBNYXRoLm1heCgwLCBzZWdtZW50U3RhcnRNaW51dGVzIC0gc3RhcnRIb3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSKTtcbiAgICAgIGNvbnN0IHZpZXdSZWxhdGl2ZUVuZE1pbnV0ZXMgPSBNYXRoLm1pbihcbiAgICAgICAgKGVuZEhvdXIgLSBzdGFydEhvdXIpICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSLFxuICAgICAgICBzZWdtZW50RW5kTWludXRlcyAtIHN0YXJ0SG91ciAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGZpcnN0QmxvY2tJbmRleCA9IE1hdGguZmxvb3Iodmlld1JlbGF0aXZlU3RhcnRNaW51dGVzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gTWF0aC5mbG9vcigodmlld1JlbGF0aXZlRW5kTWludXRlcyAtIDEpIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTsgLy8gLTEgYmVjYXVzZSBlbmQgaXMgZXhjbHVzaXZlIGZvciBibG9jayBjb3VudGluZ1xuXG4gICAgICBmb3IgKGxldCBibG9ja0lkeCA9IGZpcnN0QmxvY2tJbmRleDsgYmxvY2tJZHggPD0gbGFzdEJsb2NrSW5kZXg7IGJsb2NrSWR4KyspIHtcbiAgICAgICAgY29uc3QgYXBwb2ludG1lbnRzSW5CbG9jayA9IGJsb2Nrc1tibG9ja0lkeF07XG4gICAgICAgIGlmIChhcHBvaW50bWVudHNJbkJsb2NrKSB7XG4gICAgICAgICAgbWF4T3ZlcmxhcEluU2VnbWVudEJsb2NrcyA9IE1hdGgubWF4KG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MsIGFwcG9pbnRtZW50c0luQmxvY2subGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWF4Q29uY3VycmVuY3lNYXAuc2V0KHNlZ21lbnQuaWQsIG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MgfHwgMSk7XG4gICAgfSk7XG5cbiAgICAvLyAyLiBJdGVyYXRpdmVseSBkZXRlcm1pbmUgZWZmZWN0aXZlVG90YWxDb2x1bW5zIGZvciBncm91cHMgb2Ygb3ZlcmxhcHBpbmcgYXBwb2ludG1lbnRzXG4gICAgY29uc3QgaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA9IG5ldyBNYXA8YW55LCBudW1iZXI+KCk7XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuc2V0KHNlZ21lbnQuaWQsIG1heENvbmN1cnJlbmN5TWFwLmdldChzZWdtZW50LmlkKSB8fCAxKTtcbiAgICB9KTtcblxuICAgIGxldCBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB3aGlsZSAoY2hhbmdlZCkge1xuICAgICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnRBKSA9PiB7XG4gICAgICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50QikgPT4ge1xuICAgICAgICAgIGlmIChzZWdtZW50QS5pZCA9PT0gc2VnbWVudEIuaWQpIHJldHVybjtcblxuICAgICAgICAgIGlmICh0aGlzLmRvQXBwb2ludG1lbnRzT3ZlcmxhcChzZWdtZW50QSwgc2VnbWVudEIpKSB7XG4gICAgICAgICAgICBjb25zdCBldGNBID0gaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5nZXQoc2VnbWVudEEuaWQpIHx8IDE7XG4gICAgICAgICAgICBjb25zdCBldGNCID0gaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5nZXQoc2VnbWVudEIuaWQpIHx8IDE7XG4gICAgICAgICAgICBjb25zdCBtYXhFVEMgPSBNYXRoLm1heChldGNBLCBldGNCKTtcblxuICAgICAgICAgICAgaWYgKGV0Y0EgIT09IG1heEVUQykge1xuICAgICAgICAgICAgICBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLnNldChzZWdtZW50QS5pZCwgbWF4RVRDKTtcbiAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXRjQiAhPT0gbWF4RVRDKSB7XG4gICAgICAgICAgICAgIGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuc2V0KHNlZ21lbnRCLmlkLCBtYXhFVEMpO1xuICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUG9wdWxhdGUgZmluYWwgcmVzdWx0XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIHJlc3VsdEluZm8uc2V0KHNlZ21lbnQuaWQsIHtcbiAgICAgICAgbWF4Q29uY3VycmVuY3k6IG1heENvbmN1cnJlbmN5TWFwLmdldChzZWdtZW50LmlkKSB8fCAxLFxuICAgICAgICBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuZ2V0KHNlZ21lbnQuaWQpIHx8IDEsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHRJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBhcHBvaW50bWVudHMgYnkgdGhlIGJsb2NrIHRoZXkgU1RBUlQgaW4gZm9yIFdlZWsgVmlldy5cbiAgICovXG4gIGNhbGN1bGF0ZVdlZWtWaWV3QXBwb2ludG1lbnRzQnlTdGFydEJsb2NrKFxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSxcbiAgICB2aWV3U3RhcnREYXRlOiBBWERhdGVUaW1lLFxuICAgIHN0YXJ0SG91cjogbnVtYmVyLFxuICAgIGVuZEhvdXI6IG51bWJlcixcbiAgKTogQVhTY2hlZHVsZXJBcHBvaW50bWVudHNCeVN0YXJ0QmxvY2sge1xuICAgIGNvbnN0IGJsb2NrczogQVhTY2hlZHVsZXJBcHBvaW50bWVudHNCeVN0YXJ0QmxvY2sgPSB7fTtcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwb2ludG1lbnQpID0+IHtcbiAgICAgIGlmICghYXBwb2ludG1lbnQuc3RhcnREYXRlKSByZXR1cm47XG4gICAgICBjb25zdCBzdGFydEluZm8gPSB0aGlzLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSksXG4gICAgICAgIHZpZXdTdGFydERhdGUsXG4gICAgICAgIHN0YXJ0SG91cixcbiAgICAgICAgZW5kSG91cixcbiAgICAgICAgNyxcbiAgICAgICk7XG4gICAgICBpZiAoc3RhcnRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHsgZGF5SW5kZXgsIGJsb2NrSW5kZXggfSA9IHN0YXJ0SW5mbztcbiAgICAgICAgaWYgKCFibG9ja3NbZGF5SW5kZXhdKSBibG9ja3NbZGF5SW5kZXhdID0ge307XG4gICAgICAgIGlmICghYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XSkgYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XSA9IFtdO1xuICAgICAgICBibG9ja3NbZGF5SW5kZXhdW2Jsb2NrSW5kZXhdLnB1c2goYXBwb2ludG1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGFwcG9pbnRtZW50cyBieSB0aGUgZGF5KHMpIHRoZXkgb2NjdXIgb24gd2l0aGluIGEgZ2l2ZW4gZGF0ZSByYW5nZS5cbiAgICogUmV0dXJucyBhIE1hcCB3aGVyZSB0aGUga2V5IGlzIHRoZSBkYXRlIHN0cmluZyAoJ1lZWVktTU0tREQnKSBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGFwcG9pbnRtZW50cy5cbiAgICovXG4gIGdyb3VwQXBwb2ludG1lbnRzQnlEYXkoXG4gICAgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSwgLy8gRmlyc3QgZGF5IHZpc2libGUgaW4gdGhlIGdyaWRcbiAgICB2aWV3RW5kRGF0ZTogQVhEYXRlVGltZSwgLy8gTGFzdCBkYXkgdmlzaWJsZSBpbiB0aGUgZ3JpZFxuICApOiBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+IHtcbiAgICBjb25zdCBncm91cGVkQXBwb2ludG1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oKTtcbiAgICBpZiAoIWFwcG9pbnRtZW50cyB8fCBhcHBvaW50bWVudHMubGVuZ3RoID09PSAwIHx8ICF2aWV3U3RhcnREYXRlIHx8ICF2aWV3RW5kRGF0ZSkge1xuICAgICAgcmV0dXJuIGdyb3VwZWRBcHBvaW50bWVudHM7XG4gICAgfVxuXG4gICAgLy8gUHJlLWNhbGN1bGF0ZSB0aGUgZW5kIGRhdGUgZm9yIGNvbXBhcmlzb24gKGV4Y2x1c2l2ZSlcbiAgICBjb25zdCBleGNsdXNpdmVWaWV3RW5kRGF0ZSA9IHZpZXdFbmREYXRlLmFkZCgnZGF5JywgMSk7XG5cbiAgICBhcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwb2ludG1lbnQpID0+IHtcbiAgICAgIGlmICghYXBwb2ludG1lbnQuc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudC5lbmREYXRlIHx8ICFhcHBvaW50bWVudC5pZCkgcmV0dXJuO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBzdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSBhcHBvaW50bWVudCBjbGFtcGVkIGJ5IHRoZSB2aWV3IHJhbmdlXG4gICAgICBjb25zdCBhcHBvaW50bWVudFN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSk7XG4gICAgICBjb25zdCBhcHBvaW50bWVudEVuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcblxuICAgICAgLy8gU2tpcCBpZiBhcHBvaW50bWVudCBlbmRzIGJlZm9yZSB0aGUgdmlldyBzdGFydHMgb3Igc3RhcnRzIGFmdGVyIHRoZSB2aWV3IGVuZHNcbiAgICAgIGlmIChcbiAgICAgICAgYXBwb2ludG1lbnRFbmQuY29tcGFyZSh2aWV3U3RhcnREYXRlLCAnZGF5JykgPCAwIHx8XG4gICAgICAgIGFwcG9pbnRtZW50U3RhcnQuY29tcGFyZShleGNsdXNpdmVWaWV3RW5kRGF0ZSwgJ2RheScpID49IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsYW1wIHN0YXJ0IGRhdGUgdG8gdGhlIHZpZXcgc3RhcnQgZGF0ZVxuICAgICAgbGV0IGN1cnJlbnREYXkgPVxuICAgICAgICBhcHBvaW50bWVudFN0YXJ0LmNvbXBhcmUodmlld1N0YXJ0RGF0ZSwgJ2RheScpIDwgMCA/IHZpZXdTdGFydERhdGUgOiBhcHBvaW50bWVudFN0YXJ0LnN0YXJ0T2YoJ2RheScpO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBkYXkgdGhlIGFwcG9pbnRtZW50IHNwYW5zIHdpdGhpbiB0aGUgdmlldyByYW5nZVxuICAgICAgbGV0IHNhZmVDb3VudCA9IDA7IC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcHNcbiAgICAgIHdoaWxlIChcbiAgICAgICAgY3VycmVudERheS5jb21wYXJlKGFwcG9pbnRtZW50RW5kLCAnZGF5JykgPD0gMCAmJlxuICAgICAgICBjdXJyZW50RGF5LmNvbXBhcmUoZXhjbHVzaXZlVmlld0VuZERhdGUsICdkYXknKSA8IDAgJiZcbiAgICAgICAgc2FmZUNvdW50IDwgMTAwXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQoY3VycmVudERheSwgJ2RhdGV0aW1lJywgeyBmb3JtYXQ6ICdZWVlZLU1NLUREJyB9KTsgLy8gVXNlIGEgY29uc2lzdGVudCBrZXkgZm9ybWF0XG5cbiAgICAgICAgaWYgKCFncm91cGVkQXBwb2ludG1lbnRzLmhhcyhkYXRlU3RyaW5nKSkge1xuICAgICAgICAgIGdyb3VwZWRBcHBvaW50bWVudHMuc2V0KGRhdGVTdHJpbmcsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgdGhlIGFwcG9pbnRtZW50IGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QgZm9yIHRoYXQgZGF5XG4gICAgICAgIGlmICghZ3JvdXBlZEFwcG9pbnRtZW50cy5nZXQoZGF0ZVN0cmluZykuc29tZSgoZSkgPT4gZS5pZCA9PT0gYXBwb2ludG1lbnQuaWQpKSB7XG4gICAgICAgICAgZ3JvdXBlZEFwcG9pbnRtZW50cy5nZXQoZGF0ZVN0cmluZykucHVzaChhcHBvaW50bWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF5ID0gY3VycmVudERheS5hZGQoJ2RheScsIDEpO1xuICAgICAgICBzYWZlQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmIChzYWZlQ291bnQgPj0gMTAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignU2FmZXR5IGJyZWFrIGhpdCBpbiBncm91cEFwcG9pbnRtZW50c0J5RGF5IGxvb3AgZm9yIGFwcG9pbnRtZW50OicsIGFwcG9pbnRtZW50LmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBncm91cGVkQXBwb2ludG1lbnRzO1xuICB9XG5cbiAgZ2V0RGF5T2ZXZWVrTnVtYmVyKGRheU5hbWU6IEFYRGF5T2ZXZWVrTmFtZSk6IG51bWJlciB7XG4gICAgc3dpdGNoIChkYXlOYW1lKSB7XG4gICAgICBjYXNlICdzdW5kYXknOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgJ21vbmRheSc6XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgY2FzZSAndHVlc2RheSc6XG4gICAgICAgIHJldHVybiAzO1xuICAgICAgY2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIHJldHVybiA1O1xuICAgICAgY2FzZSAnZnJpZGF5JzpcbiAgICAgICAgcmV0dXJuIDY7XG4gICAgICBjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIHJldHVybiA3O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGRheSBuYW1lOiAke2RheU5hbWV9LiBEZWZhdWx0aW5nIHRvIFN1bmRheSAoMSkuYCk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGdldFNsb3REYXRhKFxuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXcsXG4gICk6IHsgc3RhcnREYXRlOiBBWERhdGVUaW1lOyBlbmREYXRlOiBBWERhdGVUaW1lOyB2aWV3OiBBWFNjaGVkdWxlclZpZXcgfSB7XG4gICAgbGV0IGVuZERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIGVuZERhdGUgPSBzdGFydERhdGUuYWRkKCdtaW51dGUnLCB0aGlzLkJMT0NLX0RVUkFUSU9OX01JTlVURVMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmFkZCgnbWludXRlJywgdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTICogMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmVuZE9mKCdkYXknKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldyB9O1xuICB9XG5cbiAgaGFuZGxlRXZlbnQoXG4gICAgZXZlbnQ6IEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfCBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgICBldmVudE91dHB1dE1hcCxcbiAgICBldmVudFR5cGU6ICdhcHBvaW50bWVudCcgfCAnc2xvdCcsXG4gICkge1xuICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZXZlbnRUeXBlID09PSAnYXBwb2ludG1lbnQnKSB7XG4gICAgICBjb25zdCBhcHBvaW50bWVudE91dHB1dE1hcCA9IGV2ZW50T3V0cHV0TWFwW2V2ZW50VHlwZV07XG4gICAgICBjb25zdCBlbWl0dGVyID0gYXBwb2ludG1lbnRPdXRwdXRNYXBbbW91c2VFdmVudC50eXBlIGFzIGtleW9mIHR5cGVvZiBhcHBvaW50bWVudE91dHB1dE1hcF07XG4gICAgICBpZiAoZW1pdHRlcikgZW1pdHRlci5lbWl0KGV2ZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3Nsb3QnKSB7XG4gICAgICBjb25zdCBzbG90T3V0cHV0TWFwID0gZXZlbnRPdXRwdXRNYXBbZXZlbnRUeXBlXTtcbiAgICAgIGNvbnN0IGVtaXR0ZXIgPSBzbG90T3V0cHV0TWFwW21vdXNlRXZlbnQudHlwZSBhcyBrZXlvZiB0eXBlb2Ygc2xvdE91dHB1dE1hcF07XG4gICAgICBpZiAoZW1pdHRlcikgZW1pdHRlci5lbWl0KGV2ZW50IGFzIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBUaW1lbGluZSBTcGVjaWZpYyBIZWxwZXJzIC0tLVxuXG4gIGNhbGN1bGF0ZVRpbWVsaW5lTGF5b3V0KFxuICAgIC8vIGBhcHB0YCBoZXJlIHdpbGwgYmUgYW4gQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRUeXBlIHdoZW4gY2FsbGVkIGZyb20gVGltZWxpbmVEYXlWaWV3XG4gICAgYXBwdDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgICB2aWV3U3RhcnRIb3VyOiBudW1iZXIsIC8vIGUuZy4sIDggZm9yIDggQU1cbiAgICB2aWV3RW5kSG91cjogbnVtYmVyLCAvLyBlLmcuLCAxOCBmb3IgNiBQTSAodGltZWxpbmUgcnVucyBmcm9tIDg6MDAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCAxODowMClcbiAgKTogeyBsZWZ0OiBzdHJpbmc7IHdpZHRoOiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGlmIChcbiAgICAgICFhcHB0Py5zdGFydERhdGUgfHxcbiAgICAgICFhcHB0LmVuZERhdGUgfHxcbiAgICAgIHR5cGVvZiB2aWV3U3RhcnRIb3VyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIHZpZXdFbmRIb3VyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgdmlld1N0YXJ0SG91ciA+PSB2aWV3RW5kSG91ciAvLyBCYXNpYyBzYW5pdHkgY2hlY2tcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignY2FsY3VsYXRlVGltZWxpbmVMYXlvdXQ6IEludmFsaWQgaW5wdXQnLCB7IGFwcHQsIHZpZXdTdGFydEhvdXIsIHZpZXdFbmRIb3VyIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxWaWV3RHVyYXRpb25NaW51dGVzID0gKHZpZXdFbmRIb3VyIC0gdmlld1N0YXJ0SG91cikgKiA2MDtcbiAgICBpZiAodG90YWxWaWV3RHVyYXRpb25NaW51dGVzIDw9IDApIHJldHVybiBudWxsOyAvLyBObyB2aWV3YWJsZSBkdXJhdGlvblxuXG4gICAgLy8gU2VnbWVudCdzIHN0YXJ0IGFuZCBlbmQgdGltZXMgKHRoZXNlIGFyZSBhbHJlYWR5IGNsaXBwZWQgdG8gdGhlIGRheSBieSBnZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheSlcbiAgICBjb25zdCBzZWdtZW50U3RhcnQgPSBhcHB0LnN0YXJ0RGF0ZTtcbiAgICBjb25zdCBzZWdtZW50RW5kID0gYXBwdC5lbmREYXRlO1xuXG4gICAgLy8gLS0tIENhbGN1bGF0ZSBTdGFydCBQb3NpdGlvbiAobGVmdCkgLS0tXG4gICAgLy8gRWZmZWN0aXZlIHN0YXJ0IG9mIHRoZSBzZWdtZW50IHdpdGhpbiB0aGUgdmlldydzIGhvdXJzIGZvciBUSElTIGRheVxuICAgIGxldCBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgPSBzZWdtZW50U3RhcnQuZ2V0SG91cnMoKSAqIDYwICsgc2VnbWVudFN0YXJ0LmdldE1pbnV0ZXMoKTtcblxuICAgIC8vIENsYW1wIHRvIHZpZXdTdGFydEhvdXIgZm9yIGNhbGN1bGF0aW9uIGlmIHNlZ21lbnQgc3RhcnRzIGJlZm9yZSB2aWV3YWJsZSBob3VycyAoc2hvdWxkbid0IGhhcHBlbiBpZiBzZWdtZW50ZXIgd29ya2VkKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSA9IE1hdGgubWF4KGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSwgdmlld1N0YXJ0SG91ciAqIDYwKTtcbiAgICAvLyBDbGFtcCB0byB2aWV3RW5kSG91ciBmb3IgY2FsY3VsYXRpb24gaWYgc2VnbWVudCBzdGFydHMgYWZ0ZXIgdmlld2FibGUgaG91cnMgKHNob3VsZG4ndCBoYXBwZW4pXG4gICAgZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5ID0gTWF0aC5taW4oZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5LCB2aWV3RW5kSG91ciAqIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQgPSBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgLSB2aWV3U3RhcnRIb3VyICogNjA7XG5cbiAgICAvLyBJZiBzZWdtZW50IGVmZmVjdGl2ZWx5IHN0YXJ0cyBiZWZvcmUgdGhlIHZpZXdhYmxlIHBhcnQgKGFmdGVyIGNsYW1waW5nKSwgaXQgbWVhbnMgaXQncyBub3QgdmlzaWJsZSBvciBzdGFydHMgYXQgMCVcbiAgICBpZiAoXG4gICAgICBtaW51dGVzRnJvbVZpZXdTdGFydFRvU2VnbWVudFN0YXJ0IDwgMCAmJlxuICAgICAgTWF0aC5hYnMobWludXRlc0Zyb21WaWV3U3RhcnRUb1NlZ21lbnRTdGFydCkgPiAxZS02IC8qZXBzaWxvbiBmb3IgZmxvYXQgaXNzdWVzKi9cbiAgICApIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBiZSBjYXVnaHQgYnkgdGhlIHNlZ21lbnRlciBvciBpbml0aWFsIG92ZXJsYXAgY2hlY2tzLlxuICAgICAgLy8gSWYgaXQgaGFwcGVucywgdHJlYXQgYXMgc3RhcnRpbmcgYXQgMCUgYnV0IGl0IG1pZ2h0IG1lYW4gbm8gdmlzaWJsZSBwYXJ0LlxuICAgIH1cblxuICAgIGNvbnN0IGxlZnRQZXJjZW50YWdlID0gKE1hdGgubWF4KDAsIG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQpIC8gdG90YWxWaWV3RHVyYXRpb25NaW51dGVzKSAqIDEwMDtcblxuICAgIC8vIC0tLSBDYWxjdWxhdGUgRHVyYXRpb24gYW5kIFdpZHRoIC0tLVxuICAgIC8vIEVmZmVjdGl2ZSBlbmQgb2YgdGhlIHNlZ21lbnQgd2l0aGluIHRoZSB2aWV3J3MgaG91cnMgZm9yIFRISVMgZGF5XG4gICAgbGV0IGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBzZWdtZW50RW5kLmdldEhvdXJzKCkgKiA2MCArIHNlZ21lbnRFbmQuZ2V0TWludXRlcygpO1xuICAgIGlmIChzZWdtZW50RW5kLmdldEhvdXJzKCkgPT09IDAgJiYgc2VnbWVudEVuZC5nZXRNaW51dGVzKCkgPT09IDAgJiYgc2VnbWVudEVuZC5nZXRUaW1lKCkgPiBzZWdtZW50U3RhcnQuZ2V0VGltZSgpKSB7XG4gICAgICAvLyBJZiBzZWdtZW50IGVuZHMgZXhhY3RseSBhdCBtaWRuaWdodCAoMDA6MDAgb2YgbmV4dCBkYXksIG1lYW5pbmcgaXQgZmlsbGVkIHVwIHRvIDI0OjAwIG9mIGN1cnJlbnQgZGF5KVxuICAgICAgZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSA9IDI0ICogNjA7XG4gICAgfVxuXG4gICAgLy8gQ2xhbXAgdG8gdmlld0VuZEhvdXIgZm9yIGNhbGN1bGF0aW9uXG4gICAgZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSA9IE1hdGgubWluKGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXksIHZpZXdFbmRIb3VyICogNjApO1xuICAgIC8vIENsYW1wIHRvIHZpZXdTdGFydEhvdXIgZm9yIGNhbGN1bGF0aW9uIChpZiBzZWdtZW50IGVuZHMgYmVmb3JlIHZpZXcgc3RhcnRzKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBNYXRoLm1heChlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5LCB2aWV3U3RhcnRIb3VyICogNjApO1xuXG4gICAgY29uc3Qgc2VnbWVudER1cmF0aW9uTWludXRlc0luVmlldyA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgLSBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXksXG4gICAgKTtcblxuICAgIGlmIChzZWdtZW50RHVyYXRpb25NaW51dGVzSW5WaWV3IDw9IDApIHtcbiAgICAgIC8vIFNlZ21lbnQgaGFzIG5vIHZpc2libGUgZHVyYXRpb24gd2l0aGluIHRoZSB0aW1lbGluZSBob3Vyc1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGhQZXJjZW50YWdlID0gKHNlZ21lbnREdXJhdGlvbk1pbnV0ZXNJblZpZXcgLyB0b3RhbFZpZXdEdXJhdGlvbk1pbnV0ZXMpICogMTAwO1xuXG4gICAgLy8gRW5zdXJlIHBlcmNlbnRhZ2VzIGFyZSB2YWxpZFxuICAgIGlmIChcbiAgICAgIGxlZnRQZXJjZW50YWdlID4gMTAwIHx8XG4gICAgICBsZWZ0UGVyY2VudGFnZSA8IDAgfHxcbiAgICAgIHdpZHRoUGVyY2VudGFnZSA8PSAwIHx8XG4gICAgICB3aWR0aFBlcmNlbnRhZ2UgPiAxMDAgfHxcbiAgICAgIGxlZnRQZXJjZW50YWdlICsgd2lkdGhQZXJjZW50YWdlID4gMTAwLjAwMDEgLyphbGxvdyBmb3IgZmxvYXQgZXJyb3JzKi9cbiAgICApIHtcbiAgICAgIC8vIFRoaXMgbWlnaHQgaW5kaWNhdGUgYW4gaXNzdWUgd2l0aCBkYXRlIGNsYW1waW5nIG9yIGxvZ2ljLlxuICAgICAgLy8gRm9yIG5vdywgaWYgaXQgcmVzdWx0cyBpbiBhbiBpbnZhbGlkIGxheW91dCwgcmV0dXJuIG51bGwuXG4gICAgICAvLyBjb25zb2xlLndhcm4oXCJUaW1lbGluZSBsYXlvdXQgY2FsY3VsYXRpb24gcmVzdWx0ZWQgaW4gb3V0LW9mLWJvdW5kcyBwZXJjZW50YWdlczpcIixcbiAgICAgIC8vICAgICAgICAgICAgICB7bGVmdFBlcmNlbnRhZ2UsIHdpZHRoUGVyY2VudGFnZSwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCB2aWV3U3RhcnRIb3VyLCB2aWV3RW5kSG91cn0pO1xuICAgICAgLy8gQSBjb21tb24gY2FzZSBmb3IgKGxlZnQgKyB3aWR0aCA+IDEwMCkgaXMgaWYgYW4gZXZlbnQgZW5kcyAqZXhhY3RseSogYXQgdmlld0VuZEhvdXIsXG4gICAgICAvLyBhbmQgdmlld0VuZEhvdXIgaXRzZWxmIGlzIHRoZSBib3VuZGFyeS5cbiAgICAgIC8vIExldCdzIGJlIGEgYml0IHRvbGVyYW50IGhlcmUgaWYgd2lkdGggaXMgcG9zaXRpdmUuXG4gICAgICBpZiAod2lkdGhQZXJjZW50YWdlIDw9IDApIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBgJHtNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIGxlZnRQZXJjZW50YWdlKSl9JWAsXG4gICAgICB3aWR0aDogYCR7TWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCB3aWR0aFBlcmNlbnRhZ2UpKX0lYCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHZpc2libGUgc2VnbWVudCBvZiBhIHRpbWVkIGFwcG9pbnRtZW50IG9uIGEgc3BlY2lmaWMgZGF5LFxuICAgKiBjb25zdHJhaW5lZCBieSB0aGUgdmlldydzIHN0YXJ0IGFuZCBlbmQgaG91cnMuXG4gICAqIFJldHVybnMgYSBuZXcgYXBwb2ludG1lbnQtbGlrZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWdtZW50LlxuICAgKi9cbiAgZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoXG4gICAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIC8vIFRoaXMgaXMgdGhlIE9SSUdJTkFMIGFwcG9pbnRtZW50XG4gICAgZGF5OiBBWERhdGVUaW1lLFxuICAgIHZpZXdTdGFydEhvdXI6IG51bWJlcixcbiAgICB2aWV3RW5kSG91cjogbnVtYmVyLFxuICAgIGlzRnVsbERheUNlbGxDb250ZXh0ID0gZmFsc2UsXG4gICk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IHwgbnVsbCB7XG4gICAgaWYgKCFhcHBvaW50bWVudCB8fCAhYXBwb2ludG1lbnQuc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudC5lbmREYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBvaW50bWVudFN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5zdGFydERhdGUpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50RW5kRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcblxuICAgIGlmIChhcHBvaW50bWVudC5hbGxEYXkpIHtcbiAgICAgIGNvbnN0IGRheVN0YXJ0T2YgPSBkYXkuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGlmIChhcHBvaW50bWVudFN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKS5lcXVhbChkYXlTdGFydE9mLCAnZGF5JykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hcHBvaW50bWVudCxcbiAgICAgICAgICBzdGFydERhdGU6IGRheVN0YXJ0T2YuZGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiBkYXlTdGFydE9mLmNsb25lKCkuYWRkKCdkYXknLCAxKS5zdGFydE9mKCdkYXknKS5kYXRlLFxuICAgICAgICAgIGFsbERheTogdHJ1ZSxcbiAgICAgICAgICBvcmlnaW5hbFN0YXJ0RGF0ZTogYXBwb2ludG1lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgICAgICBvcmlnaW5hbEVuZERhdGU6IGFwcG9pbnRtZW50RW5kRGF0ZS5kYXRlLFxuICAgICAgICAgIGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5OiBmYWxzZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvblRvTmV4dERheTogYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID4gMCxcbiAgICAgICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGFwcG9pbnRtZW50U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpIDwgMCAmJlxuICAgICAgICBhcHBvaW50bWVudEVuZERhdGUuc3RhcnRPZignZGF5JykuY29tcGFyZShkYXlTdGFydE9mLCAnZGF5JykgPj0gMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICAgICAgc3RhcnREYXRlOiBkYXlTdGFydE9mLmRhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogZGF5U3RhcnRPZi5jbG9uZSgpLmFkZCgnZGF5JywgMSkuc3RhcnRPZignZGF5JykuZGF0ZSxcbiAgICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICAgICAgb3JpZ2luYWxTdGFydERhdGU6IGFwcG9pbnRtZW50U3RhcnREYXRlLmRhdGUsXG4gICAgICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheTogdHJ1ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvblRvTmV4dERheTogYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID4gMCxcbiAgICAgICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRheVN0YXJ0Qm91bmRhcnkgPSBpc0Z1bGxEYXlDZWxsQ29udGV4dFxuICAgICAgPyBkYXkuY2xvbmUoKS5zdGFydE9mKCdkYXknKVxuICAgICAgOiBkYXkuY2xvbmUoKS5zZXQoJ2hvdXInLCB2aWV3U3RhcnRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG4gICAgY29uc3QgZGF5RW5kQm91bmRhcnkgPSBpc0Z1bGxEYXlDZWxsQ29udGV4dFxuICAgICAgPyBkYXkuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpXG4gICAgICA6IHZpZXdFbmRIb3VyID09PSAyNCB8fCAodmlld0VuZEhvdXIgPT09IDAgJiYgdmlld1N0YXJ0SG91ciA9PT0gMClcbiAgICAgICAgPyBkYXkuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgIDogZGF5LmNsb25lKCkuc2V0KCdob3VyJywgdmlld0VuZEhvdXIpLnN0YXJ0T2YoJ2hvdXInKTtcblxuICAgIGlmIChcbiAgICAgIGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKGRheVN0YXJ0Qm91bmRhcnksICdzZWNvbmQnKSA8PSAwIHx8XG4gICAgICBhcHBvaW50bWVudFN0YXJ0RGF0ZS5jb21wYXJlKGRheUVuZEJvdW5kYXJ5LCAnc2Vjb25kJykgPj0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNlZ21lbnRTdGFydERhdGUgPVxuICAgICAgYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZShkYXlTdGFydEJvdW5kYXJ5LCAnc2Vjb25kJykgPiAwID8gYXBwb2ludG1lbnRTdGFydERhdGUgOiBkYXlTdGFydEJvdW5kYXJ5O1xuICAgIGNvbnN0IHNlZ21lbnRFbmREYXRlID1cbiAgICAgIGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKGRheUVuZEJvdW5kYXJ5LCAnc2Vjb25kJykgPCAwID8gYXBwb2ludG1lbnRFbmREYXRlIDogZGF5RW5kQm91bmRhcnk7XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0RGF0ZS5jb21wYXJlKHNlZ21lbnRFbmREYXRlLCAnc2Vjb25kJykgPj0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgaXNDb250aW51YXRpb25Gcm9tUHJldmlvdXNEYXkgPSBhcHBvaW50bWVudFN0YXJ0RGF0ZS5jb21wYXJlKHNlZ21lbnRTdGFydERhdGUsICdzZWNvbmQnKSA8IDA7XG4gICAgY29uc3QgaXNDb250aW51YXRpb25Ub05leHREYXkgPSBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZShzZWdtZW50RW5kRGF0ZSwgJ3NlY29uZCcpID4gMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGFwcG9pbnRtZW50U3RhcnREYXRlLmR1cmF0aW9uKGFwcG9pbnRtZW50RW5kRGF0ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICBzdGFydERhdGU6IHNlZ21lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgIGVuZERhdGU6IHNlZ21lbnRFbmREYXRlLmRhdGUsXG4gICAgICBhbGxEYXk6IGFwcG9pbnRtZW50LmFsbERheSB8fCBkdXJhdGlvbi50b3RhbC5taWxpc2Vjb25kcyA+PSAyNCAqIDYwICogNjAgKiAxMDAwIC0gMSxcbiAgICAgIG9yaWdpbmFsU3RhcnREYXRlOiBhcHBvaW50bWVudFN0YXJ0RGF0ZS5kYXRlLFxuICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgIGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5LFxuICAgICAgaXNDb250aW51YXRpb25Ub05leHREYXksXG4gICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0T3JpZ2luYWxBcHBvaW50bWVudChpdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IHwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IHtcbiAgICBjb25zdCBzZWdtZW50ID0gaXRlbSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudDtcbiAgICBpZiAoc2VnbWVudC5vcmlnaW5hbEFwcG9pbnRtZW50UmVmKSB7XG4gICAgICByZXR1cm4gc2VnbWVudC5vcmlnaW5hbEFwcG9pbnRtZW50UmVmO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICB9XG4gIGlzV2Vla2VuZChkYXRlOiBBWERhdGVUaW1lLCBjYWxlbmRhcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2Vla2VuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnJlc29sdmVDYWxlbmRhcihjYWxlbmRhcikud2Vla2VuZDtcbiAgICByZXR1cm4gd2Vla2VuZC5pbmNsdWRlcyhkYXRlLmRheU9mV2VlayAtIDEpO1xuICB9XG59XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DOCUMENT, HostBinding, ViewEncapsulation, computed, inject, input, output, signal, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerAgendaViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.daysCount = input(7);\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.dragStartSlotId = signal(null);\n this.agendaDaysLayout = computed(() => {\n const allOriginalAppointments = this.appointments();\n const agendaStartDate = this.date();\n const numberOfDays = this.daysCount();\n if (!agendaStartDate || !allOriginalAppointments) {\n return [];\n }\n const result = [];\n for (let i = 0; i < numberOfDays; i++) {\n const currentDay = agendaStartDate.add('day', i).startOf('day');\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDay, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1),\n (s) => s.startDate.getTime(),\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(),\n ], ['asc', 'asc', 'desc']);\n result.push({\n date: currentDay,\n appointments: sortedSegments,\n holiday: this.isHoliday(currentDay),\n });\n }\n return result;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.onActionClickInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n if (slotData) {\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({ appointment: originalAppointment });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerAgendaViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerAgendaViewComponent, isStandalone: true, selector: \"ax-scheduler-agenda-view\", inputs: { daysCount: { classPropertyName: \"daysCount\", publicName: \"daysCount\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\", onActionClickInternal: \"onActionClickInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-agenda-container\\\">\\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n class=\\\"ax-scheduler-agenda-view-container\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n [attr.data-slot-id]=\\\"dayData.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-header-date-day\\\">\\n <span\\n class=\\\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n [axTooltipPlacement]=\\\"'top-start'\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-agenda-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-agenda-appointment-container\\\">\\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ' (All Day)'\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-agenda-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-appointment-time\\\">\\n @if (segment.allDay) {\\n <span>{{ '@acorex:dateTime.duration.all-day' | translate | async }}</span>\\n } @else {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n <ax-title class=\\\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Description could go here if needed -->\\n <!-- @if (segment.description) {\\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\\n } -->\\n @if (hasActions()) {\\n <ax-icon\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n >\\n </ax-icon>\\n }\\n </div>\\n }\\n @if (dayData.appointments.length === 0) {\\n <div class=\\\"ax-scheduler-agenda-no-appointments\\\">\\n {{ '@acorex:common.general.no-record' | translate | async }}\\n </div>\\n }\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{width:100%;gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;justify-content:space-between;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:120px;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{width:100%}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerAgendaViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-agenda-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AsyncPipe,\n AXFormatPipe,\n AXDecoratorGenericComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTranslatorPipe,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], template: \"<div class=\\\"ax-scheduler-agenda-container\\\">\\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n class=\\\"ax-scheduler-agenda-view-container\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n [attr.data-slot-id]=\\\"dayData.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-header-date-day\\\">\\n <span\\n class=\\\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n [axTooltipPlacement]=\\\"'top-start'\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-agenda-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-agenda-appointment-container\\\">\\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ' (All Day)'\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-agenda-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-appointment-time\\\">\\n @if (segment.allDay) {\\n <span>{{ '@acorex:dateTime.duration.all-day' | translate | async }}</span>\\n } @else {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n <ax-title class=\\\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Description could go here if needed -->\\n <!-- @if (segment.description) {\\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\\n } -->\\n @if (hasActions()) {\\n <ax-icon\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n >\\n </ax-icon>\\n }\\n </div>\\n }\\n @if (dayData.appointments.length === 0) {\\n <div class=\\\"ax-scheduler-agenda-no-appointments\\\">\\n {{ '@acorex:common.general.no-record' | translate | async }}\\n </div>\\n }\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{width:100%;gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;justify-content:space-between;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:120px;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{width:100%}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWFnZW5kYS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2FnZW5kYS9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsV0FBVyxFQUVYLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxX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SURwREksT0FBTywrRUFDUCxTQUFTLHlDQUNULFlBQVksK0NBQ1osMkJBQTJCLHlMQUMzQixlQUFlLDJUQUNmLG1CQUFtQix1SkFDbkIsZ0JBQWdCLGtEQUNoQixrQkFBa0IsNk1BQ2xCLHdCQUF3Qjs7MkZBS2YsOEJBQThCO2tCQXBCMUMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osMkJBQTJCO3dCQUMzQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsZ0NBQWdDLEVBQUUsQ0FBQzs4QkE2SnRDLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbmRhRGF5RGF0YSB7XG4gIGRhdGU6IEFYRGF0ZVRpbWU7XG4gIGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJBZ2VuZGFWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIGRheXNDb3VudCA9IGlucHV0KDcpO1xuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0U2xvdElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGFnZW5kYURheXNMYXlvdXQgPSBjb21wdXRlZDxBZ2VuZGFEYXlEYXRhW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgYWdlbmRhU3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghYWdlbmRhU3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQWdlbmRhRGF5RGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5ID0gYWdlbmRhU3RhcnREYXRlLmFkZCgnZGF5JywgaSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoYXBwdCwgY3VycmVudERheSwgMCwgMjQsIHRydWUpO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvcnRlZFNlZ21lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IChzLmFsbERheSA/IDAgOiAxKSxcbiAgICAgICAgICAocykgPT4gcy5zdGFydERhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheSxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgaG9saWRheTogdGhpcy5pc0hvbGlkYXkoY3VycmVudERheSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcbiAgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PHsgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQgfT4oKTtcblxuICAvLyAtLS0gRXZlbnQgSGFuZGxlcnMgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRPdXRwdXRNYXAgPSB7XG4gICAgc2xvdDoge1xuICAgICAgY2xpY2s6IHRoaXMuc2xvdENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLnNsb3REYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5zbG90UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgICBhcHBvaW50bWVudDoge1xuICAgICAgY2xpY2s6IHRoaXMuYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5hcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLmFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgfTtcbiAgaGFuZGxlQXBwb2ludG1lbnRFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG4gIGhhbmRsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ2FnZW5kYScpO1xuICAgIGlmIChzbG90RGF0YSkge1xuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnYWdlbmRhJyk7XG4gICAgY29uc3QgZHJvcHBlZEl0ZW0gPSBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChkcm9wcGVkSXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIHRoaXMub25BY3Rpb25DbGlja0ludGVybmFsLmVtaXQoeyBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICBnZXRTbG90SWQoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKVxuICAgICAgLmZpbmQoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5kYXRhc2V0WydzbG90SWQnXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYWdTdGFydFNsb3RJZC5zZXQoZHJvcExpc3RFbGVtZW50ID8gZHJvcExpc3RFbGVtZW50LmRhdGFzZXRbJ3Nsb3RJZCddIDogbnVsbCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtY29udGFpbmVyXCI+XG4gIEBmb3IgKGRheURhdGEgb2YgYWdlbmRhRGF5c0xheW91dCgpOyB0cmFjayBkYXlEYXRhLmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICA8ZGl2XG4gICAgICBheERyb3Bab25lXG4gICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICBbY2xhc3MuYXgtc3RhdGUtdG9kYXldPVwiaXNUb2RheShkYXlEYXRhLmRhdGUpXCJcbiAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3LWNvbnRhaW5lclwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF5RGF0YS5kYXRlLmZvcm1hdCgnWVlZWU1NREQnKVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtaGVhZGVyLWRhdGUtZGF5XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlEYXRhLmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICBbYXhUb29sdGlwUGxhY2VtZW50XT1cIid0b3Atc3RhcnQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRheURhdGEuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgQGlmIChkYXlEYXRhLmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgKCB7eyBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1oZWFkZXItZGF0ZS1kYXktbnVtXCI+XG4gICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5hcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICB0b29sdGlwVGVtcGxhdGUoKVxuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAgICAgKHNlZ21lbnQuYWxsRGF5XG4gICAgICAgICAgICAgICAgICAgID8gJyAoQWxsIERheSknXG4gICAgICAgICAgICAgICAgICAgIDogJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAnKScpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VnbWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1hcHBvaW50bWVudC10aW1lXCI+XG4gICAgICAgICAgICAgIEBpZiAoc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnQGFjb3JleDpkYXRlVGltZS5kdXJhdGlvbi5hbGwtZGF5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnQtdGl0bGUgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICA8IS0tIERlc2NyaXB0aW9uIGNvdWxkIGdvIGhlcmUgaWYgbmVlZGVkIC0tPlxuICAgICAgICAgICAgPCEtLSBAaWYgKHNlZ21lbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPnt7IHNlZ21lbnQuZGVzY3JpcHRpb24gfX08L2F4LXN1YnRpdGxlPlxuICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGRheURhdGEuYXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLW5vLWFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgICAge3sgJ0BhY29yZXg6Y29tbW9uLmdlbmVyYWwubm8tcmVjb3JkJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DOCUMENT, HostBinding, inject, input, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.dragStartSlotId = signal(null);\n this.processedAppointmentsForLayout = computed(() => {\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const allAppointmentsInView = this.appointments();\n if (!viewDate || allAppointmentsInView.length === 0) {\n return [];\n }\n const segmentsForThisDay = [];\n for (const appt of allAppointmentsInView) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, startH, endH);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n return segmentsForThisDay;\n });\n this.allDayAppointments = computed(() => {\n const originalAllDayAppointments = this.appointments()?.filter((e) => e && e.allDay) ?? [];\n const multiDayBecomingAllDaySegments = this.processedAppointmentsForLayout()?.filter((segment) => segment && segment.allDay && !this.appointments().find((orig) => orig.id === segment.id)?.allDay) ?? [];\n const combined = new Map();\n originalAllDayAppointments.forEach((appt) => combined.set(appt.id, appt));\n multiDayBecomingAllDaySegments.forEach((appt) => {\n if (!combined.has(appt.id)) {\n combined.set(appt.id, appt);\n }\n });\n return Array.from(combined.values());\n });\n this.singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n });\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.onActionClickInternal = output();\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n this.appointmentLayouts = computed(() => {\n const layouts = new Map();\n const appointmentsToLayout = this.singleDayAppointments();\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (appointmentsToLayout.length === 0 || !viewDate || typeof startH !== 'number' || typeof endH !== 'number') {\n return layouts;\n }\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(appointmentsToLayout, viewDate, startH, endH);\n const sortedAppointments = orderBy(appointmentsToLayout, [(e) => e.startDate.getTime(), (e) => e.originalEndDate.getTime() - e.originalStartDate.getTime()], ['asc', 'desc']);\n const columnsData = [];\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n for (let c = 0;; c++) {\n if (!columnsData[c]) {\n columnsData[c] = { appointments: [] };\n }\n let conflict = false;\n for (const placedSegment of columnsData[c].appointments) {\n const startDate = this.calendarService.create(appointmentSegment.startDate, this.calendar());\n const endDate = this.calendarService.create(appointmentSegment.endDate, this.calendar());\n if (startDate.compare(placedSegment.endDate, 'minute') < 0 &&\n endDate.compare(placedSegment.startDate, 'minute') > 0) {\n conflict = true;\n break;\n }\n }\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n if (c > appointmentsToLayout.length) {\n console.warn(`DayView: Safety break in column assignment for ${appointmentSegment.title}, assigning to new column ${c}`);\n if (!columnsData[c])\n columnsData[c] = { appointments: [] };\n columnsData[c].appointments.push(appointmentSegment);\n assignedCol = c;\n break;\n }\n }\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.id);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n layouts.set(appointmentSegment.id, {\n columnIndex: assignedCol,\n effectiveTotalColumns: effectiveCols,\n });\n }\n return layouts;\n });\n }\n handleAppointmentEvent(mouseEvent, appointment) {\n const originalAppointment = appointment.originalStartDate\n ? {\n ...appointment,\n startDate: appointment.originalStartDate,\n endDate: appointment.originalEndDate,\n }\n : appointment;\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSingleSlotEvent(mouseEvent, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' };\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' };\n const droppedAppt = e.dropped.dragData();\n const originalDroppedAppt = droppedAppt.originalStartDate\n ? {\n ...droppedAppt,\n startDate: droppedAppt.originalStartDate,\n endDate: droppedAppt.originalEndDate,\n }\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate,\n startDate: originalDroppedAppt.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleSingleDayDrop(e, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n const droppedAppt = e.dropped.dragData();\n const originalDroppedAppt = droppedAppt.originalStartDate\n ? {\n ...droppedAppt,\n startDate: droppedAppt.originalStartDate,\n endDate: droppedAppt.originalEndDate,\n }\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate,\n startDate: originalDroppedAppt.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({ appointment: originalAppointment });\n }\n getAppointmentLayout(key) {\n return this.appointmentLayouts().get(key);\n }\n getAppointmentLeft(key) {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n const C = layout.columnIndex;\n if (C < 0) {\n console.warn('Invalid columnIndex < 0 for key:', key);\n return '0px';\n }\n if (C === 0 || N <= 1)\n return '0px';\n const leftPercent = C * (100 / N);\n const gapOffsetPx = C * this.GAP_PX;\n return `calc(${leftPercent}% + ${gapOffsetPx}px)`;\n }\n return '0px';\n }\n getAppointmentWidth(key) {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n if (N <= 0)\n return '0%';\n if (N === 1)\n return `calc(100% - ${this.GAP_PX}px)`;\n const widthPercent = (1 / N) * 100;\n return `calc(${widthPercent}% - ${this.GAP_PX}px)`;\n }\n return '0%';\n }\n getAppointmentTop(key) {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const startMinutes = appointmentSegment.startDate.getHours() * 60 + appointmentSegment.startDate.getMinutes();\n const startBlockOffset = startMinutes - this.startDayHour() * 60;\n const yBlock = startBlockOffset / 30;\n return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${yBlock} + 1px)`;\n }\n return '';\n }\n getAppointmentHeight(key) {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const durationMillis = appointmentSegment.endDate.getTime() - appointmentSegment.startDate.getTime();\n const durationMinutes = Math.max(0, durationMillis / (1000 * 60));\n if (durationMinutes <= 0)\n return '0px';\n const heightBlock = durationMinutes / 30;\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height)`;\n return `calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px)`;\n }\n return '0px';\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerDayViewComponent, isStandalone: true, selector: \"ax-scheduler-day-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\", onActionClickInternal: \"onActionClickInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-day-header\\\">\\n <div class=\\\"ax-scheduler-day-header-table\\\" aria-hidden=\\\"true\\\">\\n <div>\\n {{ '@acorex:dateTime.duration.all-day' | translate | async }}\\n </div>\\n </div>\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleAllDaySlotEvent($event)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event)\\\"\\n class=\\\"ax-scheduler-day-header-table-container\\\"\\n [attr.data-slot-id]=\\\"date().format('YYYYMMDD') + '-allday'\\\"\\n >\\n <div class=\\\"ax-scheduler-day-header-appointment-container\\\">\\n @if (allDayAppointments().length) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || allDayAppointments()[0].readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n [dragData]=\\\"allDayAppointments()[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n [title]=\\\"tooltipTemplate() ? '' : allDayAppointments()[0].title\\\"\\n class=\\\"ax-scheduler-header-day-appointment\\\"\\n [ngClass]=\\\"\\n allDayAppointments()[0].cssClass ??\\n `ax-scheduler-${allDayAppointments()[0].priority ?? 'primary'}-periority`\\n \\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ allDayAppointments()[0].title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, allDayAppointments()[0])\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n @if (allDayAppointments().length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-day-header-more-tag\\\"\\n [ngClass]=\\\"\\n allDayAppointments()[1].cssClass ??\\n `ax-scheduler-${allDayAppointments()[1].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n {{\\n '@acorex:common.general.more-items'\\n | translate: { params: { number: allDayAppointments().length - 1 } }\\n | async\\n }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\" axDropZone>\\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ appointment.startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ appointment.endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-day-time-container\\\">\\n <table class=\\\"ax-scheduler-day-time\\\" aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </table>\\n <div class=\\\"ax-scheduler-day-table-container\\\">\\n <div class=\\\"ax-scheduler-day-appointment-container\\\">\\n @for (appointment of singleDayAppointments(); track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-day-appointment\\\"\\n [style.width]=\\\"getAppointmentWidth(appointment.id)\\\"\\n [style.height]=\\\"getAppointmentHeight(appointment.id)\\\"\\n [style.inset-block-start]=\\\"getAppointmentTop(appointment.id)\\\"\\n [style.inset-inline-start]=\\\"getAppointmentLeft(appointment.id)\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-day-slot\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time)\\\"\\n [attr.data-slot-id]=\\\"time.format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time.add('minute', 30))\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n [attr.data-slot-id]=\\\"time.add('minute', 30).format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n }\\n </div>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:3;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:3;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:2;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], template: \"<div class=\\\"ax-scheduler-day-header\\\">\\n <div class=\\\"ax-scheduler-day-header-table\\\" aria-hidden=\\\"true\\\">\\n <div>\\n {{ '@acorex:dateTime.duration.all-day' | translate | async }}\\n </div>\\n </div>\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleAllDaySlotEvent($event)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event)\\\"\\n class=\\\"ax-scheduler-day-header-table-container\\\"\\n [attr.data-slot-id]=\\\"date().format('YYYYMMDD') + '-allday'\\\"\\n >\\n <div class=\\\"ax-scheduler-day-header-appointment-container\\\">\\n @if (allDayAppointments().length) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || allDayAppointments()[0].readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n [dragData]=\\\"allDayAppointments()[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n [title]=\\\"tooltipTemplate() ? '' : allDayAppointments()[0].title\\\"\\n class=\\\"ax-scheduler-header-day-appointment\\\"\\n [ngClass]=\\\"\\n allDayAppointments()[0].cssClass ??\\n `ax-scheduler-${allDayAppointments()[0].priority ?? 'primary'}-periority`\\n \\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ allDayAppointments()[0].title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, allDayAppointments()[0])\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n @if (allDayAppointments().length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-day-header-more-tag\\\"\\n [ngClass]=\\\"\\n allDayAppointments()[1].cssClass ??\\n `ax-scheduler-${allDayAppointments()[1].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n {{\\n '@acorex:common.general.more-items'\\n | translate: { params: { number: allDayAppointments().length - 1 } }\\n | async\\n }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\" axDropZone>\\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ appointment.startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ appointment.endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-day-time-container\\\">\\n <table class=\\\"ax-scheduler-day-time\\\" aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </table>\\n <div class=\\\"ax-scheduler-day-table-container\\\">\\n <div class=\\\"ax-scheduler-day-appointment-container\\\">\\n @for (appointment of singleDayAppointments(); track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-day-appointment\\\"\\n [style.width]=\\\"getAppointmentWidth(appointment.id)\\\"\\n [style.height]=\\\"getAppointmentHeight(appointment.id)\\\"\\n [style.inset-block-start]=\\\"getAppointmentTop(appointment.id)\\\"\\n [style.inset-inline-start]=\\\"getAppointmentLeft(appointment.id)\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-day-slot\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time)\\\"\\n [attr.data-slot-id]=\\\"time.format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time.add('minute', 30))\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n [attr.data-slot-id]=\\\"time.add('minute', 30).format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n }\\n </div>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:3;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:3;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:2;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2RheS9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1wQyxPQUFPLEVBRUwsb0JBQW9CLEdBR3JCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBc0I3RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQXBCNUQ7O1FBcUJVLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFN0MsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVwQixhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsZUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixhQUFRLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDM0IsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWMsQ0FBQztRQUNwQyxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3hDLGlCQUFZLEdBQUcsS0FBSyxDQUEyQixFQUFFLENBQUMsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLEtBQUssRUFBaUMsQ0FBQztRQUVqRCxvQkFBZSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFdEQsbUNBQThCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsUUFBUSxJQUFJLHFCQUFxQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBQ0QsTUFBTSxrQkFBa0IsR0FBb0MsRUFBRSxDQUFDO1lBQy9ELEtBQUssTUFBTSxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyRyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNGLE1BQU0sOEJBQThCLEdBQ2xDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sQ0FDM0MsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUM5RyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1lBQ3hELDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUUsOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMzQixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNILDBCQUFxQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsT0FBTyxJQUFJLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7UUFFSCx3QkFBbUIsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDMUQsMkJBQXNCLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQzdELDZCQUF3QixHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUMvRCwrQkFBMEIsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDeEUsa0NBQTZCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQzNFLG9DQUErQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUM3RSw4QkFBeUIsR0FBRyxNQUFNLEVBQTRCLENBQUM7UUFDL0QsMEJBQXFCLEdBQUcsTUFBTSxFQUEyQyxDQUFDO1FBRXpELG1CQUFjLEdBQUc7WUFDaEMsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtnQkFDckMsV0FBVyxFQUFFLElBQUksQ0FBQyx3QkFBd0I7YUFDM0M7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQywwQkFBMEI7Z0JBQ3RDLFFBQVEsRUFBRSxJQUFJLENBQUMsNkJBQTZCO2dCQUM1QyxXQUFXLEVBQUUsSUFBSSxDQUFDLCtCQUErQjthQUNsRDtTQUNGLENBQUM7UUErRkYsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF3QyxDQUFDO1lBQ2hFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFL0IsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDN0csT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQztZQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUM5RSxvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLENBQ0wsQ0FBQztZQUVGLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUNoQyxvQkFBb0IsRUFDcEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDbEcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQ2hCLENBQUM7WUFFRixNQUFNLFdBQVcsR0FBd0QsRUFBRSxDQUFDO1lBRTVFLEtBQUssTUFBTSxrQkFBa0IsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNwQixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUM7b0JBQ3hDLENBQUM7b0JBRUQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO29CQUVyQixLQUFLLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO3dCQUM3RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7d0JBQ3pGLElBQ0UsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7NEJBQ3RELE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQ3RELENBQUM7NEJBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQzs0QkFDaEIsTUFBTTt3QkFDUixDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNkLFdBQVcsR0FBRyxDQUFDLENBQUM7d0JBQ2hCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQ3JELE1BQU07b0JBQ1IsQ0FBQztvQkFFRCxJQUFJLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDcEMsT0FBTyxDQUFDLElBQUksQ0FDVixrREFBa0Qsa0JBQWtCLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxFQUFFLENBQzNHLENBQUM7d0JBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDO3dCQUMzRCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUNyRCxXQUFXLEdBQUcsQ0FBQyxDQUFDO3dCQUNoQixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWxGLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO29CQUNqQyxXQUFXLEVBQUUsV0FBVztvQkFDeEIscUJBQXFCLEVBQUUsYUFBYTtpQkFDckMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0tBMkVKO0lBL1BDLHNCQUFzQixDQUFDLFVBQXNCLEVBQUUsV0FBbUM7UUFDaEYsTUFBTSxtQkFBbUIsR0FBSSxXQUE2QyxDQUFDLGlCQUFpQjtZQUMxRixDQUFDLENBQUU7Z0JBQ0MsR0FBRyxXQUFXO2dCQUNkLFNBQVMsRUFBRyxXQUE2QyxDQUFDLGlCQUFpQjtnQkFDM0UsT0FBTyxFQUFHLFdBQTZDLENBQUMsZUFBZTthQUM3QztZQUM5QixDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ2hCLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLEdBQUcsbUJBQW1CO1lBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPO1lBQ3BDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTO1NBQ3pDLENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUMvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUNoRixJQUFJLENBQUMsY0FBYyxFQUNuQixhQUFhLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxVQUFzQixFQUFFLFNBQXFCO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLElBQUksUUFBUTtZQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQy9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ25FLElBQUksQ0FBQyxjQUFjLEVBQ25CLE1BQU0sQ0FDUCxDQUFDO0lBQ04sQ0FBQztJQUNELHFCQUFxQixDQUFDLFVBQXNCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQWMsRUFBRSxDQUFDO1FBQzlELElBQUksUUFBUTtZQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQy9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ25FLElBQUksQ0FBQyxjQUFjLEVBQ25CLE1BQU0sQ0FDUCxDQUFDO0lBQ04sQ0FBQztJQUNELGdCQUFnQixDQUFDLENBQXNCO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQWMsRUFBRSxDQUFDO1FBRTlELE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUE0QixDQUFDO1FBQ25FLE1BQU0sbUJBQW1CLEdBQUksV0FBNkMsQ0FBQyxpQkFBaUI7WUFDMUYsQ0FBQyxDQUFFO2dCQUNDLEdBQUcsV0FBVztnQkFDZCxTQUFTLEVBQUcsV0FBNkMsQ0FBQyxpQkFBaUI7Z0JBQzNFLE9BQU8sRUFBRyxXQUE2QyxDQUFDLGVBQWU7YUFDN0M7WUFDOUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNoQixNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLG1CQUFtQjtZQUN0QixPQUFPLEVBQUUsbUJBQW1CLENBQUMsT0FBTztZQUNwQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsU0FBUztTQUN6QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQztZQUNsQyxTQUFTLEVBQUUsQ0FBQztZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3RCLFdBQVcsRUFBRSxjQUFjO1lBQzNCLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1NBQ2hGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxDQUFzQixFQUFFLFNBQXFCO1FBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUE0QixDQUFDO1FBQ25FLE1BQU0sbUJBQW1CLEdBQUksV0FBNkMsQ0FBQyxpQkFBaUI7WUFDMUYsQ0FBQyxDQUFFO2dCQUNDLEdBQUcsV0FBVztnQkFDZCxTQUFTLEVBQUcsV0FBNkMsQ0FBQyxpQkFBaUI7Z0JBQzNFLE9BQU8sRUFBRyxXQUE2QyxDQUFDLGVBQWU7YUFDN0M7WUFDOUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNoQixNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLG1CQUFtQjtZQUN0QixPQUFPLEVBQUUsbUJBQW1CLENBQUMsT0FBTztZQUNwQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsU0FBUztTQUN6QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQztZQUNsQyxTQUFTLEVBQUUsQ0FBQztZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3RCLFdBQVcsRUFBRSxjQUFjO1lBQzNCLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1NBQ2hGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLGVBQXVDO1FBQzFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBMEZELG9CQUFvQixDQUFDLEdBQVE7UUFDM0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQVE7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFDdkMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVixPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDcEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sUUFBUSxXQUFXLE9BQU8sV0FBVyxLQUFLLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQVE7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFFdkMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sZUFBZSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFFcEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBRW5DLE9BQU8sUUFBUSxZQUFZLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3JELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFRO1FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWxGLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM5RyxNQUFNLGdCQUFnQixHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNyQyxPQUFPLDREQUE0RCxNQUFNLFNBQVMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBUTtRQUMzQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNsRixJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyRyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxjQUFjLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxJQUFJLGVBQWUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXZDLE1BQU0sV0FBVyxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDekMsTUFBTSxlQUFlLEdBQUcsbURBQW1ELENBQUM7WUFFNUUsT0FBTyxRQUFRLGVBQWUsTUFBTSxXQUFXLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBZTtRQUN2QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNsQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdkMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFxQixFQUFFLENBQUMsRUFBRSxZQUFZLFdBQVcsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQTRDLFVBQVU7UUFDcEQsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0E1VVUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsdzZEQUYzQixDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxpREN0RGpGLHlxUkFrTUEsb2hKRHZKSSxPQUFPLG9GQUNQLDJCQUEyQixvTEFDM0IsU0FBUyx5Q0FDVCxnQkFBZ0Isa0RBQ2hCLGtCQUFrQixzUkFDbEIsWUFBWSwrQ0FDWixlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsd0JBQXdCLHNFQUN4QixrQkFBa0I7OzJGQUlULDJCQUEyQjtrQkFwQnZDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQix3QkFBd0I7d0JBQ3hCLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLDZCQUE2QixFQUFFLENBQUM7OEJBNFVuQyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LCBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRE9DVU1FTlQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQsXG4gIEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlci1kYXktdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhGb3JtYXRQaXBlLFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3Bab25lRGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gIF0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlckRheVZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBHQVBfUFggPSAxO1xuXG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICBwcml2YXRlIGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICBjb25zdCBhbGxBcHBvaW50bWVudHNJblZpZXcgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGlmICghdmlld0RhdGUgfHwgYWxsQXBwb2ludG1lbnRzSW5WaWV3Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsQXBwb2ludG1lbnRzSW5WaWV3KSB7XG4gICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KGFwcHQsIHZpZXdEYXRlLCBzdGFydEgsIGVuZEgpO1xuICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50c0ZvclRoaXNEYXk7XG4gIH0pO1xuICBhbGxEYXlBcHBvaW50bWVudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxBbGxEYXlBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpPy5maWx0ZXIoKGUpID0+IGUgJiYgZS5hbGxEYXkpID8/IFtdO1xuICAgIGNvbnN0IG11bHRpRGF5QmVjb21pbmdBbGxEYXlTZWdtZW50cyA9XG4gICAgICB0aGlzLnByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCgpPy5maWx0ZXIoXG4gICAgICAgIChzZWdtZW50KSA9PiBzZWdtZW50ICYmIHNlZ21lbnQuYWxsRGF5ICYmICF0aGlzLmFwcG9pbnRtZW50cygpLmZpbmQoKG9yaWcpID0+IG9yaWcuaWQgPT09IHNlZ21lbnQuaWQpPy5hbGxEYXksXG4gICAgICApID8/IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkID0gbmV3IE1hcDxhbnksIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ+KCk7XG4gICAgb3JpZ2luYWxBbGxEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwdCkgPT4gY29tYmluZWQuc2V0KGFwcHQuaWQsIGFwcHQpKTtcbiAgICBtdWx0aURheUJlY29taW5nQWxsRGF5U2VnbWVudHMuZm9yRWFjaCgoYXBwdCkgPT4ge1xuICAgICAgaWYgKCFjb21iaW5lZC5oYXMoYXBwdC5pZCkpIHtcbiAgICAgICAgY29tYmluZWQuc2V0KGFwcHQuaWQsIGFwcHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGNvbWJpbmVkLnZhbHVlcygpKTtcbiAgfSk7XG4gIHNpbmdsZURheUFwcG9pbnRtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKChlKSA9PiBlICYmICFlLmFsbERheSkgPz8gW107XG4gIH0pO1xuXG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcbiAgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PHsgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQgfT4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmFwcG9pbnRtZW50LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoYXBwb2ludG1lbnQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBhcHBvaW50bWVudDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG4gIGhhbmRsZVNpbmdsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBzdGFydERhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICdkYXknKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cbiAgaGFuZGxlQWxsRGF5U2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBlbmREYXRlID0gdGhpcy5kYXRlKCkuZW5kT2YoJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuZGF0ZSgpLnN0YXJ0T2YoJ2RheScpO1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXc6ICdkYXknIGFzIGNvbnN0IH07XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCkge1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmRhdGUoKS5lbmRPZignZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5Jyk7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldzogJ2RheScgYXMgY29uc3QgfTtcblxuICAgIGNvbnN0IGRyb3BwZWRBcHB0ID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERyb3BwZWRBcHB0ID0gKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmRyb3BwZWRBcHB0LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoZHJvcHBlZEFwcHQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBkcm9wcGVkQXBwdDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsRHJvcHBlZEFwcHQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsRHJvcHBlZEFwcHQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVTaW5nbGVEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ2RheScpO1xuICAgIGNvbnN0IGRyb3BwZWRBcHB0ID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERyb3BwZWRBcHB0ID0gKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmRyb3BwZWRBcHB0LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoZHJvcHBlZEFwcHQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBkcm9wcGVkQXBwdDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsRHJvcHBlZEFwcHQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsRHJvcHBlZEFwcHQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrSW50ZXJuYWwuZW1pdCh7IGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50IH0pO1xuICB9XG5cbiAgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgYXBwb2ludG1lbnRMYXlvdXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dHMgPSBuZXcgTWFwPGFueSwgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dD4oKTtcbiAgICBjb25zdCBhcHBvaW50bWVudHNUb0xheW91dCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcblxuICAgIGlmIChhcHBvaW50bWVudHNUb0xheW91dC5sZW5ndGggPT09IDAgfHwgIXZpZXdEYXRlIHx8IHR5cGVvZiBzdGFydEggIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbmRIICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGxheW91dHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29uY3VycmVuY3lJbmZvTWFwID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgICBhcHBvaW50bWVudHNUb0xheW91dCxcbiAgICAgIHZpZXdEYXRlLFxuICAgICAgc3RhcnRILFxuICAgICAgZW5kSCxcbiAgICApO1xuXG4gICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0LFxuICAgICAgWyhlKSA9PiBlLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIChlKSA9PiBlLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBlLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKV0sXG4gICAgICBbJ2FzYycsICdkZXNjJ10sXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbnNEYXRhOiB7IGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSB9W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYXBwb2ludG1lbnRTZWdtZW50IG9mIHNvcnRlZEFwcG9pbnRtZW50cykge1xuICAgICAgbGV0IGFzc2lnbmVkQ29sID0gLTE7XG5cbiAgICAgIGZvciAobGV0IGMgPSAwOyA7IGMrKykge1xuICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSB7XG4gICAgICAgICAgY29sdW1uc0RhdGFbY10gPSB7IGFwcG9pbnRtZW50czogW10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb25mbGljdCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgcGxhY2VkU2VnbWVudCBvZiBjb2x1bW5zRGF0YVtjXS5hcHBvaW50bWVudHMpIHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50U2VnbWVudC5lbmREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXJ0RGF0ZS5jb21wYXJlKHBsYWNlZFNlZ21lbnQuZW5kRGF0ZSwgJ21pbnV0ZScpIDwgMCAmJlxuICAgICAgICAgICAgZW5kRGF0ZS5jb21wYXJlKHBsYWNlZFNlZ21lbnQuc3RhcnREYXRlLCAnbWludXRlJykgPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25mbGljdCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbmZsaWN0KSB7XG4gICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cy5wdXNoKGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA+IGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBEYXlWaWV3OiBTYWZldHkgYnJlYWsgaW4gY29sdW1uIGFzc2lnbm1lbnQgZm9yICR7YXBwb2ludG1lbnRTZWdtZW50LnRpdGxlfSwgYXNzaWduaW5nIHRvIG5ldyBjb2x1bW4gJHtjfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSBjb2x1bW5zRGF0YVtjXSA9IHsgYXBwb2ludG1lbnRzOiBbXSB9O1xuICAgICAgICAgIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cy5wdXNoKGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmN1cnJlbmN5SW5mbyA9IGNvbmN1cnJlbmN5SW5mb01hcC5nZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUNvbHMgPSBjb25jdXJyZW5jeUluZm8gPyBjb25jdXJyZW5jeUluZm8uZWZmZWN0aXZlVG90YWxDb2x1bW5zIDogMTtcblxuICAgICAgbGF5b3V0cy5zZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkLCB7XG4gICAgICAgIGNvbHVtbkluZGV4OiBhc3NpZ25lZENvbCxcbiAgICAgICAgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBlZmZlY3RpdmVDb2xzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsYXlvdXRzO1xuICB9KTtcblxuICBnZXRBcHBvaW50bWVudExheW91dChrZXk6IGFueSk6IEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFwcG9pbnRtZW50TGF5b3V0cygpLmdldChrZXkpO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRMZWZ0KGtleTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmdldEFwcG9pbnRtZW50TGF5b3V0KGtleSk7XG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMCkge1xuICAgICAgY29uc3QgTiA9IGxheW91dC5lZmZlY3RpdmVUb3RhbENvbHVtbnM7XG4gICAgICBjb25zdCBDID0gbGF5b3V0LmNvbHVtbkluZGV4O1xuICAgICAgaWYgKEMgPCAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2x1bW5JbmRleCA8IDAgZm9yIGtleTonLCBrZXkpO1xuICAgICAgICByZXR1cm4gJzBweCc7XG4gICAgICB9XG4gICAgICBpZiAoQyA9PT0gMCB8fCBOIDw9IDEpIHJldHVybiAnMHB4JztcbiAgICAgIGNvbnN0IGxlZnRQZXJjZW50ID0gQyAqICgxMDAgLyBOKTtcbiAgICAgIGNvbnN0IGdhcE9mZnNldFB4ID0gQyAqIHRoaXMuR0FQX1BYO1xuICAgICAgcmV0dXJuIGBjYWxjKCR7bGVmdFBlcmNlbnR9JSArICR7Z2FwT2Zmc2V0UHh9cHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcwcHgnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRXaWR0aChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5nZXRBcHBvaW50bWVudExheW91dChrZXkpO1xuICAgIGlmIChsYXlvdXQgJiYgbGF5b3V0LmVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA+IDApIHtcbiAgICAgIGNvbnN0IE4gPSBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zO1xuXG4gICAgICBpZiAoTiA8PSAwKSByZXR1cm4gJzAlJztcbiAgICAgIGlmIChOID09PSAxKSByZXR1cm4gYGNhbGMoMTAwJSAtICR7dGhpcy5HQVBfUFh9cHgpYDtcblxuICAgICAgY29uc3Qgd2lkdGhQZXJjZW50ID0gKDEgLyBOKSAqIDEwMDtcblxuICAgICAgcmV0dXJuIGBjYWxjKCR7d2lkdGhQZXJjZW50fSUgLSAke3RoaXMuR0FQX1BYfXB4KWA7XG4gICAgfVxuICAgIHJldHVybiAnMCUnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRUb3Aoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0ga2V5KTtcblxuICAgIGlmIChhcHBvaW50bWVudFNlZ21lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IGFwcG9pbnRtZW50U2VnbWVudC5zdGFydERhdGUuZ2V0SG91cnMoKSAqIDYwICsgYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBzdGFydEJsb2NrT2Zmc2V0ID0gc3RhcnRNaW51dGVzIC0gdGhpcy5zdGFydERheUhvdXIoKSAqIDYwO1xuICAgICAgY29uc3QgeUJsb2NrID0gc3RhcnRCbG9ja09mZnNldCAvIDMwO1xuICAgICAgcmV0dXJuIGBjYWxjKHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCkgKiAke3lCbG9ja30gKyAxcHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRIZWlnaHQoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0ga2V5KTtcbiAgICBpZiAoYXBwb2ludG1lbnRTZWdtZW50KSB7XG4gICAgICBjb25zdCBkdXJhdGlvbk1pbGxpcyA9IGFwcG9pbnRtZW50U2VnbWVudC5lbmREYXRlLmdldFRpbWUoKSAtIGFwcG9pbnRtZW50U2VnbWVudC5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gTWF0aC5tYXgoMCwgZHVyYXRpb25NaWxsaXMgLyAoMTAwMCAqIDYwKSk7XG4gICAgICBpZiAoZHVyYXRpb25NaW51dGVzIDw9IDApIHJldHVybiAnMHB4JztcblxuICAgICAgY29uc3QgaGVpZ2h0QmxvY2sgPSBkdXJhdGlvbk1pbnV0ZXMgLyAzMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQpYDtcblxuICAgICAgcmV0dXJuIGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7aGVpZ2h0QmxvY2t9IC0gJHt0aGlzLkdBUF9QWH1weClgO1xuICAgIH1cbiAgICByZXR1cm4gJzBweCc7XG4gIH1cblxuICBnZXRTbG90SWQoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKVxuICAgICAgLmZpbmQoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5kYXRhc2V0WydzbG90SWQnXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYWdTdGFydFNsb3RJZC5zZXQoZHJvcExpc3RFbGVtZW50ID8gZHJvcExpc3RFbGVtZW50LmRhdGFzZXRbJ3Nsb3RJZCddIDogbnVsbCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWhlYWRlci10YWJsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXY+XG4gICAgICB7eyAnQGFjb3JleDpkYXRlVGltZS5kdXJhdGlvbi5hbGwtZGF5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgYXhEcm9wWm9uZVxuICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlQWxsRGF5RHJvcCgkZXZlbnQpXCJcbiAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAoY2xpY2spPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudClcIlxuICAgIChkYmxjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50KVwiXG4gICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQpXCJcbiAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLXRhYmxlLWNvbnRhaW5lclwiXG4gICAgW2F0dHIuZGF0YS1zbG90LWlkXT1cImRhdGUoKS5mb3JtYXQoJ1lZWVlNTUREJykgKyAnLWFsbGRheSdcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLWFwcG9pbnRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0ucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwiYWxsRGF5QXBwb2ludG1lbnRzKClbMF1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0pXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFsbERheUFwcG9pbnRtZW50cygpWzBdKVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhbGxEYXlBcHBvaW50bWVudHMoKVswXSlcIlxuICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYWxsRGF5QXBwb2ludG1lbnRzKClbMF0udGl0bGVcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlci1kYXktYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgIGBheC1zY2hlZHVsZXItJHthbGxEYXlBcHBvaW50bWVudHMoKVswXS5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcbiAgICAgICAgICBcIlxuICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICB7eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5zdGFydERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAtXG4gICAgICAgICAgICB7eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5lbmREYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjbW9yZUFwcG9pbnRtZW50c1xuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXItbW9yZS10YWdcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgYWxsRGF5QXBwb2ludG1lbnRzKClbMV0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgIGBheC1zY2hlZHVsZXItJHthbGxEYXlBcHBvaW50bWVudHMoKVsxXS5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdAYWNvcmV4OmNvbW1vbi5nZW5lcmFsLm1vcmUtaXRlbXMnXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IHBhcmFtczogeyBudW1iZXI6IGFsbERheUFwcG9pbnRtZW50cygpLmxlbmd0aCAtIDEgfSB9XG4gICAgICAgICAgICAgIHwgYXN5bmNcbiAgICAgICAgICB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LW92ZXJsYXktcGFuZSBheC1zY2hlZHVsZXItcG9wb3ZlclwiIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seSgpXCIgYXhEcm9wWm9uZT5cbiAgICAgICAgICAgIEBmb3IgKGFwcG9pbnRtZW50IG9mIGFsbERheUFwcG9pbnRtZW50cygpOyB0cmFjayBhcHBvaW50bWVudC5pZDsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgICAgICAgIEBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICB7eyBhcHBvaW50bWVudC5zdGFydERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgICAge3sgYXBwb2ludG1lbnQuZW5kRGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS10aW1lLWNvbnRhaW5lclwiPlxuICA8dGFibGUgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LXRpbWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYm9yZGVyXT1cIjFcIj5cbiAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdj5cbiAgICAgICAge3sgdGltZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L3RhYmxlPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS10YWJsZS1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICAgIEBmb3IgKGFwcG9pbnRtZW50IG9mIHNpbmdsZURheUFwcG9pbnRtZW50cygpOyB0cmFjayBhcHBvaW50bWVudC5pZCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgIChwb2ludGVyZG93bik9XCJnZXRTbG90SWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0QXBwb2ludG1lbnRXaWR0aChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiZ2V0QXBwb2ludG1lbnRIZWlnaHQoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtYmxvY2stc3RhcnRdPVwiZ2V0QXBwb2ludG1lbnRUb3AoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImdldEFwcG9pbnRtZW50TGVmdChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICB7eyBhcHBvaW50bWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX0gLVxuICAgICAgICAgICAge3sgYXBwb2ludG1lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LXNsb3RcIj5cbiAgICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZSlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJ0aW1lLmZvcm1hdCgnWVlZWU1NREQtSEhtbScpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICN6b25lMj1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUyLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLmFkZCgnbWludXRlJywgMzApKVwiXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUuYWRkKCdtaW51dGUnLCAzMCkpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJ0aW1lLmFkZCgnbWludXRlJywgMzApLmZvcm1hdCgnWVlZWU1NREQtSEhtbScpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators'; // Adjust path\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DOCUMENT, HostBinding, inject, input, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerMonthViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n // --- Inputs ---\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.firstDayOfWeek = input('saturday');\n this.tooltipTemplate = input();\n // --- Constants ---\n this.DAYS_IN_WEEK = 7;\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n this.dragStartSlotId = signal(null);\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.onActionClickInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n // --- Base Computeds ---\n // Calculate the start of the month based on the input date\n this.monthStartDate = computed(() => {\n const d = this.date();\n return d ? d.startOf('month') : null;\n });\n // Generate the list of weekday names based on the firstDayOfWeek\n this.daysArray = computed(() => {\n const dayNames = [];\n const currentDate = this.date(); // Use a stable date for generating week headers\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n // Calculate days to subtract to get to the start of the week based on firstDayOfWeek\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n let headerStartDate = currentDate.add('day', -daysToSubtract);\n for (let i = 0; i < 7; i++) {\n dayNames.push(headerStartDate);\n headerStartDate = headerStartDate.add('day', 1);\n }\n return dayNames;\n });\n // --- Calendar Grid Calculation ---\n this.calendarDaysInfo = computed(() => {\n const monthStart = this.monthStartDate();\n if (!monthStart)\n return { days: [], weeksNeeded: 0 };\n const firstDayOfMonth = monthStart;\n const lastDayOfMonth = monthStart.endOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const leadingDays = (firstDisplayedDayOfWeek - firstDayGridNum + this.DAYS_IN_WEEK) % this.DAYS_IN_WEEK;\n const firstDayOfGrid = firstDayOfMonth.add('day', -leadingDays);\n // Determine how many total days to show to fill out the weeks\n // A common approach is 6 weeks to ensure consistency, but your dynamic weeksNeeded is fine too.\n // Let's stick to your dynamic `weeksNeeded` and `totalDaysToGenerate`\n const daysInMonth = lastDayOfMonth.dayOfMonth;\n const totalCellsMinimum = leadingDays + daysInMonth;\n const weeksNeededDynamic = Math.ceil(totalCellsMinimum / this.DAYS_IN_WEEK);\n const actualWeeksToShow = Math.max(4, Math.min(weeksNeededDynamic, 6)); // Clamp weeks\n const totalDaysToGenerate = actualWeeksToShow * this.DAYS_IN_WEEK;\n const days = [];\n const today = this.calendarService.create(new Date());\n let currentDay = firstDayOfGrid;\n for (let i = 0; i < totalDaysToGenerate; i++) {\n const isHoliday = this.schedulerService.isHoliday(currentDay) || this.schedulerService.isWeekend(currentDay, this.calendar());\n let holidayTitle = null;\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => currentDay.equal(d.date, 'day'))[0];\n if (holiday) {\n holidayTitle = holiday.title;\n }\n }\n days.push({\n date: currentDay,\n isCurrentMonth: currentDay.monthOfYear === monthStart.monthOfYear,\n isToday: currentDay.equal(today, 'day'),\n isHoliday,\n holidayTitle,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n });\n // --- Appointment Grouping ---\n this.appointmentsGroupedByDay = computed(() => {\n const { days } = this.calendarDaysInfo(); // Destructure to get days array\n if (days.length === 0)\n return new Map();\n const viewStartDate = days[0].date;\n const viewEndDate = days[days.length - 1].date;\n const relevantAppointments = this.appointments();\n return this.schedulerService.groupAppointmentsByDay(relevantAppointments, viewStartDate, viewEndDate);\n });\n // --- Day Cell Layout Calculation ---\n this.dayCellLayouts = computed(() => {\n const { days: initialDaysInfo } = this.calendarDaysInfo();\n const allOriginalAppointments = this.appointments();\n if (initialDaysInfo.length === 0) {\n return []; // Return empty array if no days to process\n }\n if (!allOriginalAppointments || allOriginalAppointments.length === 0) {\n // If no appointments, map initialDaysInfo to the full structure with empty appointment arrays\n return initialDaysInfo.map((dayInfo) => ({\n ...dayInfo,\n appointments: [],\n visibleAppointments: [],\n hiddenAppointments: [],\n overflowCount: 0,\n }));\n }\n return initialDaysInfo.map((dayInfo) => {\n const dayAsStartOfDay = dayInfo.date.startOf('day');\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, dayAsStartOfDay, 0, // viewStartHour for month cell context (full day)\n 24, // viewEndHour for month cell context (full day)\n true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.originalStartDate.getTime(), // Then by original start time\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(), // Then by duration (longer first)\n (s) => s.title?.toLowerCase() ?? '', // Then by title\n ], ['asc', 'asc', 'desc', 'asc']);\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const overflowCount = hiddenAppointments.length;\n return {\n ...dayInfo,\n appointments: sortedSegments,\n visibleAppointments,\n hiddenAppointments,\n overflowCount,\n };\n });\n });\n // --- Dynamic Grid Rows ---\n this.gridTemplateRowsStyle = computed(() => {\n const { weeksNeeded } = this.calendarDaysInfo();\n if (!weeksNeeded || weeksNeeded <= 0) {\n return `repeat(6, minmax(0, 1fr))`; // Fallback, ensures grid is at least somewhat sensible\n }\n return `repeat(${weeksNeeded}, minmax(0, 1fr))`; // Use 1fr for equal distribution\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentSegmentOrOriginal) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegmentOrOriginal);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month'); // Ensure it's start of day\n if (slotData) {\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({ appointment: originalAppointment });\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerMonthViewComponent, isStandalone: true, selector: \"ax-scheduler-month-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: \"firstDayOfWeek\", publicName: \"firstDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\", onActionClickInternal: \"onActionClickInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-month-container\\\">\\n <!-- Weekday Header -->\\n <div class=\\\"ax-scheduler-month-weekdays\\\">\\n @for (day of daysArray(); track day.date.getTime()) {\\n <div class=\\\"ax-scheduler-month-weekday\\\">\\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <!-- Calendar Grid -->\\n <div class=\\\"ax-scheduler-month-grid\\\" [style.gridTemplateRows]=\\\"gridTemplateRowsStyle()\\\">\\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayCell.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n class=\\\"ax-scheduler-month-day-cell\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\n [class.ax-state-holiday]=\\\"dayCell.isHoliday\\\"\\n [class.ax-other-month]=\\\"!dayCell.isCurrentMonth\\\"\\n [attr.data-slot-id]=\\\"dayCell.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-month-day-header\\\">\\n <span class=\\\"ax-scheduler-month-day-number ax-scheduler-truncate\\\" [axTooltip]=\\\"dayCell.holidayTitle ?? ''\\\">\\n {{ dayCell.date.dayOfMonth }}\\n\\n @if (dayCell.holidayTitle) {\\n ( {{ dayCell.holidayTitle }} )\\n }\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-month-day-appointments\\\">\\n <!-- Visible Appointment Segments -->\\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n class=\\\"ax-scheduler-month-appointment-chip\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [class.continuation-to-next]=\\\"segment.isContinuationToNextDay && !segment.allDay\\\"\\n [class.continuation-from-prev]=\\\"segment.isContinuationFromPreviousDay && !segment.allDay\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title\\\">\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </span>\\n @if (!segment.allDay) {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n }\\n <!-- Overflow Badge and Popover -->\\n @if (dayCell.overflowCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Stop propagation to prevent slot click -->\\n +{{\\n '@acorex:common.general.more-items' | translate: { params: { number: dayCell.overflowCount } } | async\\n }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n axDropZone\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title\\\">\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </span>\\n @if (!segment.allDay) {\\n <span>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </span>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}ax-scheduler-month-view .ax-appointment-chip-title{display:flex;justify-content:space-between}ax-scheduler-month-view .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], template: \"<div class=\\\"ax-scheduler-month-container\\\">\\n <!-- Weekday Header -->\\n <div class=\\\"ax-scheduler-month-weekdays\\\">\\n @for (day of daysArray(); track day.date.getTime()) {\\n <div class=\\\"ax-scheduler-month-weekday\\\">\\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <!-- Calendar Grid -->\\n <div class=\\\"ax-scheduler-month-grid\\\" [style.gridTemplateRows]=\\\"gridTemplateRowsStyle()\\\">\\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayCell.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n class=\\\"ax-scheduler-month-day-cell\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\n [class.ax-state-holiday]=\\\"dayCell.isHoliday\\\"\\n [class.ax-other-month]=\\\"!dayCell.isCurrentMonth\\\"\\n [attr.data-slot-id]=\\\"dayCell.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-month-day-header\\\">\\n <span class=\\\"ax-scheduler-month-day-number ax-scheduler-truncate\\\" [axTooltip]=\\\"dayCell.holidayTitle ?? ''\\\">\\n {{ dayCell.date.dayOfMonth }}\\n\\n @if (dayCell.holidayTitle) {\\n ( {{ dayCell.holidayTitle }} )\\n }\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-month-day-appointments\\\">\\n <!-- Visible Appointment Segments -->\\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n class=\\\"ax-scheduler-month-appointment-chip\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [class.continuation-to-next]=\\\"segment.isContinuationToNextDay && !segment.allDay\\\"\\n [class.continuation-from-prev]=\\\"segment.isContinuationFromPreviousDay && !segment.allDay\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title\\\">\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </span>\\n @if (!segment.allDay) {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n }\\n <!-- Overflow Badge and Popover -->\\n @if (dayCell.overflowCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Stop propagation to prevent slot click -->\\n +{{\\n '@acorex:common.general.more-items' | translate: { params: { number: dayCell.overflowCount } } | async\\n }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n axDropZone\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title\\\">\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </span>\\n @if (!segment.allDay) {\\n <span>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </span>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}ax-scheduler-month-view .ax-appointment-chip-title{display:flex;justify-content:space-between}ax-scheduler-month-view .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2xpYi92aWV3cy9tb250aC9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyxDQUFDLGNBQWM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFjLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUVOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUs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SkFDbkIsa0JBQWtCLDZNQUNsQix3QkFBd0I7OzJGQUtmLDZCQUE2QjtrQkFyQnpDLFNBQVM7K0JBQ0UseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixTQUFTO3dCQUNULGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsK0JBQStCLEVBQUUsQ0FBQzs4QkEyUXJDLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7IC8vIEFkanVzdCBwYXRoXG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRE9DVU1FTlQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhEYXlPZldlZWtOYW1lLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7IC8vIEFkanVzdCBwYXRoXG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbi8vIC0tLSBUeXBlcyBzcGVjaWZpYyB0byBNb250aCBWaWV3IExheW91dCAtLS1cbi8vIFJlcHJlc2VudHMgYSBzaW5nbGUgZGF5IGNlbGwgaW4gdGhlIG1vbnRoIGdyaWRcbmV4cG9ydCB0eXBlIEFYU2NoZWR1bGVyTW9udGhEYXlDZWxsID0ge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICBpc0N1cnJlbnRNb250aDogYm9vbGVhbjtcbiAgaXNUb2RheTogYm9vbGVhbjtcbiAgaXNIb2xpZGF5OiBib29sZWFuO1xuICBob2xpZGF5VGl0bGU/OiBzdHJpbmc7XG4gIGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTsgLy8gQWxsIGFwcG9pbnRtZW50cyBmb3IgdGhpcyBkYXlcbiAgdmlzaWJsZUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTsgLy8gQXBwb2ludG1lbnRzIHRvIGRpc3BsYXkgYXMgY2hpcHNcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBcHBvaW50bWVudHMgaGlkZGVuIGJlaGluZCB0aGUgYmFkZ2VcbiAgb3ZlcmZsb3dDb3VudDogbnVtYmVyOyAvLyBDb3VudCBvZiBoaWRkZW4gYXBwb2ludG1lbnRzIChsZW5ndGggb2YgaGlkZGVuQXBwb2ludG1lbnRzKVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLW1vbnRoLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gIF0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgLy8gLS0tIElucHV0cyAtLS1cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICBmaXJzdERheU9mV2VlayA9IGlucHV0PEFYRGF5T2ZXZWVrTmFtZT4oJ3NhdHVyZGF5Jyk7XG4gIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIC8vIC0tLSBDb25zdGFudHMgLS0tXG4gIHJlYWRvbmx5IERBWVNfSU5fV0VFSyA9IDc7XG4gIHJlYWRvbmx5IE1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZID0gMjtcblxuICBwcml2YXRlIGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBJbnRlcm5hbCBvdXRwdXRzIHRvIGJlIGNhdWdodCBieSBwYXJlbnQgQVhTY2hlZHVsZXJDb21wb25lbnRcbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8eyBhcHBvaW50bWVudDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCB9PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50U2VnbWVudE9yT3JpZ2luYWw6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRTZWdtZW50T3JPcmlnaW5hbCk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICdtb250aCcpOyAvLyBFbnN1cmUgaXQncyBzdGFydCBvZiBkYXlcbiAgICBpZiAoc2xvdERhdGEpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRHJvcChlOiBBWERyb3Bab25lRHJvcEV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ21vbnRoJyk7XG4gICAgY29uc3QgZHJvcHBlZEl0ZW0gPSBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChkcm9wcGVkSXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIHRoaXMub25BY3Rpb25DbGlja0ludGVybmFsLmVtaXQoeyBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCB9KTtcbiAgfVxuXG4gIC8vIC0tLSBCYXNlIENvbXB1dGVkcyAtLS1cbiAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgbW9udGggYmFzZWQgb24gdGhlIGlucHV0IGRhdGVcbiAgbW9udGhTdGFydERhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZCA9IHRoaXMuZGF0ZSgpO1xuICAgIHJldHVybiBkID8gZC5zdGFydE9mKCdtb250aCcpIDogbnVsbDtcbiAgfSk7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIGxpc3Qgb2Ygd2Vla2RheSBuYW1lcyBiYXNlZCBvbiB0aGUgZmlyc3REYXlPZldlZWtcbiAgZGF5c0FycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRheU5hbWVzOiBBWERhdGVUaW1lW10gPSBbXTtcblxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5kYXRlKCk7IC8vIFVzZSBhIHN0YWJsZSBkYXRlIGZvciBnZW5lcmF0aW5nIHdlZWsgaGVhZGVyc1xuICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TmFtZSA9IHRoaXMuZmlyc3REYXlPZldlZWsoKTtcbiAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOdW1iZXIgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKGRlc2lyZWRGaXJzdERheU5hbWUpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGRheXMgdG8gc3VidHJhY3QgdG8gZ2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgd2VlayBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgbGV0IGhlYWRlclN0YXJ0RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBkYXlOYW1lcy5wdXNoKGhlYWRlclN0YXJ0RGF0ZSk7XG4gICAgICBoZWFkZXJTdGFydERhdGUgPSBoZWFkZXJTdGFydERhdGUuYWRkKCdkYXknLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRheU5hbWVzO1xuICB9KTtcblxuICAvLyAtLS0gQ2FsZW5kYXIgR3JpZCBDYWxjdWxhdGlvbiAtLS1cbiAgY2FsZW5kYXJEYXlzSW5mbyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtb250aFN0YXJ0ID0gdGhpcy5tb250aFN0YXJ0RGF0ZSgpO1xuICAgIGlmICghbW9udGhTdGFydCkgcmV0dXJuIHsgZGF5czogW10sIHdlZWtzTmVlZGVkOiAwIH07XG5cbiAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBtb250aFN0YXJ0O1xuICAgIGNvbnN0IGxhc3REYXlPZk1vbnRoID0gbW9udGhTdGFydC5lbmRPZignbW9udGgnKTtcblxuICAgIGNvbnN0IGZpcnN0RGF5R3JpZE51bSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIodGhpcy5maXJzdERheU9mV2VlaygpKTtcbiAgICBjb25zdCBmaXJzdERpc3BsYXllZERheU9mV2VlayA9IGZpcnN0RGF5T2ZNb250aC5kYXlPZldlZWs7XG5cbiAgICBjb25zdCBsZWFkaW5nRGF5cyA9IChmaXJzdERpc3BsYXllZERheU9mV2VlayAtIGZpcnN0RGF5R3JpZE51bSArIHRoaXMuREFZU19JTl9XRUVLKSAlIHRoaXMuREFZU19JTl9XRUVLO1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZHcmlkID0gZmlyc3REYXlPZk1vbnRoLmFkZCgnZGF5JywgLWxlYWRpbmdEYXlzKTtcblxuICAgIC8vIERldGVybWluZSBob3cgbWFueSB0b3RhbCBkYXlzIHRvIHNob3cgdG8gZmlsbCBvdXQgdGhlIHdlZWtzXG4gICAgLy8gQSBjb21tb24gYXBwcm9hY2ggaXMgNiB3ZWVrcyB0byBlbnN1cmUgY29uc2lzdGVuY3ksIGJ1dCB5b3VyIGR5bmFtaWMgd2Vla3NOZWVkZWQgaXMgZmluZSB0b28uXG4gICAgLy8gTGV0J3Mgc3RpY2sgdG8geW91ciBkeW5hbWljIGB3ZWVrc05lZWRlZGAgYW5kIGB0b3RhbERheXNUb0dlbmVyYXRlYFxuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbGFzdERheU9mTW9udGguZGF5T2ZNb250aDtcbiAgICBjb25zdCB0b3RhbENlbGxzTWluaW11bSA9IGxlYWRpbmdEYXlzICsgZGF5c0luTW9udGg7XG4gICAgY29uc3Qgd2Vla3NOZWVkZWREeW5hbWljID0gTWF0aC5jZWlsKHRvdGFsQ2VsbHNNaW5pbXVtIC8gdGhpcy5EQVlTX0lOX1dFRUspO1xuICAgIGNvbnN0IGFjdHVhbFdlZWtzVG9TaG93ID0gTWF0aC5tYXgoNCwgTWF0aC5taW4od2Vla3NOZWVkZWREeW5hbWljLCA2KSk7IC8vIENsYW1wIHdlZWtzXG4gICAgY29uc3QgdG90YWxEYXlzVG9HZW5lcmF0ZSA9IGFjdHVhbFdlZWtzVG9TaG93ICogdGhpcy5EQVlTX0lOX1dFRUs7XG5cbiAgICBjb25zdCBkYXlzOiB7XG4gICAgICBkYXRlOiBBWERhdGVUaW1lO1xuICAgICAgaXNDdXJyZW50TW9udGg6IGJvb2xlYW47XG4gICAgICBpc1RvZGF5OiBib29sZWFuO1xuICAgICAgaXNIb2xpZGF5OiBib29sZWFuO1xuICAgICAgaG9saWRheVRpdGxlPzogc3RyaW5nO1xuICAgIH1bXSA9IFtdO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIGxldCBjdXJyZW50RGF5ID0gZmlyc3REYXlPZkdyaWQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsRGF5c1RvR2VuZXJhdGU7IGkrKykge1xuICAgICAgY29uc3QgaXNIb2xpZGF5ID1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShjdXJyZW50RGF5KSB8fCB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGN1cnJlbnREYXksIHRoaXMuY2FsZW5kYXIoKSk7XG5cbiAgICAgIGxldCBob2xpZGF5VGl0bGU6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICAgICAgaWYgKGlzSG9saWRheSkge1xuICAgICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBjdXJyZW50RGF5LmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgICAgaWYgKGhvbGlkYXkpIHtcbiAgICAgICAgICBob2xpZGF5VGl0bGUgPSBob2xpZGF5LnRpdGxlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRheXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXksXG4gICAgICAgIGlzQ3VycmVudE1vbnRoOiBjdXJyZW50RGF5Lm1vbnRoT2ZZZWFyID09PSBtb250aFN0YXJ0Lm1vbnRoT2ZZZWFyLFxuICAgICAgICBpc1RvZGF5OiBjdXJyZW50RGF5LmVxdWFsKHRvZGF5LCAnZGF5JyksXG4gICAgICAgIGlzSG9saWRheSxcbiAgICAgICAgaG9saWRheVRpdGxlLFxuICAgICAgfSk7XG4gICAgICBjdXJyZW50RGF5ID0gY3VycmVudERheS5hZGQoJ2RheScsIDEpO1xuICAgIH1cbiAgICByZXR1cm4geyBkYXlzOiBkYXlzLCB3ZWVrc05lZWRlZDogYWN0dWFsV2Vla3NUb1Nob3cgfTtcbiAgfSk7XG5cbiAgLy8gLS0tIEFwcG9pbnRtZW50IEdyb3VwaW5nIC0tLVxuICBhcHBvaW50bWVudHNHcm91cGVkQnlEYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgeyBkYXlzIH0gPSB0aGlzLmNhbGVuZGFyRGF5c0luZm8oKTsgLy8gRGVzdHJ1Y3R1cmUgdG8gZ2V0IGRheXMgYXJyYXlcbiAgICBpZiAoZGF5cy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPigpO1xuXG4gICAgY29uc3Qgdmlld1N0YXJ0RGF0ZSA9IGRheXNbMF0uZGF0ZTtcbiAgICBjb25zdCB2aWV3RW5kRGF0ZSA9IGRheXNbZGF5cy5sZW5ndGggLSAxXS5kYXRlO1xuICAgIGNvbnN0IHJlbGV2YW50QXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKTtcblxuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ3JvdXBBcHBvaW50bWVudHNCeURheShyZWxldmFudEFwcG9pbnRtZW50cywgdmlld1N0YXJ0RGF0ZSwgdmlld0VuZERhdGUpO1xuICB9KTtcblxuICAvLyAtLS0gRGF5IENlbGwgTGF5b3V0IENhbGN1bGF0aW9uIC0tLVxuICBkYXlDZWxsTGF5b3V0cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyTW9udGhEYXlDZWxsW10+KCgpID0+IHtcbiAgICBjb25zdCB7IGRheXM6IGluaXRpYWxEYXlzSW5mbyB9ID0gdGhpcy5jYWxlbmRhckRheXNJbmZvKCk7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuXG4gICAgaWYgKGluaXRpYWxEYXlzSW5mby5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTsgLy8gUmV0dXJuIGVtcHR5IGFycmF5IGlmIG5vIGRheXMgdG8gcHJvY2Vzc1xuICAgIH1cbiAgICBpZiAoIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzIHx8IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gSWYgbm8gYXBwb2ludG1lbnRzLCBtYXAgaW5pdGlhbERheXNJbmZvIHRvIHRoZSBmdWxsIHN0cnVjdHVyZSB3aXRoIGVtcHR5IGFwcG9pbnRtZW50IGFycmF5c1xuICAgICAgcmV0dXJuIGluaXRpYWxEYXlzSW5mby5tYXAoKGRheUluZm8pID0+ICh7XG4gICAgICAgIC4uLmRheUluZm8sXG4gICAgICAgIGFwcG9pbnRtZW50czogW10sXG4gICAgICAgIHZpc2libGVBcHBvaW50bWVudHM6IFtdLFxuICAgICAgICBoaWRkZW5BcHBvaW50bWVudHM6IFtdLFxuICAgICAgICBvdmVyZmxvd0NvdW50OiAwLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBpbml0aWFsRGF5c0luZm8ubWFwKChkYXlJbmZvKSA9PiB7XG4gICAgICBjb25zdCBkYXlBc1N0YXJ0T2ZEYXkgPSBkYXlJbmZvLmRhdGUuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoXG4gICAgICAgICAgYXBwdCxcbiAgICAgICAgICBkYXlBc1N0YXJ0T2ZEYXksXG4gICAgICAgICAgMCwgLy8gdmlld1N0YXJ0SG91ciBmb3IgbW9udGggY2VsbCBjb250ZXh0IChmdWxsIGRheSlcbiAgICAgICAgICAyNCwgLy8gdmlld0VuZEhvdXIgZm9yIG1vbnRoIGNlbGwgY29udGV4dCAoZnVsbCBkYXkpXG4gICAgICAgICAgdHJ1ZSwgLy8gaXNGdWxsRGF5Q2VsbENvbnRleHQgPSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydGVkU2VnbWVudHMgPSBvcmRlckJ5KFxuICAgICAgICBzZWdtZW50c0ZvclRoaXNEYXksXG4gICAgICAgIFtcbiAgICAgICAgICAocykgPT4gKHMuYWxsRGF5ID8gMCA6IDEpLCAvLyBTZWdtZW50cyBtYXJrZWQgYXMgYWxsRGF5IGZpcnN0XG4gICAgICAgICAgKHMpID0+IHMub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpLCAvLyBUaGVuIGJ5IG9yaWdpbmFsIHN0YXJ0IHRpbWVcbiAgICAgICAgICAocykgPT4gcy5vcmlnaW5hbEVuZERhdGUuZ2V0VGltZSgpIC0gcy5vcmlnaW5hbFN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFRoZW4gYnkgZHVyYXRpb24gKGxvbmdlciBmaXJzdClcbiAgICAgICAgICAocykgPT4gcy50aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJywgLy8gVGhlbiBieSB0aXRsZVxuICAgICAgICBdLFxuICAgICAgICBbJ2FzYycsICdhc2MnLCAnZGVzYycsICdhc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHZpc2libGVBcHBvaW50bWVudHMgPSBzb3J0ZWRTZWdtZW50cy5zbGljZSgwLCB0aGlzLk1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZKTtcbiAgICAgIGNvbnN0IGhpZGRlbkFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dDb3VudCA9IGhpZGRlbkFwcG9pbnRtZW50cy5sZW5ndGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRheUluZm8sXG4gICAgICAgIGFwcG9pbnRtZW50czogc29ydGVkU2VnbWVudHMsXG4gICAgICAgIHZpc2libGVBcHBvaW50bWVudHMsXG4gICAgICAgIGhpZGRlbkFwcG9pbnRtZW50cyxcbiAgICAgICAgb3ZlcmZsb3dDb3VudCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBEeW5hbWljIEdyaWQgUm93cyAtLS1cbiAgZ3JpZFRlbXBsYXRlUm93c1N0eWxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHsgd2Vla3NOZWVkZWQgfSA9IHRoaXMuY2FsZW5kYXJEYXlzSW5mbygpO1xuICAgIGlmICghd2Vla3NOZWVkZWQgfHwgd2Vla3NOZWVkZWQgPD0gMCkge1xuICAgICAgcmV0dXJuIGByZXBlYXQoNiwgbWlubWF4KDAsIDFmcikpYDsgLy8gRmFsbGJhY2ssIGVuc3VyZXMgZ3JpZCBpcyBhdCBsZWFzdCBzb21ld2hhdCBzZW5zaWJsZVxuICAgIH1cbiAgICByZXR1cm4gYHJlcGVhdCgke3dlZWtzTmVlZGVkfSwgbWlubWF4KDAsIDFmcikpYDsgLy8gVXNlIDFmciBmb3IgZXF1YWwgZGlzdHJpYnV0aW9uXG4gIH0pO1xuXG4gIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWNvbnRhaW5lclwiPlxuICA8IS0tIFdlZWtkYXkgSGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLXdlZWtkYXlzXCI+XG4gICAgQGZvciAoZGF5IG9mIGRheXNBcnJheSgpOyB0cmFjayBkYXkuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtd2Vla2RheVwiPlxuICAgICAgICB7eyBkYXkgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8IS0tIENhbGVuZGFyIEdyaWQgLS0+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZ3JpZFwiIFtzdHlsZS5ncmlkVGVtcGxhdGVSb3dzXT1cImdyaWRUZW1wbGF0ZVJvd3NTdHlsZSgpXCI+XG4gICAgQGZvciAoZGF5Q2VsbCBvZiBkYXlDZWxsTGF5b3V0cygpOyB0cmFjayBkYXlDZWxsLmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudCwgZGF5Q2VsbC5kYXRlKVwiXG4gICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5Q2VsbC5kYXRlKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheUNlbGwuZGF0ZSlcIlxuICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1kYXktY2VsbFwiXG4gICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJkYXlDZWxsLmlzVG9kYXlcIlxuICAgICAgICBbY2xhc3MuYXgtc3RhdGUtaG9saWRheV09XCJkYXlDZWxsLmlzSG9saWRheVwiXG4gICAgICAgIFtjbGFzcy5heC1vdGhlci1tb250aF09XCIhZGF5Q2VsbC5pc0N1cnJlbnRNb250aFwiXG4gICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXlDZWxsLmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1kYXktaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LW51bWJlciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIiBbYXhUb29sdGlwXT1cImRheUNlbGwuaG9saWRheVRpdGxlID8/ICcnXCI+XG4gICAgICAgICAgICB7eyBkYXlDZWxsLmRhdGUuZGF5T2ZNb250aCB9fVxuXG4gICAgICAgICAgICBAaWYgKGRheUNlbGwuaG9saWRheVRpdGxlKSB7XG4gICAgICAgICAgICAgICgge3sgZGF5Q2VsbC5ob2xpZGF5VGl0bGUgfX0gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LWFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgIDwhLS0gVmlzaWJsZSBBcHBvaW50bWVudCBTZWdtZW50cyAtLT5cbiAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheUNlbGwudmlzaWJsZUFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZW1wbGF0ZSgpXG4gICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICA6IHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtYXBwb2ludG1lbnQtY2hpcFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke3NlZ21lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNvbnRpbnVhdGlvbi10by1uZXh0XT1cInNlZ21lbnQuaXNDb250aW51YXRpb25Ub05leHREYXkgJiYgIXNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNvbnRpbnVhdGlvbi1mcm9tLXByZXZdPVwic2VnbWVudC5pc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheSAmJiAhc2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtYXBwb2ludG1lbnQtY2hpcC10aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPCEtLSBPdmVyZmxvdyBCYWRnZSBhbmQgUG9wb3ZlciAtLT5cbiAgICAgICAgICBAaWYgKGRheUNlbGwub3ZlcmZsb3dDb3VudCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgI21vcmVBcHBvaW50bWVudHMgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtb3ZlcmZsb3ctYmFkZ2VcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgIDwhLS0gU3RvcCBwcm9wYWdhdGlvbiB0byBwcmV2ZW50IHNsb3QgY2xpY2sgLS0+XG4gICAgICAgICAgICAgICt7e1xuICAgICAgICAgICAgICAgICdAYWNvcmV4OmNvbW1vbi5nZW5lcmFsLm1vcmUtaXRlbXMnIHwgdHJhbnNsYXRlOiB7IHBhcmFtczogeyBudW1iZXI6IGRheUNlbGwub3ZlcmZsb3dDb3VudCB9IH0gfCBhc3luY1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXgtcG9wb3ZlciBbdGFyZ2V0XT1cIm1vcmVBcHBvaW50bWVudHNcIiBwbGFjZW1lbnQ9XCJib3R0b20tc3RhcnRcIiB0cmlnZ2VyPVwiY2xpY2tcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXIgYXgtc2NoZWR1bGVyLW1vbnRoLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlDZWxsLmhpZGRlbkFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZW1wbGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke3NlZ21lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWFwcG9pbnRtZW50LWNoaXAtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IHNlZ21lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXNlZ21lbnQuYWxsRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DOCUMENT, HostBinding, ViewEncapsulation, computed, inject, input, output, signal, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.dragStartSlotId = signal(null);\n /**\n * Processes original appointments to get segments relevant to this specific day and its viewable hours.\n * Filters out original all-day events.\n */\n this.processedSegmentsForLayout = computed(() => {\n const viewDate = this.date();\n const allOriginalAppointments = this.appointments();\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n if (!viewDate || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n const segmentsOnThisDay = [];\n for (const appt of allOriginalAppointments) {\n if (appt.allDay) {\n continue;\n }\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, viewConfigStartHour, viewConfigEndHour, false);\n if (segment) {\n segmentsOnThisDay.push(segment);\n }\n }\n return segmentsOnThisDay;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.onActionClickInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n // --- Appointment Layout Calculation ---\n this.appointmentLayouts = computed(() => {\n const finalLayouts = [];\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n const appointmentsToLayout = this.processedSegmentsForLayout(); // USE SEGMENTS\n if (typeof viewConfigStartHour !== 'number' ||\n typeof viewConfigEndHour !== 'number' ||\n appointmentsToLayout.length === 0) {\n return finalLayouts;\n }\n const sortedAppointments = orderBy(appointmentsToLayout, [(seg) => seg.startDate.getTime(), (seg) => seg.originalEndDate.getTime()], ['asc', 'desc']);\n const rowEndTimes = [];\n for (const segment of sortedAppointments) {\n const horizLayout = this.schedulerService.calculateTimelineLayout(segment, // Pass the segment\n viewConfigStartHour, viewConfigEndHour);\n if (!horizLayout)\n continue; // Segment is outside the viewable hour range or invalid\n // For overlap check, use the segment's start and end times\n const segmentStartTime = this.calendarService.create(segment.startDate, this.calendar());\n const segmentEndTime = this.calendarService.create(segment.endDate, this.calendar());\n let assignedRowIndex = -1;\n for (let i = 0; i < rowEndTimes.length; i++) {\n // If this segment starts AFTER OR AT the time the row becomes free\n if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {\n assignedRowIndex = i;\n break;\n }\n }\n if (assignedRowIndex === -1) {\n assignedRowIndex = rowEndTimes.length;\n rowEndTimes.push(segmentEndTime); // Add segment's end time for the new row\n }\n else {\n // Update the end time for the assigned row with this segment's end time\n rowEndTimes[assignedRowIndex] = segmentEndTime;\n }\n const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)'; // CSS variable for height\n const layoutLeft = horizLayout.left;\n const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`; // Apply horizontal gap if items are side-by-side within a row (not typical for this stacking)\n const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`; // Vertical stacking with gap\n finalLayouts.push({\n appointment: segment, // Store the segment data\n layoutLeft,\n layoutWidth,\n layoutTop,\n layoutHeight,\n });\n }\n return finalLayouts;\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleDrop(e, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({ appointment: originalAppointment });\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineDayViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-day-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\", onActionClickInternal: \"onActionClickInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-header\\\">\\n @for (hour of hoursArray(); track hour.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-header-hours\\\">\\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\\n </div>\\n }\\n</div>\\n\\n<div class=\\\"ax-scheduler-timeline-content\\\">\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || layout.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"layout.appointment\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : layout.appointment.title\\\"\\n [style.width]=\\\"layout.layoutWidth\\\"\\n [style.height]=\\\"layout.layoutHeight\\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [style.insetBlockStart]=\\\"layout.layoutTop\\\"\\n [style.insetInlineStart]=\\\"layout.layoutLeft\\\"\\n [ngClass]=\\\"layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ layout.appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, layout.appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div class=\\\"ax-scheduler-timeline-slot-row\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-slot-cell\\\"\\n (click)=\\\"handleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, time)\\\"\\n [attr.data-slot-id]=\\\"time.format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-header\\\">\\n @for (hour of hoursArray(); track hour.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-header-hours\\\">\\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\\n </div>\\n }\\n</div>\\n\\n<div class=\\\"ax-scheduler-timeline-content\\\">\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || layout.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"layout.appointment\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : layout.appointment.title\\\"\\n [style.width]=\\\"layout.layoutWidth\\\"\\n [style.height]=\\\"layout.layoutHeight\\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [style.insetBlockStart]=\\\"layout.layoutTop\\\"\\n [style.insetInlineStart]=\\\"layout.layoutLeft\\\"\\n [ngClass]=\\\"layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ layout.appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, layout.appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div class=\\\"ax-scheduler-timeline-slot-row\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-slot-cell\\\"\\n (click)=\\\"handleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, time)\\\"\\n [attr.data-slot-id]=\\\"time.format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLWRheS9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBRVgsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1wQyxP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RyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxJQUE0QyxVQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBdk5VLG1DQUFtQztrR0FBbkMsbUNBQW1DLGk3REFGbkMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxFQUFFLENBQUMsaURDbER6RixzN0ZBcUVBLHVoRkQ1QkksT0FBTyxvRkFDUCwyQkFBMkIsb0xBQzNCLFlBQVksMENBQ1osU0FBUyw4Q0FDVCxlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsd0JBQXdCLHNFQUN4QixrQkFBa0I7OzJGQUlULG1DQUFtQztrQkFsQi9DLFNBQVM7K0JBQ0UsZ0NBQWdDLG1CQUd6Qix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcscUNBQXFDLEVBQUUsQ0FBQzs4QkF1TjNDLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBET0NVTUVOVCxcbiAgSG9zdEJpbmRpbmcsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dCxcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3Bab25lRGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gIF0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgR0FQX1BYID0gMTtcblxuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgZW5kRGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgc3RhcnREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBhcHBvaW50bWVudHMgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KFtdKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSBkcmFnU3RhcnRTbG90SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyBvcmlnaW5hbCBhcHBvaW50bWVudHMgdG8gZ2V0IHNlZ21lbnRzIHJlbGV2YW50IHRvIHRoaXMgc3BlY2lmaWMgZGF5IGFuZCBpdHMgdmlld2FibGUgaG91cnMuXG4gICAqIEZpbHRlcnMgb3V0IG9yaWdpbmFsIGFsbC1kYXkgZXZlbnRzLlxuICAgKi9cbiAgcHJvY2Vzc2VkU2VnbWVudHNGb3JMYXlvdXQgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdPigoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3Qgdmlld0NvbmZpZ1N0YXJ0SG91ciA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3Qgdmlld0NvbmZpZ0VuZEhvdXIgPSB0aGlzLmVuZERheUhvdXIoKTtcblxuICAgIGlmICghdmlld0RhdGUgfHwgIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzIHx8IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZ21lbnRzT25UaGlzRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICBpZiAoYXBwdC5hbGxEYXkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoXG4gICAgICAgIGFwcHQsXG4gICAgICAgIHZpZXdEYXRlLFxuICAgICAgICB2aWV3Q29uZmlnU3RhcnRIb3VyLFxuICAgICAgICB2aWV3Q29uZmlnRW5kSG91cixcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuXG4gICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBzZWdtZW50c09uVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHNPblRoaXNEYXk7XG4gIH0pO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG4gIG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCA9IG91dHB1dDx7IGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IH0+KCk7XG5cbiAgLy8gLS0tIEV2ZW50IEhhbmRsZXJzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgc3RhcnREYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoc3RhcnREYXRlLCAndGltZWxpbmUtZGF5Jyk7XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgc3RhcnREYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoc3RhcnREYXRlLCAndGltZWxpbmUtZGF5Jyk7XG4gICAgY29uc3QgZHJvcHBlZEl0ZW0gPSBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChkcm9wcGVkSXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIHRoaXMub25BY3Rpb25DbGlja0ludGVybmFsLmVtaXQoeyBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCB9KTtcbiAgfVxuXG4gIGhvdXJzQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IHRpbWUgPSB0aGlzLmRhdGUoKTtcbiAgICBpZiAoIXRpbWUpIHJldHVybiBbXTtcbiAgICB0aW1lID0gdGltZS5zZXQoJ2hvdXInLCB0aGlzLnN0YXJ0RGF5SG91cigpKS5zdGFydE9mKCdob3VyJyk7XG4gICAgY29uc3QgaG91cnMgPSBbdGltZV07XG4gICAgd2hpbGUgKHRpbWUuaG91ciA8IHRoaXMuZW5kRGF5SG91cigpIC0gMSkge1xuICAgICAgdGltZSA9IHRpbWUuYWRkKCdob3VyJywgMSk7XG4gICAgICBob3Vycy5wdXNoKHRpbWUpO1xuICAgIH1cbiAgICByZXR1cm4gaG91cnM7XG4gIH0pO1xuXG4gIC8vIC0tLSBBcHBvaW50bWVudCBMYXlvdXQgQ2FsY3VsYXRpb24gLS0tXG4gIGFwcG9pbnRtZW50TGF5b3V0cyA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0W10gPT4ge1xuICAgIGNvbnN0IGZpbmFsTGF5b3V0czogQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dFtdID0gW107XG4gICAgY29uc3Qgdmlld0NvbmZpZ1N0YXJ0SG91ciA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3Qgdmlld0NvbmZpZ0VuZEhvdXIgPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICBjb25zdCBhcHBvaW50bWVudHNUb0xheW91dCA9IHRoaXMucHJvY2Vzc2VkU2VnbWVudHNGb3JMYXlvdXQoKTsgLy8gVVNFIFNFR01FTlRTXG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygdmlld0NvbmZpZ1N0YXJ0SG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGVvZiB2aWV3Q29uZmlnRW5kSG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIGZpbmFsTGF5b3V0cztcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0ZWRBcHBvaW50bWVudHMgPSBvcmRlckJ5KFxuICAgICAgYXBwb2ludG1lbnRzVG9MYXlvdXQsXG4gICAgICBbKHNlZykgPT4gc2VnLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIChzZWcpID0+IHNlZy5vcmlnaW5hbEVuZERhdGUuZ2V0VGltZSgpXSxcbiAgICAgIFsnYXNjJywgJ2Rlc2MnXSxcbiAgICApO1xuXG4gICAgY29uc3Qgcm93RW5kVGltZXM6IEFYRGF0ZVRpbWVbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNvcnRlZEFwcG9pbnRtZW50cykge1xuICAgICAgY29uc3QgaG9yaXpMYXlvdXQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlVGltZWxpbmVMYXlvdXQoXG4gICAgICAgIHNlZ21lbnQsIC8vIFBhc3MgdGhlIHNlZ21lbnRcbiAgICAgICAgdmlld0NvbmZpZ1N0YXJ0SG91cixcbiAgICAgICAgdmlld0NvbmZpZ0VuZEhvdXIsXG4gICAgICApO1xuXG4gICAgICBpZiAoIWhvcml6TGF5b3V0KSBjb250aW51ZTsgLy8gU2VnbWVudCBpcyBvdXRzaWRlIHRoZSB2aWV3YWJsZSBob3VyIHJhbmdlIG9yIGludmFsaWRcblxuICAgICAgLy8gRm9yIG92ZXJsYXAgY2hlY2ssIHVzZSB0aGUgc2VnbWVudCdzIHN0YXJ0IGFuZCBlbmQgdGltZXNcbiAgICAgIGNvbnN0IHNlZ21lbnRTdGFydFRpbWUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnbWVudC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBzZWdtZW50RW5kVGltZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShzZWdtZW50LmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG5cbiAgICAgIGxldCBhc3NpZ25lZFJvd0luZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0VuZFRpbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIElmIHRoaXMgc2VnbWVudCBzdGFydHMgQUZURVIgT1IgQVQgdGhlIHRpbWUgdGhlIHJvdyBiZWNvbWVzIGZyZWVcbiAgICAgICAgaWYgKHNlZ21lbnRTdGFydFRpbWUuY29tcGFyZShyb3dFbmRUaW1lc1tpXSwgJ21pbnV0ZScpID49IDApIHtcbiAgICAgICAgICBhc3NpZ25lZFJvd0luZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXNzaWduZWRSb3dJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYXNzaWduZWRSb3dJbmRleCA9IHJvd0VuZFRpbWVzLmxlbmd0aDtcbiAgICAgICAgcm93RW5kVGltZXMucHVzaChzZWdtZW50RW5kVGltZSk7IC8vIEFkZCBzZWdtZW50J3MgZW5kIHRpbWUgZm9yIHRoZSBuZXcgcm93XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIGVuZCB0aW1lIGZvciB0aGUgYXNzaWduZWQgcm93IHdpdGggdGhpcyBzZWdtZW50J3MgZW5kIHRpbWVcbiAgICAgICAgcm93RW5kVGltZXNbYXNzaWduZWRSb3dJbmRleF0gPSBzZWdtZW50RW5kVGltZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF5b3V0SGVpZ2h0ID0gJ3ZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLXRpbWVsaW5lLXZpZXctYmxvY2tzLWhlaWdodCknOyAvLyBDU1MgdmFyaWFibGUgZm9yIGhlaWdodFxuICAgICAgY29uc3QgbGF5b3V0TGVmdCA9IGhvcml6TGF5b3V0LmxlZnQ7XG4gICAgICBjb25zdCBsYXlvdXRXaWR0aCA9IGBjYWxjKCR7aG9yaXpMYXlvdXQud2lkdGh9IC0gJHt0aGlzLkdBUF9QWH1weClgOyAvLyBBcHBseSBob3Jpem9udGFsIGdhcCBpZiBpdGVtcyBhcmUgc2lkZS1ieS1zaWRlIHdpdGhpbiBhIHJvdyAobm90IHR5cGljYWwgZm9yIHRoaXMgc3RhY2tpbmcpXG4gICAgICBjb25zdCBsYXlvdXRUb3AgPSBgY2FsYygke2Fzc2lnbmVkUm93SW5kZXh9ICogKCR7bGF5b3V0SGVpZ2h0fSArICR7dGhpcy5HQVBfUFh9cHgpKWA7IC8vIFZlcnRpY2FsIHN0YWNraW5nIHdpdGggZ2FwXG5cbiAgICAgIGZpbmFsTGF5b3V0cy5wdXNoKHtcbiAgICAgICAgYXBwb2ludG1lbnQ6IHNlZ21lbnQsIC8vIFN0b3JlIHRoZSBzZWdtZW50IGRhdGFcbiAgICAgICAgbGF5b3V0TGVmdCxcbiAgICAgICAgbGF5b3V0V2lkdGgsXG4gICAgICAgIGxheW91dFRvcCxcbiAgICAgICAgbGF5b3V0SGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsTGF5b3V0cztcbiAgfSk7XG5cbiAgZ2V0U2xvdElkKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IGRyb3BMaXN0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICAgIC5lbGVtZW50c0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSlcbiAgICAgIC5maW5kKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnc2xvdElkJ10gIT09IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kcmFnU3RhcnRTbG90SWQuc2V0KGRyb3BMaXN0RWxlbWVudCA/IGRyb3BMaXN0RWxlbWVudC5kYXRhc2V0WydzbG90SWQnXSA6IG51bGwpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5heC1zdGF0ZS1yZWFkb25seScpIGdldCBpc1JlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyXCI+XG4gIEBmb3IgKGhvdXIgb2YgaG91cnNBcnJheSgpOyB0cmFjayBob3VyLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1oZWFkZXItaG91cnNcIj5cbiAgICAgIDxzcGFuPnt7IGhvdXIgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWNvbnRlbnRcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICBAZm9yIChsYXlvdXQgb2YgYXBwb2ludG1lbnRMYXlvdXRzKCk7IHRyYWNrIGxheW91dC5hcHBvaW50bWVudC5pZCkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyYWdcbiAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgbGF5b3V0LmFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICBbZHJhZ0RhdGFdPVwibGF5b3V0LmFwcG9pbnRtZW50XCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBsYXlvdXQuYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwibGF5b3V0LmxheW91dFdpZHRoXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJsYXlvdXQubGF5b3V0SGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnRcIlxuICAgICAgICBbc3R5bGUuaW5zZXRCbG9ja1N0YXJ0XT1cImxheW91dC5sYXlvdXRUb3BcIlxuICAgICAgICBbc3R5bGUuaW5zZXRJbmxpbmVTdGFydF09XCJsYXlvdXQubGF5b3V0TGVmdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImxheW91dC5hcHBvaW50bWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7bGF5b3V0LmFwcG9pbnRtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgbGF5b3V0LmFwcG9pbnRtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGxheW91dC5hcHBvaW50bWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgIH19XG4gICAgICAgICAgLVxuICAgICAgICAgIHt7IGxheW91dC5hcHBvaW50bWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtc2xvdC1yb3dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyb3Bab25lXG4gICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1zbG90LWNlbGxcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwidGltZS5mb3JtYXQoJ1lZWVlNTURELUhIbW0nKVwiXG4gICAgICA+PC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DOCUMENT, HostBinding, ViewEncapsulation, computed, inject, input, output, signal, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineMonthViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3;\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.dragStartSlotId = signal(null);\n this.processedDayData = computed(() => {\n const allOriginalAppointments = this.appointments();\n const monthStartDate = this.date().startOf('month');\n const daysInMonth = monthStartDate.endOf('month').dayOfMonth;\n if (!allOriginalAppointments) {\n return Array.from({ length: daysInMonth }, (_, i) => {\n const dayDate = monthStartDate.add('day', i);\n return {\n date: dayDate,\n visibleAppointments: [],\n hiddenAppointments: [],\n moreCount: 0,\n };\n });\n }\n const result = [];\n for (let i = 0; i < daysInMonth; i++) {\n const currentDayDate = monthStartDate.add('day', i).startOf('day'); // Ensure it's start of day\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n // For Timeline Month View, each day is a row. We want segments for the full 24h of that day.\n // The view's startHour/endHour are NOT used to clip segments here,\n // as it's not a horizontal time scale *within* the day row.\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n // Sort segments: all-day first, then by segment start time (which is clipped to the day)\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.startDate.getTime(), // Segment's start time on this day\n (s) => s.endDate.getTime() - s.startDate.getTime(), // Segment's duration on this day\n (s) => s.title?.toLowerCase() ?? '',\n ], ['asc', 'asc', 'desc', 'asc']);\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n result.push({\n date: currentDayDate,\n visibleAppointments: visibleAppointments,\n hiddenAppointments: hiddenAppointments,\n moreCount: hiddenAppointments.length,\n holiday: this.isHoliday(currentDayDate),\n });\n }\n return result;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.onActionClickInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleDrop(e, date) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({ appointment: originalAppointment });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineMonthViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-month-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\", onActionClickInternal: \"onActionClickInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-month-container\\\">\\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\\n <div>\\n <div class=\\\"ax-scheduler-timeline-header\\\">\\n <div\\n class=\\\"ax-scheduler-month-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-month-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n </div>\\n\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-content\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n [attr.data-slot-id]=\\\"dayData.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <!-- Display segment's start/end times if not allDay for this segment -->\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n @if (dayData.moreCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n +{{ '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n axDropZone\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-month-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-month-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-month-container\\\">\\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\\n <div>\\n <div class=\\\"ax-scheduler-timeline-header\\\">\\n <div\\n class=\\\"ax-scheduler-month-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-month-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n </div>\\n\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-content\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n [attr.data-slot-id]=\\\"dayData.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <!-- Display segment's start/end times if not allDay for this segment -->\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n @if (dayData.moreCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n +{{ '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n axDropZone\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-month-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-month-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2xpYi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLW1vbnRoL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFFWCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1B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bEIsd0JBQXdCOzsyRkFJZixxQ0FBcUM7a0JBcEJqRCxTQUFTOytCQUNFLGtDQUFrQyxtQkFHM0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxPQUFPO3dCQUNQLDJCQUEyQjt3QkFDM0IsWUFBWTt3QkFDWixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQix3QkFBd0I7cUJBQ3pCLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyx1Q0FBdUMsRUFBRSxDQUFDOzhCQWtMN0MsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRE9DVU1FTlQsXG4gIEhvc3RCaW5kaW5nLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBUaW1lbGluZU1vbnRoVmlld0RheURhdGEge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICAvLyBUaGVzZSB3aWxsIGJlIHNlZ21lbnRzLCBwcmVjaXNlbHkgY2xpcHBlZCBhbmQgZmxhZ2dlZCBmb3IgdGhpcyBkYXlcbiAgdmlzaWJsZUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTtcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xuICBtb3JlQ291bnQ6IG51bWJlcjtcbiAgLy8gWW91IG1pZ2h0IGFsc28gd2FudCB0byBzdG9yZSBhbGwgc2VnbWVudHMgZm9yIHRoZSBkYXkgaWYgbmVlZGVkIGVsc2V3aGVyZVxuICAvLyBhbGxTZWdtZW50c0ZvckRheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRUeXBlW107XG4gIGhvbGlkYXk/OiB7IHN0YXRlOiAnaG9saWRheScgfCAnd2Vla2VuZCcgfCAnbm9uZSc7IGhvbGlkYXk/OiBBWEhvbGlkYXlEYXRlIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3Bab25lRGlyZWN0aXZlLFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkgPSAzO1xuXG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBhcHBvaW50bWVudHMgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KFtdKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSBkcmFnU3RhcnRTbG90SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvY2Vzc2VkRGF5RGF0YSA9IGNvbXB1dGVkPFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YVtdPigoKSA9PiB7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGNvbnN0IG1vbnRoU3RhcnREYXRlID0gdGhpcy5kYXRlKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoU3RhcnREYXRlLmVuZE9mKCdtb250aCcpLmRheU9mTW9udGg7XG5cbiAgICBpZiAoIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcbiAgICAgICAgY29uc3QgZGF5RGF0ZSA9IG1vbnRoU3RhcnREYXRlLmFkZCgnZGF5JywgaSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRlOiBkYXlEYXRlLFxuICAgICAgICAgIHZpc2libGVBcHBvaW50bWVudHM6IFtdLFxuICAgICAgICAgIGhpZGRlbkFwcG9pbnRtZW50czogW10sXG4gICAgICAgICAgbW9yZUNvdW50OiAwLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBUaW1lbGluZU1vbnRoVmlld0RheURhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXlzSW5Nb250aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5RGF0ZSA9IG1vbnRoU3RhcnREYXRlLmFkZCgnZGF5JywgaSkuc3RhcnRPZignZGF5Jyk7IC8vIEVuc3VyZSBpdCdzIHN0YXJ0IG9mIGRheVxuICAgICAgY29uc3Qgc2VnbWVudHNGb3JUaGlzRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgYXBwdCBvZiBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgICAvLyBGb3IgVGltZWxpbmUgTW9udGggVmlldywgZWFjaCBkYXkgaXMgYSByb3cuIFdlIHdhbnQgc2VnbWVudHMgZm9yIHRoZSBmdWxsIDI0aCBvZiB0aGF0IGRheS5cbiAgICAgICAgLy8gVGhlIHZpZXcncyBzdGFydEhvdXIvZW5kSG91ciBhcmUgTk9UIHVzZWQgdG8gY2xpcCBzZWdtZW50cyBoZXJlLFxuICAgICAgICAvLyBhcyBpdCdzIG5vdCBhIGhvcml6b250YWwgdGltZSBzY2FsZSAqd2l0aGluKiB0aGUgZGF5IHJvdy5cbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShhcHB0LCBjdXJyZW50RGF5RGF0ZSwgMCwgMjQsIHRydWUpO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNvcnQgc2VnbWVudHM6IGFsbC1kYXkgZmlyc3QsIHRoZW4gYnkgc2VnbWVudCBzdGFydCB0aW1lICh3aGljaCBpcyBjbGlwcGVkIHRvIHRoZSBkYXkpXG4gICAgICBjb25zdCBzb3J0ZWRTZWdtZW50cyA9IG9yZGVyQnkoXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgW1xuICAgICAgICAgIChzKSA9PiAocy5hbGxEYXkgPyAwIDogMSksIC8vIFNlZ21lbnRzIG1hcmtlZCBhcyBhbGxEYXkgZmlyc3RcbiAgICAgICAgICAocykgPT4gcy5zdGFydERhdGUuZ2V0VGltZSgpLCAvLyBTZWdtZW50J3Mgc3RhcnQgdGltZSBvbiB0aGlzIGRheVxuICAgICAgICAgIChzKSA9PiBzLmVuZERhdGUuZ2V0VGltZSgpIC0gcy5zdGFydERhdGUuZ2V0VGltZSgpLCAvLyBTZWdtZW50J3MgZHVyYXRpb24gb24gdGhpcyBkYXlcbiAgICAgICAgICAocykgPT4gcy50aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJyxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnYXNjJywgJ2Rlc2MnLCAnYXNjJ10sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2aXNpYmxlQXBwb2ludG1lbnRzID0gc29ydGVkU2VnbWVudHMuc2xpY2UoMCwgdGhpcy5NQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSk7XG4gICAgICBjb25zdCBoaWRkZW5BcHBvaW50bWVudHMgPSBzb3J0ZWRTZWdtZW50cy5zbGljZSh0aGlzLk1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZKTtcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF5RGF0ZSxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogdmlzaWJsZUFwcG9pbnRtZW50cyxcbiAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBoaWRkZW5BcHBvaW50bWVudHMsXG4gICAgICAgIG1vcmVDb3VudDogaGlkZGVuQXBwb2ludG1lbnRzLmxlbmd0aCxcbiAgICAgICAgaG9saWRheTogdGhpcy5pc0hvbGlkYXkoY3VycmVudERheURhdGUpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG4gIG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCA9IG91dHB1dDx7IGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IH0+KCk7XG5cbiAgLy8gLS0tIEV2ZW50IEhhbmRsZXJzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIC8vIGRhdGUgaXMgdGhlIHNwZWNpZmljIGRheVxuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICd0aW1lbGluZS1tb250aCcpO1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICAvLyBkYXRlIGlzIHRoZSBzcGVjaWZpYyBkYXlcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAndGltZWxpbmUtbW9udGgnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrSW50ZXJuYWwuZW1pdCh7IGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRvZGF5LCAnZGF5Jyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBpc0hvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGRhdGUpO1xuICAgIGlmIChpc0hvbGlkYXkpIHtcbiAgICAgIGNvbnN0IGhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maWx0ZXIoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6ICdob2xpZGF5JyxcbiAgICAgICAgaG9saWRheSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlzV2Vla2VuZCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogJ3dlZWtlbmQnIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxuXG4gIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLWNvbnRhaW5lclwiPlxuICBAZm9yIChkYXlEYXRhIG9mIHByb2Nlc3NlZERheURhdGEoKTsgdHJhY2sgZGF5RGF0YS5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1oZWFkZXItZGF0ZS1kYXlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheURhdGEuZGF0ZSlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlEYXRhLmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBkYXlEYXRhLmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgQGlmIChkYXlEYXRhLmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgICAoIHt7IGRheURhdGEuaG9saWRheS5ob2xpZGF5LnRpdGxlIH19IClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtaGVhZGVyLWRhdGUtZGF5LW51bVwiPlxuICAgICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtY29udGVudFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXlEYXRhLmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheURhdGEudmlzaWJsZUFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwic2VnbWVudFwiXG4gICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJnZXRTbG90SWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGVtcGxhdGUoKVxuICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgOiBzZWdtZW50LmFsbERheVxuICAgICAgICAgICAgICAgICAgICA/IHNlZ21lbnQudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWdtZW50LnRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgIDwhLS0gRGlzcGxheSBzZWdtZW50J3Mgc3RhcnQvZW5kIHRpbWVzIGlmIG5vdCBhbGxEYXkgZm9yIHRoaXMgc2VnbWVudCAtLT5cbiAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19IC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZGF5RGF0YS5tb3JlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICA8ZGl2ICNtb3JlQXBwb2ludG1lbnRzIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLW92ZXJmbG93LWJhZGdlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAre3sgJ0BhY29yZXg6Y29tbW9uLmdlbmVyYWwubW9yZS1pdGVtcycgfCB0cmFuc2xhdGU6IHsgcGFyYW1zOiB7IG51bWJlcjogZGF5RGF0YS5tb3JlQ291bnQgfSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCIgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCIgdHJpZ2dlcj1cImNsaWNrXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyIGF4LXNjaGVkdWxlci1tb250aC1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBzZWdtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRlbXBsYXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWdtZW50LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXNlZ21lbnQuYWxsRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, output, } from '@angular/core';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport { AXSchedulerTimelineDayViewComponent } from '../timeline-day/scheduler-timeline-day-view.component';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.daysCount = input(7);\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.daysDataForTimelineViews = computed(() => {\n const allOriginalAppointments = this.appointments();\n const multiViewStartDate = this.date();\n const numberOfDays = this.daysCount();\n if (!multiViewStartDate || !allOriginalAppointments) {\n return [];\n }\n const result = [];\n for (let i = 0; i < numberOfDays; i++) {\n const currentDayDate = multiViewStartDate.add('day', i);\n const currentDayStart = currentDayDate.startOf('day');\n const currentDayEnd = currentDayDate.endOf('day'); // Use full day for overlap check\n const appointmentsOverlappingThisDay = allOriginalAppointments.filter((appt) => {\n if (appt.allDay) {\n return false;\n }\n const apptStart = this.calendarService.create(appt.startDate, this.calendar());\n const apptEnd = this.calendarService.create(appt.endDate, this.calendar());\n return apptStart.compare(currentDayEnd, 'second') <= 0 && apptEnd.compare(currentDayStart, 'second') >= 0;\n });\n result.push({\n date: currentDayDate,\n holiday: this.isHoliday(currentDayDate),\n originalAppointmentsForThisDay: appointmentsOverlappingThisDay,\n });\n }\n return result;\n });\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.onActionClickInternal = output();\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineMultiDayViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-multi-day-view\", inputs: { daysCount: { classPropertyName: \"daysCount\", publicName: \"daysCount\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\", onActionClickInternal: \"onActionClickInternal\" }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-day-view-container\\\">\\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-multi-day-column\\\">\\n <div\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(daySlot.date)\\\"\\n [class.ax-state-holiday]=\\\"daySlot.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"daySlot.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\\n ( {{ daySlot.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"daySlot.date\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n [appointments]=\\\"daySlot.originalAppointmentsForThisDay\\\"\\n (onActionClickInternal)=\\\"onActionClickInternal.emit($event)\\\"\\n (slotClickedInternal)=\\\"slotClickedInternal.emit($event)\\\"\\n (slotDblClickedInternal)=\\\"slotDblClickedInternal.emit($event)\\\"\\n (slotRightClickedInternal)=\\\"slotRightClickedInternal.emit($event)\\\"\\n (onAppointmentDropInternal)=\\\"onAppointmentDropInternal.emit($event)\\\"\\n (appointmentClickedInternal)=\\\"appointmentClickedInternal.emit($event)\\\"\\n (appointmentDblClickedInternal)=\\\"appointmentDblClickedInternal.emit($event)\\\"\\n (appointmentRightClickedInternal)=\\\"appointmentRightClickedInternal.emit($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}\\n\"], dependencies: [{ kind: \"component\", type: AXSchedulerTimelineDayViewComponent, selector: \"ax-scheduler-timeline-day-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\", \"onActionClickInternal\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-multi-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXSchedulerTimelineDayViewComponent, AsyncPipe, AXFormatPipe, AXTooltipDirective], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-day-view-container\\\">\\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-multi-day-column\\\">\\n <div\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(daySlot.date)\\\"\\n [class.ax-state-holiday]=\\\"daySlot.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"daySlot.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\\n ( {{ daySlot.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"daySlot.date\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n [appointments]=\\\"daySlot.originalAppointmentsForThisDay\\\"\\n (onActionClickInternal)=\\\"onActionClickInternal.emit($event)\\\"\\n (slotClickedInternal)=\\\"slotClickedInternal.emit($event)\\\"\\n (slotDblClickedInternal)=\\\"slotDblClickedInternal.emit($event)\\\"\\n (slotRightClickedInternal)=\\\"slotRightClickedInternal.emit($event)\\\"\\n (onAppointmentDropInternal)=\\\"onAppointmentDropInternal.emit($event)\\\"\\n (appointmentClickedInternal)=\\\"appointmentClickedInternal.emit($event)\\\"\\n (appointmentDblClickedInternal)=\\\"appointmentDblClickedInternal.emit($event)\\\"\\n (appointmentRightClickedInternal)=\\\"appointmentRightClickedInternal.emit($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLW11bHRpLWRheS9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOztBQW1CNUcsTUFBTSxPQUFPLHdDQUF5QyxTQUFRLFdBQVc7SUFUekU7O1FBVVUsb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMs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QUFNLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQTdFVSx3Q0FBd0M7a0dBQXhDLHdDQUF3QyxtL0RBRnhDLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxDQUFDLGlEQ3ZDOUYsa29FQTRDQSx3bEVETlksbUNBQW1DLDhjQUFFLFNBQVMseUNBQUUsWUFBWSwrQ0FBRSxrQkFBa0I7OzJGQUcvRSx3Q0FBd0M7a0JBVHBELFNBQVM7K0JBQ0Usc0NBQXNDLG1CQUcvQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCLENBQUMsbUNBQW1DLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxhQUNoRixDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLDBDQUEwQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlckFwcG9pbnRtZW50IH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQgfSBmcm9tICcuLi90aW1lbGluZS1kYXkvc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZWxpbmVNdWx0aURheURheVNsb3Qge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICAvLyBQYXNzIHRoZSBSQVcgb3JpZ2luYWwgYXBwb2ludG1lbnRzIHRoYXQgKm92ZXJsYXAqIHdpdGggdGhpcyBkYXkuXG4gIC8vIFRoZSBjaGlsZCB0aW1lbGluZS1kYXktdmlldyB3aWxsIGhhbmRsZSBzZWdtZW50YXRpb24uXG4gIG9yaWdpbmFsQXBwb2ludG1lbnRzRm9yVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuICBob2xpZGF5PzogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQsIEFzeW5jUGlwZSwgQVhGb3JtYXRQaXBlLCBBWFRvb2x0aXBEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICBkYXlzQ291bnQgPSBpbnB1dCg3KTtcbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGVuZERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHN0YXJ0RGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIGRheXNEYXRhRm9yVGltZWxpbmVWaWV3cyA9IGNvbXB1dGVkPFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90W10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgbXVsdGlWaWV3U3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghbXVsdGlWaWV3U3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVGltZWxpbmVNdWx0aURheURheVNsb3RbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkRheXM7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudERheURhdGUgPSBtdWx0aVZpZXdTdGFydERhdGUuYWRkKCdkYXknLCBpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlTdGFydCA9IGN1cnJlbnREYXlEYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgY3VycmVudERheUVuZCA9IGN1cnJlbnREYXlEYXRlLmVuZE9mKCdkYXknKTsgLy8gVXNlIGZ1bGwgZGF5IGZvciBvdmVybGFwIGNoZWNrXG5cbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50c092ZXJsYXBwaW5nVGhpc0RheSA9IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmZpbHRlcigoYXBwdCkgPT4ge1xuICAgICAgICBpZiAoYXBwdC5hbGxEYXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwdFN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICBjb25zdCBhcHB0RW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuZW5kRGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgcmV0dXJuIGFwcHRTdGFydC5jb21wYXJlKGN1cnJlbnREYXlFbmQsICdzZWNvbmQnKSA8PSAwICYmIGFwcHRFbmQuY29tcGFyZShjdXJyZW50RGF5U3RhcnQsICdzZWNvbmQnKSA+PSAwO1xuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheURhdGUsXG4gICAgICAgIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGN1cnJlbnREYXlEYXRlKSxcbiAgICAgICAgb3JpZ2luYWxBcHBvaW50bWVudHNGb3JUaGlzRGF5OiBhcHBvaW50bWVudHNPdmVybGFwcGluZ1RoaXNEYXksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8eyBhcHBvaW50bWVudDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCB9PigpO1xuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXctY29udGFpbmVyXCI+XG4gIEBmb3IgKGRheVNsb3Qgb2YgZGF5c0RhdGFGb3JUaW1lbGluZVZpZXdzKCk7IHRyYWNrIGRheVNsb3QuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LWNvbHVtblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheVwiXG4gICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheVNsb3QuZGF0ZSlcIlxuICAgICAgICBbY2xhc3MuYXgtc3RhdGUtaG9saWRheV09XCJkYXlTbG90LmhvbGlkYXkuc3RhdGUgIT09ICdub25lJ1wiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwiZGF5U2xvdC5ob2xpZGF5Py5ob2xpZGF5Py50aXRsZSA/PyAnJ1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBkYXlTbG90LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIEBpZiAoZGF5U2xvdC5ob2xpZGF5LnN0YXRlID09PSAnaG9saWRheScgJiYgZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXkudGl0bGUpIHtcbiAgICAgICAgICAgICgge3sgZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXkudGl0bGUgfX0gKVxuICAgICAgICAgIH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICB7eyBkYXlTbG90LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnREQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3XG4gICAgICAgIFtkYXRlXT1cImRheVNsb3QuZGF0ZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICBbYXBwb2ludG1lbnRzXT1cImRheVNsb3Qub3JpZ2luYWxBcHBvaW50bWVudHNGb3JUaGlzRGF5XCJcbiAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrSW50ZXJuYWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwic2xvdENsaWNrZWRJbnRlcm5hbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJzbG90RGJsQ2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwic2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cIm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlldz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DOCUMENT, HostBinding, inject, input, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerWeekViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n // --- Injected Services & Private State ---\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.dragStartSlotId = signal(null);\n // --- Constants ---\n this.GAP_PX = 1;\n this.BADGE_SPACE_REM = 2;\n // --- Component Inputs ---\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n // --- Component Outputs (Internal, to be caught by the main scheduler) ---\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onAppointmentDropInternal = output();\n this.onActionClickInternal = output();\n // =================================================================================================\n //\n // VIEW MODEL COMPUTATIONS (for rendering the template)\n //\n // =================================================================================================\n /**\n * @protected\n * Generates an array of AXDateTime objects for the hours displayed in the view's time ruler.\n * This is used for rendering the `HH:mm` labels on the side.\n */\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n /**\n * @protected\n * Generates an array of day data objects for the 7 days in the view, including holiday info.\n * This is used for rendering the day headers (e.g., \"Monday 10\").\n */\n this.daysArray = computed(() => {\n const time = this.date();\n if (!time)\n return [];\n const days = [{ date: time, holiday: this.isHoliday(time) }];\n for (let index = 1; index <= 6; index++) {\n const date = time.add('day', index);\n days.push({ date, holiday: this.isHoliday(date) });\n }\n return days;\n });\n /**\n * @protected\n * Calculates the total number of 30-minute blocks within the visible hours of a single day.\n */\n this.totalBlocksPerViewDay = computed(() => {\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n return Math.max(0, (endH - startH) * (60 / 30));\n });\n /**\n * @protected\n * Filters processed segments to get only those for the all-day header.\n */\n this.allDayAppointmentsPerDay = computed(() => {\n const daysInWeek = this.daysArray().map((e) => e.date);\n const allDaySegments = this.processedAppointmentsForLayout().filter((s) => s.allDay);\n return daysInWeek.map((dayDate) => {\n const currentDayStart = dayDate.startOf('day');\n const appointmentsForThisDay = allDaySegments.filter((segment) => this.calendarService.create(segment.startDate, this.calendar()).startOf('day').equal(currentDayStart, 'day'));\n return {\n day: dayDate,\n appointments: orderBy(appointmentsForThisDay, ['originalStartDate', 'title'], ['asc', 'asc']),\n };\n });\n });\n // =================================================================================================\n //\n // GRID LAYOUT & BADGE LOGIC (THE CORE FIX)\n // This logic follows a three-step process:\n // 1. `dayViewLayoutsByDay`: Calculate a full multi-column layout for each day. This is our \"source of truth\".\n // 2. `visibleAppointmentsLayout`: Render ONLY the first column (`columnIndex: 0`) from the source of truth.\n // 3. `overflowBadgesWithData`: Render badges for all other columns (`columnIndex > 0`).\n //\n // =================================================================================================\n /**\n * [STEP 1 - Private] Calculate a full multi-column layout for each day, as if it were a Day View.\n * This becomes the single source of truth for what overlaps with what.\n */\n this.dayViewLayoutsByDay = computed(() => {\n const layoutsByDay = new Map();\n const allSegments = this.timedGridSegments();\n const viewStartDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n for (let dayIndex = 0; dayIndex < 7; dayIndex++) {\n const dayDate = viewStartDate.add('day', dayIndex);\n const segmentsForThisDay = allSegments.filter((seg) => this.calendarService.create(seg.startDate, this.calendar()).startOf('day').equal(dayDate.startOf('day'), 'day'));\n if (segmentsForThisDay.length === 0)\n continue;\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(segmentsForThisDay, dayDate, startH, endH);\n const sortedAppointments = orderBy(segmentsForThisDay, [(e) => e.startDate.getTime(), (e) => e.originalEndDate.getTime() - e.originalStartDate.getTime()], ['asc', 'desc']);\n const dayLayouts = new Map();\n const columnsData = [];\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n for (let c = 0;; c++) {\n if (!columnsData[c])\n columnsData[c] = { appointments: [] };\n let conflict = false;\n for (const placedSegment of columnsData[c].appointments) {\n if (this.schedulerService.doAppointmentsOverlap(appointmentSegment, placedSegment)) {\n conflict = true;\n break;\n }\n }\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n }\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.id);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n dayLayouts.set(appointmentSegment.id, { columnIndex: assignedCol, effectiveTotalColumns: effectiveCols });\n }\n layoutsByDay.set(dayIndex, dayLayouts);\n }\n return layoutsByDay;\n });\n /**\n * @protected\n * [STEP 2] From the full layout, select ONLY appointments in the first column (`columnIndex: 0`)\n * to be visible. Calculate their width based on whether they have siblings in other columns.\n */\n this.visibleAppointmentsLayout = computed(() => {\n const finalLayouts = [];\n const layoutsByDay = this.dayViewLayoutsByDay();\n const allSegments = this.timedGridSegments();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = 7;\n for (const appt of allSegments) {\n const apptStartDate = this.calendarService.create(appt.startDate, this.calendar());\n const dayIndex = Math.floor((apptStartDate.startOf('day').date.getTime() - this.date().startOf('day').date.getTime()) /\n this.schedulerService.MILLISECONDS_PER_DAY);\n if (dayIndex < 0 || dayIndex >= N)\n continue;\n const layoutInfo = layoutsByDay.get(dayIndex)?.get(appt.id);\n if (!layoutInfo || layoutInfo.columnIndex !== 0)\n continue;\n const startMinutes = apptStartDate.hour * 60 + apptStartDate.minute;\n const startBlockOffset = startMinutes - this.startDayHour() * 60;\n const layoutTop = `calc(${blockHeightExpr} * ${startBlockOffset / 30} + 1px)`;\n const durationMinutes = this.schedulerService.calculateDurationInMinutes(appt);\n const layoutHeight = `calc(${blockHeightExpr} * ${durationMinutes / 30} - ${this.GAP_PX}px)`;\n const hasHiddenSiblings = layoutInfo.effectiveTotalColumns > 1;\n const layoutWidth = hasHiddenSiblings\n ? `calc(100% / ${N} - ${this.BADGE_SPACE_REM + 0.5}rem)`\n : `calc(100% / ${N})`;\n finalLayouts.push({\n appointment: appt,\n layoutTop,\n layoutHeight,\n layoutLeft: `calc(${dayIndex * (100 / N)}%)`,\n layoutWidth,\n });\n }\n return finalLayouts;\n });\n /**\n * @protected\n * [STEP 3] Create badges for all appointments NOT in the first column (`columnIndex > 0`).\n */\n this.overflowBadgesWithData = computed(() => {\n const badgesInfo = [];\n const layoutsByDay = this.dayViewLayoutsByDay();\n const allTimedSegments = this.timedGridSegments();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = 7;\n const hiddenAppointments = allTimedSegments.filter((appt) => {\n const apptStartDate = this.calendarService.create(appt.startDate, this.calendar());\n const dayIndex = Math.floor((apptStartDate.startOf('day').date.getTime() - this.date().startOf('day').date.getTime()) /\n this.schedulerService.MILLISECONDS_PER_DAY);\n const layoutInfo = layoutsByDay.get(dayIndex)?.get(appt.id);\n return layoutInfo && layoutInfo.columnIndex > 0;\n });\n const groupedHidden = new Map();\n for (const appt of hiddenAppointments) {\n const apptStartDate = this.calendarService.create(appt.startDate, this.calendar());\n const startInfo = this.schedulerService.getBlockIdentifier(apptStartDate, this.date(), this.startDayHour(), this.endDayHour(), 7);\n if (!startInfo)\n continue;\n const key = `${startInfo.dayIndex}-${startInfo.blockIndex}`;\n if (!groupedHidden.has(key))\n groupedHidden.set(key, []);\n groupedHidden.get(key).push(appt);\n }\n groupedHidden.forEach((group, key) => {\n const [dayIndexStr, blockIndexStr] = key.split('-');\n const dayIndex = parseInt(dayIndexStr);\n const blockIndex = parseInt(blockIndexStr);\n const badgeTop = `calc(${blockHeightExpr} * ${blockIndex} + 0.75rem)`;\n const badgeLeft = `calc(${dayIndex * (100 / N)}% + (100% / ${N}) - ${this.BADGE_SPACE_REM}rem)`;\n badgesInfo.push({\n key: `badge-${key}`,\n count: group.length,\n badgeTop,\n badgeLeft,\n hiddenAppointments: group,\n });\n });\n return badgesInfo;\n });\n // =================================================================================================\n //\n // EVENT HANDLERS & UTILITY METHODS\n //\n // =================================================================================================\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n // --- Private Data Processing ---\n this.processedAppointmentsForLayout = computed(() => {\n const viewDays = this.daysArray().map((e) => e.date);\n const allOriginalAppointments = this.appointments();\n if (viewDays.length === 0 || allOriginalAppointments.length === 0)\n return [];\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const allSegmentsInView = [];\n for (const day of viewDays) {\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, day.startOf('day'), startH, endH);\n if (segment)\n allSegmentsInView.push(segment);\n }\n }\n const uniqueSegmentsMap = new Map();\n allSegmentsInView.forEach((seg) => {\n const mapKey = `${seg.id}-${seg.startDate.getTime()}-${seg.endDate.getTime()}`;\n if (!uniqueSegmentsMap.has(mapKey))\n uniqueSegmentsMap.set(mapKey, seg);\n });\n return Array.from(uniqueSegmentsMap.values());\n });\n this.timedGridSegments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n });\n }\n /**\n * Handles click, dblclick, and contextmenu events on an appointment and emits them to the parent.\n * @param mouseEvent The native DOM event.\n * @param appointmentSegment The appointment data segment that was interacted with.\n * @public\n */\n handleAppointmentEvent(mouseEvent, appointmentSegment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: originalAppointment, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n /**\n * Handles click, dblclick, and contextmenu events on an empty time slot and emits them to the parent.\n * @param mouseEvent The native DOM event.\n * @param hour The starting hour of the slot.\n * @param day The day of the slot.\n * @param minuteIndex The half-hour index (0 or 1).\n * @public\n */\n handleSingleSlotEvent(mouseEvent, hour, day, minuteIndex) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n /**\n * Handles interaction events on the all-day slot.\n * @param mouseEvent The native DOM event.\n * @param day The corresponding day for the all-day slot.\n * @public\n */\n handleAllDaySlotEvent(mouseEvent, day) {\n const slotData = { startDate: day.startOf('day'), endDate: day.endOf('day'), view: 'week' };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n /**\n * Handles dropping an appointment onto the all-day slot.\n * @param e The drop event from the CDK.\n * @param day The corresponding day for the all-day slot.\n * @public\n */\n handleAllDayDrop(e, day) {\n const slotData = { startDate: day.startOf('day'), endDate: day.endOf('day'), view: 'week' };\n const originalAppointment = this.schedulerService.getOriginalAppointment(e.dropped.dragData());\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: originalAppointment,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n /**\n * Handles dropping an appointment onto a timed grid slot.\n * @param e The drop event from the CDK.\n * @param hour The starting hour of the drop target.\n * @param day The day of the drop target.\n * @param minuteIndex The half-hour index (0 or 1) of the drop target.\n * @public\n */\n handleSingleDayDrop(e, hour, day, minuteIndex) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n const originalAppointment = this.schedulerService.getOriginalAppointment(e.dropped.dragData());\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: originalAppointment,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n /**\n * Handles clicks on the \"more\" action icon on an appointment.\n * @param event The native mouse event.\n * @param appointmentItem The appointment associated with the action.\n * @public\n */\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({ appointment: originalAppointment });\n }\n /**\n * @protected\n * Checks if a given date is the current day.\n * @param date The date to check.\n * @returns `true` if the date is today.\n */\n isToday(date) {\n return date.equal(this.calendarService.create(new Date()), 'day');\n }\n /**\n * @protected\n * Checks if a given date is a holiday or weekend.\n * @param date The date to check.\n * @returns An object describing the day's status (holiday, weekend, or none).\n */\n isHoliday(date) {\n const holiday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n if (holiday)\n return { state: 'holiday', holiday };\n if (this.schedulerService.isWeekend(date, this.calendar()))\n return { state: 'weekend' };\n return { state: 'none' };\n }\n /**\n * @protected\n * Captures the data-slot-id attribute when a drag operation starts on an appointment.\n * @param e The pointer event that initiates the drag.\n */\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerWeekViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerWeekViewComponent, isStandalone: true, selector: \"ax-scheduler-week-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\", onActionClickInternal: \"onActionClickInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-week-header\\\">\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\"></div>\\n <div class=\\\"ax-scheduler-week-header-date\\\" aria-hidden=\\\"true\\\">\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <div\\n [class.ax-state-today]=\\\"isToday(day.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-holiday]=\\\"day.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"day.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\\n ( {{ day.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-week-header-date\\\">\\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event, slotData.day)\\\"\\n class=\\\"ax-scheduler-all-day-slot\\\"\\n (click)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n >\\n @if (slotData.appointments.length > 0) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragData]=\\\"slotData.appointments[0]\\\"\\n [dragDisabled]=\\\"!draggable() || slotData.appointments[0].readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n [title]=\\\"tooltipTemplate() ? '' : slotData.appointments[0].title\\\"\\n class=\\\"ax-scheduler-header-week-appointment\\\"\\n [style.width]=\\\"slotData.appointments.length > 1 ? 'calc(100% - 2rem)' : '100%'\\\"\\n [ngClass]=\\\"\\n slotData.appointments[0].cssClass ??\\n `ax-scheduler-${slotData.appointments[0].priority ?? 'primary'}-periority`\\n \\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ slotData.appointments[0].title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, slotData.appointments[0])\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n </div>\\n }\\n @if (slotData.appointments.length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [style.width]=\\\"'1.5rem'\\\"\\n [style.border]=\\\"'none'\\\"\\n [ngClass]=\\\"\\n slotData.appointments[1].cssClass ??\\n `ax-scheduler-${slotData.appointments[1].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n +{{ slotData.appointments.length - 1 }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\" axDropZone>\\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-week-time-container\\\">\\n <div class=\\\"ax-scheduler-week-time\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"ax-scheduler-week-table-container\\\">\\n <div class=\\\"ax-scheduler-week-appointment-container\\\">\\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragData]=\\\"appt.appointment\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appt.appointment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appt.appointment.title\\\"\\n [style.width]=\\\"appt.layoutWidth\\\"\\n [style.height]=\\\"appt.layoutHeight\\\"\\n class=\\\"ax-scheduler-week-appointment\\\"\\n [style.inset-block-start]=\\\"appt.layoutTop\\\"\\n [style.inset-inline-start]=\\\"appt.layoutLeft\\\"\\n [ngClass]=\\\"appt.appointment.cssClass ?? `ax-scheduler-${appt.appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appt.appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appt.appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n\\n <!-- Overflow Badges with Popovers -->\\n @for (badge of overflowBadgesWithData(); track badge.key) {\\n <!-- Wrap badge and popover for targeting -->\\n <div\\n style=\\\"position: absolute\\\"\\n class=\\\"ax-scheduler-badge-wrapper\\\"\\n [style.inset-block-start]=\\\"badge.badgeTop\\\"\\n [style.inset-inline-start]=\\\"badge.badgeLeft\\\"\\n >\\n <!-- The Badge itself -->\\n <div\\n #actionButton\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"\\n badge.hiddenAppointments[0].cssClass ??\\n `ax-scheduler-${badge.hiddenAppointments[0].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n +{{ badge.count }}\\n </div>\\n <!-- The Popover -->\\n <ax-popover [target]=\\\"actionButton\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" axDropZone>\\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n </ax-popover>\\n </div>\\n }\\n </div>\\n\\n <table aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n <tbody>\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 0)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n [attr.data-slot-id]=\\\"day.date.format('YYYYMMDD') + '-' + time.format('HHmm')\\\"\\n ></td>\\n }\\n </tr>\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 1)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n [attr.data-slot-id]=\\\"day.date.format('YYYYMMDD') + '-' + time.add('minute', 30).format('HHmm')\\\"\\n ></td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-week-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;width:1.5rem;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:2;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{z-index:2;flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:100%;display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:100%;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-week-view ax-title{display:flex;justify-content:space-between}ax-scheduler-week-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerWeekViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-week-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], template: \"<div class=\\\"ax-scheduler-week-header\\\">\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\"></div>\\n <div class=\\\"ax-scheduler-week-header-date\\\" aria-hidden=\\\"true\\\">\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <div\\n [class.ax-state-today]=\\\"isToday(day.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-holiday]=\\\"day.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"day.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\\n ( {{ day.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-week-header-date\\\">\\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event, slotData.day)\\\"\\n class=\\\"ax-scheduler-all-day-slot\\\"\\n (click)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n >\\n @if (slotData.appointments.length > 0) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragData]=\\\"slotData.appointments[0]\\\"\\n [dragDisabled]=\\\"!draggable() || slotData.appointments[0].readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n [title]=\\\"tooltipTemplate() ? '' : slotData.appointments[0].title\\\"\\n class=\\\"ax-scheduler-header-week-appointment\\\"\\n [style.width]=\\\"slotData.appointments.length > 1 ? 'calc(100% - 2rem)' : '100%'\\\"\\n [ngClass]=\\\"\\n slotData.appointments[0].cssClass ??\\n `ax-scheduler-${slotData.appointments[0].priority ?? 'primary'}-periority`\\n \\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ slotData.appointments[0].title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, slotData.appointments[0])\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n </div>\\n }\\n @if (slotData.appointments.length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [style.width]=\\\"'1.5rem'\\\"\\n [style.border]=\\\"'none'\\\"\\n [ngClass]=\\\"\\n slotData.appointments[1].cssClass ??\\n `ax-scheduler-${slotData.appointments[1].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n +{{ slotData.appointments.length - 1 }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\" axDropZone>\\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-week-time-container\\\">\\n <div class=\\\"ax-scheduler-week-time\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"ax-scheduler-week-table-container\\\">\\n <div class=\\\"ax-scheduler-week-appointment-container\\\">\\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragData]=\\\"appt.appointment\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appt.appointment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appt.appointment.title\\\"\\n [style.width]=\\\"appt.layoutWidth\\\"\\n [style.height]=\\\"appt.layoutHeight\\\"\\n class=\\\"ax-scheduler-week-appointment\\\"\\n [style.inset-block-start]=\\\"appt.layoutTop\\\"\\n [style.inset-inline-start]=\\\"appt.layoutLeft\\\"\\n [ngClass]=\\\"appt.appointment.cssClass ?? `ax-scheduler-${appt.appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appt.appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appt.appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n\\n <!-- Overflow Badges with Popovers -->\\n @for (badge of overflowBadgesWithData(); track badge.key) {\\n <!-- Wrap badge and popover for targeting -->\\n <div\\n style=\\\"position: absolute\\\"\\n class=\\\"ax-scheduler-badge-wrapper\\\"\\n [style.inset-block-start]=\\\"badge.badgeTop\\\"\\n [style.inset-inline-start]=\\\"badge.badgeLeft\\\"\\n >\\n <!-- The Badge itself -->\\n <div\\n #actionButton\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"\\n badge.hiddenAppointments[0].cssClass ??\\n `ax-scheduler-${badge.hiddenAppointments[0].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n +{{ badge.count }}\\n </div>\\n <!-- The Popover -->\\n <ax-popover [target]=\\\"actionButton\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" axDropZone>\\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n </ax-popover>\\n </div>\\n }\\n </div>\\n\\n <table aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n <tbody>\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 0)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n [attr.data-slot-id]=\\\"day.date.format('YYYYMMDD') + '-' + time.format('HHmm')\\\"\\n ></td>\\n }\\n </tr>\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 1)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n [attr.data-slot-id]=\\\"day.date.format('YYYYMMDD') + '-' + time.add('minute', 30).format('HHmm')\\\"\\n ></td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-week-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;width:1.5rem;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:2;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{z-index:2;flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:100%;display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:100%;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-week-view ax-title{display:flex;justify-content:space-between}ax-scheduler-week-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUE2QixNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENB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LE9BQU8sb0ZBQ1AsMkJBQTJCLG9MQUMzQixTQUFTLHlDQUNULGdCQUFnQixrREFDaEIsa0JBQWtCLHNSQUNsQixZQUFZLCtDQUNaLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQixrQkFBa0IsNk1BQ2xCLHdCQUF3Qjs7MkZBS2YsNEJBQTRCO2tCQXJCeEMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCwyQkFBMkI7d0JBQzNCLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyw4QkFBOEIsRUFBRSxDQUFDOzhCQXVibEUsVUFBVTtzQkFEdkIsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQWxsRGF5U2xvdERhdGEsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMYXlvdXQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50LFxuICBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlck92ZXJmbG93QmFkZ2UsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbnR5cGUgQVhTY2hlZHVsZXJHcmlkQmFkZ2VJbmZvID0gQVhTY2hlZHVsZXJPdmVyZmxvd0JhZGdlICYge1xuICBoaWRkZW5BcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItd2Vlay12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci13ZWVrLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBWERyYWdEaXJlY3RpdmUsXG4gICAgQVhEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyV2Vla1ZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyV2Vla1ZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIC8vIC0tLSBJbmplY3RlZCBTZXJ2aWNlcyAmIFByaXZhdGUgU3RhdGUgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXJ0U2xvdElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIC0tLSBDb25zdGFudHMgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgR0FQX1BYID0gMTtcbiAgcHJpdmF0ZSByZWFkb25seSBCQURHRV9TUEFDRV9SRU0gPSAyO1xuXG4gIC8vIC0tLSBDb21wb25lbnQgSW5wdXRzIC0tLVxuICBwdWJsaWMgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIHB1YmxpYyBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIHB1YmxpYyBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBwdWJsaWMgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgcHVibGljIGVuZERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHB1YmxpYyBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHB1YmxpYyBhcHBvaW50bWVudHMgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KFtdKTtcbiAgcHVibGljIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIC8vIC0tLSBDb21wb25lbnQgT3V0cHV0cyAoSW50ZXJuYWwsIHRvIGJlIGNhdWdodCBieSB0aGUgbWFpbiBzY2hlZHVsZXIpIC0tLVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PHsgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQgfT4oKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vXG4gIC8vIFZJRVcgTU9ERUwgQ09NUFVUQVRJT05TIChmb3IgcmVuZGVyaW5nIHRoZSB0ZW1wbGF0ZSlcbiAgLy9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiBBWERhdGVUaW1lIG9iamVjdHMgZm9yIHRoZSBob3VycyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXcncyB0aW1lIHJ1bGVyLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgYEhIOm1tYCBsYWJlbHMgb24gdGhlIHNpZGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIGRheSBkYXRhIG9iamVjdHMgZm9yIHRoZSA3IGRheXMgaW4gdGhlIHZpZXcsIGluY2x1ZGluZyBob2xpZGF5IGluZm8uXG4gICAqIFRoaXMgaXMgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBkYXkgaGVhZGVycyAoZS5nLiwgXCJNb25kYXkgMTBcIikuXG4gICAqL1xuICBwcm90ZWN0ZWQgZGF5c0FycmF5ID0gY29tcHV0ZWQoXG4gICAgKCk6IHsgZGF0ZTogQVhEYXRlVGltZTsgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB9W10gPT4ge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgICBjb25zdCBkYXlzID0gW3sgZGF0ZTogdGltZSwgaG9saWRheTogdGhpcy5pc0hvbGlkYXkodGltZSkgfV07XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDw9IDY7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRpbWUuYWRkKCdkYXknLCBpbmRleCk7XG4gICAgICAgIGRheXMucHVzaCh7IGRhdGUsIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGRhdGUpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRheXM7XG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgMzAtbWludXRlIGJsb2NrcyB3aXRoaW4gdGhlIHZpc2libGUgaG91cnMgb2YgYSBzaW5nbGUgZGF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvdGFsQmxvY2tzUGVyVmlld0RheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgKGVuZEggLSBzdGFydEgpICogKDYwIC8gMzApKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogRmlsdGVycyBwcm9jZXNzZWQgc2VnbWVudHMgdG8gZ2V0IG9ubHkgdGhvc2UgZm9yIHRoZSBhbGwtZGF5IGhlYWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhbGxEYXlBcHBvaW50bWVudHNQZXJEYXkgPSBjb21wdXRlZCgoKTogQVhTY2hlZHVsZXJBbGxEYXlTbG90RGF0YVtdID0+IHtcbiAgICBjb25zdCBkYXlzSW5XZWVrID0gdGhpcy5kYXlzQXJyYXkoKS5tYXAoKGUpID0+IGUuZGF0ZSk7XG4gICAgY29uc3QgYWxsRGF5U2VnbWVudHMgPSB0aGlzLnByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCgpLmZpbHRlcigocykgPT4gcy5hbGxEYXkpO1xuXG4gICAgcmV0dXJuIGRheXNJbldlZWsubWFwKChkYXlEYXRlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRzRm9yVGhpc0RheSA9IGFsbERheVNlZ21lbnRzLmZpbHRlcigoc2VnbWVudCkgPT5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlZ21lbnQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpLnN0YXJ0T2YoJ2RheScpLmVxdWFsKGN1cnJlbnREYXlTdGFydCwgJ2RheScpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheTogZGF5RGF0ZSxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBvcmRlckJ5KGFwcG9pbnRtZW50c0ZvclRoaXNEYXksIFsnb3JpZ2luYWxTdGFydERhdGUnLCAndGl0bGUnXSwgWydhc2MnLCAnYXNjJ10pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvL1xuICAvLyBHUklEIExBWU9VVCAmIEJBREdFIExPR0lDIChUSEUgQ09SRSBGSVgpXG4gIC8vIFRoaXMgbG9naWMgZm9sbG93cyBhIHRocmVlLXN0ZXAgcHJvY2VzczpcbiAgLy8gMS4gYGRheVZpZXdMYXlvdXRzQnlEYXlgOiBDYWxjdWxhdGUgYSBmdWxsIG11bHRpLWNvbHVtbiBsYXlvdXQgZm9yIGVhY2ggZGF5LiBUaGlzIGlzIG91ciBcInNvdXJjZSBvZiB0cnV0aFwiLlxuICAvLyAyLiBgdmlzaWJsZUFwcG9pbnRtZW50c0xheW91dGA6IFJlbmRlciBPTkxZIHRoZSBmaXJzdCBjb2x1bW4gKGBjb2x1bW5JbmRleDogMGApIGZyb20gdGhlIHNvdXJjZSBvZiB0cnV0aC5cbiAgLy8gMy4gYG92ZXJmbG93QmFkZ2VzV2l0aERhdGFgOiBSZW5kZXIgYmFkZ2VzIGZvciBhbGwgb3RoZXIgY29sdW1ucyAoYGNvbHVtbkluZGV4ID4gMGApLlxuICAvL1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFtTVEVQIDEgLSBQcml2YXRlXSBDYWxjdWxhdGUgYSBmdWxsIG11bHRpLWNvbHVtbiBsYXlvdXQgZm9yIGVhY2ggZGF5LCBhcyBpZiBpdCB3ZXJlIGEgRGF5IFZpZXcuXG4gICAqIFRoaXMgYmVjb21lcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3Igd2hhdCBvdmVybGFwcyB3aXRoIHdoYXQuXG4gICAqL1xuICBwcml2YXRlIGRheVZpZXdMYXlvdXRzQnlEYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0c0J5RGF5ID0gbmV3IE1hcDxudW1iZXIsIE1hcDxhbnksIEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQ+PigpO1xuICAgIGNvbnN0IGFsbFNlZ21lbnRzID0gdGhpcy50aW1lZEdyaWRTZWdtZW50cygpO1xuICAgIGNvbnN0IHZpZXdTdGFydERhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcblxuICAgIGZvciAobGV0IGRheUluZGV4ID0gMDsgZGF5SW5kZXggPCA3OyBkYXlJbmRleCsrKSB7XG4gICAgICBjb25zdCBkYXlEYXRlID0gdmlld1N0YXJ0RGF0ZS5hZGQoJ2RheScsIGRheUluZGV4KTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheSA9IGFsbFNlZ21lbnRzLmZpbHRlcigoc2VnKSA9PlxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnLnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKS5zdGFydE9mKCdkYXknKS5lcXVhbChkYXlEYXRlLnN0YXJ0T2YoJ2RheScpLCAnZGF5JyksXG4gICAgICApO1xuICAgICAgaWYgKHNlZ21lbnRzRm9yVGhpc0RheS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjb25jdXJyZW5jeUluZm9NYXAgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlRGF5Vmlld0NvbmN1cnJlbmN5SW5mbyhcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBkYXlEYXRlLFxuICAgICAgICBzdGFydEgsXG4gICAgICAgIGVuZEgsXG4gICAgICApO1xuICAgICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbKGUpID0+IGUuc3RhcnREYXRlLmdldFRpbWUoKSwgKGUpID0+IGUub3JpZ2luYWxFbmREYXRlLmdldFRpbWUoKSAtIGUub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpXSxcbiAgICAgICAgWydhc2MnLCAnZGVzYyddLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF5TGF5b3V0cyA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0PigpO1xuICAgICAgY29uc3QgY29sdW1uc0RhdGE6IHsgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdIH1bXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCBvZiBzb3J0ZWRBcHBvaW50bWVudHMpIHtcbiAgICAgICAgbGV0IGFzc2lnbmVkQ29sID0gLTE7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyA7IGMrKykge1xuICAgICAgICAgIGlmICghY29sdW1uc0RhdGFbY10pIGNvbHVtbnNEYXRhW2NdID0geyBhcHBvaW50bWVudHM6IFtdIH07XG4gICAgICAgICAgbGV0IGNvbmZsaWN0ID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChjb25zdCBwbGFjZWRTZWdtZW50IG9mIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NoZWR1bGVyU2VydmljZS5kb0FwcG9pbnRtZW50c092ZXJsYXAoYXBwb2ludG1lbnRTZWdtZW50LCBwbGFjZWRTZWdtZW50KSkge1xuICAgICAgICAgICAgICBjb25mbGljdCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWNvbmZsaWN0KSB7XG4gICAgICAgICAgICBhc3NpZ25lZENvbCA9IGM7XG4gICAgICAgICAgICBjb2x1bW5zRGF0YVtjXS5hcHBvaW50bWVudHMucHVzaChhcHBvaW50bWVudFNlZ21lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmN1cnJlbmN5SW5mbyA9IGNvbmN1cnJlbmN5SW5mb01hcC5nZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkKTtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQ29scyA9IGNvbmN1cnJlbmN5SW5mbyA/IGNvbmN1cnJlbmN5SW5mby5lZmZlY3RpdmVUb3RhbENvbHVtbnMgOiAxO1xuICAgICAgICBkYXlMYXlvdXRzLnNldChhcHBvaW50bWVudFNlZ21lbnQuaWQsIHsgY29sdW1uSW5kZXg6IGFzc2lnbmVkQ29sLCBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGVmZmVjdGl2ZUNvbHMgfSk7XG4gICAgICB9XG4gICAgICBsYXlvdXRzQnlEYXkuc2V0KGRheUluZGV4LCBkYXlMYXlvdXRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dHNCeURheTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogW1NURVAgMl0gRnJvbSB0aGUgZnVsbCBsYXlvdXQsIHNlbGVjdCBPTkxZIGFwcG9pbnRtZW50cyBpbiB0aGUgZmlyc3QgY29sdW1uIChgY29sdW1uSW5kZXg6IDBgKVxuICAgKiB0byBiZSB2aXNpYmxlLiBDYWxjdWxhdGUgdGhlaXIgd2lkdGggYmFzZWQgb24gd2hldGhlciB0aGV5IGhhdmUgc2libGluZ3MgaW4gb3RoZXIgY29sdW1ucy5cbiAgICovXG4gIHByb3RlY3RlZCB2aXNpYmxlQXBwb2ludG1lbnRzTGF5b3V0ID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMYXlvdXRbXSA9PiB7XG4gICAgY29uc3QgZmluYWxMYXlvdXRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0W10gPSBbXTtcbiAgICBjb25zdCBsYXlvdXRzQnlEYXkgPSB0aGlzLmRheVZpZXdMYXlvdXRzQnlEYXkoKTtcbiAgICBjb25zdCBhbGxTZWdtZW50cyA9IHRoaXMudGltZWRHcmlkU2VnbWVudHMoKTtcbiAgICBjb25zdCBibG9ja0hlaWdodEV4cHIgPSBgdmFyKC0tYXgtY29tcC1zY2hlZHVsZXItYmFzaWMtdmlldy1ibG9ja3MtaGVpZ2h0LCAzMHB4KWA7XG4gICAgY29uc3QgTiA9IDc7XG5cbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsU2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IGFwcHRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IE1hdGguZmxvb3IoXG4gICAgICAgIChhcHB0U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmRhdGUuZ2V0VGltZSgpIC0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5JykuZGF0ZS5nZXRUaW1lKCkpIC9cbiAgICAgICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuTUlMTElTRUNPTkRTX1BFUl9EQVksXG4gICAgICApO1xuICAgICAgaWYgKGRheUluZGV4IDwgMCB8fCBkYXlJbmRleCA+PSBOKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgbGF5b3V0SW5mbyA9IGxheW91dHNCeURheS5nZXQoZGF5SW5kZXgpPy5nZXQoYXBwdC5pZCk7XG4gICAgICBpZiAoIWxheW91dEluZm8gfHwgbGF5b3V0SW5mby5jb2x1bW5JbmRleCAhPT0gMCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IGFwcHRTdGFydERhdGUuaG91ciAqIDYwICsgYXBwdFN0YXJ0RGF0ZS5taW51dGU7XG4gICAgICBjb25zdCBzdGFydEJsb2NrT2Zmc2V0ID0gc3RhcnRNaW51dGVzIC0gdGhpcy5zdGFydERheUhvdXIoKSAqIDYwO1xuICAgICAgY29uc3QgbGF5b3V0VG9wID0gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtzdGFydEJsb2NrT2Zmc2V0IC8gMzB9ICsgMXB4KWA7XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5jYWxjdWxhdGVEdXJhdGlvbkluTWludXRlcyhhcHB0KTtcbiAgICAgIGNvbnN0IGxheW91dEhlaWdodCA9IGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7ZHVyYXRpb25NaW51dGVzIC8gMzB9IC0gJHt0aGlzLkdBUF9QWH1weClgO1xuXG4gICAgICBjb25zdCBoYXNIaWRkZW5TaWJsaW5ncyA9IGxheW91dEluZm8uZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMTtcbiAgICAgIGNvbnN0IGxheW91dFdpZHRoID0gaGFzSGlkZGVuU2libGluZ3NcbiAgICAgICAgPyBgY2FsYygxMDAlIC8gJHtOfSAtICR7dGhpcy5CQURHRV9TUEFDRV9SRU0gKyAwLjV9cmVtKWBcbiAgICAgICAgOiBgY2FsYygxMDAlIC8gJHtOfSlgO1xuXG4gICAgICBmaW5hbExheW91dHMucHVzaCh7XG4gICAgICAgIGFwcG9pbnRtZW50OiBhcHB0LFxuICAgICAgICBsYXlvdXRUb3AsXG4gICAgICAgIGxheW91dEhlaWdodCxcbiAgICAgICAgbGF5b3V0TGVmdDogYGNhbGMoJHtkYXlJbmRleCAqICgxMDAgLyBOKX0lKWAsXG4gICAgICAgIGxheW91dFdpZHRoLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmaW5hbExheW91dHM7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIFtTVEVQIDNdIENyZWF0ZSBiYWRnZXMgZm9yIGFsbCBhcHBvaW50bWVudHMgTk9UIGluIHRoZSBmaXJzdCBjb2x1bW4gKGBjb2x1bW5JbmRleCA+IDBgKS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVyZmxvd0JhZGdlc1dpdGhEYXRhID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyR3JpZEJhZGdlSW5mb1tdID0+IHtcbiAgICBjb25zdCBiYWRnZXNJbmZvOiBBWFNjaGVkdWxlckdyaWRCYWRnZUluZm9bXSA9IFtdO1xuICAgIGNvbnN0IGxheW91dHNCeURheSA9IHRoaXMuZGF5Vmlld0xheW91dHNCeURheSgpO1xuICAgIGNvbnN0IGFsbFRpbWVkU2VnbWVudHMgPSB0aGlzLnRpbWVkR3JpZFNlZ21lbnRzKCk7XG4gICAgY29uc3QgYmxvY2tIZWlnaHRFeHByID0gYHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCwgMzBweClgO1xuICAgIGNvbnN0IE4gPSA3O1xuXG4gICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gYWxsVGltZWRTZWdtZW50cy5maWx0ZXIoKGFwcHQpID0+IHtcbiAgICAgIGNvbnN0IGFwcHRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IE1hdGguZmxvb3IoXG4gICAgICAgIChhcHB0U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmRhdGUuZ2V0VGltZSgpIC0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5JykuZGF0ZS5nZXRUaW1lKCkpIC9cbiAgICAgICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuTUlMTElTRUNPTkRTX1BFUl9EQVksXG4gICAgICApO1xuICAgICAgY29uc3QgbGF5b3V0SW5mbyA9IGxheW91dHNCeURheS5nZXQoZGF5SW5kZXgpPy5nZXQoYXBwdC5pZCk7XG4gICAgICByZXR1cm4gbGF5b3V0SW5mbyAmJiBsYXlvdXRJbmZvLmNvbHVtbkluZGV4ID4gMDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGdyb3VwZWRIaWRkZW4gPSBuZXcgTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgaGlkZGVuQXBwb2ludG1lbnRzKSB7XG4gICAgICBjb25zdCBhcHB0U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgYXBwdFN0YXJ0RGF0ZSxcbiAgICAgICAgdGhpcy5kYXRlKCksXG4gICAgICAgIHRoaXMuc3RhcnREYXlIb3VyKCksXG4gICAgICAgIHRoaXMuZW5kRGF5SG91cigpLFxuICAgICAgICA3LFxuICAgICAgKTtcbiAgICAgIGlmICghc3RhcnRJbmZvKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qga2V5ID0gYCR7c3RhcnRJbmZvLmRheUluZGV4fS0ke3N0YXJ0SW5mby5ibG9ja0luZGV4fWA7XG4gICAgICBpZiAoIWdyb3VwZWRIaWRkZW4uaGFzKGtleSkpIGdyb3VwZWRIaWRkZW4uc2V0KGtleSwgW10pO1xuICAgICAgZ3JvdXBlZEhpZGRlbi5nZXQoa2V5KS5wdXNoKGFwcHQpO1xuICAgIH1cblxuICAgIGdyb3VwZWRIaWRkZW4uZm9yRWFjaCgoZ3JvdXAsIGtleSkgPT4ge1xuICAgICAgY29uc3QgW2RheUluZGV4U3RyLCBibG9ja0luZGV4U3RyXSA9IGtleS5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSBwYXJzZUludChkYXlJbmRleFN0cik7XG4gICAgICBjb25zdCBibG9ja0luZGV4ID0gcGFyc2VJbnQoYmxvY2tJbmRleFN0cik7XG5cbiAgICAgIGNvbnN0IGJhZGdlVG9wID0gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtibG9ja0luZGV4fSArIDAuNzVyZW0pYDtcbiAgICAgIGNvbnN0IGJhZGdlTGVmdCA9IGBjYWxjKCR7ZGF5SW5kZXggKiAoMTAwIC8gTil9JSArICgxMDAlIC8gJHtOfSkgLSAke3RoaXMuQkFER0VfU1BBQ0VfUkVNfXJlbSlgO1xuXG4gICAgICBiYWRnZXNJbmZvLnB1c2goe1xuICAgICAgICBrZXk6IGBiYWRnZS0ke2tleX1gLFxuICAgICAgICBjb3VudDogZ3JvdXAubGVuZ3RoLFxuICAgICAgICBiYWRnZVRvcCxcbiAgICAgICAgYmFkZ2VMZWZ0LFxuICAgICAgICBoaWRkZW5BcHBvaW50bWVudHM6IGdyb3VwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmFkZ2VzSW5mbztcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvL1xuICAvLyBFVkVOVCBIQU5ETEVSUyAmIFVUSUxJVFkgTUVUSE9EU1xuICAvL1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrLCBkYmxjbGljaywgYW5kIGNvbnRleHRtZW51IGV2ZW50cyBvbiBhbiBhcHBvaW50bWVudCBhbmQgZW1pdHMgdGhlbSB0byB0aGUgcGFyZW50LlxuICAgKiBAcGFyYW0gbW91c2VFdmVudCBUaGUgbmF0aXZlIERPTSBldmVudC5cbiAgICogQHBhcmFtIGFwcG9pbnRtZW50U2VnbWVudCBUaGUgYXBwb2ludG1lbnQgZGF0YSBzZWdtZW50IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRTZWdtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjbGljaywgZGJsY2xpY2ssIGFuZCBjb250ZXh0bWVudSBldmVudHMgb24gYW4gZW1wdHkgdGltZSBzbG90IGFuZCBlbWl0cyB0aGVtIHRvIHRoZSBwYXJlbnQuXG4gICAqIEBwYXJhbSBtb3VzZUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50LlxuICAgKiBAcGFyYW0gaG91ciBUaGUgc3RhcnRpbmcgaG91ciBvZiB0aGUgc2xvdC5cbiAgICogQHBhcmFtIGRheSBUaGUgZGF5IG9mIHRoZSBzbG90LlxuICAgKiBAcGFyYW0gbWludXRlSW5kZXggVGhlIGhhbGYtaG91ciBpbmRleCAoMCBvciAxKS5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZVNpbmdsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBob3VyOiBBWERhdGVUaW1lLCBkYXk6IEFYRGF0ZVRpbWUsIG1pbnV0ZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXkuc2V0KCdob3VyJywgaG91ci5ob3VyKS5zZXQoJ21pbnV0ZScsIG1pbnV0ZUluZGV4ICogMzApO1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3dlZWsnKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBpbnRlcmFjdGlvbiBldmVudHMgb24gdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHBhcmFtIG1vdXNlRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnQuXG4gICAqIEBwYXJhbSBkYXkgVGhlIGNvcnJlc3BvbmRpbmcgZGF5IGZvciB0aGUgYWxsLWRheSBzbG90LlxuICAgKiBAcHVibGljXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlQWxsRGF5U2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRheTogQVhEYXRlVGltZSk6IHZvaWQge1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGU6IGRheS5zdGFydE9mKCdkYXknKSwgZW5kRGF0ZTogZGF5LmVuZE9mKCdkYXknKSwgdmlldzogJ3dlZWsnIGFzIGNvbnN0IH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnc2xvdCcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGRyb3BwaW5nIGFuIGFwcG9pbnRtZW50IG9udG8gdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHBhcmFtIGUgVGhlIGRyb3AgZXZlbnQgZnJvbSB0aGUgQ0RLLlxuICAgKiBAcGFyYW0gZGF5IFRoZSBjb3JyZXNwb25kaW5nIGRheSBmb3IgdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFsbERheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF5OiBBWERhdGVUaW1lKTogdm9pZCB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB7IHN0YXJ0RGF0ZTogZGF5LnN0YXJ0T2YoJ2RheScpLCBlbmREYXRlOiBkYXkuZW5kT2YoJ2RheScpLCB2aWV3OiAnd2VlaycgYXMgY29uc3QgfTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoXG4gICAgICBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICAgICk7XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZHJvcHBpbmcgYW4gYXBwb2ludG1lbnQgb250byBhIHRpbWVkIGdyaWQgc2xvdC5cbiAgICogQHBhcmFtIGUgVGhlIGRyb3AgZXZlbnQgZnJvbSB0aGUgQ0RLLlxuICAgKiBAcGFyYW0gaG91ciBUaGUgc3RhcnRpbmcgaG91ciBvZiB0aGUgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSBkYXkgVGhlIGRheSBvZiB0aGUgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSBtaW51dGVJbmRleCBUaGUgaGFsZi1ob3VyIGluZGV4ICgwIG9yIDEpIG9mIHRoZSBkcm9wIHRhcmdldC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZVNpbmdsZURheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgaG91cjogQVhEYXRlVGltZSwgZGF5OiBBWERhdGVUaW1lLCBtaW51dGVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5LnNldCgnaG91cicsIGhvdXIuaG91cikuc2V0KCdtaW51dGUnLCBtaW51dGVJbmRleCAqIDMwKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICd3ZWVrJyk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KFxuICAgICAgZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgICApO1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrcyBvbiB0aGUgXCJtb3JlXCIgYWN0aW9uIGljb24gb24gYW4gYXBwb2ludG1lbnQuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgbmF0aXZlIG1vdXNlIGV2ZW50LlxuICAgKiBAcGFyYW0gYXBwb2ludG1lbnRJdGVtIFRoZSBhcHBvaW50bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGFjdGlvbi5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHsgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBkYXRlIGlzIHRoZSBjdXJyZW50IGRheS5cbiAgICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGF0ZSBpcyB0b2RheS5cbiAgICovXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUobmV3IERhdGUoKSksICdkYXknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGRhdGUgaXMgYSBob2xpZGF5IG9yIHdlZWtlbmQuXG4gICAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgZGF5J3Mgc3RhdHVzIChob2xpZGF5LCB3ZWVrZW5kLCBvciBub25lKS5cbiAgICovXG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaG9saWRheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLmZpbmQoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgIGlmIChob2xpZGF5KSByZXR1cm4geyBzdGF0ZTogJ2hvbGlkYXknLCBob2xpZGF5IH07XG4gICAgaWYgKHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKSkgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIENhcHR1cmVzIHRoZSBkYXRhLXNsb3QtaWQgYXR0cmlidXRlIHdoZW4gYSBkcmFnIG9wZXJhdGlvbiBzdGFydHMgb24gYW4gYXBwb2ludG1lbnQuXG4gICAqIEBwYXJhbSBlIFRoZSBwb2ludGVyIGV2ZW50IHRoYXQgaW5pdGlhdGVzIHRoZSBkcmFnLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKVxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxuXG4gIC8vIC0tLSBQcml2YXRlIERhdGEgUHJvY2Vzc2luZyAtLS1cbiAgcHJpdmF0ZSBwcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdPigoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RheXMgPSB0aGlzLmRheXNBcnJheSgpLm1hcCgoZSkgPT4gZS5kYXRlKTtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgaWYgKHZpZXdEYXlzLmxlbmd0aCA9PT0gMCB8fCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHN0YXJ0SCA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3QgZW5kSCA9IHRoaXMuZW5kRGF5SG91cigpO1xuICAgIGNvbnN0IGFsbFNlZ21lbnRzSW5WaWV3OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGRheSBvZiB2aWV3RGF5cykge1xuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoYXBwdCwgZGF5LnN0YXJ0T2YoJ2RheScpLCBzdGFydEgsIGVuZEgpO1xuICAgICAgICBpZiAoc2VnbWVudCkgYWxsU2VnbWVudHNJblZpZXcucHVzaChzZWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdW5pcXVlU2VnbWVudHNNYXAgPSBuZXcgTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQ+KCk7XG4gICAgYWxsU2VnbWVudHNJblZpZXcuZm9yRWFjaCgoc2VnKSA9PiB7XG4gICAgICBjb25zdCBtYXBLZXkgPSBgJHtzZWcuaWR9LSR7c2VnLnN0YXJ0RGF0ZS5nZXRUaW1lKCl9LSR7c2VnLmVuZERhdGUuZ2V0VGltZSgpfWA7XG4gICAgICBpZiAoIXVuaXF1ZVNlZ21lbnRzTWFwLmhhcyhtYXBLZXkpKSB1bmlxdWVTZWdtZW50c01hcC5zZXQobWFwS2V5LCBzZWcpO1xuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHVuaXF1ZVNlZ21lbnRzTWFwLnZhbHVlcygpKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSB0aW1lZEdyaWRTZWdtZW50cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKChzZWdtZW50KSA9PiAhc2VnbWVudC5hbGxEYXkpID8/IFtdO1xuICB9KTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXlzXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci10YWJsZVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgQGZvciAoZGF5IG9mIGRheXNBcnJheSgpOyB0cmFjayBkYXkuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImlzVG9kYXkoZGF5LmRhdGUpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheVwiXG4gICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLWhvbGlkYXldPVwiZGF5LmhvbGlkYXkuc3RhdGUgIT09ICdub25lJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXkuaG9saWRheT8uaG9saWRheT8udGl0bGUgPz8gJydcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGRheS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ2RkZGQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIEBpZiAoZGF5LmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXkuaG9saWRheS5ob2xpZGF5LnRpdGxlKSB7XG4gICAgICAgICAgICAgICgge3sgZGF5LmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5LW51bVwiPlxuICAgICAgICAgICAge3sgZGF5LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnREQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXlzXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci10YWJsZVwiPnt7ICdAYWNvcmV4OmRhdGVUaW1lLmR1cmF0aW9uLmFsbC1kYXknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2Rpdj5cbiAgICA8ZGl2IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGVcIj5cbiAgICAgIEBmb3IgKHNsb3REYXRhIG9mIGFsbERheUFwcG9pbnRtZW50c1BlckRheSgpOyB0cmFjayBzbG90RGF0YS5kYXkuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAjem9uZTI9XCJheERyb3Bab25lXCJcbiAgICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lMi5pc0hvdmVyZWQoKVwiXG4gICAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlQWxsRGF5RHJvcCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFsbC1kYXktc2xvdFwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5kYXkpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudCwgc2xvdERhdGEuZGF5KVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwic2xvdERhdGEuYXBwb2ludG1lbnRzWzBdXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNsb3REYXRhLmFwcG9pbnRtZW50c1swXSlcIlxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNsb3REYXRhLmFwcG9pbnRtZW50c1swXSlcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNsb3REYXRhLmFwcG9pbnRtZW50c1swXSlcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyAnJyA6IHNsb3REYXRhLmFwcG9pbnRtZW50c1swXS50aXRsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlci13ZWVrLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cInNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAxID8gJ2NhbGMoMTAwJSAtIDJyZW0pJyA6ICcxMDAlJ1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgIHNsb3REYXRhLmFwcG9pbnRtZW50c1swXS5jc3NDbGFzcyA/P1xuICAgICAgICAgICAgICAgIGBheC1zY2hlZHVsZXItJHtzbG90RGF0YS5hcHBvaW50bWVudHNbMF0ucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICNtb3JlQXBwb2ludG1lbnRzXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFwcG9pbnRtZW50LWJhZGdlXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIicxLjVyZW0nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICBzbG90RGF0YS5hcHBvaW50bWVudHNbMV0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgICAgICBgYXgtc2NoZWR1bGVyLSR7c2xvdERhdGEuYXBwb2ludG1lbnRzWzFdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre3sgc2xvdERhdGEuYXBwb2ludG1lbnRzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiIGF4RHJvcFpvbmU+XG4gICAgICAgICAgICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2Ygc2xvdERhdGEuYXBwb2ludG1lbnRzOyB0cmFjayBhcHBvaW50bWVudC5pZDsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay10aW1lLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstdGltZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICB7eyB0aW1lIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay10YWJsZS1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICBAZm9yIChhcHB0IG9mIHZpc2libGVBcHBvaW50bWVudHNMYXlvdXQoKTsgdHJhY2sgYXBwdC5hcHBvaW50bWVudC5pZCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgIFtkcmFnRGF0YV09XCJhcHB0LmFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgYXBwdC5hcHBvaW50bWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwdC5hcHBvaW50bWVudClcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwdC5hcHBvaW50bWVudClcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwdC5hcHBvaW50bWVudClcIlxuICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYXBwdC5hcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImFwcHQubGF5b3V0V2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYXBwdC5sYXlvdXRIZWlnaHRcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1ibG9jay1zdGFydF09XCJhcHB0LmxheW91dFRvcFwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWlubGluZS1zdGFydF09XCJhcHB0LmxheW91dExlZnRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcHQuYXBwb2ludG1lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke2FwcHQuYXBwb2ludG1lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxheC10aXRsZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYXBwdC5hcHBvaW50bWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYXBwdC5hcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgYXBwdC5hcHBvaW50bWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC1cbiAgICAgICAgICAgIHt7IGFwcHQuYXBwb2ludG1lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gT3ZlcmZsb3cgQmFkZ2VzIHdpdGggUG9wb3ZlcnMgLS0+XG4gICAgICBAZm9yIChiYWRnZSBvZiBvdmVyZmxvd0JhZGdlc1dpdGhEYXRhKCk7IHRyYWNrIGJhZGdlLmtleSkge1xuICAgICAgICA8IS0tIFdyYXAgYmFkZ2UgYW5kIHBvcG92ZXIgZm9yIHRhcmdldGluZyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1iYWRnZS13cmFwcGVyXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtYmxvY2stc3RhcnRdPVwiYmFkZ2UuYmFkZ2VUb3BcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1pbmxpbmUtc3RhcnRdPVwiYmFkZ2UuYmFkZ2VMZWZ0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gVGhlIEJhZGdlIGl0c2VsZiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjYWN0aW9uQnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hcHBvaW50bWVudC1iYWRnZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgYmFkZ2UuaGlkZGVuQXBwb2ludG1lbnRzWzBdLmNzc0NsYXNzID8/XG4gICAgICAgICAgICAgIGBheC1zY2hlZHVsZXItJHtiYWRnZS5oaWRkZW5BcHBvaW50bWVudHNbMF0ucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICt7eyBiYWRnZS5jb3VudCB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gVGhlIFBvcG92ZXIgLS0+XG4gICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJhY3Rpb25CdXR0b25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBheERyb3Bab25lPlxuICAgICAgICAgICAgICBAZm9yIChhcHBvaW50bWVudCBvZiBiYWRnZS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIGFwcG9pbnRtZW50LmlkKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIGFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICBhcHBvaW50bWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8dGFibGUgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2JvcmRlcl09XCIxXCI+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgQGZvciAoZGF5IG9mIGRheXNBcnJheSgpOyB0cmFjayBkYXkuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDApXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDApXCJcbiAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDApXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDApXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF5LmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpICsgJy0nICsgdGltZS5mb3JtYXQoJ0hIbW0nKVwiXG4gICAgICAgICAgICAgID48L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgQGZvciAoZGF5IG9mIGRheXNBcnJheSgpOyB0cmFjayBkYXkuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgICAgICAgI3pvbmUyPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZTIuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZVNpbmdsZURheURyb3AoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMSlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMSlcIlxuICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMSlcIlxuICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXkuZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJykgKyAnLScgKyB0aW1lLmFkZCgnbWludXRlJywgMzApLmZvcm1hdCgnSEhtbScpXCJcbiAgICAgICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSelectBoxComponent } from '@acorex/components/select-box';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, linkedSignal, model, output, PLATFORM_ID, signal, untracked, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXSchedulerService } from './scheduler.service';\nimport { AXSchedulerAgendaViewComponent } from './views/agenda/scheduler-agenda-view.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerTimelineMonthViewComponent } from './views/timeline-month/scheduler-timeline-month-view.component';\nimport { AXSchedulerTimelineMultiDayViewComponent } from './views/timeline-multi-day/scheduler-timeline-multi-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class AXSchedulerComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.platformId = inject(PLATFORM_ID);\n this.unsubscriber = inject(AXUnsubscriber);\n this.formatService = inject(AXFormatService);\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.translationService = inject(AXTranslationService);\n this.viewModeSelectbox = viewChild(AXSelectBoxComponent);\n this.calendarPopover = viewChild('calendarPopover');\n this.displayViews = {\n day: 'daily',\n week: 'weekly',\n month: 'monthly',\n 'timeline-day': 'daily-timeline',\n 'timeline-multi-day': 'multi-day-timeline',\n 'timeline-month': 'monthly-timeline',\n agenda: 'agenda',\n };\n this.calendar = input();\n this.calendarType = linkedSignal(() => this.calendar() ?? this.localeService.activeProfile().calendar.system);\n this.startingDate = input(new Date());\n this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'));\n this._appointments = signal([]);\n this.appointments = this._appointments.asReadonly();\n this.rtl = signal(false);\n this.isFullScreen = signal(false);\n this.viewsDataSource = signal([]);\n this.prevDate = signal(this.calendarService.create(new Date(), this.calendarType()));\n this.endDayHour = input(24);\n this.startDayHour = input(8);\n this.hasHeader = input(true);\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(true);\n this.dragStartDelay = input(0);\n this.allowFullScreen = input(true);\n this.multiDayViewDaysCount = input(7);\n this.tooltipTemplate = input();\n this.dataSource = input([]);\n this.firstDayOfWeek = input('sunday');\n this.views = input([\n 'day',\n 'week',\n 'month',\n 'timeline-day',\n 'timeline-multi-day',\n 'timeline-month',\n 'agenda',\n ]);\n this.selectedView = model(this.views()[0]);\n this.prevView = signal(this.selectedView());\n // --- Public Outputs ---\n this.onDataLoaded = output();\n this.onRangeChanged = output();\n this.onSlotClicked = output();\n this.onSlotDblClicked = output();\n this.onSlotRightClick = output();\n this.onAppointmentDrop = output();\n this.onActionClick = output();\n this.onAppointmentClicked = output();\n this.onAppointmentDblClicked = output();\n this.onAppointmentRightClick = output();\n this.#appointmentEffect = effect(async () => {\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n const list = await func({ range });\n this._appointments.set(list);\n }\n else {\n const list = this.dataSource();\n this._appointments.set(list);\n }\n this.onDataLoaded.emit();\n });\n this.currentDateText = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n case 'week': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('week', 1).add('day', -1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('day', this.multiDayViewDaysCount() - 1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'month':\n case 'timeline-month':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'MMMM yyyy',\n calendar: this.calendarType(),\n });\n }\n });\n this.calendarDepth = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'week':\n case 'agenda':\n case 'timeline-day':\n case 'timeline-multi-day':\n return 'day';\n case 'month':\n case 'timeline-month':\n return 'month';\n }\n });\n this.mappedAppointments = computed(() => {\n const items = this._appointments();\n return items\n .map((item) => {\n const startDate = this.calendarService.create(item.startDate, this.calendarType());\n const endDate = this.calendarService.create(item.endDate, this.calendarType());\n // Basic validation\n if (!startDate?.date || !endDate?.date) {\n console.warn('Scheduler: Skipping item due to invalid date fields:', item);\n return null;\n }\n // Check if dates are valid after creation\n if (isNaN(startDate.date.getTime()) || isNaN(endDate.date.getTime())) {\n console.warn('Scheduler: Skipping item due to invalid parsed date (NaN):', item);\n return null;\n }\n return item;\n })\n .filter((appt) => appt !== null); // Filter out nulls from invalid dates\n });\n this.range = computed(() => {\n const view = this.selectedView();\n const current = this.currentDate().startOf('day');\n if (!current)\n return { from: null, end: null };\n switch (view) {\n case 'day':\n case 'timeline-day': {\n const range = { from: current.date, end: current.endOf('day').date };\n return range;\n }\n case 'week': {\n const range = { from: current.date, end: current.add('day', 7).date };\n return range;\n }\n case 'month': {\n const { gridStartDate, gridEndDate } = this.getGridDateRange(current);\n const range = { from: gridStartDate.date, end: gridEndDate.add('day', 1).date };\n return range;\n }\n case 'timeline-month': {\n const range = { from: current.startOf('month').date, end: current.endOf('month').date };\n return range;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const range = { from: current.date, end: current.add('day', this.multiDayViewDaysCount()).date };\n return range;\n }\n }\n });\n this.#rangeChangedEffect = effect(() => {\n this.onRangeChanged.emit(this.range());\n });\n this.#viewChangedEffect = effect(() => {\n const view = this.selectedView();\n untracked(() => {\n this.handleViewChanged(this.prevView(), view);\n });\n });\n this.viewAppointments = computed(() => {\n const current = this.currentDate();\n const mapped = this.mappedAppointments();\n const rangeStart = this.range().from;\n const rangeEnd = this.range().end;\n if (!current || mapped.length === 0)\n return [];\n return mapped.filter((appt) => this.calendarService.create(appt.startDate, this.calendarType()).compare(rangeEnd, 'second') <= 0 &&\n this.calendarService.create(appt.endDate, this.calendarType()).compare(rangeStart, 'second') >= 0);\n });\n }\n // --- Internal Handlers for View Outputs ---\n handleSlotClickInternal(eventData) {\n this.onSlotClicked.emit(eventData);\n }\n handleSlotDblClickInternal(eventData) {\n this.onSlotDblClicked.emit(eventData);\n }\n handleSlotRightClickInternal(eventData) {\n this.onSlotRightClick.emit(eventData);\n }\n handleAppointmentClickInternal(eventData) {\n this.onAppointmentClicked.emit(eventData);\n }\n handleAppointmentDblClickInternal(eventData) {\n this.onAppointmentDblClicked.emit(eventData);\n }\n handleAppointmentRightClickInternal(eventData) {\n this.onAppointmentRightClick.emit(eventData);\n }\n handleAppointmentDropInternal(eventData) {\n this.onAppointmentDrop.emit(eventData);\n }\n ngOnInit() {\n this.calendarService.calendarChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n const currentDate = this.calendarService.create(this.currentDate().date, this.calendarType());\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n });\n this.translationService.langChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.fillDataSource();\n this.viewModeSelectbox()?.selectItems(this.viewsDataSource().find((c) => c.id == this.selectedView()));\n const currentDate = this.calendarService.create(this.currentDate().date, this.calendarType());\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n });\n if (isPlatformBrowser(this.platformId))\n this.rtl.set(AXHtmlUtil.isRtl(this.nativeElement));\n this.fillDataSource();\n }\n #appointmentEffect;\n async fillDataSource() {\n const result = [];\n for await (const c of this.views()) {\n const text = await this.translationService.translateAsync(`@acorex:dateTime.duration.${this.displayViews[c]}`);\n result.push({ text, id: c });\n }\n this.viewsDataSource.set(result);\n }\n getGridDateRange(dateInMonth) {\n const firstDayOfMonth = dateInMonth.startOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const daysFromPrevMonth = (firstDisplayedDayOfWeek - firstDayGridNum + 7) % 7;\n const gridStartDate = firstDayOfMonth.add('day', -daysFromPrevMonth);\n // Calculate end date based on standard 6 weeks for safety, or calculate dynamically if preferred\n const gridEndDate = gridStartDate.add('day', 6 * 7 - 1);\n return { gridStartDate, gridEndDate };\n }\n #rangeChangedEffect;\n #viewChangedEffect;\n viewChanged(e) {\n const newView = e.value;\n const oldView = e.oldValue;\n this.selectedView.set(newView);\n this.handleViewChanged(oldView, newView);\n }\n handleViewChanged(oldView, newView) {\n if (oldView === 'week') {\n const oldDayOfWeek = this.prevDate().dayOfWeek % 7;\n const date = this.currentDate().add('day', oldDayOfWeek - 1);\n this.currentDate.set(date);\n }\n this.prevDate.set(this.currentDate());\n if (newView === 'week') {\n const currentDate = this.currentDate();\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n const startOfWeekDate = currentDate.add('day', -daysToSubtract);\n this.currentDate.set(startOfWeekDate);\n }\n this.prevView.set(newView);\n }\n nextClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', 1));\n break;\n case 'week':\n this.currentDate.set(this.currentDate().add('week', 1));\n break;\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', this.multiDayViewDaysCount()));\n break;\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', 1));\n break;\n }\n }\n prevClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', -1));\n break;\n case 'week':\n this.currentDate.set(this.currentDate().add('week', -1));\n break;\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', -this.multiDayViewDaysCount()));\n break;\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', -1));\n break;\n }\n }\n calendarDateChanged(e) {\n let currentDate = this.calendarService.create(e.value, this.calendarType());\n if (this.selectedView() === 'week') {\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n currentDate = currentDate.add('day', -daysToSubtract);\n }\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n this.calendarPopover()?.close();\n }\n handleFullScreen() {\n if (!this.isFullScreen())\n this.nativeElement.classList.add('ax-full-screen-container');\n else\n this.nativeElement.classList.remove('ax-full-screen-container');\n this.isFullScreen.set(!this.isFullScreen());\n }\n async refresh(appointments) {\n if (appointments) {\n const newAppointments = this._appointments().map((appt) => {\n return appointments.find((a) => a.id === appt.id) ?? appt;\n });\n this._appointments.set(newAppointments);\n this.onDataLoaded.emit();\n return;\n }\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n const list = await func({ range });\n this._appointments.set(list);\n this.onDataLoaded.emit();\n return;\n }\n const list = this.dataSource();\n this._appointments.set(list);\n this.onDataLoaded.emit();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerComponent, isStandalone: true, selector: \"ax-scheduler\", inputs: { calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: \"startingDate\", publicName: \"startingDate\", isSignal: true, isRequired: false, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: false, transformFunction: null }, hasHeader: { classPropertyName: \"hasHeader\", publicName: \"hasHeader\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, allowFullScreen: { classPropertyName: \"allowFullScreen\", publicName: \"allowFullScreen\", isSignal: true, isRequired: false, transformFunction: null }, multiDayViewDaysCount: { classPropertyName: \"multiDayViewDaysCount\", publicName: \"multiDayViewDaysCount\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: \"firstDayOfWeek\", publicName: \"firstDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, views: { classPropertyName: \"views\", publicName: \"views\", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: \"selectedView\", publicName: \"selectedView\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedView: \"selectedViewChange\", onDataLoaded: \"onDataLoaded\", onRangeChanged: \"onRangeChanged\", onSlotClicked: \"onSlotClicked\", onSlotDblClicked: \"onSlotDblClicked\", onSlotRightClick: \"onSlotRightClick\", onAppointmentDrop: \"onAppointmentDrop\", onActionClick: \"onActionClick\", onAppointmentClicked: \"onAppointmentClicked\", onAppointmentDblClicked: \"onAppointmentDblClicked\", onAppointmentRightClick: \"onAppointmentRightClick\" }, providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], viewQueries: [{ propertyName: \"viewModeSelectbox\", first: true, predicate: AXSelectBoxComponent, descendants: true, isSignal: true }, { propertyName: \"calendarPopover\", first: true, predicate: [\"calendarPopover\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-container\\\">\\n @if (hasHeader()) {\\n <div class=\\\"ax-scheduler-header\\\">\\n <div class=\\\"ax-scheduler-date\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"prevClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-left': !rtl(),\\n 'ax-icon-chevron-right': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"currentDateText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"nextClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-right': !rtl(),\\n 'ax-icon-chevron-left': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-popover [target]=\\\"date\\\" #calendarPopover>\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [ngModel]=\\\"currentDate()\\\"\\n (onValueChanged)=\\\"calendarDateChanged($event)\\\"\\n ></ax-calendar>\\n </div>\\n </ax-popover>\\n </div>\\n <div class=\\\"ax-scheduler-actions\\\">\\n <ax-select-box\\n [dropdownWidth]=\\\"200\\\"\\n [ngModel]=\\\"selectedView()\\\"\\n [dataSource]=\\\"viewsDataSource()\\\"\\n (onValueChanged)=\\\"viewChanged($event)\\\"\\n ></ax-select-box>\\n\\n @if (allowFullScreen()) {\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"handleFullScreen()\\\">\\n <ax-icon>\\n <i\\n class=\\\"fa-solid fa-expand\\\"\\n [ngClass]=\\\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\\\"\\n ></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n </div>\\n }\\n <div class=\\\"ax-scheduler-views-container\\\">\\n @switch (selectedView()) {\\n @case ('day') {\\n <ax-scheduler-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-day-view>\\n }\\n @case ('week') {\\n <ax-scheduler-week-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-week-view>\\n }\\n @case ('month') {\\n <ax-scheduler-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-month-view>\\n }\\n @case ('timeline-day') {\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n }\\n @case ('timeline-multi-day') {\\n <ax-scheduler-timeline-multi-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [daysCount]=\\\"multiDayViewDaysCount()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-multi-day-view>\\n }\\n @case ('timeline-month') {\\n <ax-scheduler-timeline-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-month-view>\\n }\\n @case ('agenda') {\\n <ax-scheduler-agenda-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-agenda-view>\\n }\\n }\\n </div>\\n</div>\\n\", styles: [\":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;left:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover ax-title,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title{display:flex;justify-content:space-between}.ax-overlay-pane.ax-scheduler-popover ax-title .ax-scheduler-action-icon,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: AXSelectBoxComponent, selector: \"ax-select-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"minValue\", \"maxValue\", \"value\", \"state\", \"name\", \"id\", \"type\", \"look\", \"multiple\", \"valueField\", \"textField\", \"disabledField\", \"textTemplate\", \"selectedItems\", \"dataSource\", \"minRecordsForSearch\", \"caption\", \"itemTemplate\", \"selectedTemplate\", \"emptyTemplate\", \"loadingTemplate\", \"dropdownWidth\", \"searchBoxAutoFocus\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXCalendarComponent, selector: \"ax-calendar\", inputs: [\"rtl\", \"readonly\", \"value\", \"name\", \"disabled\", \"depth\", \"activeView\", \"minValue\", \"maxValue\", \"disabledDates\", \"holidayDates\", \"type\", \"cellTemplate\", \"cellClass\", \"showNavigation\", \"count\", \"id\"], outputs: [\"onOptionChanged\", \"valueChange\", \"onValueChanged\", \"minValueChange\", \"maxValueChange\", \"onBlur\", \"onFocus\", \"depthChange\", \"typeChange\", \"activeViewChange\", \"disabledDatesChange\", \"holidayDatesChange\", \"onNavigate\", \"onSlotClick\", \"countChange\"] }, { kind: \"component\", type: AXSchedulerDayViewComponent, selector: \"ax-scheduler-day-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\", \"onActionClickInternal\"] }, { kind: \"component\", type: AXSchedulerWeekViewComponent, selector: \"ax-scheduler-week-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\", \"onActionClickInternal\"] }, { kind: \"component\", type: AXSchedulerMonthViewComponent, selector: \"ax-scheduler-month-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"appointments\", \"firstDayOfWeek\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\", \"onActionClickInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineDayViewComponent, selector: \"ax-scheduler-timeline-day-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\", \"onActionClickInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineMultiDayViewComponent, selector: \"ax-scheduler-timeline-multi-day-view\", inputs: [\"daysCount\", \"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\", \"onActionClickInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineMonthViewComponent, selector: \"ax-scheduler-timeline-month-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\", \"onActionClickInternal\"] }, { kind: \"component\", type: AXSchedulerAgendaViewComponent, selector: \"ax-scheduler-agenda-view\", inputs: [\"daysCount\", \"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onAppointmentDropInternal\", \"onActionClickInternal\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n FormsModule,\n AXSelectBoxComponent,\n AXDecoratorIconComponent,\n AXButtonComponent,\n NgClass,\n AXPopoverComponent,\n AXCalendarComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n AXSchedulerTimelineMultiDayViewComponent,\n AXSchedulerTimelineMonthViewComponent,\n AXSchedulerAgendaViewComponent,\n ], providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], template: \"<div class=\\\"ax-scheduler-container\\\">\\n @if (hasHeader()) {\\n <div class=\\\"ax-scheduler-header\\\">\\n <div class=\\\"ax-scheduler-date\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"prevClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-left': !rtl(),\\n 'ax-icon-chevron-right': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"currentDateText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"nextClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-right': !rtl(),\\n 'ax-icon-chevron-left': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-popover [target]=\\\"date\\\" #calendarPopover>\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [ngModel]=\\\"currentDate()\\\"\\n (onValueChanged)=\\\"calendarDateChanged($event)\\\"\\n ></ax-calendar>\\n </div>\\n </ax-popover>\\n </div>\\n <div class=\\\"ax-scheduler-actions\\\">\\n <ax-select-box\\n [dropdownWidth]=\\\"200\\\"\\n [ngModel]=\\\"selectedView()\\\"\\n [dataSource]=\\\"viewsDataSource()\\\"\\n (onValueChanged)=\\\"viewChanged($event)\\\"\\n ></ax-select-box>\\n\\n @if (allowFullScreen()) {\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"handleFullScreen()\\\">\\n <ax-icon>\\n <i\\n class=\\\"fa-solid fa-expand\\\"\\n [ngClass]=\\\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\\\"\\n ></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n </div>\\n }\\n <div class=\\\"ax-scheduler-views-container\\\">\\n @switch (selectedView()) {\\n @case ('day') {\\n <ax-scheduler-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-day-view>\\n }\\n @case ('week') {\\n <ax-scheduler-week-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-week-view>\\n }\\n @case ('month') {\\n <ax-scheduler-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-month-view>\\n }\\n @case ('timeline-day') {\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n }\\n @case ('timeline-multi-day') {\\n <ax-scheduler-timeline-multi-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [daysCount]=\\\"multiDayViewDaysCount()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-multi-day-view>\\n }\\n @case ('timeline-month') {\\n <ax-scheduler-timeline-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-month-view>\\n }\\n @case ('agenda') {\\n <ax-scheduler-agenda-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-agenda-view>\\n }\\n }\\n </div>\\n</div>\\n\", styles: [\":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;left:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover ax-title,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title{display:flex;justify-content:space-between}.ax-overlay-pane.ax-scheduler-popover ax-title .ax-scheduler-action-icon,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXVCLFdBQVcsRUFBMEIsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFD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WENvbXBvbmVudCwgQVhWYWx1ZUNoYW5nZWRFdmVudCwgTlhDb21wb25lbnQsIE5YRXZlbnQsIE5YTmF0aXZlRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jYWxlbmRhcic7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFNlbGVjdEJveENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhIdG1sVXRpbCwgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbGlua2VkU2lnbmFsLFxuICBtb2RlbCxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICB1bnRyYWNrZWQsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBWERheU9mV2Vla05hbWUsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnREYXRhU291cmNlLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyLFxuICBBWFNjaGVkdWxlckRhdGVSYW5nZSxcbiAgQVhTY2hlZHVsZXJWaWV3LFxufSBmcm9tICcuL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy9kYXkvc2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvbW9udGgvc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1kYXkvc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50LCBNb3VzZUV2ZW50PiB7XG4gIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50IGV4dGVuZHMgTlhOYXRpdmVFdmVudDxBWFNjaGVkdWxlckNvbXBvbmVudCwgTW91c2VFdmVudD4ge1xuICBzbG90OiB7XG4gICAgZW5kRGF0ZTogQVhEYXRlVGltZTtcbiAgICBzdGFydERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgdmlldzogQVhTY2hlZHVsZXJWaWV3O1xuICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQgZXh0ZW5kcyBOWEV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50PiB7XG4gIGRyb3BFdmVudDogQVhEcm9wWm9uZURyb3BFdmVudDtcbiAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gIHNsb3Q6IHtcbiAgICBlbmREYXRlOiBBWERhdGVUaW1lO1xuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZTtcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXc7XG4gIH07XG4gIGlzU2FtZVNsb3REcm9wOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQVhTZWxlY3RCb3hDb21wb25lbnQsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYQnV0dG9uQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyV2Vla1ZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQVhVbnN1YnNjcmliZXIsIHsgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlckNvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmVyID0gaW5qZWN0KEFYVW5zdWJzY3JpYmVyKTtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgbG9jYWxlU2VydmljZSA9IGluamVjdChBWExvY2FsZVNlcnZpY2UpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB2aWV3TW9kZVNlbGVjdGJveCA9IHZpZXdDaGlsZChBWFNlbGVjdEJveENvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJQb3BvdmVyID0gdmlld0NoaWxkPEFYUG9wb3ZlckNvbXBvbmVudD4oJ2NhbGVuZGFyUG9wb3ZlcicpO1xuXG4gIHByaXZhdGUgZGlzcGxheVZpZXdzOiBSZWNvcmQ8QVhTY2hlZHVsZXJWaWV3LCBzdHJpbmc+ID0ge1xuICAgIGRheTogJ2RhaWx5JyxcbiAgICB3ZWVrOiAnd2Vla2x5JyxcbiAgICBtb250aDogJ21vbnRobHknLFxuICAgICd0aW1lbGluZS1kYXknOiAnZGFpbHktdGltZWxpbmUnLFxuICAgICd0aW1lbGluZS1tdWx0aS1kYXknOiAnbXVsdGktZGF5LXRpbWVsaW5lJyxcbiAgICAndGltZWxpbmUtbW9udGgnOiAnbW9udGhseS10aW1lbGluZScsXG4gICAgYWdlbmRhOiAnYWdlbmRhJyxcbiAgfTtcblxuICBwdWJsaWMgY2FsZW5kYXIgPSBpbnB1dDwnZ3JlZ29yaWFuJyB8ICdzb2xhci1oaWpyaScgfCBzdHJpbmc+KCk7XG4gIHByb3RlY3RlZCBjYWxlbmRhclR5cGUgPSBsaW5rZWRTaWduYWw8J2dyZWdvcmlhbicgfCAnc29sYXItaGlqcmknIHwgc3RyaW5nPihcbiAgICAoKSA9PiB0aGlzLmNhbGVuZGFyKCkgPz8gdGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5jYWxlbmRhci5zeXN0ZW0sXG4gICk7XG5cbiAgcHVibGljIHN0YXJ0aW5nRGF0ZSA9IGlucHV0PERhdGU+KG5ldyBEYXRlKCkpO1xuICBwdWJsaWMgY3VycmVudERhdGUgPSBsaW5rZWRTaWduYWw8QVhEYXRlVGltZT4oKCkgPT5cbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGhpcy5zdGFydGluZ0RhdGUoKSwgdGhpcy5jYWxlbmRhclR5cGUoKSkuc3RhcnRPZignZGF5JyksXG4gICk7XG5cbiAgcHJpdmF0ZSBfYXBwb2ludG1lbnRzID0gc2lnbmFsPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICBwdWJsaWMgYXBwb2ludG1lbnRzID0gdGhpcy5fYXBwb2ludG1lbnRzLmFzUmVhZG9ubHkoKTtcbiAgcHJvdGVjdGVkIHJ0bCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBpc0Z1bGxTY3JlZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgdmlld3NEYXRhU291cmNlID0gc2lnbmFsPHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXT4oW10pO1xuICBwcml2YXRlIHByZXZEYXRlID0gc2lnbmFsPEFYRGF0ZVRpbWU+KHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpLCB0aGlzLmNhbGVuZGFyVHlwZSgpKSk7XG5cbiAgcHVibGljIGVuZERheUhvdXIgPSBpbnB1dCgyNCk7XG4gIHB1YmxpYyBzdGFydERheUhvdXIgPSBpbnB1dCg4KTtcbiAgcHVibGljIGhhc0hlYWRlciA9IGlucHV0KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIHB1YmxpYyBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIGhhc0FjdGlvbnMgPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIHB1YmxpYyBhbGxvd0Z1bGxTY3JlZW4gPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIG11bHRpRGF5Vmlld0RheXNDb3VudCA9IGlucHV0KDcpO1xuICBwdWJsaWMgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG4gIHB1YmxpYyBkYXRhU291cmNlID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudERhdGFTb3VyY2U+KFtdKTtcbiAgcHVibGljIGZpcnN0RGF5T2ZXZWVrID0gaW5wdXQ8QVhEYXlPZldlZWtOYW1lPignc3VuZGF5Jyk7XG4gIHB1YmxpYyB2aWV3cyA9IGlucHV0PEFYU2NoZWR1bGVyVmlld1tdPihbXG4gICAgJ2RheScsXG4gICAgJ3dlZWsnLFxuICAgICdtb250aCcsXG4gICAgJ3RpbWVsaW5lLWRheScsXG4gICAgJ3RpbWVsaW5lLW11bHRpLWRheScsXG4gICAgJ3RpbWVsaW5lLW1vbnRoJyxcbiAgICAnYWdlbmRhJyxcbiAgXSk7XG5cbiAgcHVibGljIHNlbGVjdGVkVmlldyA9IG1vZGVsPEFYU2NoZWR1bGVyVmlldz4odGhpcy52aWV3cygpWzBdKTtcbiAgcHJpdmF0ZSBwcmV2VmlldyA9IHNpZ25hbDxBWFNjaGVkdWxlclZpZXc+KHRoaXMuc2VsZWN0ZWRWaWV3KCkpO1xuXG4gIC8vIC0tLSBQdWJsaWMgT3V0cHV0cyAtLS1cbiAgcHVibGljIG9uRGF0YUxvYWRlZCA9IG91dHB1dDx2b2lkPigpO1xuICBwdWJsaWMgb25SYW5nZUNoYW5nZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJEYXRlUmFuZ2U+KCk7XG4gIHB1YmxpYyBvblNsb3RDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvblNsb3REYmxDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvblNsb3RSaWdodENsaWNrID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50RHJvcCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFjdGlvbkNsaWNrID0gb3V0cHV0PHsgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQgfT4oKTtcbiAgcHVibGljIG9uQXBwb2ludG1lbnRDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25BcHBvaW50bWVudERibENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50UmlnaHRDbGljayA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcblxuICAvLyAtLS0gSW50ZXJuYWwgSGFuZGxlcnMgZm9yIFZpZXcgT3V0cHV0cyAtLS1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3RDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCkge1xuICAgIHRoaXMub25TbG90Q2xpY2tlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCkge1xuICAgIHRoaXMub25TbG90RGJsQ2xpY2tlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vblNsb3RSaWdodENsaWNrLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnRDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREYmxDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudFJpZ2h0Q2xpY2suZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbChldmVudERhdGE6IEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3AuZW1pdChldmVudERhdGEpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY2FsZW5kYXJDaGFuZ2VzJC5waXBlKHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLmN1cnJlbnREYXRlKCkuZGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICBpZiAoIWN1cnJlbnREYXRlLmVxdWFsKHRoaXMuY3VycmVudERhdGUoKSkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoY3VycmVudERhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UubGFuZ0NoYW5nZXMkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbERhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMudmlld01vZGVTZWxlY3Rib3goKT8uc2VsZWN0SXRlbXModGhpcy52aWV3c0RhdGFTb3VyY2UoKS5maW5kKChjKSA9PiBjLmlkID09IHRoaXMuc2VsZWN0ZWRWaWV3KCkpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRoaXMuY3VycmVudERhdGUoKS5kYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICAgIGlmICghY3VycmVudERhdGUuZXF1YWwodGhpcy5jdXJyZW50RGF0ZSgpKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChjdXJyZW50RGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgdGhpcy5ydGwuc2V0KEFYSHRtbFV0aWwuaXNSdGwodGhpcy5uYXRpdmVFbGVtZW50KSk7XG4gICAgdGhpcy5maWxsRGF0YVNvdXJjZSgpO1xuICB9XG5cbiAgI2FwcG9pbnRtZW50RWZmZWN0ID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVNvdXJjZSgpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudExvYWRlcjtcbiAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICBlbmQ6IHRoaXMucmFuZ2UoKS5lbmQsXG4gICAgICAgIGZyb206IHRoaXMucmFuZ2UoKS5mcm9tLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBmdW5jKHsgcmFuZ2UgfSk7XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaXN0ID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuICAgICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChsaXN0KTtcbiAgICB9XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICB9KTtcblxuICBwcml2YXRlIGFzeW5jIGZpbGxEYXRhU291cmNlKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciBhd2FpdCAoY29uc3QgYyBvZiB0aGlzLnZpZXdzKCkpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhgQGFjb3JleDpkYXRlVGltZS5kdXJhdGlvbi4ke3RoaXMuZGlzcGxheVZpZXdzW2NdfWApO1xuICAgICAgcmVzdWx0LnB1c2goeyB0ZXh0LCBpZDogYyB9KTtcbiAgICB9XG4gICAgdGhpcy52aWV3c0RhdGFTb3VyY2Uuc2V0KHJlc3VsdCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdyaWREYXRlUmFuZ2UoZGF0ZUluTW9udGg6IEFYRGF0ZVRpbWUpOiB7IGdyaWRTdGFydERhdGU6IEFYRGF0ZVRpbWU7IGdyaWRFbmREYXRlOiBBWERhdGVUaW1lIH0ge1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGRhdGVJbk1vbnRoLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgY29uc3QgZmlyc3REYXlHcmlkTnVtID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcih0aGlzLmZpcnN0RGF5T2ZXZWVrKCkpO1xuICAgIGNvbnN0IGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrID0gZmlyc3REYXlPZk1vbnRoLmRheU9mV2VlaztcbiAgICBjb25zdCBkYXlzRnJvbVByZXZNb250aCA9IChmaXJzdERpc3BsYXllZERheU9mV2VlayAtIGZpcnN0RGF5R3JpZE51bSArIDcpICUgNztcbiAgICBjb25zdCBncmlkU3RhcnREYXRlID0gZmlyc3REYXlPZk1vbnRoLmFkZCgnZGF5JywgLWRheXNGcm9tUHJldk1vbnRoKTtcbiAgICAvLyBDYWxjdWxhdGUgZW5kIGRhdGUgYmFzZWQgb24gc3RhbmRhcmQgNiB3ZWVrcyBmb3Igc2FmZXR5LCBvciBjYWxjdWxhdGUgZHluYW1pY2FsbHkgaWYgcHJlZmVycmVkXG4gICAgY29uc3QgZ3JpZEVuZERhdGUgPSBncmlkU3RhcnREYXRlLmFkZCgnZGF5JywgNiAqIDcgLSAxKTtcbiAgICByZXR1cm4geyBncmlkU3RhcnREYXRlLCBncmlkRW5kRGF0ZSB9O1xuICB9XG5cbiAgcHVibGljIGN1cnJlbnREYXRlVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3dlZWsnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCd3ZWVrJywgMSkuYWRkKCdkYXknLCAtMSksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0T2ZXZWVrfSAtICR7ZW5kT2ZXZWVrfWA7XG4gICAgICB9XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5Jzoge1xuICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQodGhpcy5jdXJyZW50RGF0ZSgpLCAnZGF0ZXRpbWUnLCB7XG4gICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhclR5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZE9mV2VlayA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQoXG4gICAgICAgICAgdGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgdGhpcy5tdWx0aURheVZpZXdEYXlzQ291bnQoKSAtIDEpLFxuICAgICAgICAgICdkYXRldGltZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgJHtzdGFydE9mV2Vla30gLSAke2VuZE9mV2Vla31gO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHB1YmxpYyBjYWxlbmRhckRlcHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICByZXR1cm4gJ2RheSc7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHJldHVybiAnbW9udGgnO1xuICAgIH1cbiAgfSk7XG5cbiAgcHJpdmF0ZSBtYXBwZWRBcHBvaW50bWVudHMgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2FwcG9pbnRtZW50cygpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXTtcblxuICAgIHJldHVybiBpdGVtc1xuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoaXRlbS5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGl0ZW0uZW5kRGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICAgIC8vIEJhc2ljIHZhbGlkYXRpb25cbiAgICAgICAgaWYgKCFzdGFydERhdGU/LmRhdGUgfHwgIWVuZERhdGU/LmRhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1NjaGVkdWxlcjogU2tpcHBpbmcgaXRlbSBkdWUgdG8gaW52YWxpZCBkYXRlIGZpZWxkczonLCBpdGVtKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBkYXRlcyBhcmUgdmFsaWQgYWZ0ZXIgY3JlYXRpb25cbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0RGF0ZS5kYXRlLmdldFRpbWUoKSkgfHwgaXNOYU4oZW5kRGF0ZS5kYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1NjaGVkdWxlcjogU2tpcHBpbmcgaXRlbSBkdWUgdG8gaW52YWxpZCBwYXJzZWQgZGF0ZSAoTmFOKTonLCBpdGVtKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChhcHB0KTogYXBwdCBpcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50ID0+IGFwcHQgIT09IG51bGwpOyAvLyBGaWx0ZXIgb3V0IG51bGxzIGZyb20gaW52YWxpZCBkYXRlc1xuICB9KTtcblxuICBwdWJsaWMgcmFuZ2UgPSBjb21wdXRlZDxBWFNjaGVkdWxlckRhdGVSYW5nZT4oKCkgPT4ge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnNlbGVjdGVkVmlldygpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnREYXRlKCkuc3RhcnRPZignZGF5Jyk7XG5cbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybiB7IGZyb206IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5Jzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5kYXRlLCBlbmQ6IGN1cnJlbnQuZW5kT2YoJ2RheScpLmRhdGUgfTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfVxuICAgICAgY2FzZSAnd2Vlayc6IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGN1cnJlbnQuZGF0ZSwgZW5kOiBjdXJyZW50LmFkZCgnZGF5JywgNykuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgeyBncmlkU3RhcnREYXRlLCBncmlkRW5kRGF0ZSB9ID0gdGhpcy5nZXRHcmlkRGF0ZVJhbmdlKGN1cnJlbnQpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogZ3JpZFN0YXJ0RGF0ZS5kYXRlLCBlbmQ6IGdyaWRFbmREYXRlLmFkZCgnZGF5JywgMSkuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGN1cnJlbnQuc3RhcnRPZignbW9udGgnKS5kYXRlLCBlbmQ6IGN1cnJlbnQuZW5kT2YoJ21vbnRoJykuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5Jzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5kYXRlLCBlbmQ6IGN1cnJlbnQuYWRkKCdkYXknLCB0aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpKS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gICNyYW5nZUNoYW5nZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMub25SYW5nZUNoYW5nZWQuZW1pdCh0aGlzLnJhbmdlKCkpO1xuICB9KTtcblxuICAjdmlld0NoYW5nZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnNlbGVjdGVkVmlldygpO1xuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVZpZXdDaGFuZ2VkKHRoaXMucHJldlZpZXcoKSwgdmlldyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZpZXdBcHBvaW50bWVudHMgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50RGF0ZSgpO1xuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwcGVkQXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgcmFuZ2VTdGFydCA9IHRoaXMucmFuZ2UoKS5mcm9tO1xuICAgIGNvbnN0IHJhbmdlRW5kID0gdGhpcy5yYW5nZSgpLmVuZDtcblxuICAgIGlmICghY3VycmVudCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gbWFwcGVkLmZpbHRlcihcbiAgICAgIChhcHB0KSA9PlxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpLmNvbXBhcmUocmFuZ2VFbmQsICdzZWNvbmQnKSA8PSAwICYmXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LmVuZERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpLmNvbXBhcmUocmFuZ2VTdGFydCwgJ3NlY29uZCcpID49IDAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdmlld0NoYW5nZWQoZTogQVhWYWx1ZUNoYW5nZWRFdmVudDxBWFNjaGVkdWxlclZpZXc+KSB7XG4gICAgY29uc3QgbmV3VmlldyA9IGUudmFsdWU7XG4gICAgY29uc3Qgb2xkVmlldyA9IGUub2xkVmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KG5ld1ZpZXcpO1xuXG4gICAgdGhpcy5oYW5kbGVWaWV3Q2hhbmdlZChvbGRWaWV3LCBuZXdWaWV3KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlld0NoYW5nZWQob2xkVmlldzogQVhTY2hlZHVsZXJWaWV3LCBuZXdWaWV3OiBBWFNjaGVkdWxlclZpZXcpIHtcbiAgICBpZiAob2xkVmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICBjb25zdCBvbGREYXlPZldlZWsgPSB0aGlzLnByZXZEYXRlKCkuZGF5T2ZXZWVrICUgNztcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCBvbGREYXlPZldlZWsgLSAxKTtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KGRhdGUpO1xuICAgIH1cblxuICAgIHRoaXMucHJldkRhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKSk7XG5cbiAgICBpZiAobmV3VmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuY3VycmVudERhdGUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOYW1lID0gdGhpcy5maXJzdERheU9mV2VlaygpO1xuICAgICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TnVtYmVyID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcihkZXNpcmVkRmlyc3REYXlOYW1lKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgICBjb25zdCBzdGFydE9mV2Vla0RhdGUgPSBjdXJyZW50RGF0ZS5hZGQoJ2RheScsIC1kYXlzVG9TdWJ0cmFjdCk7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChzdGFydE9mV2Vla0RhdGUpO1xuICAgIH1cblxuICAgIHRoaXMucHJldlZpZXcuc2V0KG5ld1ZpZXcpO1xuICB9XG5cbiAgbmV4dENsaWNrKCkge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIDEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCd3ZWVrJywgMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIHRoaXMubXVsdGlEYXlWaWV3RGF5c0NvdW50KCkpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnbW9udGgnLCAxKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByZXZDbGljaygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCAtMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ3dlZWsnLCAtMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIC10aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ21vbnRoJywgLTEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY2FsZW5kYXJEYXRlQ2hhbmdlZChlOiBBWFZhbHVlQ2hhbmdlZEV2ZW50PERhdGU+KSB7XG4gICAgbGV0IGN1cnJlbnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGUudmFsdWUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmlldygpID09PSAnd2VlaycpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOYW1lID0gdGhpcy5maXJzdERheU9mV2VlaygpO1xuICAgICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TnVtYmVyID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcihkZXNpcmVkRmlyc3REYXlOYW1lKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcbiAgICB9XG4gICAgaWYgKCFjdXJyZW50RGF0ZS5lcXVhbCh0aGlzLmN1cnJlbnREYXRlKCkpKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChjdXJyZW50RGF0ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJQb3BvdmVyKCk/LmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRnVsbFNjcmVlbigpIHtcbiAgICBpZiAoIXRoaXMuaXNGdWxsU2NyZWVuKCkpIHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1mdWxsLXNjcmVlbi1jb250YWluZXInKTtcbiAgICBlbHNlIHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdheC1mdWxsLXNjcmVlbi1jb250YWluZXInKTtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbi5zZXQoIXRoaXMuaXNGdWxsU2NyZWVuKCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlZnJlc2goYXBwb2ludG1lbnRzPzogQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdKSB7XG4gICAgaWYgKGFwcG9pbnRtZW50cykge1xuICAgICAgY29uc3QgbmV3QXBwb2ludG1lbnRzID0gdGhpcy5fYXBwb2ludG1lbnRzKCkubWFwKChhcHB0KSA9PiB7XG4gICAgICAgIHJldHVybiBhcHBvaW50bWVudHMuZmluZCgoYSkgPT4gYS5pZCA9PT0gYXBwdC5pZCkgPz8gYXBwdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChuZXdBcHBvaW50bWVudHMpO1xuICAgICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVNvdXJjZSgpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudExvYWRlcjtcbiAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICBlbmQ6IHRoaXMucmFuZ2UoKS5lbmQsXG4gICAgICAgIGZyb206IHRoaXMucmFuZ2UoKS5mcm9tLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBmdW5jKHsgcmFuZ2UgfSk7XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobGlzdCk7XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWNvbnRhaW5lclwiPlxuICBAaWYgKGhhc0hlYWRlcigpKSB7XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF0ZVwiPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cInByZXZDbGljaygpXCI+XG4gICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC10ZXh0LXhsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1sZWZ0JzogIXJ0bCgpLFxuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLXJpZ2h0JzogcnRsKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiBbdGV4dF09XCJjdXJyZW50RGF0ZVRleHQoKVwiICNkYXRlPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cIm5leHRDbGljaygpXCI+XG4gICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC10ZXh0LXhsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1yaWdodCc6ICFydGwoKSxcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1sZWZ0JzogcnRsKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJkYXRlXCIgI2NhbGVuZGFyUG9wb3Zlcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lXCI+XG4gICAgICAgICAgICA8YXgtY2FsZW5kYXJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgICAgICBbZGVwdGhdPVwiY2FsZW5kYXJEZXB0aCgpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJjYWxlbmRhckRhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgPjwvYXgtY2FsZW5kYXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hY3Rpb25zXCI+XG4gICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgW2Ryb3Bkb3duV2lkdGhdPVwiMjAwXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFZpZXcoKVwiXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwidmlld3NEYXRhU291cmNlKClcIlxuICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJ2aWV3Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYXgtc2VsZWN0LWJveD5cblxuICAgICAgICBAaWYgKGFsbG93RnVsbFNjcmVlbigpKSB7XG4gICAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiAob25DbGljayk9XCJoYW5kbGVGdWxsU2NyZWVuKClcIj5cbiAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEtc29saWQgZmEtZXhwYW5kXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdmYS1jb21wcmVzcyc6IGlzRnVsbFNjcmVlbigpLCAnZmEtZXhwYW5kJzogIWlzRnVsbFNjcmVlbigpIH1cIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXZpZXdzLWNvbnRhaW5lclwiPlxuICAgIEBzd2l0Y2ggKHNlbGVjdGVkVmlldygpKSB7XG4gICAgICBAY2FzZSAoJ2RheScpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci1kYXktdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgICBbc3RhcnREYXlIb3VyXT1cInN0YXJ0RGF5SG91cigpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgIChvbkFjdGlvbkNsaWNrSW50ZXJuYWwpPVwib25BY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID48L2F4LXNjaGVkdWxlci1kYXktdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnd2VlaycpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci13ZWVrLXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+PC9heC1zY2hlZHVsZXItd2Vlay12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdtb250aCcpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci1tb250aC12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2hhc0FjdGlvbnNdPVwiaGFzQWN0aW9ucygpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+PC9heC1zY2hlZHVsZXItbW9udGgtdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgndGltZWxpbmUtZGF5Jykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgndGltZWxpbmUtbXVsdGktZGF5Jykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW2RheXNDb3VudF09XCJtdWx0aURheVZpZXdEYXlzQ291bnQoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgndGltZWxpbmUtbW9udGgnKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2FnZW5kYScpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci1hZ2VuZGEtdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3PlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { AXSchedulerComponent } from './scheduler.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [\n AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n];\nexport class AXSchedulerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, imports: [AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent], exports: [AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, imports: [COMPONENT] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUUxRixNQUFNLFNBQVMsR0FBRztJQUNoQixvQkFBb0I7SUFDcEIsMkJBQTJCO0lBQzNCLDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsbUNBQW1DO0NBQ3BDLENBQUM7QUFPRixNQUFNLE9BQU8saUJBQWlCOzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixZQVo1QixvQkFBb0I7WUFDcEIsMkJBQTJCO1lBQzNCLDRCQUE0QjtZQUM1Qiw2QkFBNkI7WUFDN0IsbUNBQW1DLGFBSm5DLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0IsNEJBQTRCO1lBQzVCLDZCQUE2QjtZQUM3QixtQ0FBbUM7K0dBUXhCLGlCQUFpQixZQUpmLFNBQVM7OzJGQUlYLGlCQUFpQjtrQkFMN0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVCA9IFtcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogWy4uLkNPTVBPTkVOVF0sXG4gIGV4cG9ydHM6IFsuLi5DT01QT05FTlRdLFxuICBwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlck1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2Fjb3JleC1jb21wb25lbnRzLXNjaGVkdWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"acorex-components-scheduler.mjs","sources":["../tmp-esm2022/scheduler/lib/scheduler.service.js","../tmp-esm2022/scheduler/lib/views/agenda/scheduler-agenda-view.component.js","../tmp-esm2022/scheduler/lib/views/day/scheduler-day-view.component.js","../tmp-esm2022/scheduler/lib/views/month/scheduler-month-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-day/scheduler-timeline-day-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-month/scheduler-timeline-month-view.component.js","../tmp-esm2022/scheduler/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.js","../tmp-esm2022/scheduler/lib/views/week/scheduler-week-view.component.js","../tmp-esm2022/scheduler/lib/scheduler.component.js","../tmp-esm2022/scheduler/lib/scheduler.module.js","../tmp-esm2022/scheduler/acorex-components-scheduler.js"],"sourcesContent":["import { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerService {\n constructor() {\n this.formatService = inject(AXFormatService);\n this.calendarService = inject(AXCalendarService);\n this.HOURS_PER_DAY = 24;\n this.MINUTES_PER_HOUR = 60;\n this.BLOCK_DURATION_MINUTES = 30;\n this.MILLISECONDS_PER_MINUTE = 60 * 1000;\n this.MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;\n }\n /**\n * Checks if two appointments overlap in time.\n */\n doAppointmentsOverlap(appointmentA, appointmentB) {\n if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {\n return false;\n }\n const startA = appointmentA.startDate.getTime();\n const endA = appointmentA.endDate.getTime();\n const startB = appointmentB.startDate.getTime();\n const endB = appointmentB.endDate.getTime();\n // Uses strict overlap check (change < / > to <= / >= if touching boundaries count)\n return startA < endB && endA > startB;\n }\n /**\n * Calculates appointment duration in minutes.\n */\n calculateDurationInMinutes(Appointment) {\n if (!Appointment?.startDate || !Appointment.endDate)\n return 0;\n const durationMillis = Appointment.endDate.getTime() - Appointment.startDate.getTime();\n return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);\n }\n /**\n * Calculates appointment duration in blocks (default 30 min).\n */\n calculateDurationInBlocks(appointment) {\n const durationMinutes = this.calculateDurationInMinutes(appointment);\n return Math.ceil(durationMinutes / this.BLOCK_DURATION_MINUTES);\n }\n /**\n * Gets the day index (relative to view start) and block index (relative to start hour)\n * for a given date time within the view context. Returns null if outside view.\n */\n getBlockIdentifier(dateTime, viewStartDate, startHour, endHour, // Exclusive end hour\n viewTotalDays = 1) {\n if (!viewStartDate || !dateTime || typeof startHour !== 'number' || typeof endHour !== 'number') {\n return null;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Calculate exclusive end date\n // Check if dateTime is within the view's date and time range\n if (dateTime.compare(viewStartDate, 'day') < 0 ||\n dateTime.compare(viewEndDate, 'day') >= 0 || // Check against exclusive end date\n dateTime.hour < startHour ||\n dateTime.hour >= endHour // Check against exclusive end hour\n ) {\n return null;\n }\n // Calculate day index relative to view start\n const dayIndex = Math.floor((dateTime.date.getTime() - viewStartDate.date.getTime()) / this.MILLISECONDS_PER_DAY);\n // Ensure dayIndex is valid for the view duration\n if (dayIndex < 0 || dayIndex >= viewTotalDays) {\n return null;\n }\n const minutesIntoDay = dateTime.hour * this.MINUTES_PER_HOUR + dateTime.minute;\n const minutesIntoViewHours = minutesIntoDay - startHour * this.MINUTES_PER_HOUR;\n // This check should be redundant due to initial hour check, but safe to keep\n if (minutesIntoViewHours < 0)\n return null;\n const blockIndex = Math.floor(minutesIntoViewHours / this.BLOCK_DURATION_MINUTES);\n return { dayIndex, blockIndex };\n }\n /**\n * Groups appointments by the blocks they are ACTIVE in for a given view.\n * @param viewTotalDays - Number of days in the current view (1 for Day, 7 for Week, etc.)\n */\n calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, viewTotalDays) {\n const blocks = {};\n if (!viewStartDate || typeof startHour !== 'number' || typeof endHour !== 'number' || viewTotalDays <= 0) {\n return blocks;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Exclusive end date\n // Calculate total blocks based on consistent block duration\n const totalBlocksPerDay = Math.max(0, (endHour - startHour) * (this.MINUTES_PER_HOUR / this.BLOCK_DURATION_MINUTES));\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id)\n return;\n const appointmentEndDate = this.calendarService.create(appointment.endDate);\n const appointmentStartDate = this.calendarService.create(appointment.startDate);\n // Clamp appointment start/end times to the view boundaries (days and hours)\n let effectiveStart = appointmentStartDate.compare(viewStartDate) < 0 ? viewStartDate : appointmentStartDate;\n if (effectiveStart.hour < startHour)\n effectiveStart = effectiveStart.set('hour', startHour).startOf('hour');\n let effectiveEnd = appointmentEndDate.compare(viewEndDate) >= 0 ? viewEndDate : appointmentEndDate;\n if (effectiveEnd.hour >= endHour) {\n const endDayBase = effectiveEnd.compare(viewEndDate) >= 0 ? viewEndDate.add('day', -1) : effectiveEnd;\n effectiveEnd = endDayBase.set('hour', endHour).startOf('hour');\n }\n // Get start block info using the specified viewTotalDays\n const startInfo = this.getBlockIdentifier(effectiveStart, viewStartDate, startHour, endHour, viewTotalDays);\n if (!startInfo)\n return; // Appointment starts completely outside view\n // Get end block info (last block occupied) using the specified viewTotalDays\n const timeBeforeEnd = effectiveEnd.add('minute', -1);\n const endInfo = this.getBlockIdentifier(timeBeforeEnd, viewStartDate, startHour, endHour, viewTotalDays);\n // If endInfo is null, it means the appointment ends before the viewable part starts,\n // or exactly at the start, so it occupies no blocks. Handle this case.\n if (!endInfo ||\n endInfo.dayIndex < startInfo.dayIndex ||\n (endInfo.dayIndex === startInfo.dayIndex && endInfo.blockIndex < startInfo.blockIndex)) {\n return; // Appointment effectively has no duration within the viewable blocks\n }\n // Iterate through the days and blocks the appointment spans within the view\n for (let dIdx = startInfo.dayIndex; dIdx <= endInfo.dayIndex; dIdx++) {\n // Clamp day index just in case (should be handled by getBlockIdentifier checks)\n if (dIdx < 0 || dIdx >= viewTotalDays)\n continue;\n const startBlock = dIdx === startInfo.dayIndex ? startInfo.blockIndex : 0;\n // Make sure endBlock doesn't exceed the calculated totalBlocksPerDay\n const endBlock = dIdx === endInfo.dayIndex ? endInfo.blockIndex : totalBlocksPerDay - 1;\n if (!blocks[dIdx])\n blocks[dIdx] = {};\n for (let bIdx = startBlock; bIdx <= endBlock; bIdx++) {\n // Final check for block index validity\n if (bIdx >= 0 && bIdx < totalBlocksPerDay) {\n if (!blocks[dIdx][bIdx])\n blocks[dIdx][bIdx] = [];\n // Avoid duplicates if the same appointment is processed multiple times (shouldn't happen with outer loop)\n if (!blocks[dIdx][bIdx].some((e) => e.id === appointment.id)) {\n blocks[dIdx][bIdx].push(appointment);\n }\n }\n }\n }\n });\n return blocks;\n }\n /**\n * Calculates max concurrency and effective total columns for Day View appointments.\n */\n calculateDayViewConcurrencyInfo(singleDayAppointments, // These are segments for the current day\n viewStartDate, startHour, endHour) {\n const resultInfo = new Map();\n if (singleDayAppointments.length === 0)\n return resultInfo;\n const activeAppointmentsMap = this.calculateActiveAppointmentsInBlock(singleDayAppointments, viewStartDate, startHour, endHour, 1);\n const blocks = activeAppointmentsMap[0] ?? {};\n // 1. Calculate initial maxConcurrency for each appointment segment\n const maxConcurrencyMap = new Map();\n singleDayAppointments.forEach((segment) => {\n let maxOverlapInSegmentBlocks = 0;\n const segmentStartMinutes = segment.startDate.getHours() * this.MINUTES_PER_HOUR + segment.startDate.getMinutes();\n const segmentEndMinutes = segment.endDate.getHours() * this.MINUTES_PER_HOUR + segment.endDate.getMinutes();\n // Determine blocks this segment occupies relative to view's startHour\n const viewRelativeStartMinutes = Math.max(0, segmentStartMinutes - startHour * this.MINUTES_PER_HOUR);\n const viewRelativeEndMinutes = Math.min((endHour - startHour) * this.MINUTES_PER_HOUR, segmentEndMinutes - startHour * this.MINUTES_PER_HOUR);\n const firstBlockIndex = Math.floor(viewRelativeStartMinutes / this.BLOCK_DURATION_MINUTES);\n const lastBlockIndex = Math.floor((viewRelativeEndMinutes - 1) / this.BLOCK_DURATION_MINUTES); // -1 because end is exclusive for block counting\n for (let blockIdx = firstBlockIndex; blockIdx <= lastBlockIndex; blockIdx++) {\n const appointmentsInBlock = blocks[blockIdx];\n if (appointmentsInBlock) {\n maxOverlapInSegmentBlocks = Math.max(maxOverlapInSegmentBlocks, appointmentsInBlock.length);\n }\n }\n maxConcurrencyMap.set(segment.id, maxOverlapInSegmentBlocks || 1);\n });\n // 2. Iteratively determine effectiveTotalColumns for groups of overlapping appointments\n const initialEffectiveTotalColumns = new Map();\n singleDayAppointments.forEach((segment) => {\n initialEffectiveTotalColumns.set(segment.id, maxConcurrencyMap.get(segment.id) || 1);\n });\n let changed = true;\n while (changed) {\n changed = false;\n singleDayAppointments.forEach((segmentA) => {\n singleDayAppointments.forEach((segmentB) => {\n if (segmentA.id === segmentB.id)\n return;\n if (this.doAppointmentsOverlap(segmentA, segmentB)) {\n const etcA = initialEffectiveTotalColumns.get(segmentA.id) || 1;\n const etcB = initialEffectiveTotalColumns.get(segmentB.id) || 1;\n const maxETC = Math.max(etcA, etcB);\n if (etcA !== maxETC) {\n initialEffectiveTotalColumns.set(segmentA.id, maxETC);\n changed = true;\n }\n if (etcB !== maxETC) {\n initialEffectiveTotalColumns.set(segmentB.id, maxETC);\n changed = true;\n }\n }\n });\n });\n }\n // Populate final result\n singleDayAppointments.forEach((segment) => {\n resultInfo.set(segment.id, {\n maxConcurrency: maxConcurrencyMap.get(segment.id) || 1,\n effectiveTotalColumns: initialEffectiveTotalColumns.get(segment.id) || 1,\n });\n });\n return resultInfo;\n }\n /**\n * Groups appointments by the block they START in for Week View.\n */\n calculateWeekViewAppointmentsByStartBlock(singleDayAppointments, viewStartDate, startHour, endHour) {\n const blocks = {};\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate)\n return;\n const startInfo = this.getBlockIdentifier(this.calendarService.create(appointment.startDate), viewStartDate, startHour, endHour, 7);\n if (startInfo) {\n const { dayIndex, blockIndex } = startInfo;\n if (!blocks[dayIndex])\n blocks[dayIndex] = {};\n if (!blocks[dayIndex][blockIndex])\n blocks[dayIndex][blockIndex] = [];\n blocks[dayIndex][blockIndex].push(appointment);\n }\n });\n return blocks;\n }\n /**\n * Groups appointments by the day(s) they occur on within a given date range.\n * Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.\n */\n groupAppointmentsByDay(appointments, viewStartDate, // First day visible in the grid\n viewEndDate) {\n const groupedAppointments = new Map();\n if (!appointments || appointments.length === 0 || !viewStartDate || !viewEndDate) {\n return groupedAppointments;\n }\n // Pre-calculate the end date for comparison (exclusive)\n const exclusiveViewEndDate = viewEndDate.add('day', 1);\n appointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id)\n return;\n // Determine the effective start and end dates of the appointment clamped by the view range\n const appointmentStart = this.calendarService.create(appointment.startDate);\n const appointmentEnd = this.calendarService.create(appointment.endDate);\n // Skip if appointment ends before the view starts or starts after the view ends\n if (appointmentEnd.compare(viewStartDate, 'day') < 0 ||\n appointmentStart.compare(exclusiveViewEndDate, 'day') >= 0) {\n return;\n }\n // Clamp start date to the view start date\n let currentDay = appointmentStart.compare(viewStartDate, 'day') < 0 ? viewStartDate : appointmentStart.startOf('day');\n // Loop through each day the appointment spans within the view range\n let safeCount = 0; // Prevent infinite loops\n while (currentDay.compare(appointmentEnd, 'day') <= 0 &&\n currentDay.compare(exclusiveViewEndDate, 'day') < 0 &&\n safeCount < 100) {\n const dateString = this.formatService.format(currentDay, 'datetime', { format: 'YYYY-MM-DD' }); // Use a consistent key format\n if (!groupedAppointments.has(dateString)) {\n groupedAppointments.set(dateString, []);\n }\n // Add the appointment if it's not already in the list for that day\n if (!groupedAppointments.get(dateString).some((e) => e.id === appointment.id)) {\n groupedAppointments.get(dateString).push(appointment);\n }\n currentDay = currentDay.add('day', 1);\n safeCount++;\n }\n if (safeCount >= 100) {\n console.warn('Safety break hit in groupAppointmentsByDay loop for appointment:', appointment.id);\n }\n });\n return groupedAppointments;\n }\n getDayOfWeekNumber(dayName) {\n switch (dayName) {\n case 'sunday':\n return 1;\n case 'monday':\n return 2;\n case 'tuesday':\n return 3;\n case 'wednesday':\n return 4;\n case 'thursday':\n return 5;\n case 'friday':\n return 6;\n case 'saturday':\n return 7;\n default:\n console.warn(`Invalid day name: ${dayName}. Defaulting to Sunday (1).`);\n return 1;\n }\n }\n getSlotData(startDate, view) {\n let endDate;\n switch (view) {\n case 'day':\n case 'week':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES);\n break;\n case 'timeline-day':\n case 'timeline-multi-day':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES * 2);\n break;\n case 'month':\n case 'agenda':\n case 'timeline-month':\n startDate = startDate.startOf('day');\n endDate = startDate.endOf('day');\n break;\n }\n return { startDate, endDate, view };\n }\n handleEvent(event, eventOutputMap, eventType) {\n const mouseEvent = event.nativeEvent;\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n if (eventType === 'appointment') {\n const appointmentOutputMap = eventOutputMap[eventType];\n const emitter = appointmentOutputMap[mouseEvent.type];\n if (emitter)\n emitter.emit(event);\n }\n if (eventType === 'slot') {\n const slotOutputMap = eventOutputMap[eventType];\n const emitter = slotOutputMap[mouseEvent.type];\n if (emitter)\n emitter.emit(event);\n }\n }\n // --- Timeline Specific Helpers ---\n calculateTimelineLayout(\n // `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView\n appt, viewStartHour, // e.g., 8 for 8 AM\n viewEndHour) {\n if (!appt?.startDate ||\n !appt.endDate ||\n typeof viewStartHour !== 'number' ||\n typeof viewEndHour !== 'number' ||\n viewStartHour >= viewEndHour // Basic sanity check\n ) {\n console.warn('calculateTimelineLayout: Invalid input', { appt, viewStartHour, viewEndHour });\n return null;\n }\n const totalViewDurationMinutes = (viewEndHour - viewStartHour) * 60;\n if (totalViewDurationMinutes <= 0)\n return null; // No viewable duration\n // Segment's start and end times (these are already clipped to the day by getClonedAppointmentSegmentOnDay)\n const segmentStart = appt.startDate;\n const segmentEnd = appt.endDate;\n // --- Calculate Start Position (left) ---\n // Effective start of the segment within the view's hours for THIS day\n let effectiveSegmentStartMinutesInDay = segmentStart.getHours() * 60 + segmentStart.getMinutes();\n // Clamp to viewStartHour for calculation if segment starts before viewable hours (shouldn't happen if segmenter worked)\n effectiveSegmentStartMinutesInDay = Math.max(effectiveSegmentStartMinutesInDay, viewStartHour * 60);\n // Clamp to viewEndHour for calculation if segment starts after viewable hours (shouldn't happen)\n effectiveSegmentStartMinutesInDay = Math.min(effectiveSegmentStartMinutesInDay, viewEndHour * 60);\n const minutesFromViewStartToSegmentStart = effectiveSegmentStartMinutesInDay - viewStartHour * 60;\n // If segment effectively starts before the viewable part (after clamping), it means it's not visible or starts at 0%\n if (minutesFromViewStartToSegmentStart < 0 &&\n Math.abs(minutesFromViewStartToSegmentStart) > 1e-6 /*epsilon for float issues*/) {\n // This case should ideally be caught by the segmenter or initial overlap checks.\n // If it happens, treat as starting at 0% but it might mean no visible part.\n }\n const leftPercentage = (Math.max(0, minutesFromViewStartToSegmentStart) / totalViewDurationMinutes) * 100;\n // --- Calculate Duration and Width ---\n // Effective end of the segment within the view's hours for THIS day\n let effectiveSegmentEndMinutesInDay = segmentEnd.getHours() * 60 + segmentEnd.getMinutes();\n if (segmentEnd.getHours() === 0 && segmentEnd.getMinutes() === 0 && segmentEnd.getTime() > segmentStart.getTime()) {\n // If segment ends exactly at midnight (00:00 of next day, meaning it filled up to 24:00 of current day)\n effectiveSegmentEndMinutesInDay = 24 * 60;\n }\n // Clamp to viewEndHour for calculation\n effectiveSegmentEndMinutesInDay = Math.min(effectiveSegmentEndMinutesInDay, viewEndHour * 60);\n // Clamp to viewStartHour for calculation (if segment ends before view starts)\n effectiveSegmentEndMinutesInDay = Math.max(effectiveSegmentEndMinutesInDay, viewStartHour * 60);\n const segmentDurationMinutesInView = Math.max(0, effectiveSegmentEndMinutesInDay - effectiveSegmentStartMinutesInDay);\n if (segmentDurationMinutesInView <= 0) {\n // Segment has no visible duration within the timeline hours\n return null;\n }\n const widthPercentage = (segmentDurationMinutesInView / totalViewDurationMinutes) * 100;\n // Ensure percentages are valid\n if (leftPercentage > 100 ||\n leftPercentage < 0 ||\n widthPercentage <= 0 ||\n widthPercentage > 100 ||\n leftPercentage + widthPercentage > 100.0001 /*allow for float errors*/) {\n // This might indicate an issue with date clamping or logic.\n // For now, if it results in an invalid layout, return null.\n // console.warn(\"Timeline layout calculation resulted in out-of-bounds percentages:\",\n // {leftPercentage, widthPercentage, segmentStart, segmentEnd, viewStartHour, viewEndHour});\n // A common case for (left + width > 100) is if an event ends *exactly* at viewEndHour,\n // and viewEndHour itself is the boundary.\n // Let's be a bit tolerant here if width is positive.\n if (widthPercentage <= 0)\n return null;\n }\n return {\n left: `${Math.max(0, Math.min(100, leftPercentage))}%`,\n width: `${Math.max(0, Math.min(100, widthPercentage))}%`,\n };\n }\n /**\n * Calculates the visible segment of a timed appointment on a specific day,\n * constrained by the view's start and end hours.\n * Returns a new appointment-like object representing the segment.\n */\n getClonedAppointmentSegmentOnDay(appointment, // This is the ORIGINAL appointment\n day, viewStartHour, viewEndHour, isFullDayCellContext = false) {\n if (!appointment || !appointment.startDate || !appointment.endDate) {\n return null;\n }\n const appointmentStartDate = this.calendarService.create(appointment.startDate);\n const appointmentEndDate = this.calendarService.create(appointment.endDate);\n if (appointment.allDay) {\n const dayStartOf = day.clone().startOf('day');\n if (appointmentStartDate.startOf('day').equal(dayStartOf, 'day')) {\n return {\n ...appointment,\n startDate: dayStartOf.date,\n endDate: dayStartOf.clone().add('day', 1).startOf('day').date,\n allDay: true,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay: false,\n isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n }\n else if (appointmentStartDate.startOf('day').compare(dayStartOf, 'day') < 0 &&\n appointmentEndDate.startOf('day').compare(dayStartOf, 'day') >= 0) {\n return {\n ...appointment,\n startDate: dayStartOf.date,\n endDate: dayStartOf.clone().add('day', 1).startOf('day').date,\n allDay: true,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay: true,\n isContinuationToNextDay: appointmentEndDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n }\n else {\n return null;\n }\n }\n const dayStartBoundary = isFullDayCellContext\n ? day.clone().startOf('day')\n : day.clone().set('hour', viewStartHour).startOf('hour');\n const dayEndBoundary = isFullDayCellContext\n ? day.clone().add('day', 1).startOf('day')\n : viewEndHour === 24 || (viewEndHour === 0 && viewStartHour === 0)\n ? day.clone().add('day', 1).startOf('day')\n : day.clone().set('hour', viewEndHour).startOf('hour');\n if (appointmentEndDate.compare(dayStartBoundary, 'second') <= 0 ||\n appointmentStartDate.compare(dayEndBoundary, 'second') >= 0) {\n return null;\n }\n const segmentStartDate = appointmentStartDate.compare(dayStartBoundary, 'second') > 0 ? appointmentStartDate : dayStartBoundary;\n const segmentEndDate = appointmentEndDate.compare(dayEndBoundary, 'second') < 0 ? appointmentEndDate : dayEndBoundary;\n if (segmentStartDate.compare(segmentEndDate, 'second') >= 0) {\n return null;\n }\n const isContinuationFromPreviousDay = appointmentStartDate.compare(segmentStartDate, 'second') < 0;\n const isContinuationToNextDay = appointmentEndDate.compare(segmentEndDate, 'second') > 0;\n const duration = appointmentStartDate.duration(appointmentEndDate);\n return {\n ...appointment,\n startDate: segmentStartDate.date,\n endDate: segmentEndDate.date,\n allDay: appointment.allDay || duration.total.miliseconds >= 24 * 60 * 60 * 1000 - 1,\n originalStartDate: appointmentStartDate.date,\n originalEndDate: appointmentEndDate.date,\n isContinuationFromPreviousDay,\n isContinuationToNextDay,\n originalAppointmentRef: appointment,\n };\n }\n getOriginalAppointment(item) {\n const segment = item;\n if (segment.originalAppointmentRef) {\n return segment.originalAppointmentRef;\n }\n return item;\n }\n isHoliday(date) {\n return this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n }\n isWeekend(date, calendar) {\n const weekend = this.calendarService.resolveCalendar(calendar).weekend;\n return weekend.includes(date.dayOfWeek - 1);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root', // Provide service application-wide\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3NjaGVkdWxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFlbkQsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUlVLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFM0Msa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUM1Qiw0QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLHlCQUFvQixHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztLQXNtQjNHO0lBcG1CQzs7T0FFRztJQUNILHFCQUFxQixDQUFDLFlBQW9DLEVBQUUsWUFBb0M7UUFDOUYsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzRyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFB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SSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFnQixFQUFFLFFBQWdCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN2RSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDOzhHQTdtQlUsa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNLEVBQUUsbUNBQW1DO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhEYXlPZldlZWtOYW1lLFxuICBBWFNjaGVkdWxlckFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2ssXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJCbG9ja0lkZW50aWZpZXIsXG4gIEFYU2NoZWR1bGVyVmlldyxcbn0gZnJvbSAnLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfSBmcm9tICcuL3NjaGVkdWxlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JywgLy8gUHJvdmlkZSBzZXJ2aWNlIGFwcGxpY2F0aW9uLXdpZGVcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBIT1VSU19QRVJfREFZID0gMjQ7XG4gIHJlYWRvbmx5IE1JTlVURVNfUEVSX0hPVVIgPSA2MDtcbiAgcmVhZG9ubHkgQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyA9IDMwO1xuICByZWFkb25seSBNSUxMSVNFQ09ORFNfUEVSX01JTlVURSA9IDYwICogMTAwMDtcbiAgcmVhZG9ubHkgTUlMTElTRUNPTkRTX1BFUl9EQVkgPSB0aGlzLkhPVVJTX1BFUl9EQVkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKiB0aGlzLk1JTExJU0VDT05EU19QRVJfTUlOVVRFO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdHdvIGFwcG9pbnRtZW50cyBvdmVybGFwIGluIHRpbWUuXG4gICAqL1xuICBkb0FwcG9pbnRtZW50c092ZXJsYXAoYXBwb2ludG1lbnRBOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBhcHBvaW50bWVudEI6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIWFwcG9pbnRtZW50QT8uc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudEEuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnRCPy5zdGFydERhdGUgfHwgIWFwcG9pbnRtZW50Qi5lbmREYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0QSA9IGFwcG9pbnRtZW50QS5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZEEgPSBhcHBvaW50bWVudEEuZW5kRGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3Qgc3RhcnRCID0gYXBwb2ludG1lbnRCLnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZW5kQiA9IGFwcG9pbnRtZW50Qi5lbmREYXRlLmdldFRpbWUoKTtcbiAgICAvLyBVc2VzIHN0cmljdCBvdmVybGFwIGNoZWNrIChjaGFuZ2UgPCAvID4gdG8gPD0gLyA+PSBpZiB0b3VjaGluZyBib3VuZGFyaWVzIGNvdW50KVxuICAgIHJldHVybiBzdGFydEEgPCBlbmRCICYmIGVuZEEgPiBzdGFydEI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhcHBvaW50bWVudCBkdXJhdGlvbiBpbiBtaW51dGVzLlxuICAgKi9cbiAgY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoQXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBudW1iZXIge1xuICAgIGlmICghQXBwb2ludG1lbnQ/LnN0YXJ0RGF0ZSB8fCAhQXBwb2ludG1lbnQuZW5kRGF0ZSkgcmV0dXJuIDA7XG4gICAgY29uc3QgZHVyYXRpb25NaWxsaXMgPSBBcHBvaW50bWVudC5lbmREYXRlLmdldFRpbWUoKSAtIEFwcG9pbnRtZW50LnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGR1cmF0aW9uTWlsbGlzIC8gdGhpcy5NSUxMSVNFQ09ORFNfUEVSX01JTlVURSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhcHBvaW50bWVudCBkdXJhdGlvbiBpbiBibG9ja3MgKGRlZmF1bHQgMzAgbWluKS5cbiAgICovXG4gIGNhbGN1bGF0ZUR1cmF0aW9uSW5CbG9ja3MoYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiBudW1iZXIge1xuICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IHRoaXMuY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoYXBwb2ludG1lbnQpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoZHVyYXRpb25NaW51dGVzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkYXkgaW5kZXggKHJlbGF0aXZlIHRvIHZpZXcgc3RhcnQpIGFuZCBibG9jayBpbmRleCAocmVsYXRpdmUgdG8gc3RhcnQgaG91cilcbiAgICogZm9yIGEgZ2l2ZW4gZGF0ZSB0aW1lIHdpdGhpbiB0aGUgdmlldyBjb250ZXh0LiBSZXR1cm5zIG51bGwgaWYgb3V0c2lkZSB2aWV3LlxuICAgKi9cbiAgZ2V0QmxvY2tJZGVudGlmaWVyKFxuICAgIGRhdGVUaW1lOiBBWERhdGVUaW1lLFxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLCAvLyBFeGNsdXNpdmUgZW5kIGhvdXJcbiAgICB2aWV3VG90YWxEYXlzID0gMSwgLy8gRGVmYXVsdCB0byAxIGZvciBkYXkgdmlld1xuICApOiBBWFNjaGVkdWxlckJsb2NrSWRlbnRpZmllciB8IG51bGwge1xuICAgIGlmICghdmlld1N0YXJ0RGF0ZSB8fCAhZGF0ZVRpbWUgfHwgdHlwZW9mIHN0YXJ0SG91ciAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEhvdXIgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgdmlld0VuZERhdGUgPSB2aWV3U3RhcnREYXRlLmFkZCgnZGF5Jywgdmlld1RvdGFsRGF5cyk7IC8vIENhbGN1bGF0ZSBleGNsdXNpdmUgZW5kIGRhdGVcblxuICAgIC8vIENoZWNrIGlmIGRhdGVUaW1lIGlzIHdpdGhpbiB0aGUgdmlldydzIGRhdGUgYW5kIHRpbWUgcmFuZ2VcbiAgICBpZiAoXG4gICAgICBkYXRlVGltZS5jb21wYXJlKHZpZXdTdGFydERhdGUsICdkYXknKSA8IDAgfHxcbiAgICAgIGRhdGVUaW1lLmNvbXBhcmUodmlld0VuZERhdGUsICdkYXknKSA+PSAwIHx8IC8vIENoZWNrIGFnYWluc3QgZXhjbHVzaXZlIGVuZCBkYXRlXG4gICAgICBkYXRlVGltZS5ob3VyIDwgc3RhcnRIb3VyIHx8XG4gICAgICBkYXRlVGltZS5ob3VyID49IGVuZEhvdXIgLy8gQ2hlY2sgYWdhaW5zdCBleGNsdXNpdmUgZW5kIGhvdXJcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBkYXkgaW5kZXggcmVsYXRpdmUgdG8gdmlldyBzdGFydFxuICAgIGNvbnN0IGRheUluZGV4ID0gTWF0aC5mbG9vcigoZGF0ZVRpbWUuZGF0ZS5nZXRUaW1lKCkgLSB2aWV3U3RhcnREYXRlLmRhdGUuZ2V0VGltZSgpKSAvIHRoaXMuTUlMTElTRUNPTkRTX1BFUl9EQVkpO1xuXG4gICAgLy8gRW5zdXJlIGRheUluZGV4IGlzIHZhbGlkIGZvciB0aGUgdmlldyBkdXJhdGlvblxuICAgIGlmIChkYXlJbmRleCA8IDAgfHwgZGF5SW5kZXggPj0gdmlld1RvdGFsRGF5cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWludXRlc0ludG9EYXkgPSBkYXRlVGltZS5ob3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSICsgZGF0ZVRpbWUubWludXRlO1xuICAgIGNvbnN0IG1pbnV0ZXNJbnRvVmlld0hvdXJzID0gbWludXRlc0ludG9EYXkgLSBzdGFydEhvdXIgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVI7XG5cbiAgICAvLyBUaGlzIGNoZWNrIHNob3VsZCBiZSByZWR1bmRhbnQgZHVlIHRvIGluaXRpYWwgaG91ciBjaGVjaywgYnV0IHNhZmUgdG8ga2VlcFxuICAgIGlmIChtaW51dGVzSW50b1ZpZXdIb3VycyA8IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgYmxvY2tJbmRleCA9IE1hdGguZmxvb3IobWludXRlc0ludG9WaWV3SG91cnMgLyB0aGlzLkJMT0NLX0RVUkFUSU9OX01JTlVURVMpO1xuXG4gICAgcmV0dXJuIHsgZGF5SW5kZXgsIGJsb2NrSW5kZXggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYXBwb2ludG1lbnRzIGJ5IHRoZSBibG9ja3MgdGhleSBhcmUgQUNUSVZFIGluIGZvciBhIGdpdmVuIHZpZXcuXG4gICAqIEBwYXJhbSB2aWV3VG90YWxEYXlzIC0gTnVtYmVyIG9mIGRheXMgaW4gdGhlIGN1cnJlbnQgdmlldyAoMSBmb3IgRGF5LCA3IGZvciBXZWVrLCBldGMuKVxuICAgKi9cbiAgY2FsY3VsYXRlQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayhcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICBzdGFydEhvdXI6IG51bWJlcixcbiAgICBlbmRIb3VyOiBudW1iZXIsXG4gICAgdmlld1RvdGFsRGF5czogbnVtYmVyLCAvLyBOb3cgcmVxdWlyZWRcbiAgKTogQVhTY2hlZHVsZXJBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrIHtcbiAgICBjb25zdCBibG9ja3M6IEFYU2NoZWR1bGVyQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayA9IHt9O1xuICAgIGlmICghdmlld1N0YXJ0RGF0ZSB8fCB0eXBlb2Ygc3RhcnRIb3VyICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgZW5kSG91ciAhPT0gJ251bWJlcicgfHwgdmlld1RvdGFsRGF5cyA8PSAwKSB7XG4gICAgICByZXR1cm4gYmxvY2tzO1xuICAgIH1cbiAgICBjb25zdCB2aWV3RW5kRGF0ZSA9IHZpZXdTdGFydERhdGUuYWRkKCdkYXknLCB2aWV3VG90YWxEYXlzKTsgLy8gRXhjbHVzaXZlIGVuZCBkYXRlXG4gICAgLy8gQ2FsY3VsYXRlIHRvdGFsIGJsb2NrcyBiYXNlZCBvbiBjb25zaXN0ZW50IGJsb2NrIGR1cmF0aW9uXG4gICAgY29uc3QgdG90YWxCbG9ja3NQZXJEYXkgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICAoZW5kSG91ciAtIHN0YXJ0SG91cikgKiAodGhpcy5NSU5VVEVTX1BFUl9IT1VSIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKSxcbiAgICApO1xuXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcG9pbnRtZW50KSA9PiB7XG4gICAgICBpZiAoIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnQuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnQuaWQpIHJldHVybjtcblxuICAgICAgY29uc3QgYXBwb2ludG1lbnRFbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LmVuZERhdGUpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuc3RhcnREYXRlKTtcblxuICAgICAgLy8gQ2xhbXAgYXBwb2ludG1lbnQgc3RhcnQvZW5kIHRpbWVzIHRvIHRoZSB2aWV3IGJvdW5kYXJpZXMgKGRheXMgYW5kIGhvdXJzKVxuICAgICAgbGV0IGVmZmVjdGl2ZVN0YXJ0ID0gYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZSh2aWV3U3RhcnREYXRlKSA8IDAgPyB2aWV3U3RhcnREYXRlIDogYXBwb2ludG1lbnRTdGFydERhdGU7XG4gICAgICBpZiAoZWZmZWN0aXZlU3RhcnQuaG91ciA8IHN0YXJ0SG91cikgZWZmZWN0aXZlU3RhcnQgPSBlZmZlY3RpdmVTdGFydC5zZXQoJ2hvdXInLCBzdGFydEhvdXIpLnN0YXJ0T2YoJ2hvdXInKTtcblxuICAgICAgbGV0IGVmZmVjdGl2ZUVuZCA9IGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKHZpZXdFbmREYXRlKSA+PSAwID8gdmlld0VuZERhdGUgOiBhcHBvaW50bWVudEVuZERhdGU7XG4gICAgICBpZiAoZWZmZWN0aXZlRW5kLmhvdXIgPj0gZW5kSG91cikge1xuICAgICAgICBjb25zdCBlbmREYXlCYXNlID0gZWZmZWN0aXZlRW5kLmNvbXBhcmUodmlld0VuZERhdGUpID49IDAgPyB2aWV3RW5kRGF0ZS5hZGQoJ2RheScsIC0xKSA6IGVmZmVjdGl2ZUVuZDtcbiAgICAgICAgZWZmZWN0aXZlRW5kID0gZW5kRGF5QmFzZS5zZXQoJ2hvdXInLCBlbmRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBzdGFydCBibG9jayBpbmZvIHVzaW5nIHRoZSBzcGVjaWZpZWQgdmlld1RvdGFsRGF5c1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIoZWZmZWN0aXZlU3RhcnQsIHZpZXdTdGFydERhdGUsIHN0YXJ0SG91ciwgZW5kSG91ciwgdmlld1RvdGFsRGF5cyk7XG4gICAgICBpZiAoIXN0YXJ0SW5mbykgcmV0dXJuOyAvLyBBcHBvaW50bWVudCBzdGFydHMgY29tcGxldGVseSBvdXRzaWRlIHZpZXdcblxuICAgICAgLy8gR2V0IGVuZCBibG9jayBpbmZvIChsYXN0IGJsb2NrIG9jY3VwaWVkKSB1c2luZyB0aGUgc3BlY2lmaWVkIHZpZXdUb3RhbERheXNcbiAgICAgIGNvbnN0IHRpbWVCZWZvcmVFbmQgPSBlZmZlY3RpdmVFbmQuYWRkKCdtaW51dGUnLCAtMSk7XG4gICAgICBjb25zdCBlbmRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIodGltZUJlZm9yZUVuZCwgdmlld1N0YXJ0RGF0ZSwgc3RhcnRIb3VyLCBlbmRIb3VyLCB2aWV3VG90YWxEYXlzKTtcbiAgICAgIC8vIElmIGVuZEluZm8gaXMgbnVsbCwgaXQgbWVhbnMgdGhlIGFwcG9pbnRtZW50IGVuZHMgYmVmb3JlIHRoZSB2aWV3YWJsZSBwYXJ0IHN0YXJ0cyxcbiAgICAgIC8vIG9yIGV4YWN0bHkgYXQgdGhlIHN0YXJ0LCBzbyBpdCBvY2N1cGllcyBubyBibG9ja3MuIEhhbmRsZSB0aGlzIGNhc2UuXG4gICAgICBpZiAoXG4gICAgICAgICFlbmRJbmZvIHx8XG4gICAgICAgIGVuZEluZm8uZGF5SW5kZXggPCBzdGFydEluZm8uZGF5SW5kZXggfHxcbiAgICAgICAgKGVuZEluZm8uZGF5SW5kZXggPT09IHN0YXJ0SW5mby5kYXlJbmRleCAmJiBlbmRJbmZvLmJsb2NrSW5kZXggPCBzdGFydEluZm8uYmxvY2tJbmRleClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47IC8vIEFwcG9pbnRtZW50IGVmZmVjdGl2ZWx5IGhhcyBubyBkdXJhdGlvbiB3aXRoaW4gdGhlIHZpZXdhYmxlIGJsb2Nrc1xuICAgICAgfVxuXG4gICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGRheXMgYW5kIGJsb2NrcyB0aGUgYXBwb2ludG1lbnQgc3BhbnMgd2l0aGluIHRoZSB2aWV3XG4gICAgICBmb3IgKGxldCBkSWR4ID0gc3RhcnRJbmZvLmRheUluZGV4OyBkSWR4IDw9IGVuZEluZm8uZGF5SW5kZXg7IGRJZHgrKykge1xuICAgICAgICAvLyBDbGFtcCBkYXkgaW5kZXgganVzdCBpbiBjYXNlIChzaG91bGQgYmUgaGFuZGxlZCBieSBnZXRCbG9ja0lkZW50aWZpZXIgY2hlY2tzKVxuICAgICAgICBpZiAoZElkeCA8IDAgfHwgZElkeCA+PSB2aWV3VG90YWxEYXlzKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBzdGFydEJsb2NrID0gZElkeCA9PT0gc3RhcnRJbmZvLmRheUluZGV4ID8gc3RhcnRJbmZvLmJsb2NrSW5kZXggOiAwO1xuICAgICAgICAvLyBNYWtlIHN1cmUgZW5kQmxvY2sgZG9lc24ndCBleGNlZWQgdGhlIGNhbGN1bGF0ZWQgdG90YWxCbG9ja3NQZXJEYXlcbiAgICAgICAgY29uc3QgZW5kQmxvY2sgPSBkSWR4ID09PSBlbmRJbmZvLmRheUluZGV4ID8gZW5kSW5mby5ibG9ja0luZGV4IDogdG90YWxCbG9ja3NQZXJEYXkgLSAxO1xuXG4gICAgICAgIGlmICghYmxvY2tzW2RJZHhdKSBibG9ja3NbZElkeF0gPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBiSWR4ID0gc3RhcnRCbG9jazsgYklkeCA8PSBlbmRCbG9jazsgYklkeCsrKSB7XG4gICAgICAgICAgLy8gRmluYWwgY2hlY2sgZm9yIGJsb2NrIGluZGV4IHZhbGlkaXR5XG4gICAgICAgICAgaWYgKGJJZHggPj0gMCAmJiBiSWR4IDwgdG90YWxCbG9ja3NQZXJEYXkpIHtcbiAgICAgICAgICAgIGlmICghYmxvY2tzW2RJZHhdW2JJZHhdKSBibG9ja3NbZElkeF1bYklkeF0gPSBbXTtcbiAgICAgICAgICAgIC8vIEF2b2lkIGR1cGxpY2F0ZXMgaWYgdGhlIHNhbWUgYXBwb2ludG1lbnQgaXMgcHJvY2Vzc2VkIG11bHRpcGxlIHRpbWVzIChzaG91bGRuJ3QgaGFwcGVuIHdpdGggb3V0ZXIgbG9vcClcbiAgICAgICAgICAgIGlmICghYmxvY2tzW2RJZHhdW2JJZHhdLnNvbWUoKGUpID0+IGUuaWQgPT09IGFwcG9pbnRtZW50LmlkKSkge1xuICAgICAgICAgICAgICBibG9ja3NbZElkeF1bYklkeF0ucHVzaChhcHBvaW50bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGJsb2NrcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIG1heCBjb25jdXJyZW5jeSBhbmQgZWZmZWN0aXZlIHRvdGFsIGNvbHVtbnMgZm9yIERheSBWaWV3IGFwcG9pbnRtZW50cy5cbiAgICovXG4gIGNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdLCAvLyBUaGVzZSBhcmUgc2VnbWVudHMgZm9yIHRoZSBjdXJyZW50IGRheVxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLFxuICApOiBNYXA8YW55LCB7IG1heENvbmN1cnJlbmN5OiBudW1iZXI7IGVmZmVjdGl2ZVRvdGFsQ29sdW1uczogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXN1bHRJbmZvID0gbmV3IE1hcDxhbnksIHsgbWF4Q29uY3VycmVuY3k6IG51bWJlcjsgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBudW1iZXIgfT4oKTtcbiAgICBpZiAoc2luZ2xlRGF5QXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdEluZm87XG5cbiAgICBjb25zdCBhY3RpdmVBcHBvaW50bWVudHNNYXAgPSB0aGlzLmNhbGN1bGF0ZUFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soXG4gICAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMsXG4gICAgICB2aWV3U3RhcnREYXRlLFxuICAgICAgc3RhcnRIb3VyLFxuICAgICAgZW5kSG91cixcbiAgICAgIDEsIC8vIERheSB2aWV3XG4gICAgKTtcbiAgICBjb25zdCBibG9ja3MgPSBhY3RpdmVBcHBvaW50bWVudHNNYXBbMF0gPz8ge307XG5cbiAgICAvLyAxLiBDYWxjdWxhdGUgaW5pdGlhbCBtYXhDb25jdXJyZW5jeSBmb3IgZWFjaCBhcHBvaW50bWVudCBzZWdtZW50XG4gICAgY29uc3QgbWF4Q29uY3VycmVuY3lNYXAgPSBuZXcgTWFwPGFueSwgbnVtYmVyPigpO1xuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICBsZXQgbWF4T3ZlcmxhcEluU2VnbWVudEJsb2NrcyA9IDA7XG4gICAgICBjb25zdCBzZWdtZW50U3RhcnRNaW51dGVzID0gc2VnbWVudC5zdGFydERhdGUuZ2V0SG91cnMoKSAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUiArIHNlZ21lbnQuc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRFbmRNaW51dGVzID0gc2VnbWVudC5lbmREYXRlLmdldEhvdXJzKCkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKyBzZWdtZW50LmVuZERhdGUuZ2V0TWludXRlcygpO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgYmxvY2tzIHRoaXMgc2VnbWVudCBvY2N1cGllcyByZWxhdGl2ZSB0byB2aWV3J3Mgc3RhcnRIb3VyXG4gICAgICBjb25zdCB2aWV3UmVsYXRpdmVTdGFydE1pbnV0ZXMgPSBNYXRoLm1heCgwLCBzZWdtZW50U3RhcnRNaW51dGVzIC0gc3RhcnRIb3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSKTtcbiAgICAgIGNvbnN0IHZpZXdSZWxhdGl2ZUVuZE1pbnV0ZXMgPSBNYXRoLm1pbihcbiAgICAgICAgKGVuZEhvdXIgLSBzdGFydEhvdXIpICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSLFxuICAgICAgICBzZWdtZW50RW5kTWludXRlcyAtIHN0YXJ0SG91ciAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGZpcnN0QmxvY2tJbmRleCA9IE1hdGguZmxvb3Iodmlld1JlbGF0aXZlU3RhcnRNaW51dGVzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gTWF0aC5mbG9vcigodmlld1JlbGF0aXZlRW5kTWludXRlcyAtIDEpIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTsgLy8gLTEgYmVjYXVzZSBlbmQgaXMgZXhjbHVzaXZlIGZvciBibG9jayBjb3VudGluZ1xuXG4gICAgICBmb3IgKGxldCBibG9ja0lkeCA9IGZpcnN0QmxvY2tJbmRleDsgYmxvY2tJZHggPD0gbGFzdEJsb2NrSW5kZXg7IGJsb2NrSWR4KyspIHtcbiAgICAgICAgY29uc3QgYXBwb2ludG1lbnRzSW5CbG9jayA9IGJsb2Nrc1tibG9ja0lkeF07XG4gICAgICAgIGlmIChhcHBvaW50bWVudHNJbkJsb2NrKSB7XG4gICAgICAgICAgbWF4T3ZlcmxhcEluU2VnbWVudEJsb2NrcyA9IE1hdGgubWF4KG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MsIGFwcG9pbnRtZW50c0luQmxvY2subGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWF4Q29uY3VycmVuY3lNYXAuc2V0KHNlZ21lbnQuaWQsIG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MgfHwgMSk7XG4gICAgfSk7XG5cbiAgICAvLyAyLiBJdGVyYXRpdmVseSBkZXRlcm1pbmUgZWZmZWN0aXZlVG90YWxDb2x1bW5zIGZvciBncm91cHMgb2Ygb3ZlcmxhcHBpbmcgYXBwb2ludG1lbnRzXG4gICAgY29uc3QgaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA9IG5ldyBNYXA8YW55LCBudW1iZXI+KCk7XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuc2V0KHNlZ21lbnQuaWQsIG1heENvbmN1cnJlbmN5TWFwLmdldChzZWdtZW50LmlkKSB8fCAxKTtcbiAgICB9KTtcblxuICAgIGxldCBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB3aGlsZSAoY2hhbmdlZCkge1xuICAgICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnRBKSA9PiB7XG4gICAgICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50QikgPT4ge1xuICAgICAgICAgIGlmIChzZWdtZW50QS5pZCA9PT0gc2VnbWVudEIuaWQpIHJldHVybjtcblxuICAgICAgICAgIGlmICh0aGlzLmRvQXBwb2ludG1lbnRzT3ZlcmxhcChzZWdtZW50QSwgc2VnbWVudEIpKSB7XG4gICAgICAgICAgICBjb25zdCBldGNBID0gaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5nZXQoc2VnbWVudEEuaWQpIHx8IDE7XG4gICAgICAgICAgICBjb25zdCBldGNCID0gaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5nZXQoc2VnbWVudEIuaWQpIHx8IDE7XG4gICAgICAgICAgICBjb25zdCBtYXhFVEMgPSBNYXRoLm1heChldGNBLCBldGNCKTtcblxuICAgICAgICAgICAgaWYgKGV0Y0EgIT09IG1heEVUQykge1xuICAgICAgICAgICAgICBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLnNldChzZWdtZW50QS5pZCwgbWF4RVRDKTtcbiAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXRjQiAhPT0gbWF4RVRDKSB7XG4gICAgICAgICAgICAgIGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuc2V0KHNlZ21lbnRCLmlkLCBtYXhFVEMpO1xuICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUG9wdWxhdGUgZmluYWwgcmVzdWx0XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIHJlc3VsdEluZm8uc2V0KHNlZ21lbnQuaWQsIHtcbiAgICAgICAgbWF4Q29uY3VycmVuY3k6IG1heENvbmN1cnJlbmN5TWFwLmdldChzZWdtZW50LmlkKSB8fCAxLFxuICAgICAgICBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuZ2V0KHNlZ21lbnQuaWQpIHx8IDEsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHRJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBhcHBvaW50bWVudHMgYnkgdGhlIGJsb2NrIHRoZXkgU1RBUlQgaW4gZm9yIFdlZWsgVmlldy5cbiAgICovXG4gIGNhbGN1bGF0ZVdlZWtWaWV3QXBwb2ludG1lbnRzQnlTdGFydEJsb2NrKFxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSxcbiAgICB2aWV3U3RhcnREYXRlOiBBWERhdGVUaW1lLFxuICAgIHN0YXJ0SG91cjogbnVtYmVyLFxuICAgIGVuZEhvdXI6IG51bWJlcixcbiAgKTogQVhTY2hlZHVsZXJBcHBvaW50bWVudHNCeVN0YXJ0QmxvY2sge1xuICAgIGNvbnN0IGJsb2NrczogQVhTY2hlZHVsZXJBcHBvaW50bWVudHNCeVN0YXJ0QmxvY2sgPSB7fTtcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwb2ludG1lbnQpID0+IHtcbiAgICAgIGlmICghYXBwb2ludG1lbnQuc3RhcnREYXRlKSByZXR1cm47XG4gICAgICBjb25zdCBzdGFydEluZm8gPSB0aGlzLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSksXG4gICAgICAgIHZpZXdTdGFydERhdGUsXG4gICAgICAgIHN0YXJ0SG91cixcbiAgICAgICAgZW5kSG91cixcbiAgICAgICAgNyxcbiAgICAgICk7XG4gICAgICBpZiAoc3RhcnRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHsgZGF5SW5kZXgsIGJsb2NrSW5kZXggfSA9IHN0YXJ0SW5mbztcbiAgICAgICAgaWYgKCFibG9ja3NbZGF5SW5kZXhdKSBibG9ja3NbZGF5SW5kZXhdID0ge307XG4gICAgICAgIGlmICghYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XSkgYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XSA9IFtdO1xuICAgICAgICBibG9ja3NbZGF5SW5kZXhdW2Jsb2NrSW5kZXhdLnB1c2goYXBwb2ludG1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGFwcG9pbnRtZW50cyBieSB0aGUgZGF5KHMpIHRoZXkgb2NjdXIgb24gd2l0aGluIGEgZ2l2ZW4gZGF0ZSByYW5nZS5cbiAgICogUmV0dXJucyBhIE1hcCB3aGVyZSB0aGUga2V5IGlzIHRoZSBkYXRlIHN0cmluZyAoJ1lZWVktTU0tREQnKSBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGFwcG9pbnRtZW50cy5cbiAgICovXG4gIGdyb3VwQXBwb2ludG1lbnRzQnlEYXkoXG4gICAgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSwgLy8gRmlyc3QgZGF5IHZpc2libGUgaW4gdGhlIGdyaWRcbiAgICB2aWV3RW5kRGF0ZTogQVhEYXRlVGltZSwgLy8gTGFzdCBkYXkgdmlzaWJsZSBpbiB0aGUgZ3JpZFxuICApOiBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+IHtcbiAgICBjb25zdCBncm91cGVkQXBwb2ludG1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oKTtcbiAgICBpZiAoIWFwcG9pbnRtZW50cyB8fCBhcHBvaW50bWVudHMubGVuZ3RoID09PSAwIHx8ICF2aWV3U3RhcnREYXRlIHx8ICF2aWV3RW5kRGF0ZSkge1xuICAgICAgcmV0dXJuIGdyb3VwZWRBcHBvaW50bWVudHM7XG4gICAgfVxuXG4gICAgLy8gUHJlLWNhbGN1bGF0ZSB0aGUgZW5kIGRhdGUgZm9yIGNvbXBhcmlzb24gKGV4Y2x1c2l2ZSlcbiAgICBjb25zdCBleGNsdXNpdmVWaWV3RW5kRGF0ZSA9IHZpZXdFbmREYXRlLmFkZCgnZGF5JywgMSk7XG5cbiAgICBhcHBvaW50bWVudHMuZm9yRWFjaCgoYXBwb2ludG1lbnQpID0+IHtcbiAgICAgIGlmICghYXBwb2ludG1lbnQuc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudC5lbmREYXRlIHx8ICFhcHBvaW50bWVudC5pZCkgcmV0dXJuO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBzdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSBhcHBvaW50bWVudCBjbGFtcGVkIGJ5IHRoZSB2aWV3IHJhbmdlXG4gICAgICBjb25zdCBhcHBvaW50bWVudFN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSk7XG4gICAgICBjb25zdCBhcHBvaW50bWVudEVuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcblxuICAgICAgLy8gU2tpcCBpZiBhcHBvaW50bWVudCBlbmRzIGJlZm9yZSB0aGUgdmlldyBzdGFydHMgb3Igc3RhcnRzIGFmdGVyIHRoZSB2aWV3IGVuZHNcbiAgICAgIGlmIChcbiAgICAgICAgYXBwb2ludG1lbnRFbmQuY29tcGFyZSh2aWV3U3RhcnREYXRlLCAnZGF5JykgPCAwIHx8XG4gICAgICAgIGFwcG9pbnRtZW50U3RhcnQuY29tcGFyZShleGNsdXNpdmVWaWV3RW5kRGF0ZSwgJ2RheScpID49IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsYW1wIHN0YXJ0IGRhdGUgdG8gdGhlIHZpZXcgc3RhcnQgZGF0ZVxuICAgICAgbGV0IGN1cnJlbnREYXkgPVxuICAgICAgICBhcHBvaW50bWVudFN0YXJ0LmNvbXBhcmUodmlld1N0YXJ0RGF0ZSwgJ2RheScpIDwgMCA/IHZpZXdTdGFydERhdGUgOiBhcHBvaW50bWVudFN0YXJ0LnN0YXJ0T2YoJ2RheScpO1xuXG4gICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBkYXkgdGhlIGFwcG9pbnRtZW50IHNwYW5zIHdpdGhpbiB0aGUgdmlldyByYW5nZVxuICAgICAgbGV0IHNhZmVDb3VudCA9IDA7IC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcHNcbiAgICAgIHdoaWxlIChcbiAgICAgICAgY3VycmVudERheS5jb21wYXJlKGFwcG9pbnRtZW50RW5kLCAnZGF5JykgPD0gMCAmJlxuICAgICAgICBjdXJyZW50RGF5LmNvbXBhcmUoZXhjbHVzaXZlVmlld0VuZERhdGUsICdkYXknKSA8IDAgJiZcbiAgICAgICAgc2FmZUNvdW50IDwgMTAwXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQoY3VycmVudERheSwgJ2RhdGV0aW1lJywgeyBmb3JtYXQ6ICdZWVlZLU1NLUREJyB9KTsgLy8gVXNlIGEgY29uc2lzdGVudCBrZXkgZm9ybWF0XG5cbiAgICAgICAgaWYgKCFncm91cGVkQXBwb2ludG1lbnRzLmhhcyhkYXRlU3RyaW5nKSkge1xuICAgICAgICAgIGdyb3VwZWRBcHBvaW50bWVudHMuc2V0KGRhdGVTdHJpbmcsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgdGhlIGFwcG9pbnRtZW50IGlmIGl0J3Mgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QgZm9yIHRoYXQgZGF5XG4gICAgICAgIGlmICghZ3JvdXBlZEFwcG9pbnRtZW50cy5nZXQoZGF0ZVN0cmluZykuc29tZSgoZSkgPT4gZS5pZCA9PT0gYXBwb2ludG1lbnQuaWQpKSB7XG4gICAgICAgICAgZ3JvdXBlZEFwcG9pbnRtZW50cy5nZXQoZGF0ZVN0cmluZykucHVzaChhcHBvaW50bWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF5ID0gY3VycmVudERheS5hZGQoJ2RheScsIDEpO1xuICAgICAgICBzYWZlQ291bnQrKztcbiAgICAgIH1cbiAgICAgIGlmIChzYWZlQ291bnQgPj0gMTAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignU2FmZXR5IGJyZWFrIGhpdCBpbiBncm91cEFwcG9pbnRtZW50c0J5RGF5IGxvb3AgZm9yIGFwcG9pbnRtZW50OicsIGFwcG9pbnRtZW50LmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBncm91cGVkQXBwb2ludG1lbnRzO1xuICB9XG5cbiAgZ2V0RGF5T2ZXZWVrTnVtYmVyKGRheU5hbWU6IEFYRGF5T2ZXZWVrTmFtZSk6IG51bWJlciB7XG4gICAgc3dpdGNoIChkYXlOYW1lKSB7XG4gICAgICBjYXNlICdzdW5kYXknOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgJ21vbmRheSc6XG4gICAgICAgIHJldHVybiAyO1xuICAgICAgY2FzZSAndHVlc2RheSc6XG4gICAgICAgIHJldHVybiAzO1xuICAgICAgY2FzZSAnd2VkbmVzZGF5JzpcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBjYXNlICd0aHVyc2RheSc6XG4gICAgICAgIHJldHVybiA1O1xuICAgICAgY2FzZSAnZnJpZGF5JzpcbiAgICAgICAgcmV0dXJuIDY7XG4gICAgICBjYXNlICdzYXR1cmRheSc6XG4gICAgICAgIHJldHVybiA3O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGRheSBuYW1lOiAke2RheU5hbWV9LiBEZWZhdWx0aW5nIHRvIFN1bmRheSAoMSkuYCk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGdldFNsb3REYXRhKFxuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXcsXG4gICk6IHsgc3RhcnREYXRlOiBBWERhdGVUaW1lOyBlbmREYXRlOiBBWERhdGVUaW1lOyB2aWV3OiBBWFNjaGVkdWxlclZpZXcgfSB7XG4gICAgbGV0IGVuZERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIGVuZERhdGUgPSBzdGFydERhdGUuYWRkKCdtaW51dGUnLCB0aGlzLkJMT0NLX0RVUkFUSU9OX01JTlVURVMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmFkZCgnbWludXRlJywgdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTICogMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmVuZE9mKCdkYXknKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldyB9O1xuICB9XG5cbiAgaGFuZGxlRXZlbnQoXG4gICAgZXZlbnQ6IEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfCBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgICBldmVudE91dHB1dE1hcCxcbiAgICBldmVudFR5cGU6ICdhcHBvaW50bWVudCcgfCAnc2xvdCcsXG4gICkge1xuICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBldmVudC5uYXRpdmVFdmVudDtcbiAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbW91c2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZXZlbnRUeXBlID09PSAnYXBwb2ludG1lbnQnKSB7XG4gICAgICBjb25zdCBhcHBvaW50bWVudE91dHB1dE1hcCA9IGV2ZW50T3V0cHV0TWFwW2V2ZW50VHlwZV07XG4gICAgICBjb25zdCBlbWl0dGVyID0gYXBwb2ludG1lbnRPdXRwdXRNYXBbbW91c2VFdmVudC50eXBlIGFzIGtleW9mIHR5cGVvZiBhcHBvaW50bWVudE91dHB1dE1hcF07XG4gICAgICBpZiAoZW1pdHRlcikgZW1pdHRlci5lbWl0KGV2ZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3Nsb3QnKSB7XG4gICAgICBjb25zdCBzbG90T3V0cHV0TWFwID0gZXZlbnRPdXRwdXRNYXBbZXZlbnRUeXBlXTtcbiAgICAgIGNvbnN0IGVtaXR0ZXIgPSBzbG90T3V0cHV0TWFwW21vdXNlRXZlbnQudHlwZSBhcyBrZXlvZiB0eXBlb2Ygc2xvdE91dHB1dE1hcF07XG4gICAgICBpZiAoZW1pdHRlcikgZW1pdHRlci5lbWl0KGV2ZW50IGFzIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBUaW1lbGluZSBTcGVjaWZpYyBIZWxwZXJzIC0tLVxuXG4gIGNhbGN1bGF0ZVRpbWVsaW5lTGF5b3V0KFxuICAgIC8vIGBhcHB0YCBoZXJlIHdpbGwgYmUgYW4gQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRUeXBlIHdoZW4gY2FsbGVkIGZyb20gVGltZWxpbmVEYXlWaWV3XG4gICAgYXBwdDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgICB2aWV3U3RhcnRIb3VyOiBudW1iZXIsIC8vIGUuZy4sIDggZm9yIDggQU1cbiAgICB2aWV3RW5kSG91cjogbnVtYmVyLCAvLyBlLmcuLCAxOCBmb3IgNiBQTSAodGltZWxpbmUgcnVucyBmcm9tIDg6MDAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCAxODowMClcbiAgKTogeyBsZWZ0OiBzdHJpbmc7IHdpZHRoOiBzdHJpbmcgfSB8IG51bGwge1xuICAgIGlmIChcbiAgICAgICFhcHB0Py5zdGFydERhdGUgfHxcbiAgICAgICFhcHB0LmVuZERhdGUgfHxcbiAgICAgIHR5cGVvZiB2aWV3U3RhcnRIb3VyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgdHlwZW9mIHZpZXdFbmRIb3VyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgdmlld1N0YXJ0SG91ciA+PSB2aWV3RW5kSG91ciAvLyBCYXNpYyBzYW5pdHkgY2hlY2tcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignY2FsY3VsYXRlVGltZWxpbmVMYXlvdXQ6IEludmFsaWQgaW5wdXQnLCB7IGFwcHQsIHZpZXdTdGFydEhvdXIsIHZpZXdFbmRIb3VyIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxWaWV3RHVyYXRpb25NaW51dGVzID0gKHZpZXdFbmRIb3VyIC0gdmlld1N0YXJ0SG91cikgKiA2MDtcbiAgICBpZiAodG90YWxWaWV3RHVyYXRpb25NaW51dGVzIDw9IDApIHJldHVybiBudWxsOyAvLyBObyB2aWV3YWJsZSBkdXJhdGlvblxuXG4gICAgLy8gU2VnbWVudCdzIHN0YXJ0IGFuZCBlbmQgdGltZXMgKHRoZXNlIGFyZSBhbHJlYWR5IGNsaXBwZWQgdG8gdGhlIGRheSBieSBnZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheSlcbiAgICBjb25zdCBzZWdtZW50U3RhcnQgPSBhcHB0LnN0YXJ0RGF0ZTtcbiAgICBjb25zdCBzZWdtZW50RW5kID0gYXBwdC5lbmREYXRlO1xuXG4gICAgLy8gLS0tIENhbGN1bGF0ZSBTdGFydCBQb3NpdGlvbiAobGVmdCkgLS0tXG4gICAgLy8gRWZmZWN0aXZlIHN0YXJ0IG9mIHRoZSBzZWdtZW50IHdpdGhpbiB0aGUgdmlldydzIGhvdXJzIGZvciBUSElTIGRheVxuICAgIGxldCBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgPSBzZWdtZW50U3RhcnQuZ2V0SG91cnMoKSAqIDYwICsgc2VnbWVudFN0YXJ0LmdldE1pbnV0ZXMoKTtcblxuICAgIC8vIENsYW1wIHRvIHZpZXdTdGFydEhvdXIgZm9yIGNhbGN1bGF0aW9uIGlmIHNlZ21lbnQgc3RhcnRzIGJlZm9yZSB2aWV3YWJsZSBob3VycyAoc2hvdWxkbid0IGhhcHBlbiBpZiBzZWdtZW50ZXIgd29ya2VkKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSA9IE1hdGgubWF4KGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSwgdmlld1N0YXJ0SG91ciAqIDYwKTtcbiAgICAvLyBDbGFtcCB0byB2aWV3RW5kSG91ciBmb3IgY2FsY3VsYXRpb24gaWYgc2VnbWVudCBzdGFydHMgYWZ0ZXIgdmlld2FibGUgaG91cnMgKHNob3VsZG4ndCBoYXBwZW4pXG4gICAgZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5ID0gTWF0aC5taW4oZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5LCB2aWV3RW5kSG91ciAqIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQgPSBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgLSB2aWV3U3RhcnRIb3VyICogNjA7XG5cbiAgICAvLyBJZiBzZWdtZW50IGVmZmVjdGl2ZWx5IHN0YXJ0cyBiZWZvcmUgdGhlIHZpZXdhYmxlIHBhcnQgKGFmdGVyIGNsYW1waW5nKSwgaXQgbWVhbnMgaXQncyBub3QgdmlzaWJsZSBvciBzdGFydHMgYXQgMCVcbiAgICBpZiAoXG4gICAgICBtaW51dGVzRnJvbVZpZXdTdGFydFRvU2VnbWVudFN0YXJ0IDwgMCAmJlxuICAgICAgTWF0aC5hYnMobWludXRlc0Zyb21WaWV3U3RhcnRUb1NlZ21lbnRTdGFydCkgPiAxZS02IC8qZXBzaWxvbiBmb3IgZmxvYXQgaXNzdWVzKi9cbiAgICApIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBiZSBjYXVnaHQgYnkgdGhlIHNlZ21lbnRlciBvciBpbml0aWFsIG92ZXJsYXAgY2hlY2tzLlxuICAgICAgLy8gSWYgaXQgaGFwcGVucywgdHJlYXQgYXMgc3RhcnRpbmcgYXQgMCUgYnV0IGl0IG1pZ2h0IG1lYW4gbm8gdmlzaWJsZSBwYXJ0LlxuICAgIH1cblxuICAgIGNvbnN0IGxlZnRQZXJjZW50YWdlID0gKE1hdGgubWF4KDAsIG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQpIC8gdG90YWxWaWV3RHVyYXRpb25NaW51dGVzKSAqIDEwMDtcblxuICAgIC8vIC0tLSBDYWxjdWxhdGUgRHVyYXRpb24gYW5kIFdpZHRoIC0tLVxuICAgIC8vIEVmZmVjdGl2ZSBlbmQgb2YgdGhlIHNlZ21lbnQgd2l0aGluIHRoZSB2aWV3J3MgaG91cnMgZm9yIFRISVMgZGF5XG4gICAgbGV0IGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBzZWdtZW50RW5kLmdldEhvdXJzKCkgKiA2MCArIHNlZ21lbnRFbmQuZ2V0TWludXRlcygpO1xuICAgIGlmIChzZWdtZW50RW5kLmdldEhvdXJzKCkgPT09IDAgJiYgc2VnbWVudEVuZC5nZXRNaW51dGVzKCkgPT09IDAgJiYgc2VnbWVudEVuZC5nZXRUaW1lKCkgPiBzZWdtZW50U3RhcnQuZ2V0VGltZSgpKSB7XG4gICAgICAvLyBJZiBzZWdtZW50IGVuZHMgZXhhY3RseSBhdCBtaWRuaWdodCAoMDA6MDAgb2YgbmV4dCBkYXksIG1lYW5pbmcgaXQgZmlsbGVkIHVwIHRvIDI0OjAwIG9mIGN1cnJlbnQgZGF5KVxuICAgICAgZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSA9IDI0ICogNjA7XG4gICAgfVxuXG4gICAgLy8gQ2xhbXAgdG8gdmlld0VuZEhvdXIgZm9yIGNhbGN1bGF0aW9uXG4gICAgZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSA9IE1hdGgubWluKGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXksIHZpZXdFbmRIb3VyICogNjApO1xuICAgIC8vIENsYW1wIHRvIHZpZXdTdGFydEhvdXIgZm9yIGNhbGN1bGF0aW9uIChpZiBzZWdtZW50IGVuZHMgYmVmb3JlIHZpZXcgc3RhcnRzKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBNYXRoLm1heChlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5LCB2aWV3U3RhcnRIb3VyICogNjApO1xuXG4gICAgY29uc3Qgc2VnbWVudER1cmF0aW9uTWludXRlc0luVmlldyA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgLSBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXksXG4gICAgKTtcblxuICAgIGlmIChzZWdtZW50RHVyYXRpb25NaW51dGVzSW5WaWV3IDw9IDApIHtcbiAgICAgIC8vIFNlZ21lbnQgaGFzIG5vIHZpc2libGUgZHVyYXRpb24gd2l0aGluIHRoZSB0aW1lbGluZSBob3Vyc1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGhQZXJjZW50YWdlID0gKHNlZ21lbnREdXJhdGlvbk1pbnV0ZXNJblZpZXcgLyB0b3RhbFZpZXdEdXJhdGlvbk1pbnV0ZXMpICogMTAwO1xuXG4gICAgLy8gRW5zdXJlIHBlcmNlbnRhZ2VzIGFyZSB2YWxpZFxuICAgIGlmIChcbiAgICAgIGxlZnRQZXJjZW50YWdlID4gMTAwIHx8XG4gICAgICBsZWZ0UGVyY2VudGFnZSA8IDAgfHxcbiAgICAgIHdpZHRoUGVyY2VudGFnZSA8PSAwIHx8XG4gICAgICB3aWR0aFBlcmNlbnRhZ2UgPiAxMDAgfHxcbiAgICAgIGxlZnRQZXJjZW50YWdlICsgd2lkdGhQZXJjZW50YWdlID4gMTAwLjAwMDEgLyphbGxvdyBmb3IgZmxvYXQgZXJyb3JzKi9cbiAgICApIHtcbiAgICAgIC8vIFRoaXMgbWlnaHQgaW5kaWNhdGUgYW4gaXNzdWUgd2l0aCBkYXRlIGNsYW1waW5nIG9yIGxvZ2ljLlxuICAgICAgLy8gRm9yIG5vdywgaWYgaXQgcmVzdWx0cyBpbiBhbiBpbnZhbGlkIGxheW91dCwgcmV0dXJuIG51bGwuXG4gICAgICAvLyBjb25zb2xlLndhcm4oXCJUaW1lbGluZSBsYXlvdXQgY2FsY3VsYXRpb24gcmVzdWx0ZWQgaW4gb3V0LW9mLWJvdW5kcyBwZXJjZW50YWdlczpcIixcbiAgICAgIC8vICAgICAgICAgICAgICB7bGVmdFBlcmNlbnRhZ2UsIHdpZHRoUGVyY2VudGFnZSwgc2VnbWVudFN0YXJ0LCBzZWdtZW50RW5kLCB2aWV3U3RhcnRIb3VyLCB2aWV3RW5kSG91cn0pO1xuICAgICAgLy8gQSBjb21tb24gY2FzZSBmb3IgKGxlZnQgKyB3aWR0aCA+IDEwMCkgaXMgaWYgYW4gZXZlbnQgZW5kcyAqZXhhY3RseSogYXQgdmlld0VuZEhvdXIsXG4gICAgICAvLyBhbmQgdmlld0VuZEhvdXIgaXRzZWxmIGlzIHRoZSBib3VuZGFyeS5cbiAgICAgIC8vIExldCdzIGJlIGEgYml0IHRvbGVyYW50IGhlcmUgaWYgd2lkdGggaXMgcG9zaXRpdmUuXG4gICAgICBpZiAod2lkdGhQZXJjZW50YWdlIDw9IDApIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZWZ0OiBgJHtNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIGxlZnRQZXJjZW50YWdlKSl9JWAsXG4gICAgICB3aWR0aDogYCR7TWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCB3aWR0aFBlcmNlbnRhZ2UpKX0lYCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHZpc2libGUgc2VnbWVudCBvZiBhIHRpbWVkIGFwcG9pbnRtZW50IG9uIGEgc3BlY2lmaWMgZGF5LFxuICAgKiBjb25zdHJhaW5lZCBieSB0aGUgdmlldydzIHN0YXJ0IGFuZCBlbmQgaG91cnMuXG4gICAqIFJldHVybnMgYSBuZXcgYXBwb2ludG1lbnQtbGlrZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzZWdtZW50LlxuICAgKi9cbiAgZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoXG4gICAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIC8vIFRoaXMgaXMgdGhlIE9SSUdJTkFMIGFwcG9pbnRtZW50XG4gICAgZGF5OiBBWERhdGVUaW1lLFxuICAgIHZpZXdTdGFydEhvdXI6IG51bWJlcixcbiAgICB2aWV3RW5kSG91cjogbnVtYmVyLFxuICAgIGlzRnVsbERheUNlbGxDb250ZXh0ID0gZmFsc2UsXG4gICk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IHwgbnVsbCB7XG4gICAgaWYgKCFhcHBvaW50bWVudCB8fCAhYXBwb2ludG1lbnQuc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudC5lbmREYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBvaW50bWVudFN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5zdGFydERhdGUpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50RW5kRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcblxuICAgIGlmIChhcHBvaW50bWVudC5hbGxEYXkpIHtcbiAgICAgIGNvbnN0IGRheVN0YXJ0T2YgPSBkYXkuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGlmIChhcHBvaW50bWVudFN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKS5lcXVhbChkYXlTdGFydE9mLCAnZGF5JykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hcHBvaW50bWVudCxcbiAgICAgICAgICBzdGFydERhdGU6IGRheVN0YXJ0T2YuZGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiBkYXlTdGFydE9mLmNsb25lKCkuYWRkKCdkYXknLCAxKS5zdGFydE9mKCdkYXknKS5kYXRlLFxuICAgICAgICAgIGFsbERheTogdHJ1ZSxcbiAgICAgICAgICBvcmlnaW5hbFN0YXJ0RGF0ZTogYXBwb2ludG1lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgICAgICBvcmlnaW5hbEVuZERhdGU6IGFwcG9pbnRtZW50RW5kRGF0ZS5kYXRlLFxuICAgICAgICAgIGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5OiBmYWxzZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvblRvTmV4dERheTogYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID4gMCxcbiAgICAgICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGFwcG9pbnRtZW50U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpIDwgMCAmJlxuICAgICAgICBhcHBvaW50bWVudEVuZERhdGUuc3RhcnRPZignZGF5JykuY29tcGFyZShkYXlTdGFydE9mLCAnZGF5JykgPj0gMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICAgICAgc3RhcnREYXRlOiBkYXlTdGFydE9mLmRhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogZGF5U3RhcnRPZi5jbG9uZSgpLmFkZCgnZGF5JywgMSkuc3RhcnRPZignZGF5JykuZGF0ZSxcbiAgICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICAgICAgb3JpZ2luYWxTdGFydERhdGU6IGFwcG9pbnRtZW50U3RhcnREYXRlLmRhdGUsXG4gICAgICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheTogdHJ1ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvblRvTmV4dERheTogYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID4gMCxcbiAgICAgICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRheVN0YXJ0Qm91bmRhcnkgPSBpc0Z1bGxEYXlDZWxsQ29udGV4dFxuICAgICAgPyBkYXkuY2xvbmUoKS5zdGFydE9mKCdkYXknKVxuICAgICAgOiBkYXkuY2xvbmUoKS5zZXQoJ2hvdXInLCB2aWV3U3RhcnRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG4gICAgY29uc3QgZGF5RW5kQm91bmRhcnkgPSBpc0Z1bGxEYXlDZWxsQ29udGV4dFxuICAgICAgPyBkYXkuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpXG4gICAgICA6IHZpZXdFbmRIb3VyID09PSAyNCB8fCAodmlld0VuZEhvdXIgPT09IDAgJiYgdmlld1N0YXJ0SG91ciA9PT0gMClcbiAgICAgICAgPyBkYXkuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgIDogZGF5LmNsb25lKCkuc2V0KCdob3VyJywgdmlld0VuZEhvdXIpLnN0YXJ0T2YoJ2hvdXInKTtcblxuICAgIGlmIChcbiAgICAgIGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKGRheVN0YXJ0Qm91bmRhcnksICdzZWNvbmQnKSA8PSAwIHx8XG4gICAgICBhcHBvaW50bWVudFN0YXJ0RGF0ZS5jb21wYXJlKGRheUVuZEJvdW5kYXJ5LCAnc2Vjb25kJykgPj0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHNlZ21lbnRTdGFydERhdGUgPVxuICAgICAgYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZShkYXlTdGFydEJvdW5kYXJ5LCAnc2Vjb25kJykgPiAwID8gYXBwb2ludG1lbnRTdGFydERhdGUgOiBkYXlTdGFydEJvdW5kYXJ5O1xuICAgIGNvbnN0IHNlZ21lbnRFbmREYXRlID1cbiAgICAgIGFwcG9pbnRtZW50RW5kRGF0ZS5jb21wYXJlKGRheUVuZEJvdW5kYXJ5LCAnc2Vjb25kJykgPCAwID8gYXBwb2ludG1lbnRFbmREYXRlIDogZGF5RW5kQm91bmRhcnk7XG5cbiAgICBpZiAoc2VnbWVudFN0YXJ0RGF0ZS5jb21wYXJlKHNlZ21lbnRFbmREYXRlLCAnc2Vjb25kJykgPj0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgaXNDb250aW51YXRpb25Gcm9tUHJldmlvdXNEYXkgPSBhcHBvaW50bWVudFN0YXJ0RGF0ZS5jb21wYXJlKHNlZ21lbnRTdGFydERhdGUsICdzZWNvbmQnKSA8IDA7XG4gICAgY29uc3QgaXNDb250aW51YXRpb25Ub05leHREYXkgPSBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZShzZWdtZW50RW5kRGF0ZSwgJ3NlY29uZCcpID4gMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGFwcG9pbnRtZW50U3RhcnREYXRlLmR1cmF0aW9uKGFwcG9pbnRtZW50RW5kRGF0ZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICBzdGFydERhdGU6IHNlZ21lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgIGVuZERhdGU6IHNlZ21lbnRFbmREYXRlLmRhdGUsXG4gICAgICBhbGxEYXk6IGFwcG9pbnRtZW50LmFsbERheSB8fCBkdXJhdGlvbi50b3RhbC5taWxpc2Vjb25kcyA+PSAyNCAqIDYwICogNjAgKiAxMDAwIC0gMSxcbiAgICAgIG9yaWdpbmFsU3RhcnREYXRlOiBhcHBvaW50bWVudFN0YXJ0RGF0ZS5kYXRlLFxuICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgIGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5LFxuICAgICAgaXNDb250aW51YXRpb25Ub05leHREYXksXG4gICAgICBvcmlnaW5hbEFwcG9pbnRtZW50UmVmOiBhcHBvaW50bWVudCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0T3JpZ2luYWxBcHBvaW50bWVudChpdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IHwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50IHtcbiAgICBjb25zdCBzZWdtZW50ID0gaXRlbSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudDtcbiAgICBpZiAoc2VnbWVudC5vcmlnaW5hbEFwcG9pbnRtZW50UmVmKSB7XG4gICAgICByZXR1cm4gc2VnbWVudC5vcmlnaW5hbEFwcG9pbnRtZW50UmVmO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLnNvbWUoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICB9XG4gIGlzV2Vla2VuZChkYXRlOiBBWERhdGVUaW1lLCBjYWxlbmRhcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgd2Vla2VuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLnJlc29sdmVDYWxlbmRhcihjYWxlbmRhcikud2Vla2VuZDtcbiAgICByZXR1cm4gd2Vla2VuZC5pbmNsdWRlcyhkYXRlLmRheU9mV2VlayAtIDEpO1xuICB9XG59XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DOCUMENT, HostBinding, ViewEncapsulation, computed, inject, input, output, signal, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerAgendaViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.daysCount = input(7);\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.dragStartSlotId = signal(null);\n this.agendaDaysLayout = computed(() => {\n const allOriginalAppointments = this.appointments();\n const agendaStartDate = this.date();\n const numberOfDays = this.daysCount();\n if (!agendaStartDate || !allOriginalAppointments) {\n return [];\n }\n const result = [];\n for (let i = 0; i < numberOfDays; i++) {\n const currentDay = agendaStartDate.add('day', i).startOf('day');\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDay, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1),\n (s) => s.startDate.getTime(),\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(),\n ], ['asc', 'asc', 'desc']);\n result.push({\n date: currentDay,\n appointments: sortedSegments,\n holiday: this.isHoliday(currentDay),\n });\n }\n return result;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onActionClickInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n if (slotData) {\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({\n appointment: originalAppointment,\n nativeEvent: event,\n sender: this.scheduler,\n });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerAgendaViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerAgendaViewComponent, isStandalone: true, selector: \"ax-scheduler-agenda-view\", inputs: { daysCount: { classPropertyName: \"daysCount\", publicName: \"daysCount\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onActionClickInternal: \"onActionClickInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-agenda-container\\\">\\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n class=\\\"ax-scheduler-agenda-view-container\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n [attr.data-slot-id]=\\\"dayData.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-header-date-day\\\">\\n <span\\n class=\\\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n [axTooltipPlacement]=\\\"'top-start'\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-agenda-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-agenda-appointment-container\\\">\\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ' (All Day)'\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-agenda-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-appointment-time\\\">\\n @if (segment.allDay) {\\n <span>{{ '@acorex:dateTime.duration.all-day' | translate | async }}</span>\\n } @else {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n <ax-title class=\\\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Description could go here if needed -->\\n <!-- @if (segment.description) {\\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\\n } -->\\n @if (hasActions()) {\\n <ax-icon\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n >\\n </ax-icon>\\n }\\n </div>\\n }\\n @if (dayData.appointments.length === 0) {\\n <div class=\\\"ax-scheduler-agenda-no-appointments\\\">\\n {{ '@acorex:common.general.no-record' | translate | async }}\\n </div>\\n }\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{width:100%;gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;justify-content:space-between;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:120px;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{width:100%}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerAgendaViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-agenda-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AsyncPipe,\n AXFormatPipe,\n AXDecoratorGenericComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTranslatorPipe,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }], template: \"<div class=\\\"ax-scheduler-agenda-container\\\">\\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n class=\\\"ax-scheduler-agenda-view-container\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n [attr.data-slot-id]=\\\"dayData.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-header-date-day\\\">\\n <span\\n class=\\\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n [axTooltipPlacement]=\\\"'top-start'\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-agenda-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-agenda-appointment-container\\\">\\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ' (All Day)'\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-agenda-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <div class=\\\"ax-scheduler-agenda-appointment-time\\\">\\n @if (segment.allDay) {\\n <span>{{ '@acorex:dateTime.duration.all-day' | translate | async }}</span>\\n } @else {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n <ax-title class=\\\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\\\">{{ segment.title }}</ax-title>\\n <!-- Description could go here if needed -->\\n <!-- @if (segment.description) {\\n <ax-subtitle>{{ segment.description }}</ax-subtitle>\\n } -->\\n @if (hasActions()) {\\n <ax-icon\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n >\\n </ax-icon>\\n }\\n </div>\\n }\\n @if (dayData.appointments.length === 0) {\\n <div class=\\\"ax-scheduler-agenda-no-appointments\\\">\\n {{ '@acorex:common.general.no-record' | translate | async }}\\n </div>\\n }\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-agenda-view .ax-scheduler-agenda-container{height:100%;display:flex;flex-direction:column}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container{gap:1rem;display:flex;position:relative;padding-inline:1rem;padding-block:.25rem;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container:last-child{border-block-end-width:0}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-today .ax-scheduler-agenda-header-date-day .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day{gap:.25rem;display:flex;height:3.5rem;min-width:6rem;max-width:6rem;position:sticky;align-items:start;flex-direction:column;inset-block-start:1rem;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-view-container .ax-scheduler-agenda-header-date-day .ax-scheduler-agenda-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container{width:100%;gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment{gap:.5rem;width:100%;display:flex;overflow:hidden;align-items:center;flex-direction:row;padding-block:.25rem;padding-inline:.5rem;justify-content:space-between;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment.all-day-segment .ax-scheduler-agenda-appointment-time{font-weight:500}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-time{flex-shrink:0;min-width:120px;font-size:.9em;opacity:.9}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-agenda-appointment-title{width:100%}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-appointment .ax-scheduler-action-icon{width:auto;cursor:pointer}ax-scheduler-agenda-view .ax-scheduler-agenda-container .ax-scheduler-agenda-appointment-container .ax-scheduler-agenda-no-appointments{text-align:center;font-style:italic;color:rgba(var(--ax-sys-color-on-surface),.6)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-appointment{cursor:pointer}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-agenda-view:not(.ax-state-readonly) .ax-scheduler-agenda-view-container:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWFnZW5kYS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2FnZW5kYS9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsV0FBVyxFQUVYLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUVMLG9CQUFvQixHQUdyQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQTRCN0QsTUFBTSxPQUFPLDhCQUErQixTQUFRLFdBQVc7SUFwQi9EOztRQXFCVSxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXRELGNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsYUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsbUJBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsYUFBUSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQzNCLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFjLENBQUM7UUFDcEMsaUJBQVksR0FBRyxLQUFLLENBQTJCLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELG9CQUFlLEdBQUcsS0FBSyxFQUFpQyxDQUFDO1FBRWpELG9CQUFlLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUV0RCxxQkFBZ0IsR0FBRyxRQUFRLENBQWtCLEdBQUcsRUFBRTtZQUNoRCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRXRDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUNqRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBb0IsRUFBRSxDQUFDO1lBRW5DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLGtCQUFrQixHQUFvQyxFQUFFLENBQUM7Z0JBRS9ELEtBQUssTUFBTSxJQUFJLElBQUksdUJBQXVCLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdEcsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDWixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ25DLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQzVCLGtCQUFrQixFQUNsQjtvQkFDRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO29CQUM1QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFO2lCQUNuRSxFQUNELENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FDdkIsQ0FBQztnQkFFRixNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNWLElBQUksRUFBRSxVQUFVO29CQUNoQixZQUFZLEVBQUUsY0FBYztvQkFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2lCQUNwQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0Qsd0JBQW1CLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQzFELDJCQUFzQixHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUM3RCw2QkFBd0IsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDL0QsK0JBQTBCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQ3hFLGtDQUE2QixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUMzRSxvQ0FBK0IsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDN0UsMEJBQXFCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQ25FLDhCQUF5QixHQUFHLE1BQU0sRUFBNEIsQ0FBQztRQUUvRCx5QkFBeUI7UUFDUixtQkFBYyxHQUFHO1lBQ2hDLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7Z0JBQ3JDLFdBQVcsRUFBRSxJQUFJLENBQUMsd0JBQXdCO2FBQzNDO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsMEJBQTBCO2dCQUN0QyxRQUFRLEVBQUUsSUFBSSxDQUFDLDZCQUE2QjtnQkFDNUMsV0FBVyxFQUFFLElBQUksQ0FBQywrQkFBK0I7YUFDbEQ7U0FDRixDQUFDO0tBaUZIO0lBaEZDLHNCQUFzQixDQUFDLFVBQXNCLEVBQUUsZUFBdUM7UUFDcEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQy9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ2hGLElBQUksQ0FBQyxjQUFjLEVBQ25CLGFBQWEsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWUsQ0FBQyxVQUFzQixFQUFFLElBQWdCO1FBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FDL0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFDbkUsSUFBSSxDQUFDLGNBQWMsRUFDbkIsTUFBTSxDQUNQLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUNELFVBQVUsQ0FBQyxDQUFzQixFQUFFLElBQWdCO1FBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBNEIsQ0FBQztRQUNuRSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RixNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLG1CQUFtQjtZQUN0QixPQUFPLEVBQUUsbUJBQW1CLENBQUMsT0FBTztZQUNwQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsU0FBUztTQUN6QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQztZQUNsQyxTQUFTLEVBQUUsQ0FBQztZQUNaLElBQUksRUFBRSxRQUFRO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3RCLFdBQVcsRUFBRSxjQUFjO1lBQzNCLGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1NBQ2hGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLGVBQXVDO1FBQzFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzlCLFdBQVcsRUFBRSxtQkFBbUI7WUFDaEMsV0FBVyxFQUFFLEtBQUs7WUFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxPQUFPLENBQUMsSUFBZ0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNTLFNBQVMsQ0FBQyxJQUFnQjtRQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLE9BQU87YUFDUixDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBZTtRQUN2QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNsQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdkMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFxQixFQUFFLENBQUMsRUFBRSxZQUFZLFdBQVcsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQTRDLFVBQVU7UUFDcEQsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0FqS1UsOEJBQThCO2tHQUE5Qiw4QkFBOEIsNnhEQUY5QixDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxpREN2RHBGLDI0SUFnR0EseTFJRHBESSxPQUFPLCtFQUNQLFNBQVMseUNBQ1QsWUFBWSwrQ0FDWiwyQkFBMkIseUxBQzNCLGVBQWUsMlRBQ2YsbUJBQW1CLHVKQUNuQixnQkFBZ0Isa0RBQ2hCLGtCQUFrQiw2TUFDbEIsd0JBQXdCOzsyRkFLZiw4QkFBOEI7a0JBcEIxQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxPQUFPO3dCQUNQLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWiwyQkFBMkI7d0JBQzNCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxnQ0FBZ0MsRUFBRSxDQUFDOzhCQWlLdEMsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRE9DVU1FTlQsXG4gIEhvc3RCaW5kaW5nLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBBZ2VuZGFEYXlEYXRhIHtcbiAgZGF0ZTogQVhEYXRlVGltZTtcbiAgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xuICBob2xpZGF5PzogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItYWdlbmRhLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLWFnZW5kYS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhGb3JtYXRQaXBlLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBWERyYWdEaXJlY3RpdmUsXG4gICAgQVhEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICBBWFRyYW5zbGF0b3JQaXBlLFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJBZ2VuZGFWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlckFnZW5kYVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgZGF5c0NvdW50ID0gaW5wdXQoNyk7XG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBhcHBvaW50bWVudHMgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KFtdKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSBkcmFnU3RhcnRTbG90SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgYWdlbmRhRGF5c0xheW91dCA9IGNvbXB1dGVkPEFnZW5kYURheURhdGFbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKTtcbiAgICBjb25zdCBhZ2VuZGFTdGFydERhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBudW1iZXJPZkRheXMgPSB0aGlzLmRheXNDb3VudCgpO1xuXG4gICAgaWYgKCFhZ2VuZGFTdGFydERhdGUgfHwgIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBBZ2VuZGFEYXlEYXRhW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZEYXlzOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXkgPSBhZ2VuZGFTdGFydERhdGUuYWRkKCdkYXknLCBpKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShhcHB0LCBjdXJyZW50RGF5LCAwLCAyNCwgdHJ1ZSk7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydGVkU2VnbWVudHMgPSBvcmRlckJ5KFxuICAgICAgICBzZWdtZW50c0ZvclRoaXNEYXksXG4gICAgICAgIFtcbiAgICAgICAgICAocykgPT4gKHMuYWxsRGF5ID8gMCA6IDEpLFxuICAgICAgICAgIChzKSA9PiBzLnN0YXJ0RGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgKHMpID0+IHMub3JpZ2luYWxFbmREYXRlLmdldFRpbWUoKSAtIHMub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpLFxuICAgICAgICBdLFxuICAgICAgICBbJ2FzYycsICdhc2MnLCAnZGVzYyddLFxuICAgICAgKTtcblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF5LFxuICAgICAgICBhcHBvaW50bWVudHM6IHNvcnRlZFNlZ21lbnRzLFxuICAgICAgICBob2xpZGF5OiB0aGlzLmlzSG9saWRheShjdXJyZW50RGF5KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICAvLyBJbnRlcm5hbCBvdXRwdXRzIHRvIGJlIGNhdWdodCBieSBwYXJlbnQgQVhTY2hlZHVsZXJDb21wb25lbnRcbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgLy8gLS0tIEV2ZW50IEhhbmRsZXJzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICdhZ2VuZGEnKTtcbiAgICBpZiAoc2xvdERhdGEpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRHJvcChlOiBBWERyb3Bab25lRHJvcEV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ2FnZW5kYScpO1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICBnZXRTbG90SWQoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKVxuICAgICAgLmZpbmQoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5kYXRhc2V0WydzbG90SWQnXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYWdTdGFydFNsb3RJZC5zZXQoZHJvcExpc3RFbGVtZW50ID8gZHJvcExpc3RFbGVtZW50LmRhdGFzZXRbJ3Nsb3RJZCddIDogbnVsbCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtY29udGFpbmVyXCI+XG4gIEBmb3IgKGRheURhdGEgb2YgYWdlbmRhRGF5c0xheW91dCgpOyB0cmFjayBkYXlEYXRhLmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICA8ZGl2XG4gICAgICBheERyb3Bab25lXG4gICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICBbY2xhc3MuYXgtc3RhdGUtdG9kYXldPVwiaXNUb2RheShkYXlEYXRhLmRhdGUpXCJcbiAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3LWNvbnRhaW5lclwiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF5RGF0YS5kYXRlLmZvcm1hdCgnWVlZWU1NREQnKVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtaGVhZGVyLWRhdGUtZGF5XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlEYXRhLmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICBbYXhUb29sdGlwUGxhY2VtZW50XT1cIid0b3Atc3RhcnQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRheURhdGEuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgQGlmIChkYXlEYXRhLmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgKCB7eyBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1oZWFkZXItZGF0ZS1kYXktbnVtXCI+XG4gICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5hcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICB0b29sdGlwVGVtcGxhdGUoKVxuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAgICAgKHNlZ21lbnQuYWxsRGF5XG4gICAgICAgICAgICAgICAgICAgID8gJyAoQWxsIERheSknXG4gICAgICAgICAgICAgICAgICAgIDogJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAnKScpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VnbWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1hcHBvaW50bWVudC10aW1lXCI+XG4gICAgICAgICAgICAgIEBpZiAoc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyAnQGFjb3JleDpkYXRlVGltZS5kdXJhdGlvbi5hbGwtZGF5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnQtdGl0bGUgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICA8IS0tIERlc2NyaXB0aW9uIGNvdWxkIGdvIGhlcmUgaWYgbmVlZGVkIC0tPlxuICAgICAgICAgICAgPCEtLSBAaWYgKHNlZ21lbnQuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPnt7IHNlZ21lbnQuZGVzY3JpcHRpb24gfX08L2F4LXN1YnRpdGxlPlxuICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGRheURhdGEuYXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLW5vLWFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgICAge3sgJ0BhY29yZXg6Y29tbW9uLmdlbmVyYWwubm8tcmVjb3JkJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DOCUMENT, HostBinding, inject, input, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.dragStartSlotId = signal(null);\n this.processedAppointmentsForLayout = computed(() => {\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const allAppointmentsInView = this.appointments();\n if (!viewDate || allAppointmentsInView.length === 0) {\n return [];\n }\n const segmentsForThisDay = [];\n for (const appt of allAppointmentsInView) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, startH, endH);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n return segmentsForThisDay;\n });\n this.allDayAppointments = computed(() => {\n const originalAllDayAppointments = this.appointments()?.filter((e) => e && e.allDay) ?? [];\n const multiDayBecomingAllDaySegments = this.processedAppointmentsForLayout()?.filter((segment) => segment && segment.allDay && !this.appointments().find((orig) => orig.id === segment.id)?.allDay) ?? [];\n const combined = new Map();\n originalAllDayAppointments.forEach((appt) => combined.set(appt.id, appt));\n multiDayBecomingAllDaySegments.forEach((appt) => {\n if (!combined.has(appt.id)) {\n combined.set(appt.id, appt);\n }\n });\n return Array.from(combined.values());\n });\n this.singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n });\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onActionClickInternal = output();\n this.onAppointmentDropInternal = output();\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n this.appointmentLayouts = computed(() => {\n const layouts = new Map();\n const appointmentsToLayout = this.singleDayAppointments();\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (appointmentsToLayout.length === 0 || !viewDate || typeof startH !== 'number' || typeof endH !== 'number') {\n return layouts;\n }\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(appointmentsToLayout, viewDate, startH, endH);\n const sortedAppointments = orderBy(appointmentsToLayout, [(e) => e.startDate.getTime(), (e) => e.originalEndDate.getTime() - e.originalStartDate.getTime()], ['asc', 'desc']);\n const columnsData = [];\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n for (let c = 0;; c++) {\n if (!columnsData[c]) {\n columnsData[c] = { appointments: [] };\n }\n let conflict = false;\n for (const placedSegment of columnsData[c].appointments) {\n const startDate = this.calendarService.create(appointmentSegment.startDate, this.calendar());\n const endDate = this.calendarService.create(appointmentSegment.endDate, this.calendar());\n if (startDate.compare(placedSegment.endDate, 'minute') < 0 &&\n endDate.compare(placedSegment.startDate, 'minute') > 0) {\n conflict = true;\n break;\n }\n }\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n if (c > appointmentsToLayout.length) {\n console.warn(`DayView: Safety break in column assignment for ${appointmentSegment.title}, assigning to new column ${c}`);\n if (!columnsData[c])\n columnsData[c] = { appointments: [] };\n columnsData[c].appointments.push(appointmentSegment);\n assignedCol = c;\n break;\n }\n }\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.id);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n layouts.set(appointmentSegment.id, {\n columnIndex: assignedCol,\n effectiveTotalColumns: effectiveCols,\n });\n }\n return layouts;\n });\n }\n handleAppointmentEvent(mouseEvent, appointment) {\n const originalAppointment = appointment.originalStartDate\n ? {\n ...appointment,\n startDate: appointment.originalStartDate,\n endDate: appointment.originalEndDate,\n }\n : appointment;\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSingleSlotEvent(mouseEvent, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' };\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' };\n const droppedAppt = e.dropped.dragData();\n const originalDroppedAppt = droppedAppt.originalStartDate\n ? {\n ...droppedAppt,\n startDate: droppedAppt.originalStartDate,\n endDate: droppedAppt.originalEndDate,\n }\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate,\n startDate: originalDroppedAppt.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleSingleDayDrop(e, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n const droppedAppt = e.dropped.dragData();\n const originalDroppedAppt = droppedAppt.originalStartDate\n ? {\n ...droppedAppt,\n startDate: droppedAppt.originalStartDate,\n endDate: droppedAppt.originalEndDate,\n }\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate,\n startDate: originalDroppedAppt.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({\n appointment: originalAppointment,\n nativeEvent: event,\n sender: this.scheduler,\n });\n }\n getAppointmentLayout(key) {\n return this.appointmentLayouts().get(key);\n }\n getAppointmentLeft(key) {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n const C = layout.columnIndex;\n if (C < 0) {\n console.warn('Invalid columnIndex < 0 for key:', key);\n return '0px';\n }\n if (C === 0 || N <= 1)\n return '0px';\n const leftPercent = C * (100 / N);\n const gapOffsetPx = C * this.GAP_PX;\n return `calc(${leftPercent}% + ${gapOffsetPx}px)`;\n }\n return '0px';\n }\n getAppointmentWidth(key) {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n if (N <= 0)\n return '0%';\n if (N === 1)\n return `calc(100% - ${this.GAP_PX}px)`;\n const widthPercent = (1 / N) * 100;\n return `calc(${widthPercent}% - ${this.GAP_PX}px)`;\n }\n return '0%';\n }\n getAppointmentTop(key) {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const startMinutes = appointmentSegment.startDate.getHours() * 60 + appointmentSegment.startDate.getMinutes();\n const startBlockOffset = startMinutes - this.startDayHour() * 60;\n const yBlock = startBlockOffset / 30;\n return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${yBlock} + 1px)`;\n }\n return '';\n }\n getAppointmentHeight(key) {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const durationMillis = appointmentSegment.endDate.getTime() - appointmentSegment.startDate.getTime();\n const durationMinutes = Math.max(0, durationMillis / (1000 * 60));\n if (durationMinutes <= 0)\n return '0px';\n const heightBlock = durationMinutes / 30;\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height)`;\n return `calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px)`;\n }\n return '0px';\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerDayViewComponent, isStandalone: true, selector: \"ax-scheduler-day-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onActionClickInternal: \"onActionClickInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-day-header\\\">\\n <div class=\\\"ax-scheduler-day-header-table\\\" aria-hidden=\\\"true\\\">\\n <div>\\n {{ '@acorex:dateTime.duration.all-day' | translate | async }}\\n </div>\\n </div>\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleAllDaySlotEvent($event)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event)\\\"\\n class=\\\"ax-scheduler-day-header-table-container\\\"\\n [attr.data-slot-id]=\\\"date().format('YYYYMMDD') + '-allday'\\\"\\n >\\n <div class=\\\"ax-scheduler-day-header-appointment-container\\\">\\n @if (allDayAppointments().length) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || allDayAppointments()[0].readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n [dragData]=\\\"allDayAppointments()[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n [title]=\\\"tooltipTemplate() ? '' : allDayAppointments()[0].title\\\"\\n class=\\\"ax-scheduler-header-day-appointment\\\"\\n [ngClass]=\\\"\\n allDayAppointments()[0].cssClass ??\\n `ax-scheduler-${allDayAppointments()[0].priority ?? 'primary'}-periority`\\n \\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ allDayAppointments()[0].title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, allDayAppointments()[0])\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n @if (allDayAppointments().length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-day-header-more-tag\\\"\\n [ngClass]=\\\"\\n allDayAppointments()[1].cssClass ??\\n `ax-scheduler-${allDayAppointments()[1].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n {{\\n '@acorex:common.general.more-items'\\n | translate: { params: { number: allDayAppointments().length - 1 } }\\n | async\\n }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\" axDropZone>\\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ appointment.startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ appointment.endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-day-time-container\\\">\\n <table class=\\\"ax-scheduler-day-time\\\" aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </table>\\n <div class=\\\"ax-scheduler-day-table-container\\\">\\n <div class=\\\"ax-scheduler-day-appointment-container\\\">\\n @for (appointment of singleDayAppointments(); track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-day-appointment\\\"\\n [style.width]=\\\"getAppointmentWidth(appointment.id)\\\"\\n [style.height]=\\\"getAppointmentHeight(appointment.id)\\\"\\n [style.inset-block-start]=\\\"getAppointmentTop(appointment.id)\\\"\\n [style.inset-inline-start]=\\\"getAppointmentLeft(appointment.id)\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-day-slot\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time)\\\"\\n [attr.data-slot-id]=\\\"time.format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time.add('minute', 30))\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n [attr.data-slot-id]=\\\"time.add('minute', 30).format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n }\\n </div>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:3;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:3;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:2;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }], template: \"<div class=\\\"ax-scheduler-day-header\\\">\\n <div class=\\\"ax-scheduler-day-header-table\\\" aria-hidden=\\\"true\\\">\\n <div>\\n {{ '@acorex:dateTime.duration.all-day' | translate | async }}\\n </div>\\n </div>\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleAllDaySlotEvent($event)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event)\\\"\\n class=\\\"ax-scheduler-day-header-table-container\\\"\\n [attr.data-slot-id]=\\\"date().format('YYYYMMDD') + '-allday'\\\"\\n >\\n <div class=\\\"ax-scheduler-day-header-appointment-container\\\">\\n @if (allDayAppointments().length) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || allDayAppointments()[0].readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n [dragData]=\\\"allDayAppointments()[0]\\\"\\n (click)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, allDayAppointments()[0])\\\"\\n [title]=\\\"tooltipTemplate() ? '' : allDayAppointments()[0].title\\\"\\n class=\\\"ax-scheduler-header-day-appointment\\\"\\n [ngClass]=\\\"\\n allDayAppointments()[0].cssClass ??\\n `ax-scheduler-${allDayAppointments()[0].priority ?? 'primary'}-periority`\\n \\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ allDayAppointments()[0].title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, allDayAppointments()[0])\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ allDayAppointments()[0].startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ allDayAppointments()[0].endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n @if (allDayAppointments().length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-day-header-more-tag\\\"\\n [ngClass]=\\\"\\n allDayAppointments()[1].cssClass ??\\n `ax-scheduler-${allDayAppointments()[1].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n {{\\n '@acorex:common.general.more-items'\\n | translate: { params: { number: allDayAppointments().length - 1 } }\\n | async\\n }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\" axDropZone>\\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ appointment.startDate | format: 'date' : { calendar: calendar() } | async }}\\n -\\n {{ appointment.endDate | format: 'date' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-day-time-container\\\">\\n <table class=\\\"ax-scheduler-day-time\\\" aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </table>\\n <div class=\\\"ax-scheduler-day-table-container\\\">\\n <div class=\\\"ax-scheduler-day-appointment-container\\\">\\n @for (appointment of singleDayAppointments(); track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-day-appointment\\\"\\n [style.width]=\\\"getAppointmentWidth(appointment.id)\\\"\\n [style.height]=\\\"getAppointmentHeight(appointment.id)\\\"\\n [style.inset-block-start]=\\\"getAppointmentTop(appointment.id)\\\"\\n [style.inset-inline-start]=\\\"getAppointmentLeft(appointment.id)\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{ appointment.originalStartDate | format: 'time' : { calendar: calendar() } | async }} -\\n {{ appointment.originalEndDate | format: 'time' : { calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-day-slot\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time)\\\"\\n [attr.data-slot-id]=\\\"time.format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time.add('minute', 30))\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time.add('minute', 30))\\\"\\n [attr.data-slot-id]=\\\"time.add('minute', 30).format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n }\\n </div>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-day-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-day-view .ax-scheduler-day-header{top:0;z-index:3;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table{z-index:3;position:sticky;inset-inline-start:0;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table div{display:flex;align-items:center;justify-content:center;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:var(--ax-comp-scheduler-basic-view-blocks-height);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container{width:100%;display:flex}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container{gap:1rem;display:flex;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-header-day-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-header .ax-scheduler-day-header-table-container .ax-scheduler-day-header-appointment-container .ax-scheduler-day-header-more-tag{display:flex;cursor:pointer;text-wrap:nowrap;flex-direction:column;padding-inline:.5rem;justify-content:center;border-radius:var(--ax-sys-border-radius)}ax-scheduler-day-view .ax-scheduler-day-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time{z-index:2;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container{width:100%;position:relative}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container{top:0;position:absolute;width:calc(100% - 2.5rem)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-appointment-container .ax-scheduler-day-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot{width:100%}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div{height:var(--ax-comp-scheduler-basic-view-blocks-height);display:block;padding-inline:.5rem;border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-day-view .ax-scheduler-day-time-container .ax-scheduler-day-table-container .ax-scheduler-day-slot div:first-child{border-block-start-width:0}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-header-day-appointment,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-appointment{cursor:pointer}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-header-table-container:hover,ax-scheduler-day-view:not(.ax-state-readonly) .ax-scheduler-day-slot>div:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2RheS9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFD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QixrREFDaEIsa0JBQWtCLHNSQUNsQixZQUFZLCtDQUNaLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQix3QkFBd0Isc0VBQ3hCLGtCQUFrQjs7MkZBSVQsMkJBQTJCO2tCQXBCdkMsU0FBUzsrQkFDRSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCwyQkFBMkI7d0JBQzNCLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsNkJBQTZCLEVBQUUsQ0FBQzs4QkFnVm5DLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBET0NVTUVOVCxcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWFRyYW5zbGF0b3JQaXBlLFxuICAgIEFYUG9wb3ZlckNvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IEdBUF9QWCA9IDE7XG5cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGVuZERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHN0YXJ0RGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0U2xvdElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0SCA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3QgZW5kSCA9IHRoaXMuZW5kRGF5SG91cigpO1xuICAgIGNvbnN0IGFsbEFwcG9pbnRtZW50c0luVmlldyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgaWYgKCF2aWV3RGF0ZSB8fCBhbGxBcHBvaW50bWVudHNJblZpZXcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYXBwdCBvZiBhbGxBcHBvaW50bWVudHNJblZpZXcpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoYXBwdCwgdmlld0RhdGUsIHN0YXJ0SCwgZW5kSCk7XG4gICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICBzZWdtZW50c0ZvclRoaXNEYXkucHVzaChzZWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRzRm9yVGhpc0RheTtcbiAgfSk7XG4gIGFsbERheUFwcG9pbnRtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbEFsbERheUFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk/LmZpbHRlcigoZSkgPT4gZSAmJiBlLmFsbERheSkgPz8gW107XG4gICAgY29uc3QgbXVsdGlEYXlCZWNvbWluZ0FsbERheVNlZ21lbnRzID1cbiAgICAgIHRoaXMucHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0KCk/LmZpbHRlcihcbiAgICAgICAgKHNlZ21lbnQpID0+IHNlZ21lbnQgJiYgc2VnbWVudC5hbGxEYXkgJiYgIXRoaXMuYXBwb2ludG1lbnRzKCkuZmluZCgob3JpZykgPT4gb3JpZy5pZCA9PT0gc2VnbWVudC5pZCk/LmFsbERheSxcbiAgICAgICkgPz8gW107XG4gICAgY29uc3QgY29tYmluZWQgPSBuZXcgTWFwPGFueSwgQVhTY2hlZHVsZXJBcHBvaW50bWVudD4oKTtcbiAgICBvcmlnaW5hbEFsbERheUFwcG9pbnRtZW50cy5mb3JFYWNoKChhcHB0KSA9PiBjb21iaW5lZC5zZXQoYXBwdC5pZCwgYXBwdCkpO1xuICAgIG11bHRpRGF5QmVjb21pbmdBbGxEYXlTZWdtZW50cy5mb3JFYWNoKChhcHB0KSA9PiB7XG4gICAgICBpZiAoIWNvbWJpbmVkLmhhcyhhcHB0LmlkKSkge1xuICAgICAgICBjb21iaW5lZC5zZXQoYXBwdC5pZCwgYXBwdCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oY29tYmluZWQudmFsdWVzKCkpO1xuICB9KTtcbiAgc2luZ2xlRGF5QXBwb2ludG1lbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCgpPy5maWx0ZXIoKGUpID0+IGUgJiYgIWUuYWxsRGF5KSA/PyBbXTtcbiAgfSk7XG5cbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IChhcHBvaW50bWVudCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGVcbiAgICAgID8gKHtcbiAgICAgICAgICAuLi5hcHBvaW50bWVudCxcbiAgICAgICAgICBzdGFydERhdGU6IChhcHBvaW50bWVudCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbEVuZERhdGUsXG4gICAgICAgIH0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudClcbiAgICAgIDogYXBwb2ludG1lbnQ7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZiwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICdhcHBvaW50bWVudCcsXG4gICAgKTtcbiAgfVxuICBoYW5kbGVTaW5nbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgc3RhcnREYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoc3RhcnREYXRlLCAnZGF5Jyk7XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgZW5kRGF0ZSA9IHRoaXMuZGF0ZSgpLmVuZE9mKCdkYXknKTtcbiAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmRhdGUoKS5zdGFydE9mKCdkYXknKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHsgc3RhcnREYXRlLCBlbmREYXRlLCB2aWV3OiAnZGF5JyBhcyBjb25zdCB9O1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVBbGxEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQpIHtcbiAgICBjb25zdCBlbmREYXRlID0gdGhpcy5kYXRlKCkuZW5kT2YoJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuZGF0ZSgpLnN0YXJ0T2YoJ2RheScpO1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXc6ICdkYXknIGFzIGNvbnN0IH07XG5cbiAgICBjb25zdCBkcm9wcGVkQXBwdCA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxEcm9wcGVkQXBwdCA9IChkcm9wcGVkQXBwdCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGVcbiAgICAgID8gKHtcbiAgICAgICAgICAuLi5kcm9wcGVkQXBwdCxcbiAgICAgICAgICBzdGFydERhdGU6IChkcm9wcGVkQXBwdCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbEVuZERhdGUsXG4gICAgICAgIH0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudClcbiAgICAgIDogZHJvcHBlZEFwcHQ7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbERyb3BwZWRBcHB0LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxEcm9wcGVkQXBwdC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlU2luZ2xlRGF5RHJvcChlOiBBWERyb3Bab25lRHJvcEV2ZW50LCBzdGFydERhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICdkYXknKTtcbiAgICBjb25zdCBkcm9wcGVkQXBwdCA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxEcm9wcGVkQXBwdCA9IChkcm9wcGVkQXBwdCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGVcbiAgICAgID8gKHtcbiAgICAgICAgICAuLi5kcm9wcGVkQXBwdCxcbiAgICAgICAgICBzdGFydERhdGU6IChkcm9wcGVkQXBwdCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCkub3JpZ2luYWxTdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbEVuZERhdGUsXG4gICAgICAgIH0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudClcbiAgICAgIDogZHJvcHBlZEFwcHQ7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbERyb3BwZWRBcHB0LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxEcm9wcGVkQXBwdC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIHRoaXMub25BY3Rpb25DbGlja0ludGVybmFsLmVtaXQoe1xuICAgICAgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgIH0pO1xuICB9XG5cbiAgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgYXBwb2ludG1lbnRMYXlvdXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dHMgPSBuZXcgTWFwPGFueSwgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dD4oKTtcbiAgICBjb25zdCBhcHBvaW50bWVudHNUb0xheW91dCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3Qgdmlld0RhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcblxuICAgIGlmIChhcHBvaW50bWVudHNUb0xheW91dC5sZW5ndGggPT09IDAgfHwgIXZpZXdEYXRlIHx8IHR5cGVvZiBzdGFydEggIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbmRIICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGxheW91dHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29uY3VycmVuY3lJbmZvTWFwID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgICBhcHBvaW50bWVudHNUb0xheW91dCxcbiAgICAgIHZpZXdEYXRlLFxuICAgICAgc3RhcnRILFxuICAgICAgZW5kSCxcbiAgICApO1xuXG4gICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0LFxuICAgICAgWyhlKSA9PiBlLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIChlKSA9PiBlLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBlLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKV0sXG4gICAgICBbJ2FzYycsICdkZXNjJ10sXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbnNEYXRhOiB7IGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSB9W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYXBwb2ludG1lbnRTZWdtZW50IG9mIHNvcnRlZEFwcG9pbnRtZW50cykge1xuICAgICAgbGV0IGFzc2lnbmVkQ29sID0gLTE7XG5cbiAgICAgIGZvciAobGV0IGMgPSAwOyA7IGMrKykge1xuICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSB7XG4gICAgICAgICAgY29sdW1uc0RhdGFbY10gPSB7IGFwcG9pbnRtZW50czogW10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb25mbGljdCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgcGxhY2VkU2VnbWVudCBvZiBjb2x1bW5zRGF0YVtjXS5hcHBvaW50bWVudHMpIHtcbiAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50U2VnbWVudC5lbmREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXJ0RGF0ZS5jb21wYXJlKHBsYWNlZFNlZ21lbnQuZW5kRGF0ZSwgJ21pbnV0ZScpIDwgMCAmJlxuICAgICAgICAgICAgZW5kRGF0ZS5jb21wYXJlKHBsYWNlZFNlZ21lbnQuc3RhcnREYXRlLCAnbWludXRlJykgPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25mbGljdCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbmZsaWN0KSB7XG4gICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cy5wdXNoKGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA+IGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBEYXlWaWV3OiBTYWZldHkgYnJlYWsgaW4gY29sdW1uIGFzc2lnbm1lbnQgZm9yICR7YXBwb2ludG1lbnRTZWdtZW50LnRpdGxlfSwgYXNzaWduaW5nIHRvIG5ldyBjb2x1bW4gJHtjfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSBjb2x1bW5zRGF0YVtjXSA9IHsgYXBwb2ludG1lbnRzOiBbXSB9O1xuICAgICAgICAgIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cy5wdXNoKGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbmN1cnJlbmN5SW5mbyA9IGNvbmN1cnJlbmN5SW5mb01hcC5nZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUNvbHMgPSBjb25jdXJyZW5jeUluZm8gPyBjb25jdXJyZW5jeUluZm8uZWZmZWN0aXZlVG90YWxDb2x1bW5zIDogMTtcblxuICAgICAgbGF5b3V0cy5zZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkLCB7XG4gICAgICAgIGNvbHVtbkluZGV4OiBhc3NpZ25lZENvbCxcbiAgICAgICAgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBlZmZlY3RpdmVDb2xzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsYXlvdXRzO1xuICB9KTtcblxuICBnZXRBcHBvaW50bWVudExheW91dChrZXk6IGFueSk6IEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFwcG9pbnRtZW50TGF5b3V0cygpLmdldChrZXkpO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRMZWZ0KGtleTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmdldEFwcG9pbnRtZW50TGF5b3V0KGtleSk7XG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMCkge1xuICAgICAgY29uc3QgTiA9IGxheW91dC5lZmZlY3RpdmVUb3RhbENvbHVtbnM7XG4gICAgICBjb25zdCBDID0gbGF5b3V0LmNvbHVtbkluZGV4O1xuICAgICAgaWYgKEMgPCAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBjb2x1bW5JbmRleCA8IDAgZm9yIGtleTonLCBrZXkpO1xuICAgICAgICByZXR1cm4gJzBweCc7XG4gICAgICB9XG4gICAgICBpZiAoQyA9PT0gMCB8fCBOIDw9IDEpIHJldHVybiAnMHB4JztcbiAgICAgIGNvbnN0IGxlZnRQZXJjZW50ID0gQyAqICgxMDAgLyBOKTtcbiAgICAgIGNvbnN0IGdhcE9mZnNldFB4ID0gQyAqIHRoaXMuR0FQX1BYO1xuICAgICAgcmV0dXJuIGBjYWxjKCR7bGVmdFBlcmNlbnR9JSArICR7Z2FwT2Zmc2V0UHh9cHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcwcHgnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRXaWR0aChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5nZXRBcHBvaW50bWVudExheW91dChrZXkpO1xuICAgIGlmIChsYXlvdXQgJiYgbGF5b3V0LmVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA+IDApIHtcbiAgICAgIGNvbnN0IE4gPSBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zO1xuXG4gICAgICBpZiAoTiA8PSAwKSByZXR1cm4gJzAlJztcbiAgICAgIGlmIChOID09PSAxKSByZXR1cm4gYGNhbGMoMTAwJSAtICR7dGhpcy5HQVBfUFh9cHgpYDtcblxuICAgICAgY29uc3Qgd2lkdGhQZXJjZW50ID0gKDEgLyBOKSAqIDEwMDtcblxuICAgICAgcmV0dXJuIGBjYWxjKCR7d2lkdGhQZXJjZW50fSUgLSAke3RoaXMuR0FQX1BYfXB4KWA7XG4gICAgfVxuICAgIHJldHVybiAnMCUnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRUb3Aoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0ga2V5KTtcblxuICAgIGlmIChhcHBvaW50bWVudFNlZ21lbnQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IGFwcG9pbnRtZW50U2VnbWVudC5zdGFydERhdGUuZ2V0SG91cnMoKSAqIDYwICsgYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBzdGFydEJsb2NrT2Zmc2V0ID0gc3RhcnRNaW51dGVzIC0gdGhpcy5zdGFydERheUhvdXIoKSAqIDYwO1xuICAgICAgY29uc3QgeUJsb2NrID0gc3RhcnRCbG9ja09mZnNldCAvIDMwO1xuICAgICAgcmV0dXJuIGBjYWxjKHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCkgKiAke3lCbG9ja30gKyAxcHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0QXBwb2ludG1lbnRIZWlnaHQoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCA9IHRoaXMuc2luZ2xlRGF5QXBwb2ludG1lbnRzKCkuZmluZCgoZSkgPT4gZS5pZCA9PT0ga2V5KTtcbiAgICBpZiAoYXBwb2ludG1lbnRTZWdtZW50KSB7XG4gICAgICBjb25zdCBkdXJhdGlvbk1pbGxpcyA9IGFwcG9pbnRtZW50U2VnbWVudC5lbmREYXRlLmdldFRpbWUoKSAtIGFwcG9pbnRtZW50U2VnbWVudC5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gTWF0aC5tYXgoMCwgZHVyYXRpb25NaWxsaXMgLyAoMTAwMCAqIDYwKSk7XG4gICAgICBpZiAoZHVyYXRpb25NaW51dGVzIDw9IDApIHJldHVybiAnMHB4JztcblxuICAgICAgY29uc3QgaGVpZ2h0QmxvY2sgPSBkdXJhdGlvbk1pbnV0ZXMgLyAzMDtcbiAgICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQpYDtcblxuICAgICAgcmV0dXJuIGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7aGVpZ2h0QmxvY2t9IC0gJHt0aGlzLkdBUF9QWH1weClgO1xuICAgIH1cbiAgICByZXR1cm4gJzBweCc7XG4gIH1cblxuICBnZXRTbG90SWQoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKVxuICAgICAgLmZpbmQoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5kYXRhc2V0WydzbG90SWQnXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYWdTdGFydFNsb3RJZC5zZXQoZHJvcExpc3RFbGVtZW50ID8gZHJvcExpc3RFbGVtZW50LmRhdGFzZXRbJ3Nsb3RJZCddIDogbnVsbCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWhlYWRlci10YWJsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxkaXY+XG4gICAgICB7eyAnQGFjb3JleDpkYXRlVGltZS5kdXJhdGlvbi5hbGwtZGF5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgYXhEcm9wWm9uZVxuICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlQWxsRGF5RHJvcCgkZXZlbnQpXCJcbiAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAoY2xpY2spPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudClcIlxuICAgIChkYmxjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50KVwiXG4gICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQpXCJcbiAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLXRhYmxlLWNvbnRhaW5lclwiXG4gICAgW2F0dHIuZGF0YS1zbG90LWlkXT1cImRhdGUoKS5mb3JtYXQoJ1lZWVlNTUREJykgKyAnLWFsbGRheSdcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLWFwcG9pbnRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0ucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwiYWxsRGF5QXBwb2ludG1lbnRzKClbMF1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0pXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFsbERheUFwcG9pbnRtZW50cygpWzBdKVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhbGxEYXlBcHBvaW50bWVudHMoKVswXSlcIlxuICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYWxsRGF5QXBwb2ludG1lbnRzKClbMF0udGl0bGVcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlci1kYXktYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgIGBheC1zY2hlZHVsZXItJHthbGxEYXlBcHBvaW50bWVudHMoKVswXS5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcbiAgICAgICAgICBcIlxuICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICB7eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5zdGFydERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAtXG4gICAgICAgICAgICB7eyBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5lbmREYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAjbW9yZUFwcG9pbnRtZW50c1xuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXItbW9yZS10YWdcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgYWxsRGF5QXBwb2ludG1lbnRzKClbMV0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgIGBheC1zY2hlZHVsZXItJHthbGxEYXlBcHBvaW50bWVudHMoKVsxXS5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdAYWNvcmV4OmNvbW1vbi5nZW5lcmFsLm1vcmUtaXRlbXMnXG4gICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IHBhcmFtczogeyBudW1iZXI6IGFsbERheUFwcG9pbnRtZW50cygpLmxlbmd0aCAtIDEgfSB9XG4gICAgICAgICAgICAgIHwgYXN5bmNcbiAgICAgICAgICB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LW92ZXJsYXktcGFuZSBheC1zY2hlZHVsZXItcG9wb3ZlclwiIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seSgpXCIgYXhEcm9wWm9uZT5cbiAgICAgICAgICAgIEBmb3IgKGFwcG9pbnRtZW50IG9mIGFsbERheUFwcG9pbnRtZW50cygpOyB0cmFjayBhcHBvaW50bWVudC5pZDsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgICAgICAgIEBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICB7eyBhcHBvaW50bWVudC5zdGFydERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgICAge3sgYXBwb2ludG1lbnQuZW5kRGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS10aW1lLWNvbnRhaW5lclwiPlxuICA8dGFibGUgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LXRpbWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYm9yZGVyXT1cIjFcIj5cbiAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdj5cbiAgICAgICAge3sgdGltZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L3RhYmxlPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS10YWJsZS1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICAgIEBmb3IgKGFwcG9pbnRtZW50IG9mIHNpbmdsZURheUFwcG9pbnRtZW50cygpOyB0cmFjayBhcHBvaW50bWVudC5pZCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgIChwb2ludGVyZG93bik9XCJnZXRTbG90SWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0QXBwb2ludG1lbnRXaWR0aChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiZ2V0QXBwb2ludG1lbnRIZWlnaHQoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtYmxvY2stc3RhcnRdPVwiZ2V0QXBwb2ludG1lbnRUb3AoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImdldEFwcG9pbnRtZW50TGVmdChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICB7eyBhcHBvaW50bWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX0gLVxuICAgICAgICAgICAge3sgYXBwb2ludG1lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LXNsb3RcIj5cbiAgICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZSlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJ0aW1lLmZvcm1hdCgnWVlZWU1NREQtSEhtbScpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICN6b25lMj1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUyLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLmFkZCgnbWludXRlJywgMzApKVwiXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUuYWRkKCdtaW51dGUnLCAzMCkpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJ0aW1lLmFkZCgnbWludXRlJywgMzApLmZvcm1hdCgnWVlZWU1NREQtSEhtbScpXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators'; // Adjust path\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DOCUMENT, HostBinding, inject, input, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerMonthViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n // --- Inputs ---\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.firstDayOfWeek = input('saturday');\n this.tooltipTemplate = input();\n // --- Constants ---\n this.DAYS_IN_WEEK = 7;\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n this.dragStartSlotId = signal(null);\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onActionClickInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n // --- Base Computeds ---\n // Calculate the start of the month based on the input date\n this.monthStartDate = computed(() => {\n const d = this.date();\n return d ? d.startOf('month') : null;\n });\n // Generate the list of weekday names based on the firstDayOfWeek\n this.daysArray = computed(() => {\n const dayNames = [];\n const currentDate = this.date(); // Use a stable date for generating week headers\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n // Calculate days to subtract to get to the start of the week based on firstDayOfWeek\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n let headerStartDate = currentDate.add('day', -daysToSubtract);\n for (let i = 0; i < 7; i++) {\n dayNames.push(headerStartDate);\n headerStartDate = headerStartDate.add('day', 1);\n }\n return dayNames;\n });\n // --- Calendar Grid Calculation ---\n this.calendarDaysInfo = computed(() => {\n const monthStart = this.monthStartDate();\n if (!monthStart)\n return { days: [], weeksNeeded: 0 };\n const firstDayOfMonth = monthStart;\n const lastDayOfMonth = monthStart.endOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const leadingDays = (firstDisplayedDayOfWeek - firstDayGridNum + this.DAYS_IN_WEEK) % this.DAYS_IN_WEEK;\n const firstDayOfGrid = firstDayOfMonth.add('day', -leadingDays);\n // Determine how many total days to show to fill out the weeks\n // A common approach is 6 weeks to ensure consistency, but your dynamic weeksNeeded is fine too.\n // Let's stick to your dynamic `weeksNeeded` and `totalDaysToGenerate`\n const daysInMonth = lastDayOfMonth.dayOfMonth;\n const totalCellsMinimum = leadingDays + daysInMonth;\n const weeksNeededDynamic = Math.ceil(totalCellsMinimum / this.DAYS_IN_WEEK);\n const actualWeeksToShow = Math.max(4, Math.min(weeksNeededDynamic, 6)); // Clamp weeks\n const totalDaysToGenerate = actualWeeksToShow * this.DAYS_IN_WEEK;\n const days = [];\n const today = this.calendarService.create(new Date());\n let currentDay = firstDayOfGrid;\n for (let i = 0; i < totalDaysToGenerate; i++) {\n const isHoliday = this.schedulerService.isHoliday(currentDay) || this.schedulerService.isWeekend(currentDay, this.calendar());\n let holidayTitle = null;\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => currentDay.equal(d.date, 'day'))[0];\n if (holiday) {\n holidayTitle = holiday.title;\n }\n }\n days.push({\n date: currentDay,\n isCurrentMonth: currentDay.monthOfYear === monthStart.monthOfYear,\n isToday: currentDay.equal(today, 'day'),\n isHoliday,\n holidayTitle,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n });\n // --- Appointment Grouping ---\n this.appointmentsGroupedByDay = computed(() => {\n const { days } = this.calendarDaysInfo(); // Destructure to get days array\n if (days.length === 0)\n return new Map();\n const viewStartDate = days[0].date;\n const viewEndDate = days[days.length - 1].date;\n const relevantAppointments = this.appointments();\n return this.schedulerService.groupAppointmentsByDay(relevantAppointments, viewStartDate, viewEndDate);\n });\n // --- Day Cell Layout Calculation ---\n this.dayCellLayouts = computed(() => {\n const { days: initialDaysInfo } = this.calendarDaysInfo();\n const allOriginalAppointments = this.appointments();\n if (initialDaysInfo.length === 0) {\n return []; // Return empty array if no days to process\n }\n if (!allOriginalAppointments || allOriginalAppointments.length === 0) {\n // If no appointments, map initialDaysInfo to the full structure with empty appointment arrays\n return initialDaysInfo.map((dayInfo) => ({\n ...dayInfo,\n appointments: [],\n visibleAppointments: [],\n hiddenAppointments: [],\n overflowCount: 0,\n }));\n }\n return initialDaysInfo.map((dayInfo) => {\n const dayAsStartOfDay = dayInfo.date.startOf('day');\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, dayAsStartOfDay, 0, // viewStartHour for month cell context (full day)\n 24, // viewEndHour for month cell context (full day)\n true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.originalStartDate.getTime(), // Then by original start time\n (s) => s.originalEndDate.getTime() - s.originalStartDate.getTime(), // Then by duration (longer first)\n (s) => s.title?.toLowerCase() ?? '', // Then by title\n ], ['asc', 'asc', 'desc', 'asc']);\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const overflowCount = hiddenAppointments.length;\n return {\n ...dayInfo,\n appointments: sortedSegments,\n visibleAppointments,\n hiddenAppointments,\n overflowCount,\n };\n });\n });\n // --- Dynamic Grid Rows ---\n this.gridTemplateRowsStyle = computed(() => {\n const { weeksNeeded } = this.calendarDaysInfo();\n if (!weeksNeeded || weeksNeeded <= 0) {\n return `repeat(6, minmax(0, 1fr))`; // Fallback, ensures grid is at least somewhat sensible\n }\n return `repeat(${weeksNeeded}, minmax(0, 1fr))`; // Use 1fr for equal distribution\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentSegmentOrOriginal) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegmentOrOriginal);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month'); // Ensure it's start of day\n if (slotData) {\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e, date) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({\n appointment: originalAppointment,\n nativeEvent: event,\n sender: this.scheduler,\n });\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerMonthViewComponent, isStandalone: true, selector: \"ax-scheduler-month-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: \"firstDayOfWeek\", publicName: \"firstDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onActionClickInternal: \"onActionClickInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-month-container\\\">\\n <!-- Weekday Header -->\\n <div class=\\\"ax-scheduler-month-weekdays\\\">\\n @for (day of daysArray(); track day.date.getTime()) {\\n <div class=\\\"ax-scheduler-month-weekday\\\">\\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <!-- Calendar Grid -->\\n <div class=\\\"ax-scheduler-month-grid\\\" [style.gridTemplateRows]=\\\"gridTemplateRowsStyle()\\\">\\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayCell.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n class=\\\"ax-scheduler-month-day-cell\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\n [class.ax-state-holiday]=\\\"dayCell.isHoliday\\\"\\n [class.ax-other-month]=\\\"!dayCell.isCurrentMonth\\\"\\n [attr.data-slot-id]=\\\"dayCell.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-month-day-header\\\">\\n <span class=\\\"ax-scheduler-month-day-number ax-scheduler-truncate\\\" [axTooltip]=\\\"dayCell.holidayTitle ?? ''\\\">\\n {{ dayCell.date.dayOfMonth }}\\n\\n @if (dayCell.holidayTitle) {\\n ( {{ dayCell.holidayTitle }} )\\n }\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-month-day-appointments\\\">\\n <!-- Visible Appointment Segments -->\\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n class=\\\"ax-scheduler-month-appointment-chip\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [class.continuation-to-next]=\\\"segment.isContinuationToNextDay && !segment.allDay\\\"\\n [class.continuation-from-prev]=\\\"segment.isContinuationFromPreviousDay && !segment.allDay\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title\\\">\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </span>\\n @if (!segment.allDay) {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n }\\n <!-- Overflow Badge and Popover -->\\n @if (dayCell.overflowCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Stop propagation to prevent slot click -->\\n +{{\\n '@acorex:common.general.more-items' | translate: { params: { number: dayCell.overflowCount } } | async\\n }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n axDropZone\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title\\\">\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </span>\\n @if (!segment.allDay) {\\n <span>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </span>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}ax-scheduler-month-view .ax-appointment-chip-title{display:flex;justify-content:space-between}ax-scheduler-month-view .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }], template: \"<div class=\\\"ax-scheduler-month-container\\\">\\n <!-- Weekday Header -->\\n <div class=\\\"ax-scheduler-month-weekdays\\\">\\n @for (day of daysArray(); track day.date.getTime()) {\\n <div class=\\\"ax-scheduler-month-weekday\\\">\\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <!-- Calendar Grid -->\\n <div class=\\\"ax-scheduler-month-grid\\\" [style.gridTemplateRows]=\\\"gridTemplateRowsStyle()\\\">\\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayCell.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (click)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayCell.date)\\\"\\n class=\\\"ax-scheduler-month-day-cell\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\n [class.ax-state-holiday]=\\\"dayCell.isHoliday\\\"\\n [class.ax-other-month]=\\\"!dayCell.isCurrentMonth\\\"\\n [attr.data-slot-id]=\\\"dayCell.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-month-day-header\\\">\\n <span class=\\\"ax-scheduler-month-day-number ax-scheduler-truncate\\\" [axTooltip]=\\\"dayCell.holidayTitle ?? ''\\\">\\n {{ dayCell.date.dayOfMonth }}\\n\\n @if (dayCell.holidayTitle) {\\n ( {{ dayCell.holidayTitle }} )\\n }\\n </span>\\n </div>\\n <div class=\\\"ax-scheduler-month-day-appointments\\\">\\n <!-- Visible Appointment Segments -->\\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n class=\\\"ax-scheduler-month-appointment-chip\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [class.continuation-to-next]=\\\"segment.isContinuationToNextDay && !segment.allDay\\\"\\n [class.continuation-from-prev]=\\\"segment.isContinuationFromPreviousDay && !segment.allDay\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title\\\">\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </span>\\n @if (!segment.allDay) {\\n <span>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </span>\\n }\\n </div>\\n }\\n <!-- Overflow Badge and Popover -->\\n @if (dayCell.overflowCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n <!-- Stop propagation to prevent slot click -->\\n +{{\\n '@acorex:common.general.more-items' | translate: { params: { number: dayCell.overflowCount } } | async\\n }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n axDropZone\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"segment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.title +\\n (segment.allDay\\n ? ''\\n : ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')')\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <span class=\\\"ax-appointment-chip-title\\\">\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </span>\\n @if (!segment.allDay) {\\n <span>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </span>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-month-view{height:100%;display:block;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-month-view .ax-scheduler-month-container{height:100%;display:flex;flex-direction:column;background-color:inherit}ax-scheduler-month-view .ax-scheduler-month-weekdays{top:0;z-index:2;width:100%;display:grid;flex-shrink:0;position:sticky;padding:.5rem 0;text-align:center;grid-template-columns:repeat(7,minmax(0,1fr));background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-weekdays .ax-scheduler-month-weekday{font-weight:500;font-size:.875rem}ax-scheduler-month-view .ax-scheduler-month-grid{width:100%;flex-grow:1;display:grid;grid-auto-rows:minmax(5rem,auto);grid-template-columns:repeat(7,minmax(0,1fr));border-left:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell{padding:.25rem;overflow:hidden;position:relative;border-right:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-bottom:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month{background-color:rgba(var(--ax-sys-color-border-lightest-surface),.2)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-on-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today{background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month{background-color:rgba(var(--ax-sys-color-primary-surface),.025)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-today.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-primary-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday .ax-scheduler-month-day-number{font-weight:700;color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell.ax-state-holiday.ax-other-month .ax-scheduler-month-day-number{color:rgba(var(--ax-sys-color-danger-surface),.5)}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header{text-align:center;margin-bottom:.25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-header .ax-scheduler-month-day-number{max-width:100%;font-size:.875rem;display:inline-block}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments{gap:.125rem;display:flex;overflow:hidden;flex-direction:column}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-appointment-chip{overflow:hidden;font-size:.75rem;white-space:nowrap;border-radius:.25rem;text-overflow:ellipsis;padding:.125rem .25rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-month-view .ax-scheduler-month-grid .ax-scheduler-month-day-cell .ax-scheduler-month-day-appointments .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-appointment-chip{cursor:pointer}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-month-view:not(.ax-state-readonly) .ax-scheduler-month-day-cell:hover.ax-state-holiday{background-color:rgba(var(--ax-sys-color-danger-surface),.1)}ax-scheduler-month-view .ax-appointment-chip-title{display:flex;justify-content:space-between}ax-scheduler-month-view .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2xpYi92aWV3cy9tb250aC9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyxDQUFDLGNBQWM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFjLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFFBQVEsRUFDUixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUVOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUs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QixrREFDaEIsa0JBQWtCLHNSQUNsQixZQUFZLCtDQUVaLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQixrQkFBa0IsNk1BQ2xCLHdCQUF3Qjs7MkZBS2YsNkJBQTZCO2tCQXJCekMsU0FBUzsrQkFDRSx5QkFBeUIsbUJBR2xCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCxTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVywrQkFBK0IsRUFBRSxDQUFDOzhCQStRckMsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJzsgLy8gQWRqdXN0IHBhdGhcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBET0NVTUVOVCxcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWERheU9mV2Vla05hbWUsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50IH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJzsgLy8gQWRqdXN0IHBhdGhcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuLy8gLS0tIFR5cGVzIHNwZWNpZmljIHRvIE1vbnRoIFZpZXcgTGF5b3V0IC0tLVxuLy8gUmVwcmVzZW50cyBhIHNpbmdsZSBkYXkgY2VsbCBpbiB0aGUgbW9udGggZ3JpZFxuZXhwb3J0IHR5cGUgQVhTY2hlZHVsZXJNb250aERheUNlbGwgPSB7XG4gIGRhdGU6IEFYRGF0ZVRpbWU7XG4gIGlzQ3VycmVudE1vbnRoOiBib29sZWFuO1xuICBpc1RvZGF5OiBib29sZWFuO1xuICBpc0hvbGlkYXk6IGJvb2xlYW47XG4gIGhvbGlkYXlUaXRsZT86IHN0cmluZztcbiAgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBbGwgYXBwb2ludG1lbnRzIGZvciB0aGlzIGRheVxuICB2aXNpYmxlQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBcHBvaW50bWVudHMgdG8gZGlzcGxheSBhcyBjaGlwc1xuICBoaWRkZW5BcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107IC8vIEFwcG9pbnRtZW50cyBoaWRkZW4gYmVoaW5kIHRoZSBiYWRnZVxuICBvdmVyZmxvd0NvdW50OiBudW1iZXI7IC8vIENvdW50IG9mIGhpZGRlbiBhcHBvaW50bWVudHMgKGxlbmd0aCBvZiBoaWRkZW5BcHBvaW50bWVudHMpXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItbW9udGgtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhGb3JtYXRQaXBlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWERyYWdEaXJlY3RpdmUsXG4gICAgQVhEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyTW9udGhWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICAvLyAtLS0gSW5wdXRzIC0tLVxuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIGZpcnN0RGF5T2ZXZWVrID0gaW5wdXQ8QVhEYXlPZldlZWtOYW1lPignc2F0dXJkYXknKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgLy8gLS0tIENvbnN0YW50cyAtLS1cbiAgcmVhZG9ubHkgREFZU19JTl9XRUVLID0gNztcbiAgcmVhZG9ubHkgTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkgPSAyO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0U2xvdElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICAvLyAtLS0gRXZlbnQgSGFuZGxlcnMgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRPdXRwdXRNYXAgPSB7XG4gICAgc2xvdDoge1xuICAgICAgY2xpY2s6IHRoaXMuc2xvdENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLnNsb3REYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5zbG90UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgICBhcHBvaW50bWVudDoge1xuICAgICAgY2xpY2s6IHRoaXMuYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5hcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLmFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgfTtcbiAgaGFuZGxlQXBwb2ludG1lbnRFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudFNlZ21lbnRPck9yaWdpbmFsOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50U2VnbWVudE9yT3JpZ2luYWwpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnbW9udGgnKTsgLy8gRW5zdXJlIGl0J3Mgc3RhcnQgb2YgZGF5XG4gICAgaWYgKHNsb3REYXRhKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGhhbmRsZURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICdtb250aCcpO1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBCYXNlIENvbXB1dGVkcyAtLS1cbiAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgbW9udGggYmFzZWQgb24gdGhlIGlucHV0IGRhdGVcbiAgbW9udGhTdGFydERhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZCA9IHRoaXMuZGF0ZSgpO1xuICAgIHJldHVybiBkID8gZC5zdGFydE9mKCdtb250aCcpIDogbnVsbDtcbiAgfSk7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIGxpc3Qgb2Ygd2Vla2RheSBuYW1lcyBiYXNlZCBvbiB0aGUgZmlyc3REYXlPZldlZWtcbiAgZGF5c0FycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRheU5hbWVzOiBBWERhdGVUaW1lW10gPSBbXTtcblxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5kYXRlKCk7IC8vIFVzZSBhIHN0YWJsZSBkYXRlIGZvciBnZW5lcmF0aW5nIHdlZWsgaGVhZGVyc1xuICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TmFtZSA9IHRoaXMuZmlyc3REYXlPZldlZWsoKTtcbiAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOdW1iZXIgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKGRlc2lyZWRGaXJzdERheU5hbWUpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGRheXMgdG8gc3VidHJhY3QgdG8gZ2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgd2VlayBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgbGV0IGhlYWRlclN0YXJ0RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBkYXlOYW1lcy5wdXNoKGhlYWRlclN0YXJ0RGF0ZSk7XG4gICAgICBoZWFkZXJTdGFydERhdGUgPSBoZWFkZXJTdGFydERhdGUuYWRkKCdkYXknLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRheU5hbWVzO1xuICB9KTtcblxuICAvLyAtLS0gQ2FsZW5kYXIgR3JpZCBDYWxjdWxhdGlvbiAtLS1cbiAgY2FsZW5kYXJEYXlzSW5mbyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtb250aFN0YXJ0ID0gdGhpcy5tb250aFN0YXJ0RGF0ZSgpO1xuICAgIGlmICghbW9udGhTdGFydCkgcmV0dXJuIHsgZGF5czogW10sIHdlZWtzTmVlZGVkOiAwIH07XG5cbiAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBtb250aFN0YXJ0O1xuICAgIGNvbnN0IGxhc3REYXlPZk1vbnRoID0gbW9udGhTdGFydC5lbmRPZignbW9udGgnKTtcblxuICAgIGNvbnN0IGZpcnN0RGF5R3JpZE51bSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIodGhpcy5maXJzdERheU9mV2VlaygpKTtcbiAgICBjb25zdCBmaXJzdERpc3BsYXllZERheU9mV2VlayA9IGZpcnN0RGF5T2ZNb250aC5kYXlPZldlZWs7XG5cbiAgICBjb25zdCBsZWFkaW5nRGF5cyA9IChmaXJzdERpc3BsYXllZERheU9mV2VlayAtIGZpcnN0RGF5R3JpZE51bSArIHRoaXMuREFZU19JTl9XRUVLKSAlIHRoaXMuREFZU19JTl9XRUVLO1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZHcmlkID0gZmlyc3REYXlPZk1vbnRoLmFkZCgnZGF5JywgLWxlYWRpbmdEYXlzKTtcblxuICAgIC8vIERldGVybWluZSBob3cgbWFueSB0b3RhbCBkYXlzIHRvIHNob3cgdG8gZmlsbCBvdXQgdGhlIHdlZWtzXG4gICAgLy8gQSBjb21tb24gYXBwcm9hY2ggaXMgNiB3ZWVrcyB0byBlbnN1cmUgY29uc2lzdGVuY3ksIGJ1dCB5b3VyIGR5bmFtaWMgd2Vla3NOZWVkZWQgaXMgZmluZSB0b28uXG4gICAgLy8gTGV0J3Mgc3RpY2sgdG8geW91ciBkeW5hbWljIGB3ZWVrc05lZWRlZGAgYW5kIGB0b3RhbERheXNUb0dlbmVyYXRlYFxuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbGFzdERheU9mTW9udGguZGF5T2ZNb250aDtcbiAgICBjb25zdCB0b3RhbENlbGxzTWluaW11bSA9IGxlYWRpbmdEYXlzICsgZGF5c0luTW9udGg7XG4gICAgY29uc3Qgd2Vla3NOZWVkZWREeW5hbWljID0gTWF0aC5jZWlsKHRvdGFsQ2VsbHNNaW5pbXVtIC8gdGhpcy5EQVlTX0lOX1dFRUspO1xuICAgIGNvbnN0IGFjdHVhbFdlZWtzVG9TaG93ID0gTWF0aC5tYXgoNCwgTWF0aC5taW4od2Vla3NOZWVkZWREeW5hbWljLCA2KSk7IC8vIENsYW1wIHdlZWtzXG4gICAgY29uc3QgdG90YWxEYXlzVG9HZW5lcmF0ZSA9IGFjdHVhbFdlZWtzVG9TaG93ICogdGhpcy5EQVlTX0lOX1dFRUs7XG5cbiAgICBjb25zdCBkYXlzOiB7XG4gICAgICBkYXRlOiBBWERhdGVUaW1lO1xuICAgICAgaXNDdXJyZW50TW9udGg6IGJvb2xlYW47XG4gICAgICBpc1RvZGF5OiBib29sZWFuO1xuICAgICAgaXNIb2xpZGF5OiBib29sZWFuO1xuICAgICAgaG9saWRheVRpdGxlPzogc3RyaW5nO1xuICAgIH1bXSA9IFtdO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIGxldCBjdXJyZW50RGF5ID0gZmlyc3REYXlPZkdyaWQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsRGF5c1RvR2VuZXJhdGU7IGkrKykge1xuICAgICAgY29uc3QgaXNIb2xpZGF5ID1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShjdXJyZW50RGF5KSB8fCB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGN1cnJlbnREYXksIHRoaXMuY2FsZW5kYXIoKSk7XG5cbiAgICAgIGxldCBob2xpZGF5VGl0bGU6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICAgICAgaWYgKGlzSG9saWRheSkge1xuICAgICAgICBjb25zdCBob2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmlsdGVyKChkKSA9PiBjdXJyZW50RGF5LmVxdWFsKGQuZGF0ZSwgJ2RheScpKVswXTtcbiAgICAgICAgaWYgKGhvbGlkYXkpIHtcbiAgICAgICAgICBob2xpZGF5VGl0bGUgPSBob2xpZGF5LnRpdGxlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRheXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXksXG4gICAgICAgIGlzQ3VycmVudE1vbnRoOiBjdXJyZW50RGF5Lm1vbnRoT2ZZZWFyID09PSBtb250aFN0YXJ0Lm1vbnRoT2ZZZWFyLFxuICAgICAgICBpc1RvZGF5OiBjdXJyZW50RGF5LmVxdWFsKHRvZGF5LCAnZGF5JyksXG4gICAgICAgIGlzSG9saWRheSxcbiAgICAgICAgaG9saWRheVRpdGxlLFxuICAgICAgfSk7XG4gICAgICBjdXJyZW50RGF5ID0gY3VycmVudERheS5hZGQoJ2RheScsIDEpO1xuICAgIH1cbiAgICByZXR1cm4geyBkYXlzOiBkYXlzLCB3ZWVrc05lZWRlZDogYWN0dWFsV2Vla3NUb1Nob3cgfTtcbiAgfSk7XG5cbiAgLy8gLS0tIEFwcG9pbnRtZW50IEdyb3VwaW5nIC0tLVxuICBhcHBvaW50bWVudHNHcm91cGVkQnlEYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgeyBkYXlzIH0gPSB0aGlzLmNhbGVuZGFyRGF5c0luZm8oKTsgLy8gRGVzdHJ1Y3R1cmUgdG8gZ2V0IGRheXMgYXJyYXlcbiAgICBpZiAoZGF5cy5sZW5ndGggPT09IDApIHJldHVybiBuZXcgTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPigpO1xuXG4gICAgY29uc3Qgdmlld1N0YXJ0RGF0ZSA9IGRheXNbMF0uZGF0ZTtcbiAgICBjb25zdCB2aWV3RW5kRGF0ZSA9IGRheXNbZGF5cy5sZW5ndGggLSAxXS5kYXRlO1xuICAgIGNvbnN0IHJlbGV2YW50QXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKTtcblxuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ3JvdXBBcHBvaW50bWVudHNCeURheShyZWxldmFudEFwcG9pbnRtZW50cywgdmlld1N0YXJ0RGF0ZSwgdmlld0VuZERhdGUpO1xuICB9KTtcblxuICAvLyAtLS0gRGF5IENlbGwgTGF5b3V0IENhbGN1bGF0aW9uIC0tLVxuICBkYXlDZWxsTGF5b3V0cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyTW9udGhEYXlDZWxsW10+KCgpID0+IHtcbiAgICBjb25zdCB7IGRheXM6IGluaXRpYWxEYXlzSW5mbyB9ID0gdGhpcy5jYWxlbmRhckRheXNJbmZvKCk7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuXG4gICAgaWYgKGluaXRpYWxEYXlzSW5mby5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTsgLy8gUmV0dXJuIGVtcHR5IGFycmF5IGlmIG5vIGRheXMgdG8gcHJvY2Vzc1xuICAgIH1cbiAgICBpZiAoIWFsbE9yaWdpbmFsQXBwb2ludG1lbnRzIHx8IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gSWYgbm8gYXBwb2ludG1lbnRzLCBtYXAgaW5pdGlhbERheXNJbmZvIHRvIHRoZSBmdWxsIHN0cnVjdHVyZSB3aXRoIGVtcHR5IGFwcG9pbnRtZW50IGFycmF5c1xuICAgICAgcmV0dXJuIGluaXRpYWxEYXlzSW5mby5tYXAoKGRheUluZm8pID0+ICh7XG4gICAgICAgIC4uLmRheUluZm8sXG4gICAgICAgIGFwcG9pbnRtZW50czogW10sXG4gICAgICAgIHZpc2libGVBcHBvaW50bWVudHM6IFtdLFxuICAgICAgICBoaWRkZW5BcHBvaW50bWVudHM6IFtdLFxuICAgICAgICBvdmVyZmxvd0NvdW50OiAwLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBpbml0aWFsRGF5c0luZm8ubWFwKChkYXlJbmZvKSA9PiB7XG4gICAgICBjb25zdCBkYXlBc1N0YXJ0T2ZEYXkgPSBkYXlJbmZvLmRhdGUuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoXG4gICAgICAgICAgYXBwdCxcbiAgICAgICAgICBkYXlBc1N0YXJ0T2ZEYXksXG4gICAgICAgICAgMCwgLy8gdmlld1N0YXJ0SG91ciBmb3IgbW9udGggY2VsbCBjb250ZXh0IChmdWxsIGRheSlcbiAgICAgICAgICAyNCwgLy8gdmlld0VuZEhvdXIgZm9yIG1vbnRoIGNlbGwgY29udGV4dCAoZnVsbCBkYXkpXG4gICAgICAgICAgdHJ1ZSwgLy8gaXNGdWxsRGF5Q2VsbENvbnRleHQgPSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydGVkU2VnbWVudHMgPSBvcmRlckJ5KFxuICAgICAgICBzZWdtZW50c0ZvclRoaXNEYXksXG4gICAgICAgIFtcbiAgICAgICAgICAocykgPT4gKHMuYWxsRGF5ID8gMCA6IDEpLCAvLyBTZWdtZW50cyBtYXJrZWQgYXMgYWxsRGF5IGZpcnN0XG4gICAgICAgICAgKHMpID0+IHMub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpLCAvLyBUaGVuIGJ5IG9yaWdpbmFsIHN0YXJ0IHRpbWVcbiAgICAgICAgICAocykgPT4gcy5vcmlnaW5hbEVuZERhdGUuZ2V0VGltZSgpIC0gcy5vcmlnaW5hbFN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFRoZW4gYnkgZHVyYXRpb24gKGxvbmdlciBmaXJzdClcbiAgICAgICAgICAocykgPT4gcy50aXRsZT8udG9Mb3dlckNhc2UoKSA/PyAnJywgLy8gVGhlbiBieSB0aXRsZVxuICAgICAgICBdLFxuICAgICAgICBbJ2FzYycsICdhc2MnLCAnZGVzYycsICdhc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHZpc2libGVBcHBvaW50bWVudHMgPSBzb3J0ZWRTZWdtZW50cy5zbGljZSgwLCB0aGlzLk1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZKTtcbiAgICAgIGNvbnN0IGhpZGRlbkFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dDb3VudCA9IGhpZGRlbkFwcG9pbnRtZW50cy5sZW5ndGg7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRheUluZm8sXG4gICAgICAgIGFwcG9pbnRtZW50czogc29ydGVkU2VnbWVudHMsXG4gICAgICAgIHZpc2libGVBcHBvaW50bWVudHMsXG4gICAgICAgIGhpZGRlbkFwcG9pbnRtZW50cyxcbiAgICAgICAgb3ZlcmZsb3dDb3VudCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBEeW5hbWljIEdyaWQgUm93cyAtLS1cbiAgZ3JpZFRlbXBsYXRlUm93c1N0eWxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHsgd2Vla3NOZWVkZWQgfSA9IHRoaXMuY2FsZW5kYXJEYXlzSW5mbygpO1xuICAgIGlmICghd2Vla3NOZWVkZWQgfHwgd2Vla3NOZWVkZWQgPD0gMCkge1xuICAgICAgcmV0dXJuIGByZXBlYXQoNiwgbWlubWF4KDAsIDFmcikpYDsgLy8gRmFsbGJhY2ssIGVuc3VyZXMgZ3JpZCBpcyBhdCBsZWFzdCBzb21ld2hhdCBzZW5zaWJsZVxuICAgIH1cbiAgICByZXR1cm4gYHJlcGVhdCgke3dlZWtzTmVlZGVkfSwgbWlubWF4KDAsIDFmcikpYDsgLy8gVXNlIDFmciBmb3IgZXF1YWwgZGlzdHJpYnV0aW9uXG4gIH0pO1xuXG4gIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWNvbnRhaW5lclwiPlxuICA8IS0tIFdlZWtkYXkgSGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLXdlZWtkYXlzXCI+XG4gICAgQGZvciAoZGF5IG9mIGRheXNBcnJheSgpOyB0cmFjayBkYXkuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtd2Vla2RheVwiPlxuICAgICAgICB7eyBkYXkgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8IS0tIENhbGVuZGFyIEdyaWQgLS0+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZ3JpZFwiIFtzdHlsZS5ncmlkVGVtcGxhdGVSb3dzXT1cImdyaWRUZW1wbGF0ZVJvd3NTdHlsZSgpXCI+XG4gICAgQGZvciAoZGF5Q2VsbCBvZiBkYXlDZWxsTGF5b3V0cygpOyB0cmFjayBkYXlDZWxsLmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudCwgZGF5Q2VsbC5kYXRlKVwiXG4gICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5Q2VsbC5kYXRlKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheUNlbGwuZGF0ZSlcIlxuICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1kYXktY2VsbFwiXG4gICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJkYXlDZWxsLmlzVG9kYXlcIlxuICAgICAgICBbY2xhc3MuYXgtc3RhdGUtaG9saWRheV09XCJkYXlDZWxsLmlzSG9saWRheVwiXG4gICAgICAgIFtjbGFzcy5heC1vdGhlci1tb250aF09XCIhZGF5Q2VsbC5pc0N1cnJlbnRNb250aFwiXG4gICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXlDZWxsLmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1kYXktaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LW51bWJlciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIiBbYXhUb29sdGlwXT1cImRheUNlbGwuaG9saWRheVRpdGxlID8/ICcnXCI+XG4gICAgICAgICAgICB7eyBkYXlDZWxsLmRhdGUuZGF5T2ZNb250aCB9fVxuXG4gICAgICAgICAgICBAaWYgKGRheUNlbGwuaG9saWRheVRpdGxlKSB7XG4gICAgICAgICAgICAgICgge3sgZGF5Q2VsbC5ob2xpZGF5VGl0bGUgfX0gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LWFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgIDwhLS0gVmlzaWJsZSBBcHBvaW50bWVudCBTZWdtZW50cyAtLT5cbiAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheUNlbGwudmlzaWJsZUFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZW1wbGF0ZSgpXG4gICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICA6IHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtYXBwb2ludG1lbnQtY2hpcFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke3NlZ21lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNvbnRpbnVhdGlvbi10by1uZXh0XT1cInNlZ21lbnQuaXNDb250aW51YXRpb25Ub05leHREYXkgJiYgIXNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNvbnRpbnVhdGlvbi1mcm9tLXByZXZdPVwic2VnbWVudC5pc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheSAmJiAhc2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtYXBwb2ludG1lbnQtY2hpcC10aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPCEtLSBPdmVyZmxvdyBCYWRnZSBhbmQgUG9wb3ZlciAtLT5cbiAgICAgICAgICBAaWYgKGRheUNlbGwub3ZlcmZsb3dDb3VudCA+IDApIHtcbiAgICAgICAgICAgIDxkaXYgI21vcmVBcHBvaW50bWVudHMgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtb3ZlcmZsb3ctYmFkZ2VcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgIDwhLS0gU3RvcCBwcm9wYWdhdGlvbiB0byBwcmV2ZW50IHNsb3QgY2xpY2sgLS0+XG4gICAgICAgICAgICAgICt7e1xuICAgICAgICAgICAgICAgICdAYWNvcmV4OmNvbW1vbi5nZW5lcmFsLm1vcmUtaXRlbXMnIHwgdHJhbnNsYXRlOiB7IHBhcmFtczogeyBudW1iZXI6IGRheUNlbGwub3ZlcmZsb3dDb3VudCB9IH0gfCBhc3luY1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXgtcG9wb3ZlciBbdGFyZ2V0XT1cIm1vcmVBcHBvaW50bWVudHNcIiBwbGFjZW1lbnQ9XCJib3R0b20tc3RhcnRcIiB0cmlnZ2VyPVwiY2xpY2tcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXIgYXgtc2NoZWR1bGVyLW1vbnRoLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlDZWxsLmhpZGRlbkFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZW1wbGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke3NlZ21lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWFwcG9pbnRtZW50LWNoaXAtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IHNlZ21lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXNlZ21lbnQuYWxsRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DOCUMENT, HostBinding, ViewEncapsulation, computed, inject, input, output, signal, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.GAP_PX = 1;\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.dragStartSlotId = signal(null);\n /**\n * Processes original appointments to get segments relevant to this specific day and its viewable hours.\n * Filters out original all-day events.\n */\n this.processedSegmentsForLayout = computed(() => {\n const viewDate = this.date();\n const allOriginalAppointments = this.appointments();\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n if (!viewDate || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n const segmentsOnThisDay = [];\n for (const appt of allOriginalAppointments) {\n if (appt.allDay) {\n continue;\n }\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, viewConfigStartHour, viewConfigEndHour, false);\n if (segment) {\n segmentsOnThisDay.push(segment);\n }\n }\n return segmentsOnThisDay;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onActionClickInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n // --- Appointment Layout Calculation ---\n this.appointmentLayouts = computed(() => {\n const finalLayouts = [];\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n const appointmentsToLayout = this.processedSegmentsForLayout(); // USE SEGMENTS\n if (typeof viewConfigStartHour !== 'number' ||\n typeof viewConfigEndHour !== 'number' ||\n appointmentsToLayout.length === 0) {\n return finalLayouts;\n }\n const sortedAppointments = orderBy(appointmentsToLayout, [(seg) => seg.startDate.getTime(), (seg) => seg.originalEndDate.getTime()], ['asc', 'desc']);\n const rowEndTimes = [];\n for (const segment of sortedAppointments) {\n const horizLayout = this.schedulerService.calculateTimelineLayout(segment, // Pass the segment\n viewConfigStartHour, viewConfigEndHour);\n if (!horizLayout)\n continue; // Segment is outside the viewable hour range or invalid\n // For overlap check, use the segment's start and end times\n const segmentStartTime = this.calendarService.create(segment.startDate, this.calendar());\n const segmentEndTime = this.calendarService.create(segment.endDate, this.calendar());\n let assignedRowIndex = -1;\n for (let i = 0; i < rowEndTimes.length; i++) {\n // If this segment starts AFTER OR AT the time the row becomes free\n if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {\n assignedRowIndex = i;\n break;\n }\n }\n if (assignedRowIndex === -1) {\n assignedRowIndex = rowEndTimes.length;\n rowEndTimes.push(segmentEndTime); // Add segment's end time for the new row\n }\n else {\n // Update the end time for the assigned row with this segment's end time\n rowEndTimes[assignedRowIndex] = segmentEndTime;\n }\n const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)'; // CSS variable for height\n const layoutLeft = horizLayout.left;\n const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`; // Apply horizontal gap if items are side-by-side within a row (not typical for this stacking)\n const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`; // Vertical stacking with gap\n finalLayouts.push({\n appointment: segment, // Store the segment data\n layoutLeft,\n layoutWidth,\n layoutTop,\n layoutHeight,\n });\n }\n return finalLayouts;\n });\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleDrop(e, startDate) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({\n appointment: originalAppointment,\n nativeEvent: event,\n sender: this.scheduler,\n });\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineDayViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-day-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onActionClickInternal: \"onActionClickInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-header\\\">\\n @for (hour of hoursArray(); track hour.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-header-hours\\\">\\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\\n </div>\\n }\\n</div>\\n\\n<div class=\\\"ax-scheduler-timeline-content\\\">\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || layout.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"layout.appointment\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : layout.appointment.title\\\"\\n [style.width]=\\\"layout.layoutWidth\\\"\\n [style.height]=\\\"layout.layoutHeight\\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [style.insetBlockStart]=\\\"layout.layoutTop\\\"\\n [style.insetInlineStart]=\\\"layout.layoutLeft\\\"\\n [ngClass]=\\\"layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ layout.appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, layout.appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div class=\\\"ax-scheduler-timeline-slot-row\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-slot-cell\\\"\\n (click)=\\\"handleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, time)\\\"\\n [attr.data-slot-id]=\\\"time.format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-header\\\">\\n @for (hour of hoursArray(); track hour.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-header-hours\\\">\\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\\n </div>\\n }\\n</div>\\n\\n<div class=\\\"ax-scheduler-timeline-content\\\">\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || layout.appointment.readonly || readonly()\\\"\\n [dragData]=\\\"layout.appointment\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, layout.appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : layout.appointment.title\\\"\\n [style.width]=\\\"layout.layoutWidth\\\"\\n [style.height]=\\\"layout.layoutHeight\\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [style.insetBlockStart]=\\\"layout.layoutTop\\\"\\n [style.insetInlineStart]=\\\"layout.layoutLeft\\\"\\n [ngClass]=\\\"layout.appointment.cssClass ?? `ax-scheduler-${layout.appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ layout.appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, layout.appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n <div class=\\\"ax-scheduler-timeline-slot-row\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, time)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-slot-cell\\\"\\n (click)=\\\"handleSlotEvent($event, time)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, time)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, time)\\\"\\n [attr.data-slot-id]=\\\"time.format('YYYYMMDD-HHmm')\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-timeline-day-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header{top:0;z-index:2;width:100%;display:flex;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit);border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours{position:relative;padding:.25rem .5rem;width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view .ax-scheduler-timeline-header .ax-scheduler-timeline-header-hours span{position:sticky;inset-inline-start:.5rem}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content{height:100%;position:relative}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{top:0;width:100%;height:100%;position:absolute}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row{height:100%;display:flex}ax-scheduler-timeline-day-view .ax-scheduler-timeline-content .ax-scheduler-timeline-slot-row .ax-scheduler-timeline-slot-cell{width:var(--ax-comp-scheduler-timeline-view-blocks-width);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{z-index:1;cursor:pointer}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell{z-index:0;cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-day-view:not(.ax-state-readonly) .ax-scheduler-timeline-slot-cell:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-day-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-day-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLWRheS9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBRVgsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1wQyxPQUFPLEVBRUwsb0JBQW9CLEdBR3JCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBb0I3RCxNQUFNLE9BQU8sbUNBQW9DLFNBQVEsV0FBVztJQWxCcEU7O1FBbUJVLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFN0MsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVwQixhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsZUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixhQUFRLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDM0IsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWMsQ0FBQztRQUNwQyxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3hDLGlCQUFZLEdBQUcsS0FBSyxDQUEyQixFQUFFLENBQUMsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLEtBQUssRUFBaUMsQ0FBQztRQUVqRCxvQkFBZSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFFdEQ7OztXQUdHO1FBQ0gsK0JBQTBCLEdBQUcsUUFBUSxDQUFrQyxHQUFHLEVBQUU7WUFDMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2hELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRTVDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyx1QkFBdUIsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2xGLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUVELE1BQU0saUJBQWlCLEdBQW9DLEVBQUUsQ0FBQztZQUM5RCxLQUFLLE1BQU0sSUFBSSxJQUFJLHVCQUF1QixFQUFFLENBQUM7Z0JBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNoQixTQUFTO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxDQUNwRSxJQUFJLEVBQ0osUUFBUSxFQUNSLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsS0FBSyxDQUNOLENBQUM7Z0JBRUYsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILCtEQUErRDtRQUMvRCx3QkFBbUIsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDMUQsMkJBQXNCLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQzdELDZCQUF3QixHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUMvRCwrQkFBMEIsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDeEUsa0NBQTZCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQzNFLG9DQUErQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUM3RSwwQkFBcUIsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDbkUsOEJBQXlCLEdBQUcsTUFBTSxFQUE0QixDQUFDO1FBRS9ELHlCQUF5QjtRQUNSLG1CQUFjLEdBQUc7WUFDaEMsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtnQkFDckMsV0FBVyxFQUFFLElBQUksQ0FBQyx3QkFBd0I7YUFDM0M7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQywwQkFBMEI7Z0JBQ3RDLFFBQVEsRUFBRSxJQUFJLENBQUMsNkJBQTZCO2dCQUM1QyxXQUFXLEVBQUUsSUFBSSxDQUFDLCtCQUErQjthQUNsRDtTQUNGLENBQUM7UUFrREYsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCx5Q0FBeUM7UUFDekMsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQW1DLEVBQUU7WUFDakUsTUFBTSxZQUFZLEdBQW1DLEVBQUUsQ0FBQztZQUN4RCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUMsZUFBZTtZQUUvRSxJQUNFLE9BQU8sbUJBQW1CLEtBQUssUUFBUTtnQkFDdkMsT0FBTyxpQkFBaUIsS0FBSyxRQUFRO2dCQUNyQyxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUNqQyxDQUFDO2dCQUNELE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUM7WUFFRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FDaEMsb0JBQW9CLEVBQ3BCLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDMUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQ2hCLENBQUM7WUFFRixNQUFNLFdBQVcsR0FBaUIsRUFBRSxDQUFDO1lBRXJDLEtBQUssTUFBTSxPQUFPLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUMvRCxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixtQkFBbUIsRUFDbkIsaUJBQWlCLENBQ2xCLENBQUM7Z0JBRUYsSUFBSSxDQUFDLFdBQVc7b0JBQUUsU0FBUyxDQUFDLHdEQUF3RDtnQkFFcEYsMkRBQTJEO2dCQUMzRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3pGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBRXJGLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzVDLG1FQUFtRTtvQkFDbkUsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUM1RCxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7d0JBQ3JCLE1BQU07b0JBQ1IsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztvQkFDdEMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztnQkFDN0UsQ0FBQztxQkFBTSxDQUFDO29CQUNOLHdFQUF3RTtvQkFDeEUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsY0FBYyxDQUFDO2dCQUNqRCxDQUFDO2dCQUVELE1BQU0sWUFBWSxHQUFHLHNEQUFzRCxDQUFDLENBQUMsMEJBQTBCO2dCQUN2RyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNwQyxNQUFNLFdBQVcsR0FBRyxRQUFRLFdBQVcsQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsOEZBQThGO2dCQUNuSyxNQUFNLFNBQVMsR0FBRyxRQUFRLGdCQUFnQixPQUFPLFlBQVksTUFBTSxJQUFJLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQyw2QkFBNkI7Z0JBRW5ILFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQ2hCLFdBQVcsRUFBRSxPQUFPLEVBQUUseUJBQXlCO29CQUMvQyxVQUFVO29CQUNWLFdBQVc7b0JBQ1gsU0FBUztvQkFDVCxZQUFZO2lCQUNiLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztLQVlKO0lBN0lDLHNCQUFzQixDQUFDLFVBQXNCLEVBQUUsZUFBdUM7UUFDcEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQy9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ2hGLElBQUksQ0FBQyxjQUFjLEVBQ25CLGFBQWEsQ0FDZCxDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWUsQ0FBQyxVQUFzQixFQUFFLFNBQXFCO1FBQzNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLElBQUksUUFBUTtZQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQy9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ25FLElBQUksQ0FBQyxjQUFjLEVBQ25CLE1BQU0sQ0FDUCxDQUFDO0lBQ04sQ0FBQztJQUNELFVBQVUsQ0FBQyxDQUFzQixFQUFFLFNBQXFCO1FBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUE0QixDQUFDO1FBQ25FLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLEdBQUcsbUJBQW1CO1lBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxPQUFPO1lBQ3BDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTO1NBQ3pDLENBQUM7UUFDRixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDO1lBQ2xDLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDdEIsV0FBVyxFQUFFLGNBQWM7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDaEYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGlCQUFpQixDQUFDLEtBQWlCLEVBQUUsZUFBdUM7UUFDMUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDOUIsV0FBVyxFQUFFLG1CQUFtQjtZQUNoQyxXQUFXLEVBQUUsS0FBSztZQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQW9GRCxTQUFTLENBQUMsQ0FBZTtRQUN2QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNsQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdkMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFxQixFQUFFLENBQUMsRUFBRSxZQUFZLFdBQVcsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQTRDLFVBQVU7UUFDcEQsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0EzTlUsbUNBQW1DO2tHQUFuQyxtQ0FBbUMsaTdEQUZuQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQyxpRENsRHpGLHM3RkFxRUEsdWhGRDVCSSxPQUFPLG9GQUNQLDJCQUEyQixvTEFDM0IsWUFBWSwwQ0FDWixTQUFTLDhDQUNULGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQix3QkFBd0Isc0VBQ3hCLGtCQUFrQjs7MkZBSVQsbUNBQW1DO2tCQWxCL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsbUJBR3pCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCwyQkFBMkI7d0JBQzNCLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxxQ0FBcUMsRUFBRSxDQUFDOzhCQTJOM0MsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBHQVBfUFggPSAxO1xuXG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICBwcml2YXRlIGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogUHJvY2Vzc2VzIG9yaWdpbmFsIGFwcG9pbnRtZW50cyB0byBnZXQgc2VnbWVudHMgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBkYXkgYW5kIGl0cyB2aWV3YWJsZSBob3Vycy5cbiAgICogRmlsdGVycyBvdXQgb3JpZ2luYWwgYWxsLWRheSBldmVudHMuXG4gICAqL1xuICBwcm9jZXNzZWRTZWdtZW50c0ZvckxheW91dCA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGNvbnN0IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKTtcbiAgICBjb25zdCB2aWV3Q29uZmlnU3RhcnRIb3VyID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCB2aWV3Q29uZmlnRW5kSG91ciA9IHRoaXMuZW5kRGF5SG91cigpO1xuXG4gICAgaWYgKCF2aWV3RGF0ZSB8fCAhYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgfHwgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc2VnbWVudHNPblRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgIGlmIChhcHB0LmFsbERheSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShcbiAgICAgICAgYXBwdCxcbiAgICAgICAgdmlld0RhdGUsXG4gICAgICAgIHZpZXdDb25maWdTdGFydEhvdXIsXG4gICAgICAgIHZpZXdDb25maWdFbmRIb3VyLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIHNlZ21lbnRzT25UaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50c09uVGhpc0RheTtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3RpbWVsaW5lLWRheScpO1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3RpbWVsaW5lLWRheScpO1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICB9KTtcbiAgfVxuXG4gIGhvdXJzQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IHRpbWUgPSB0aGlzLmRhdGUoKTtcbiAgICBpZiAoIXRpbWUpIHJldHVybiBbXTtcbiAgICB0aW1lID0gdGltZS5zZXQoJ2hvdXInLCB0aGlzLnN0YXJ0RGF5SG91cigpKS5zdGFydE9mKCdob3VyJyk7XG4gICAgY29uc3QgaG91cnMgPSBbdGltZV07XG4gICAgd2hpbGUgKHRpbWUuaG91ciA8IHRoaXMuZW5kRGF5SG91cigpIC0gMSkge1xuICAgICAgdGltZSA9IHRpbWUuYWRkKCdob3VyJywgMSk7XG4gICAgICBob3Vycy5wdXNoKHRpbWUpO1xuICAgIH1cbiAgICByZXR1cm4gaG91cnM7XG4gIH0pO1xuXG4gIC8vIC0tLSBBcHBvaW50bWVudCBMYXlvdXQgQ2FsY3VsYXRpb24gLS0tXG4gIGFwcG9pbnRtZW50TGF5b3V0cyA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0W10gPT4ge1xuICAgIGNvbnN0IGZpbmFsTGF5b3V0czogQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dFtdID0gW107XG4gICAgY29uc3Qgdmlld0NvbmZpZ1N0YXJ0SG91ciA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3Qgdmlld0NvbmZpZ0VuZEhvdXIgPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICBjb25zdCBhcHBvaW50bWVudHNUb0xheW91dCA9IHRoaXMucHJvY2Vzc2VkU2VnbWVudHNGb3JMYXlvdXQoKTsgLy8gVVNFIFNFR01FTlRTXG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygdmlld0NvbmZpZ1N0YXJ0SG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGVvZiB2aWV3Q29uZmlnRW5kSG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIGZpbmFsTGF5b3V0cztcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0ZWRBcHBvaW50bWVudHMgPSBvcmRlckJ5KFxuICAgICAgYXBwb2ludG1lbnRzVG9MYXlvdXQsXG4gICAgICBbKHNlZykgPT4gc2VnLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIChzZWcpID0+IHNlZy5vcmlnaW5hbEVuZERhdGUuZ2V0VGltZSgpXSxcbiAgICAgIFsnYXNjJywgJ2Rlc2MnXSxcbiAgICApO1xuXG4gICAgY29uc3Qgcm93RW5kVGltZXM6IEFYRGF0ZVRpbWVbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNvcnRlZEFwcG9pbnRtZW50cykge1xuICAgICAgY29uc3QgaG9yaXpMYXlvdXQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlVGltZWxpbmVMYXlvdXQoXG4gICAgICAgIHNlZ21lbnQsIC8vIFBhc3MgdGhlIHNlZ21lbnRcbiAgICAgICAgdmlld0NvbmZpZ1N0YXJ0SG91cixcbiAgICAgICAgdmlld0NvbmZpZ0VuZEhvdXIsXG4gICAgICApO1xuXG4gICAgICBpZiAoIWhvcml6TGF5b3V0KSBjb250aW51ZTsgLy8gU2VnbWVudCBpcyBvdXRzaWRlIHRoZSB2aWV3YWJsZSBob3VyIHJhbmdlIG9yIGludmFsaWRcblxuICAgICAgLy8gRm9yIG92ZXJsYXAgY2hlY2ssIHVzZSB0aGUgc2VnbWVudCdzIHN0YXJ0IGFuZCBlbmQgdGltZXNcbiAgICAgIGNvbnN0IHNlZ21lbnRTdGFydFRpbWUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnbWVudC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBzZWdtZW50RW5kVGltZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShzZWdtZW50LmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG5cbiAgICAgIGxldCBhc3NpZ25lZFJvd0luZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0VuZFRpbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIElmIHRoaXMgc2VnbWVudCBzdGFydHMgQUZURVIgT1IgQVQgdGhlIHRpbWUgdGhlIHJvdyBiZWNvbWVzIGZyZWVcbiAgICAgICAgaWYgKHNlZ21lbnRTdGFydFRpbWUuY29tcGFyZShyb3dFbmRUaW1lc1tpXSwgJ21pbnV0ZScpID49IDApIHtcbiAgICAgICAgICBhc3NpZ25lZFJvd0luZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXNzaWduZWRSb3dJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYXNzaWduZWRSb3dJbmRleCA9IHJvd0VuZFRpbWVzLmxlbmd0aDtcbiAgICAgICAgcm93RW5kVGltZXMucHVzaChzZWdtZW50RW5kVGltZSk7IC8vIEFkZCBzZWdtZW50J3MgZW5kIHRpbWUgZm9yIHRoZSBuZXcgcm93XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIGVuZCB0aW1lIGZvciB0aGUgYXNzaWduZWQgcm93IHdpdGggdGhpcyBzZWdtZW50J3MgZW5kIHRpbWVcbiAgICAgICAgcm93RW5kVGltZXNbYXNzaWduZWRSb3dJbmRleF0gPSBzZWdtZW50RW5kVGltZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF5b3V0SGVpZ2h0ID0gJ3ZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLXRpbWVsaW5lLXZpZXctYmxvY2tzLWhlaWdodCknOyAvLyBDU1MgdmFyaWFibGUgZm9yIGhlaWdodFxuICAgICAgY29uc3QgbGF5b3V0TGVmdCA9IGhvcml6TGF5b3V0LmxlZnQ7XG4gICAgICBjb25zdCBsYXlvdXRXaWR0aCA9IGBjYWxjKCR7aG9yaXpMYXlvdXQud2lkdGh9IC0gJHt0aGlzLkdBUF9QWH1weClgOyAvLyBBcHBseSBob3Jpem9udGFsIGdhcCBpZiBpdGVtcyBhcmUgc2lkZS1ieS1zaWRlIHdpdGhpbiBhIHJvdyAobm90IHR5cGljYWwgZm9yIHRoaXMgc3RhY2tpbmcpXG4gICAgICBjb25zdCBsYXlvdXRUb3AgPSBgY2FsYygke2Fzc2lnbmVkUm93SW5kZXh9ICogKCR7bGF5b3V0SGVpZ2h0fSArICR7dGhpcy5HQVBfUFh9cHgpKWA7IC8vIFZlcnRpY2FsIHN0YWNraW5nIHdpdGggZ2FwXG5cbiAgICAgIGZpbmFsTGF5b3V0cy5wdXNoKHtcbiAgICAgICAgYXBwb2ludG1lbnQ6IHNlZ21lbnQsIC8vIFN0b3JlIHRoZSBzZWdtZW50IGRhdGFcbiAgICAgICAgbGF5b3V0TGVmdCxcbiAgICAgICAgbGF5b3V0V2lkdGgsXG4gICAgICAgIGxheW91dFRvcCxcbiAgICAgICAgbGF5b3V0SGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsTGF5b3V0cztcbiAgfSk7XG5cbiAgZ2V0U2xvdElkKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IGRyb3BMaXN0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICAgIC5lbGVtZW50c0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSlcbiAgICAgIC5maW5kKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnc2xvdElkJ10gIT09IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kcmFnU3RhcnRTbG90SWQuc2V0KGRyb3BMaXN0RWxlbWVudCA/IGRyb3BMaXN0RWxlbWVudC5kYXRhc2V0WydzbG90SWQnXSA6IG51bGwpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5heC1zdGF0ZS1yZWFkb25seScpIGdldCBpc1JlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyXCI+XG4gIEBmb3IgKGhvdXIgb2YgaG91cnNBcnJheSgpOyB0cmFjayBob3VyLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1oZWFkZXItaG91cnNcIj5cbiAgICAgIDxzcGFuPnt7IGhvdXIgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWNvbnRlbnRcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICBAZm9yIChsYXlvdXQgb2YgYXBwb2ludG1lbnRMYXlvdXRzKCk7IHRyYWNrIGxheW91dC5hcHBvaW50bWVudC5pZCkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyYWdcbiAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgbGF5b3V0LmFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICBbZHJhZ0RhdGFdPVwibGF5b3V0LmFwcG9pbnRtZW50XCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBsYXlvdXQuYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwibGF5b3V0LmxheW91dFdpZHRoXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJsYXlvdXQubGF5b3V0SGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnRcIlxuICAgICAgICBbc3R5bGUuaW5zZXRCbG9ja1N0YXJ0XT1cImxheW91dC5sYXlvdXRUb3BcIlxuICAgICAgICBbc3R5bGUuaW5zZXRJbmxpbmVTdGFydF09XCJsYXlvdXQubGF5b3V0TGVmdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImxheW91dC5hcHBvaW50bWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7bGF5b3V0LmFwcG9pbnRtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgbGF5b3V0LmFwcG9pbnRtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGxheW91dC5hcHBvaW50bWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgIH19XG4gICAgICAgICAgLVxuICAgICAgICAgIHt7IGxheW91dC5hcHBvaW50bWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtc2xvdC1yb3dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyb3Bab25lXG4gICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1zbG90LWNlbGxcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwidGltZS5mb3JtYXQoJ1lZWVlNTURELUhIbW0nKVwiXG4gICAgICA+PC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DOCUMENT, HostBinding, ViewEncapsulation, computed, inject, input, output, signal, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineMonthViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3;\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.dragStartSlotId = signal(null);\n this.processedDayData = computed(() => {\n const allOriginalAppointments = this.appointments();\n const monthStartDate = this.date().startOf('month');\n const daysInMonth = monthStartDate.endOf('month').dayOfMonth;\n if (!allOriginalAppointments) {\n return Array.from({ length: daysInMonth }, (_, i) => {\n const dayDate = monthStartDate.add('day', i);\n return {\n date: dayDate,\n visibleAppointments: [],\n hiddenAppointments: [],\n moreCount: 0,\n };\n });\n }\n const result = [];\n for (let i = 0; i < daysInMonth; i++) {\n const currentDayDate = monthStartDate.add('day', i).startOf('day'); // Ensure it's start of day\n const segmentsForThisDay = [];\n for (const appt of allOriginalAppointments) {\n // For Timeline Month View, each day is a row. We want segments for the full 24h of that day.\n // The view's startHour/endHour are NOT used to clip segments here,\n // as it's not a horizontal time scale *within* the day row.\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n // Sort segments: all-day first, then by segment start time (which is clipped to the day)\n const sortedSegments = orderBy(segmentsForThisDay, [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.startDate.getTime(), // Segment's start time on this day\n (s) => s.endDate.getTime() - s.startDate.getTime(), // Segment's duration on this day\n (s) => s.title?.toLowerCase() ?? '',\n ], ['asc', 'asc', 'desc', 'asc']);\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n result.push({\n date: currentDayDate,\n visibleAppointments: visibleAppointments,\n hiddenAppointments: hiddenAppointments,\n moreCount: hiddenAppointments.length,\n holiday: this.isHoliday(currentDayDate),\n });\n }\n return result;\n });\n // Internal outputs to be caught by parent AXSchedulerComponent\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onActionClickInternal = output();\n this.onAppointmentDropInternal = output();\n // --- Event Handlers ---\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n }\n handleAppointmentEvent(mouseEvent, appointmentItem) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n handleSlotEvent(mouseEvent, date) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n handleDrop(e, date) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n const droppedItem = e.dropped.dragData();\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate,\n startDate: originalAppointment.startDate,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({\n appointment: originalAppointment,\n nativeEvent: event,\n sender: this.scheduler,\n });\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el instanceof HTMLElement && el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineMonthViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-month-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onActionClickInternal: \"onActionClickInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-month-container\\\">\\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\\n <div>\\n <div class=\\\"ax-scheduler-timeline-header\\\">\\n <div\\n class=\\\"ax-scheduler-month-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-month-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n </div>\\n\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-content\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n [attr.data-slot-id]=\\\"dayData.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <!-- Display segment's start/end times if not allDay for this segment -->\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n @if (dayData.moreCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n +{{ '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n axDropZone\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-month-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-month-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-month-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-month-container\\\">\\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\\n <div>\\n <div class=\\\"ax-scheduler-timeline-header\\\">\\n <div\\n class=\\\"ax-scheduler-month-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(dayData.date)\\\"\\n [class.ax-state-holiday]=\\\"dayData.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"dayData.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\\n ( {{ dayData.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-month-header-date-day-num\\\">\\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n </div>\\n\\n <div\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n (onElementDrop)=\\\"handleDrop($event, dayData.date)\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n class=\\\"ax-scheduler-timeline-content\\\"\\n (click)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (dblclick)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n (contextmenu)=\\\"handleSlotEvent($event, dayData.date)\\\"\\n [attr.data-slot-id]=\\\"dayData.date.format('YYYYMMDD')\\\"\\n >\\n <div class=\\\"ax-scheduler-timeline-appointment-container\\\">\\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment)\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-timeline-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n <!-- Display segment's start/end times if not allDay for this segment -->\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n @if (dayData.moreCount > 0) {\\n <div #moreAppointments class=\\\"ax-scheduler-month-overflow-badge\\\" (click)=\\\"$event.stopPropagation()\\\">\\n +{{ '@acorex:common.general.more-items' | translate: { params: { number: dayData.moreCount } } | async }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\" placement=\\\"bottom-start\\\" trigger=\\\"click\\\">\\n <div\\n axDropZone\\n [class.ax-state-readonly]=\\\"readonly()\\\"\\n class=\\\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\\\"\\n >\\n @for (segment of dayData.hiddenAppointments; track segment.id + segment.originalStartDate.getTime()) {\\n <div\\n axDrag\\n [dragData]=\\\"segment\\\"\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || segment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, segment); $event.stopPropagation()\\\"\\n [title]=\\\"\\n tooltipTemplate()\\n ? ''\\n : segment.allDay\\n ? segment.title\\n : segment.title +\\n ' (' +\\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\\n ' - ' +\\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\\n ')'\\n \\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [class.all-day-segment]=\\\"segment.allDay\\\"\\n [ngClass]=\\\"segment.cssClass ?? `ax-scheduler-${segment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ segment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, segment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n >\\n </ax-icon>\\n }\\n </ax-title>\\n @if (!segment.allDay) {\\n <ax-subtitle>\\n {{\\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n }\\n </div>\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n </div>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-month-view{height:100%;position:relative;display:inline-flex;flex-direction:column;background-color:inherit}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container{height:100%;display:flex}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header{width:100%;display:flex;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-char{font-weight:500}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-today .ax-scheduler-month-header-date-day-num{font-weight:700}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-header .ax-scheduler-month-header-date-day .ax-scheduler-month-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content{padding:.125rem .25rem;position:relative;height:calc(100% - 4rem);width:var(--ax-comp-scheduler-timeline-month-view-blocks-width, calc(var(--ax-comp-scheduler-timeline-view-blocks-width) / 2));border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container{gap:1px;display:flex;flex-direction:column}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-timeline-appointment{width:100%;display:flex;overflow:hidden;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge{cursor:pointer;text-align:left;font-size:.75rem;padding:.125rem 0;margin-top:.125rem}ax-scheduler-timeline-month-view .ax-scheduler-timeline-month-container .ax-scheduler-timeline-content .ax-scheduler-timeline-appointment-container .ax-scheduler-month-overflow-badge:hover{text-decoration:underline}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-appointment{cursor:pointer}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-timeline-month-view:not(.ax-state-readonly) .ax-scheduler-timeline-content:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-timeline-month-view ax-title{display:flex;justify-content:space-between}ax-scheduler-timeline-month-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2xpYi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLW1vbnRoL3NjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBdUIsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFdBQVcsRUFFWCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1B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aEIsa0JBQWtCLDJSQUNsQixlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsa0JBQWtCLDZNQUNsQix3QkFBd0I7OzJGQUlmLHFDQUFxQztrQkFwQmpELFNBQVM7K0JBQ0Usa0NBQWtDLG1CQUczQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHdCQUF3QjtxQkFDekIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLHVDQUF1QyxFQUFFLENBQUM7OEJBc0w3QyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LCBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgQVhIb2xpZGF5RGF0ZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBET0NVTUVOVCxcbiAgSG9zdEJpbmRpbmcsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YSB7XG4gIGRhdGU6IEFYRGF0ZVRpbWU7XG4gIC8vIFRoZXNlIHdpbGwgYmUgc2VnbWVudHMsIHByZWNpc2VseSBjbGlwcGVkIGFuZCBmbGFnZ2VkIGZvciB0aGlzIGRheVxuICB2aXNpYmxlQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xuICBoaWRkZW5BcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107XG4gIG1vcmVDb3VudDogbnVtYmVyO1xuICAvLyBZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHN0b3JlIGFsbCBzZWdtZW50cyBmb3IgdGhlIGRheSBpZiBuZWVkZWQgZWxzZXdoZXJlXG4gIC8vIGFsbFNlZ21lbnRzRm9yRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFR5cGVbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSA9IDM7XG5cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICBwcml2YXRlIGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcm9jZXNzZWREYXlEYXRhID0gY29tcHV0ZWQ8VGltZWxpbmVNb250aFZpZXdEYXlEYXRhW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgbW9udGhTdGFydERhdGUgPSB0aGlzLmRhdGUoKS5zdGFydE9mKCdtb250aCcpO1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbW9udGhTdGFydERhdGUuZW5kT2YoJ21vbnRoJykuZGF5T2ZNb250aDtcblxuICAgIGlmICghYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCBkYXlEYXRlID0gbW9udGhTdGFydERhdGUuYWRkKCdkYXknLCBpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6IGRheURhdGUsXG4gICAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogW10sXG4gICAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBbXSxcbiAgICAgICAgICBtb3JlQ291bnQ6IDAsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRheXNJbk1vbnRoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlEYXRlID0gbW9udGhTdGFydERhdGUuYWRkKCdkYXknLCBpKS5zdGFydE9mKCdkYXknKTsgLy8gRW5zdXJlIGl0J3Mgc3RhcnQgb2YgZGF5XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIC8vIEZvciBUaW1lbGluZSBNb250aCBWaWV3LCBlYWNoIGRheSBpcyBhIHJvdy4gV2Ugd2FudCBzZWdtZW50cyBmb3IgdGhlIGZ1bGwgMjRoIG9mIHRoYXQgZGF5LlxuICAgICAgICAvLyBUaGUgdmlldydzIHN0YXJ0SG91ci9lbmRIb3VyIGFyZSBOT1QgdXNlZCB0byBjbGlwIHNlZ21lbnRzIGhlcmUsXG4gICAgICAgIC8vIGFzIGl0J3Mgbm90IGEgaG9yaXpvbnRhbCB0aW1lIHNjYWxlICp3aXRoaW4qIHRoZSBkYXkgcm93LlxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KGFwcHQsIGN1cnJlbnREYXlEYXRlLCAwLCAyNCwgdHJ1ZSk7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU29ydCBzZWdtZW50czogYWxsLWRheSBmaXJzdCwgdGhlbiBieSBzZWdtZW50IHN0YXJ0IHRpbWUgKHdoaWNoIGlzIGNsaXBwZWQgdG8gdGhlIGRheSlcbiAgICAgIGNvbnN0IHNvcnRlZFNlZ21lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IChzLmFsbERheSA/IDAgOiAxKSwgLy8gU2VnbWVudHMgbWFya2VkIGFzIGFsbERheSBmaXJzdFxuICAgICAgICAgIChzKSA9PiBzLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFNlZ21lbnQncyBzdGFydCB0aW1lIG9uIHRoaXMgZGF5XG4gICAgICAgICAgKHMpID0+IHMuZW5kRGF0ZS5nZXRUaW1lKCkgLSBzLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFNlZ21lbnQncyBkdXJhdGlvbiBvbiB0aGlzIGRheVxuICAgICAgICAgIChzKSA9PiBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxuICAgICAgICBdLFxuICAgICAgICBbJ2FzYycsICdhc2MnLCAnZGVzYycsICdhc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHZpc2libGVBcHBvaW50bWVudHMgPSBzb3J0ZWRTZWdtZW50cy5zbGljZSgwLCB0aGlzLk1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZKTtcbiAgICAgIGNvbnN0IGhpZGRlbkFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuXG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXlEYXRlLFxuICAgICAgICB2aXNpYmxlQXBwb2ludG1lbnRzOiB2aXNpYmxlQXBwb2ludG1lbnRzLFxuICAgICAgICBoaWRkZW5BcHBvaW50bWVudHM6IGhpZGRlbkFwcG9pbnRtZW50cyxcbiAgICAgICAgbW9yZUNvdW50OiBoaWRkZW5BcHBvaW50bWVudHMubGVuZ3RoLFxuICAgICAgICBob2xpZGF5OiB0aGlzLmlzSG9saWRheShjdXJyZW50RGF5RGF0ZSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICAvLyBkYXRlIGlzIHRoZSBzcGVjaWZpYyBkYXlcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAndGltZWxpbmUtbW9udGgnKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cbiAgaGFuZGxlRHJvcChlOiBBWERyb3Bab25lRHJvcEV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgLy8gZGF0ZSBpcyB0aGUgc3BlY2lmaWMgZGF5XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ3RpbWVsaW5lLW1vbnRoJyk7XG4gICAgY29uc3QgZHJvcHBlZEl0ZW0gPSBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChkcm9wcGVkSXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIHRoaXMub25BY3Rpb25DbGlja0ludGVybmFsLmVtaXQoe1xuICAgICAgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRvZGF5LCAnZGF5Jyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBpc0hvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGRhdGUpO1xuICAgIGlmIChpc0hvbGlkYXkpIHtcbiAgICAgIGNvbnN0IGhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maWx0ZXIoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6ICdob2xpZGF5JyxcbiAgICAgICAgaG9saWRheSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlzV2Vla2VuZCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogJ3dlZWtlbmQnIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxuXG4gIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLWNvbnRhaW5lclwiPlxuICBAZm9yIChkYXlEYXRhIG9mIHByb2Nlc3NlZERheURhdGEoKTsgdHJhY2sgZGF5RGF0YS5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1oZWFkZXItZGF0ZS1kYXlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheURhdGEuZGF0ZSlcIlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlEYXRhLmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBkYXlEYXRhLmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnZGRkZCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgQGlmIChkYXlEYXRhLmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgICAoIHt7IGRheURhdGEuaG9saWRheS5ob2xpZGF5LnRpdGxlIH19IClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtaGVhZGVyLWRhdGUtZGF5LW51bVwiPlxuICAgICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtY29udGVudFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXlEYXRhLmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheURhdGEudmlzaWJsZUFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwic2VnbWVudFwiXG4gICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNlZ21lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJnZXRTbG90SWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGVtcGxhdGUoKVxuICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgOiBzZWdtZW50LmFsbERheVxuICAgICAgICAgICAgICAgICAgICA/IHNlZ21lbnQudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWdtZW50LnRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgIDwhLS0gRGlzcGxheSBzZWdtZW50J3Mgc3RhcnQvZW5kIHRpbWVzIGlmIG5vdCBhbGxEYXkgZm9yIHRoaXMgc2VnbWVudCAtLT5cbiAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19IC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZGF5RGF0YS5tb3JlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICA8ZGl2ICNtb3JlQXBwb2ludG1lbnRzIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLW92ZXJmbG93LWJhZGdlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAre3sgJ0BhY29yZXg6Y29tbW9uLmdlbmVyYWwubW9yZS1pdGVtcycgfCB0cmFuc2xhdGU6IHsgcGFyYW1zOiB7IG51bWJlcjogZGF5RGF0YS5tb3JlQ291bnQgfSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCIgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCIgdHJpZ2dlcj1cImNsaWNrXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyIGF4LXNjaGVkdWxlci1tb250aC1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBzZWdtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRlbXBsYXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWdtZW50LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXNlZ21lbnQuYWxsRGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, output, } from '@angular/core';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport { AXSchedulerTimelineDayViewComponent } from '../timeline-day/scheduler-timeline-day-view.component';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.daysCount = input(7);\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n this.daysDataForTimelineViews = computed(() => {\n const allOriginalAppointments = this.appointments();\n const multiViewStartDate = this.date();\n const numberOfDays = this.daysCount();\n if (!multiViewStartDate || !allOriginalAppointments) {\n return [];\n }\n const result = [];\n for (let i = 0; i < numberOfDays; i++) {\n const currentDayDate = multiViewStartDate.add('day', i);\n const currentDayStart = currentDayDate.startOf('day');\n const currentDayEnd = currentDayDate.endOf('day'); // Use full day for overlap check\n const appointmentsOverlappingThisDay = allOriginalAppointments.filter((appt) => {\n if (appt.allDay) {\n return false;\n }\n const apptStart = this.calendarService.create(appt.startDate, this.calendar());\n const apptEnd = this.calendarService.create(appt.endDate, this.calendar());\n return apptStart.compare(currentDayEnd, 'second') <= 0 && apptEnd.compare(currentDayStart, 'second') >= 0;\n });\n result.push({\n date: currentDayDate,\n holiday: this.isHoliday(currentDayDate),\n originalAppointmentsForThisDay: appointmentsOverlappingThisDay,\n });\n }\n return result;\n });\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onActionClickInternal = output();\n this.onAppointmentDropInternal = output();\n }\n isToday(date) {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n isHoliday(date) {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerTimelineMultiDayViewComponent, isStandalone: true, selector: \"ax-scheduler-timeline-multi-day-view\", inputs: { daysCount: { classPropertyName: \"daysCount\", publicName: \"daysCount\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onActionClickInternal: \"onActionClickInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-timeline-day-view-container\\\">\\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-multi-day-column\\\">\\n <div\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(daySlot.date)\\\"\\n [class.ax-state-holiday]=\\\"daySlot.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"daySlot.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\\n ( {{ daySlot.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"daySlot.date\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n [appointments]=\\\"daySlot.originalAppointmentsForThisDay\\\"\\n (onActionClickInternal)=\\\"onActionClickInternal.emit($event)\\\"\\n (slotClickedInternal)=\\\"slotClickedInternal.emit($event)\\\"\\n (slotDblClickedInternal)=\\\"slotDblClickedInternal.emit($event)\\\"\\n (slotRightClickedInternal)=\\\"slotRightClickedInternal.emit($event)\\\"\\n (onAppointmentDropInternal)=\\\"onAppointmentDropInternal.emit($event)\\\"\\n (appointmentClickedInternal)=\\\"appointmentClickedInternal.emit($event)\\\"\\n (appointmentDblClickedInternal)=\\\"appointmentDblClickedInternal.emit($event)\\\"\\n (appointmentRightClickedInternal)=\\\"appointmentRightClickedInternal.emit($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}\\n\"], dependencies: [{ kind: \"component\", type: AXSchedulerTimelineDayViewComponent, selector: \"ax-scheduler-timeline-day-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onActionClickInternal\", \"onAppointmentDropInternal\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-timeline-multi-day-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXSchedulerTimelineDayViewComponent, AsyncPipe, AXFormatPipe, AXTooltipDirective], providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }], template: \"<div class=\\\"ax-scheduler-timeline-day-view-container\\\">\\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\\n <div class=\\\"ax-scheduler-timeline-multi-day-column\\\">\\n <div\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-today]=\\\"isToday(daySlot.date)\\\"\\n [class.ax-state-holiday]=\\\"daySlot.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"daySlot.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\\n ( {{ daySlot.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"daySlot.date\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n [appointments]=\\\"daySlot.originalAppointmentsForThisDay\\\"\\n (onActionClickInternal)=\\\"onActionClickInternal.emit($event)\\\"\\n (slotClickedInternal)=\\\"slotClickedInternal.emit($event)\\\"\\n (slotDblClickedInternal)=\\\"slotDblClickedInternal.emit($event)\\\"\\n (slotRightClickedInternal)=\\\"slotRightClickedInternal.emit($event)\\\"\\n (onAppointmentDropInternal)=\\\"onAppointmentDropInternal.emit($event)\\\"\\n (appointmentClickedInternal)=\\\"appointmentClickedInternal.emit($event)\\\"\\n (appointmentDblClickedInternal)=\\\"appointmentDblClickedInternal.emit($event)\\\"\\n (appointmentRightClickedInternal)=\\\"appointmentRightClickedInternal.emit($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n </div>\\n }\\n</div>\\n\", styles: [\"ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container{height:100%;display:flex;flex-direction:row}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day{gap:.25rem;height:4rem;display:flex;position:relative;align-items:start;padding-inline:1rem;flex-direction:column;padding-block:.25rem;justify-content:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface));border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;position:sticky;font-weight:300;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view .ax-scheduler-timeline-day-view-container .ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{position:sticky;font-weight:500;font-size:1.25rem;inset-inline-start:1rem}ax-scheduler-timeline-multi-day-view ax-scheduler-timeline-day-view{height:calc(100% - 4rem)}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLW11bHRpLWRheS9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOztBQW1CNUcsTUFBTSxPQUFPLHdDQUF5QyxTQUFRLFdBQVc7SUFUekU7O1FBVVUsb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0RCxjQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLGFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsY0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixlQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLG1CQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLGFBQVEsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUMzQixTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBYyxDQUFDO1FBQ3BDLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDdEMsaUJBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDeEMsaUJBQVksR0FBRyxLQUFLLENBQTJCLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELG9CQUFlLEdBQUcsS0FBSyxFQUFpQyxDQUFDO1FBRXpELDZCQUF3QixHQUFHLFFBQVEsQ0FBNEIsR0FBRyxFQUFFO1lBQ2xFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUV0QyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBOEIsRUFBRSxDQUFDO1lBRTdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztnQkFFcEYsTUFBTSw4QkFBOEIsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDN0UsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ2hCLE9BQU8sS0FBSyxDQUFDO29CQUNmLENBQUM7b0JBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDL0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDM0UsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1RyxDQUFDLENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUNWLElBQUksRUFBRSxjQUFjO29CQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7b0JBQ3ZDLDhCQUE4QixFQUFFLDhCQUE4QjtpQkFDL0QsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsd0JBQW1CLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQzFELDJCQUFzQixHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUM3RCw2QkFBd0IsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDL0QsK0JBQTBCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQ3hFLGtDQUE2QixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUMzRSxvQ0FBK0IsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDN0UsMEJBQXFCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQ25FLDhCQUF5QixHQUFHLE1BQU0sRUFBNEIsQ0FBQztLQXFCaEU7SUFuQlcsT0FBTyxDQUFDLElBQWdCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDUyxTQUFTLENBQUMsSUFBZ0I7UUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRixPQUFPO2dCQUNMLEtBQUssRUFBRSxTQUFTO2dCQUNoQixPQUFPO2FBQ1IsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQTdFVSx3Q0FBd0M7a0dBQXhDLHdDQUF3QyxtL0RBRnhDLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSx3Q0FBd0MsRUFBRSxDQUFDLGlEQ3ZDOUYsa29FQTRDQSx3bEVETlksbUNBQW1DLDhjQUFFLFNBQVMseUNBQUUsWUFBWSwrQ0FBRSxrQkFBa0I7OzJGQUcvRSx3Q0FBd0M7a0JBVHBELFNBQVM7K0JBQ0Usc0NBQXNDLG1CQUcvQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCLENBQUMsbUNBQW1DLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxhQUNoRixDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLDBDQUEwQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUsIEFYSG9saWRheURhdGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlckFwcG9pbnRtZW50IH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQgfSBmcm9tICcuLi90aW1lbGluZS1kYXkvc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZWxpbmVNdWx0aURheURheVNsb3Qge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICAvLyBQYXNzIHRoZSBSQVcgb3JpZ2luYWwgYXBwb2ludG1lbnRzIHRoYXQgKm92ZXJsYXAqIHdpdGggdGhpcyBkYXkuXG4gIC8vIFRoZSBjaGlsZCB0aW1lbGluZS1kYXktdmlldyB3aWxsIGhhbmRsZSBzZWdtZW50YXRpb24uXG4gIG9yaWdpbmFsQXBwb2ludG1lbnRzRm9yVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuICBob2xpZGF5PzogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQsIEFzeW5jUGlwZSwgQVhGb3JtYXRQaXBlLCBBWFRvb2x0aXBEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICBkYXlzQ291bnQgPSBpbnB1dCg3KTtcbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGVuZERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIHN0YXJ0RGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIGRheXNEYXRhRm9yVGltZWxpbmVWaWV3cyA9IGNvbXB1dGVkPFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90W10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgbXVsdGlWaWV3U3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghbXVsdGlWaWV3U3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVGltZWxpbmVNdWx0aURheURheVNsb3RbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkRheXM7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudERheURhdGUgPSBtdWx0aVZpZXdTdGFydERhdGUuYWRkKCdkYXknLCBpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlTdGFydCA9IGN1cnJlbnREYXlEYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgY3VycmVudERheUVuZCA9IGN1cnJlbnREYXlEYXRlLmVuZE9mKCdkYXknKTsgLy8gVXNlIGZ1bGwgZGF5IGZvciBvdmVybGFwIGNoZWNrXG5cbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50c092ZXJsYXBwaW5nVGhpc0RheSA9IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzLmZpbHRlcigoYXBwdCkgPT4ge1xuICAgICAgICBpZiAoYXBwdC5hbGxEYXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwdFN0YXJ0ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICBjb25zdCBhcHB0RW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuZW5kRGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgcmV0dXJuIGFwcHRTdGFydC5jb21wYXJlKGN1cnJlbnREYXlFbmQsICdzZWNvbmQnKSA8PSAwICYmIGFwcHRFbmQuY29tcGFyZShjdXJyZW50RGF5U3RhcnQsICdzZWNvbmQnKSA+PSAwO1xuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheURhdGUsXG4gICAgICAgIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGN1cnJlbnREYXlEYXRlKSxcbiAgICAgICAgb3JpZ2luYWxBcHBvaW50bWVudHNGb3JUaGlzRGF5OiBhcHBvaW50bWVudHNPdmVybGFwcGluZ1RoaXNEYXksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgc2xvdENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRvZGF5LCAnZGF5Jyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBpc0hvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGRhdGUpO1xuICAgIGlmIChpc0hvbGlkYXkpIHtcbiAgICAgIGNvbnN0IGhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maWx0ZXIoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpWzBdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6ICdob2xpZGF5JyxcbiAgICAgICAgaG9saWRheSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlzV2Vla2VuZCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogJ3dlZWtlbmQnIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy1jb250YWluZXJcIj5cbiAgQGZvciAoZGF5U2xvdCBvZiBkYXlzRGF0YUZvclRpbWVsaW5lVmlld3MoKTsgdHJhY2sgZGF5U2xvdC5kYXRlLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktY29sdW1uXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5XCJcbiAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImlzVG9kYXkoZGF5U2xvdC5kYXRlKVwiXG4gICAgICAgIFtjbGFzcy5heC1zdGF0ZS1ob2xpZGF5XT1cImRheVNsb3QuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXlTbG90LmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRheVNsb3QuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgQGlmIChkYXlTbG90LmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXlTbG90LmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgKCB7eyBkYXlTbG90LmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5LW51bVwiPlxuICAgICAgICAgIHt7IGRheVNsb3QuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdERCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxheC1zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXdcbiAgICAgICAgW2RhdGVdPVwiZGF5U2xvdC5kYXRlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgIFthcHBvaW50bWVudHNdPVwiZGF5U2xvdC5vcmlnaW5hbEFwcG9pbnRtZW50c0ZvclRoaXNEYXlcIlxuICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJzbG90Q2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cInNsb3REYmxDbGlja2VkSW50ZXJuYWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwib25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwuZW1pdCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDwvYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, DOCUMENT, HostBinding, inject, input, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerComponent, } from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport * as i0 from \"@angular/core\";\nexport class AXSchedulerWeekViewComponent extends NXComponent {\n constructor() {\n super(...arguments);\n // --- Injected Services & Private State ---\n this.document = inject(DOCUMENT);\n this.scheduler = inject(AXSchedulerComponent);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.dragStartSlotId = signal(null);\n // --- Constants ---\n this.GAP_PX = 1;\n this.BADGE_SPACE_REM = 2;\n // --- Component Inputs ---\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(false);\n this.dragStartDelay = input(0);\n this.calendar = input();\n this.date = input.required();\n this.endDayHour = input.required();\n this.startDayHour = input.required();\n this.appointments = input([]);\n this.tooltipTemplate = input();\n // --- Component Outputs (Internal, to be caught by the main scheduler) ---\n this.slotClickedInternal = output();\n this.slotDblClickedInternal = output();\n this.slotRightClickedInternal = output();\n this.appointmentClickedInternal = output();\n this.appointmentDblClickedInternal = output();\n this.appointmentRightClickedInternal = output();\n this.onActionClickInternal = output();\n this.onAppointmentDropInternal = output();\n // =================================================================================================\n //\n // VIEW MODEL COMPUTATIONS (for rendering the template)\n //\n // =================================================================================================\n /**\n * @protected\n * Generates an array of AXDateTime objects for the hours displayed in the view's time ruler.\n * This is used for rendering the `HH:mm` labels on the side.\n */\n this.hoursArray = computed(() => {\n let time = this.date();\n if (!time)\n return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n /**\n * @protected\n * Generates an array of day data objects for the 7 days in the view, including holiday info.\n * This is used for rendering the day headers (e.g., \"Monday 10\").\n */\n this.daysArray = computed(() => {\n const time = this.date();\n if (!time)\n return [];\n const days = [{ date: time, holiday: this.isHoliday(time) }];\n for (let index = 1; index <= 6; index++) {\n const date = time.add('day', index);\n days.push({ date, holiday: this.isHoliday(date) });\n }\n return days;\n });\n /**\n * @protected\n * Calculates the total number of 30-minute blocks within the visible hours of a single day.\n */\n this.totalBlocksPerViewDay = computed(() => {\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n return Math.max(0, (endH - startH) * (60 / 30));\n });\n /**\n * @protected\n * Filters processed segments to get only those for the all-day header.\n */\n this.allDayAppointmentsPerDay = computed(() => {\n const daysInWeek = this.daysArray().map((e) => e.date);\n const allDaySegments = this.processedAppointmentsForLayout().filter((s) => s.allDay);\n return daysInWeek.map((dayDate) => {\n const currentDayStart = dayDate.startOf('day');\n const appointmentsForThisDay = allDaySegments.filter((segment) => this.calendarService.create(segment.startDate, this.calendar()).startOf('day').equal(currentDayStart, 'day'));\n return {\n day: dayDate,\n appointments: orderBy(appointmentsForThisDay, ['originalStartDate', 'title'], ['asc', 'asc']),\n };\n });\n });\n // =================================================================================================\n //\n // GRID LAYOUT & BADGE LOGIC (THE CORE FIX)\n // This logic follows a three-step process:\n // 1. `dayViewLayoutsByDay`: Calculate a full multi-column layout for each day. This is our \"source of truth\".\n // 2. `visibleAppointmentsLayout`: Render ONLY the first column (`columnIndex: 0`) from the source of truth.\n // 3. `overflowBadgesWithData`: Render badges for all other columns (`columnIndex > 0`).\n //\n // =================================================================================================\n /**\n * [STEP 1 - Private] Calculate a full multi-column layout for each day, as if it were a Day View.\n * This becomes the single source of truth for what overlaps with what.\n */\n this.dayViewLayoutsByDay = computed(() => {\n const layoutsByDay = new Map();\n const allSegments = this.timedGridSegments();\n const viewStartDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n for (let dayIndex = 0; dayIndex < 7; dayIndex++) {\n const dayDate = viewStartDate.add('day', dayIndex);\n const segmentsForThisDay = allSegments.filter((seg) => this.calendarService.create(seg.startDate, this.calendar()).startOf('day').equal(dayDate.startOf('day'), 'day'));\n if (segmentsForThisDay.length === 0)\n continue;\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(segmentsForThisDay, dayDate, startH, endH);\n const sortedAppointments = orderBy(segmentsForThisDay, [(e) => e.startDate.getTime(), (e) => e.originalEndDate.getTime() - e.originalStartDate.getTime()], ['asc', 'desc']);\n const dayLayouts = new Map();\n const columnsData = [];\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n for (let c = 0;; c++) {\n if (!columnsData[c])\n columnsData[c] = { appointments: [] };\n let conflict = false;\n for (const placedSegment of columnsData[c].appointments) {\n if (this.schedulerService.doAppointmentsOverlap(appointmentSegment, placedSegment)) {\n conflict = true;\n break;\n }\n }\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n }\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.id);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n dayLayouts.set(appointmentSegment.id, { columnIndex: assignedCol, effectiveTotalColumns: effectiveCols });\n }\n layoutsByDay.set(dayIndex, dayLayouts);\n }\n return layoutsByDay;\n });\n /**\n * @protected\n * [STEP 2] From the full layout, select ONLY appointments in the first column (`columnIndex: 0`)\n * to be visible. Calculate their width based on whether they have siblings in other columns.\n */\n this.visibleAppointmentsLayout = computed(() => {\n const finalLayouts = [];\n const layoutsByDay = this.dayViewLayoutsByDay();\n const allSegments = this.timedGridSegments();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = 7;\n for (const appt of allSegments) {\n const apptStartDate = this.calendarService.create(appt.startDate, this.calendar());\n const dayIndex = Math.floor((apptStartDate.startOf('day').date.getTime() - this.date().startOf('day').date.getTime()) /\n this.schedulerService.MILLISECONDS_PER_DAY);\n if (dayIndex < 0 || dayIndex >= N)\n continue;\n const layoutInfo = layoutsByDay.get(dayIndex)?.get(appt.id);\n if (!layoutInfo || layoutInfo.columnIndex !== 0)\n continue;\n const startMinutes = apptStartDate.hour * 60 + apptStartDate.minute;\n const startBlockOffset = startMinutes - this.startDayHour() * 60;\n const layoutTop = `calc(${blockHeightExpr} * ${startBlockOffset / 30} + 1px)`;\n const durationMinutes = this.schedulerService.calculateDurationInMinutes(appt);\n const layoutHeight = `calc(${blockHeightExpr} * ${durationMinutes / 30} - ${this.GAP_PX}px)`;\n const hasHiddenSiblings = layoutInfo.effectiveTotalColumns > 1;\n const layoutWidth = hasHiddenSiblings\n ? `calc(100% / ${N} - ${this.BADGE_SPACE_REM + 0.5}rem)`\n : `calc(100% / ${N})`;\n finalLayouts.push({\n appointment: appt,\n layoutTop,\n layoutHeight,\n layoutLeft: `calc(${dayIndex * (100 / N)}%)`,\n layoutWidth,\n });\n }\n return finalLayouts;\n });\n /**\n * @protected\n * [STEP 3] Create badges for all appointments NOT in the first column (`columnIndex > 0`).\n */\n this.overflowBadgesWithData = computed(() => {\n const badgesInfo = [];\n const layoutsByDay = this.dayViewLayoutsByDay();\n const allTimedSegments = this.timedGridSegments();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N = 7;\n const hiddenAppointments = allTimedSegments.filter((appt) => {\n const apptStartDate = this.calendarService.create(appt.startDate, this.calendar());\n const dayIndex = Math.floor((apptStartDate.startOf('day').date.getTime() - this.date().startOf('day').date.getTime()) /\n this.schedulerService.MILLISECONDS_PER_DAY);\n const layoutInfo = layoutsByDay.get(dayIndex)?.get(appt.id);\n return layoutInfo && layoutInfo.columnIndex > 0;\n });\n const groupedHidden = new Map();\n for (const appt of hiddenAppointments) {\n const apptStartDate = this.calendarService.create(appt.startDate, this.calendar());\n const startInfo = this.schedulerService.getBlockIdentifier(apptStartDate, this.date(), this.startDayHour(), this.endDayHour(), 7);\n if (!startInfo)\n continue;\n const key = `${startInfo.dayIndex}-${startInfo.blockIndex}`;\n if (!groupedHidden.has(key))\n groupedHidden.set(key, []);\n groupedHidden.get(key).push(appt);\n }\n groupedHidden.forEach((group, key) => {\n const [dayIndexStr, blockIndexStr] = key.split('-');\n const dayIndex = parseInt(dayIndexStr);\n const blockIndex = parseInt(blockIndexStr);\n const badgeTop = `calc(${blockHeightExpr} * ${blockIndex} + 0.75rem)`;\n const badgeLeft = `calc(${dayIndex * (100 / N)}% + (100% / ${N}) - ${this.BADGE_SPACE_REM}rem)`;\n badgesInfo.push({\n key: `badge-${key}`,\n count: group.length,\n badgeTop,\n badgeLeft,\n hiddenAppointments: group,\n });\n });\n return badgesInfo;\n });\n // =================================================================================================\n //\n // EVENT HANDLERS & UTILITY METHODS\n //\n // =================================================================================================\n this.eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n // --- Private Data Processing ---\n this.processedAppointmentsForLayout = computed(() => {\n const viewDays = this.daysArray().map((e) => e.date);\n const allOriginalAppointments = this.appointments();\n if (viewDays.length === 0 || allOriginalAppointments.length === 0)\n return [];\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const allSegmentsInView = [];\n for (const day of viewDays) {\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, day.startOf('day'), startH, endH);\n if (segment)\n allSegmentsInView.push(segment);\n }\n }\n const uniqueSegmentsMap = new Map();\n allSegmentsInView.forEach((seg) => {\n const mapKey = `${seg.id}-${seg.startDate.getTime()}-${seg.endDate.getTime()}`;\n if (!uniqueSegmentsMap.has(mapKey))\n uniqueSegmentsMap.set(mapKey, seg);\n });\n return Array.from(uniqueSegmentsMap.values());\n });\n this.timedGridSegments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n });\n }\n /**\n * Handles click, dblclick, and contextmenu events on an appointment and emits them to the parent.\n * @param mouseEvent The native DOM event.\n * @param appointmentSegment The appointment data segment that was interacted with.\n * @public\n */\n handleAppointmentEvent(mouseEvent, appointmentSegment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, appointment: originalAppointment, sender: this.scheduler }, this.eventOutputMap, 'appointment');\n }\n /**\n * Handles click, dblclick, and contextmenu events on an empty time slot and emits them to the parent.\n * @param mouseEvent The native DOM event.\n * @param hour The starting hour of the slot.\n * @param day The day of the slot.\n * @param minuteIndex The half-hour index (0 or 1).\n * @public\n */\n handleSingleSlotEvent(mouseEvent, hour, day, minuteIndex) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n if (slotData)\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n /**\n * Handles interaction events on the all-day slot.\n * @param mouseEvent The native DOM event.\n * @param day The corresponding day for the all-day slot.\n * @public\n */\n handleAllDaySlotEvent(mouseEvent, day) {\n const slotData = { startDate: day.startOf('day'), endDate: day.endOf('day'), view: 'week' };\n this.schedulerService.handleEvent({ nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler }, this.eventOutputMap, 'slot');\n }\n /**\n * Handles dropping an appointment onto the all-day slot.\n * @param e The drop event from the CDK.\n * @param day The corresponding day for the all-day slot.\n * @public\n */\n handleAllDayDrop(e, day) {\n const slotData = { startDate: day.startOf('day'), endDate: day.endOf('day'), view: 'week' };\n const originalAppointment = this.schedulerService.getOriginalAppointment(e.dropped.dragData());\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: originalAppointment,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n /**\n * Handles dropping an appointment onto a timed grid slot.\n * @param e The drop event from the CDK.\n * @param hour The starting hour of the drop target.\n * @param day The day of the drop target.\n * @param minuteIndex The half-hour index (0 or 1) of the drop target.\n * @public\n */\n handleSingleDayDrop(e, hour, day, minuteIndex) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n const originalAppointment = this.schedulerService.getOriginalAppointment(e.dropped.dragData());\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: originalAppointment,\n isSameSlotDrop: this.dragStartSlotId() === e.sender.element().dataset['slotId'],\n });\n }\n /**\n * Handles clicks on the \"more\" action icon on an appointment.\n * @param event The native mouse event.\n * @param appointmentItem The appointment associated with the action.\n * @public\n */\n handleActionClick(event, appointmentItem) {\n event.stopPropagation();\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.onActionClickInternal.emit({\n appointment: originalAppointment,\n nativeEvent: event,\n sender: this.scheduler,\n });\n }\n /**\n * @protected\n * Checks if a given date is the current day.\n * @param date The date to check.\n * @returns `true` if the date is today.\n */\n isToday(date) {\n return date.equal(this.calendarService.create(new Date()), 'day');\n }\n /**\n * @protected\n * Checks if a given date is a holiday or weekend.\n * @param date The date to check.\n * @returns An object describing the day's status (holiday, weekend, or none).\n */\n isHoliday(date) {\n const holiday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n if (holiday)\n return { state: 'holiday', holiday };\n if (this.schedulerService.isWeekend(date, this.calendar()))\n return { state: 'weekend' };\n return { state: 'none' };\n }\n /**\n * @protected\n * Captures the data-slot-id attribute when a drag operation starts on an appointment.\n * @param e The pointer event that initiates the drag.\n */\n getSlotId(e) {\n const dropListElement = this.document\n .elementsFromPoint(e.clientX, e.clientY)\n .find((el) => el.dataset['slotId'] !== undefined);\n this.dragStartSlotId.set(dropListElement ? dropListElement.dataset['slotId'] : null);\n }\n get isReadonly() {\n return this.readonly();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerWeekViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerWeekViewComponent, isStandalone: true, selector: \"ax-scheduler-week-view\", inputs: { readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, date: { classPropertyName: \"date\", publicName: \"date\", isSignal: true, isRequired: true, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: true, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: true, transformFunction: null }, appointments: { classPropertyName: \"appointments\", publicName: \"appointments\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { slotClickedInternal: \"slotClickedInternal\", slotDblClickedInternal: \"slotDblClickedInternal\", slotRightClickedInternal: \"slotRightClickedInternal\", appointmentClickedInternal: \"appointmentClickedInternal\", appointmentDblClickedInternal: \"appointmentDblClickedInternal\", appointmentRightClickedInternal: \"appointmentRightClickedInternal\", onActionClickInternal: \"onActionClickInternal\", onAppointmentDropInternal: \"onAppointmentDropInternal\" }, host: { properties: { \"class.ax-state-readonly\": \"this.isReadonly\" } }, providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-week-header\\\">\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\"></div>\\n <div class=\\\"ax-scheduler-week-header-date\\\" aria-hidden=\\\"true\\\">\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <div\\n [class.ax-state-today]=\\\"isToday(day.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-holiday]=\\\"day.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"day.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\\n ( {{ day.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-week-header-date\\\">\\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event, slotData.day)\\\"\\n class=\\\"ax-scheduler-all-day-slot\\\"\\n (click)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n >\\n @if (slotData.appointments.length > 0) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragData]=\\\"slotData.appointments[0]\\\"\\n [dragDisabled]=\\\"!draggable() || slotData.appointments[0].readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n [title]=\\\"tooltipTemplate() ? '' : slotData.appointments[0].title\\\"\\n class=\\\"ax-scheduler-header-week-appointment\\\"\\n [style.width]=\\\"slotData.appointments.length > 1 ? 'calc(100% - 2rem)' : '100%'\\\"\\n [ngClass]=\\\"\\n slotData.appointments[0].cssClass ??\\n `ax-scheduler-${slotData.appointments[0].priority ?? 'primary'}-periority`\\n \\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ slotData.appointments[0].title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, slotData.appointments[0])\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n </div>\\n }\\n @if (slotData.appointments.length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [style.width]=\\\"'1.5rem'\\\"\\n [style.border]=\\\"'none'\\\"\\n [ngClass]=\\\"\\n slotData.appointments[1].cssClass ??\\n `ax-scheduler-${slotData.appointments[1].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n +{{ slotData.appointments.length - 1 }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\" axDropZone>\\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-week-time-container\\\">\\n <div class=\\\"ax-scheduler-week-time\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"ax-scheduler-week-table-container\\\">\\n <div class=\\\"ax-scheduler-week-appointment-container\\\">\\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragData]=\\\"appt.appointment\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appt.appointment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appt.appointment.title\\\"\\n [style.width]=\\\"appt.layoutWidth\\\"\\n [style.height]=\\\"appt.layoutHeight\\\"\\n class=\\\"ax-scheduler-week-appointment\\\"\\n [style.inset-block-start]=\\\"appt.layoutTop\\\"\\n [style.inset-inline-start]=\\\"appt.layoutLeft\\\"\\n [ngClass]=\\\"appt.appointment.cssClass ?? `ax-scheduler-${appt.appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appt.appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appt.appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n\\n <!-- Overflow Badges with Popovers -->\\n @for (badge of overflowBadgesWithData(); track badge.key) {\\n <!-- Wrap badge and popover for targeting -->\\n <div\\n style=\\\"position: absolute\\\"\\n class=\\\"ax-scheduler-badge-wrapper\\\"\\n [style.inset-block-start]=\\\"badge.badgeTop\\\"\\n [style.inset-inline-start]=\\\"badge.badgeLeft\\\"\\n >\\n <!-- The Badge itself -->\\n <div\\n #actionButton\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"\\n badge.hiddenAppointments[0].cssClass ??\\n `ax-scheduler-${badge.hiddenAppointments[0].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n +{{ badge.count }}\\n </div>\\n <!-- The Popover -->\\n <ax-popover [target]=\\\"actionButton\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" axDropZone>\\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n </ax-popover>\\n </div>\\n }\\n </div>\\n\\n <table aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n <tbody>\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 0)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n [attr.data-slot-id]=\\\"day.date.format('YYYYMMDD') + '-' + time.format('HHmm')\\\"\\n ></td>\\n }\\n </tr>\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 1)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n [attr.data-slot-id]=\\\"day.date.format('YYYYMMDD') + '-' + time.add('minute', 30).format('HHmm')\\\"\\n ></td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-week-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;width:1.5rem;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:2;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{z-index:2;flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:100%;display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:100%;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-week-view ax-title{display:flex;justify-content:space-between}ax-scheduler-week-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"], dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDropZoneDirective, selector: \"[axDropZone]\", inputs: [\"dropZoneGroup\"], outputs: [\"onElementDrop\", \"onElementHover\"], exportAs: [\"axDropZone\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerWeekViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler-week-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n NgClass,\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n AXDecoratorIconComponent,\n AXTooltipDirective,\n ], providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }], template: \"<div class=\\\"ax-scheduler-week-header\\\">\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\"></div>\\n <div class=\\\"ax-scheduler-week-header-date\\\" aria-hidden=\\\"true\\\">\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <div\\n [class.ax-state-today]=\\\"isToday(day.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day\\\"\\n [class.ax-state-holiday]=\\\"day.holiday.state !== 'none'\\\"\\n >\\n <span\\n class=\\\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\\\"\\n [axTooltip]=\\\"day.holiday?.holiday?.title ?? ''\\\"\\n >\\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\\n ( {{ day.holiday.holiday.title }} )\\n }\\n </span>\\n <span class=\\\"ax-scheduler-week-header-date-day-num\\\">\\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\\n </span>\\n </div>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-scheduler-week-header-days\\\">\\n <div class=\\\"ax-scheduler-week-header-table\\\">{{ '@acorex:dateTime.duration.all-day' | translate | async }}</div>\\n <div aria-hidden=\\\"true\\\" class=\\\"ax-scheduler-week-header-date\\\">\\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\\n <div\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleAllDayDrop($event, slotData.day)\\\"\\n class=\\\"ax-scheduler-all-day-slot\\\"\\n (click)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (dblclick)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n (contextmenu)=\\\"handleAllDaySlotEvent($event, slotData.day)\\\"\\n >\\n @if (slotData.appointments.length > 0) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragData]=\\\"slotData.appointments[0]\\\"\\n [dragDisabled]=\\\"!draggable() || slotData.appointments[0].readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, slotData.appointments[0])\\\"\\n [title]=\\\"tooltipTemplate() ? '' : slotData.appointments[0].title\\\"\\n class=\\\"ax-scheduler-header-week-appointment\\\"\\n [style.width]=\\\"slotData.appointments.length > 1 ? 'calc(100% - 2rem)' : '100%'\\\"\\n [ngClass]=\\\"\\n slotData.appointments[0].cssClass ??\\n `ax-scheduler-${slotData.appointments[0].priority ?? 'primary'}-periority`\\n \\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ slotData.appointments[0].title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, slotData.appointments[0])\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n </div>\\n }\\n @if (slotData.appointments.length > 1) {\\n <div\\n #moreAppointments\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [style.width]=\\\"'1.5rem'\\\"\\n [style.border]=\\\"'none'\\\"\\n [ngClass]=\\\"\\n slotData.appointments[1].cssClass ??\\n `ax-scheduler-${slotData.appointments[1].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n +{{ slotData.appointments.length - 1 }}\\n </div>\\n <ax-popover [target]=\\\"moreAppointments\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" [class.ax-state-readonly]=\\\"readonly()\\\" axDropZone>\\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\\n @if (!first) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n </div>\\n }\\n }\\n </div>\\n </ax-popover>\\n }\\n </div>\\n }\\n </div>\\n </div>\\n</div>\\n\\n<div class=\\\"ax-scheduler-week-time-container\\\">\\n <div class=\\\"ax-scheduler-week-time\\\" aria-hidden=\\\"true\\\">\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <div>\\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </div>\\n }\\n </div>\\n\\n <div class=\\\"ax-scheduler-week-table-container\\\">\\n <div class=\\\"ax-scheduler-week-appointment-container\\\">\\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragData]=\\\"appt.appointment\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appt.appointment.readonly || readonly()\\\"\\n (pointerdown)=\\\"getSlotId($event)\\\"\\n (click)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appt.appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appt.appointment.title\\\"\\n [style.width]=\\\"appt.layoutWidth\\\"\\n [style.height]=\\\"appt.layoutHeight\\\"\\n class=\\\"ax-scheduler-week-appointment\\\"\\n [style.inset-block-start]=\\\"appt.layoutTop\\\"\\n [style.inset-inline-start]=\\\"appt.layoutLeft\\\"\\n [ngClass]=\\\"appt.appointment.cssClass ?? `ax-scheduler-${appt.appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appt.appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appt.appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\\n </ax-subtitle>\\n </div>\\n }\\n\\n <!-- Overflow Badges with Popovers -->\\n @for (badge of overflowBadgesWithData(); track badge.key) {\\n <!-- Wrap badge and popover for targeting -->\\n <div\\n style=\\\"position: absolute\\\"\\n class=\\\"ax-scheduler-badge-wrapper\\\"\\n [style.inset-block-start]=\\\"badge.badgeTop\\\"\\n [style.inset-inline-start]=\\\"badge.badgeLeft\\\"\\n >\\n <!-- The Badge itself -->\\n <div\\n #actionButton\\n class=\\\"ax-scheduler-appointment-badge\\\"\\n [ngClass]=\\\"\\n badge.hiddenAppointments[0].cssClass ??\\n `ax-scheduler-${badge.hiddenAppointments[0].priority ?? 'primary'}-periority`\\n \\\"\\n >\\n +{{ badge.count }}\\n </div>\\n <!-- The Popover -->\\n <ax-popover [target]=\\\"actionButton\\\">\\n <div class=\\\"ax-overlay-pane ax-scheduler-popover\\\" axDropZone>\\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\\n <div\\n axDrag\\n [dragCursor]=\\\"'grab'\\\"\\n [dragData]=\\\"appointment\\\"\\n [dragTransition]=\\\"false\\\"\\n [dragElementClone]=\\\"true\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [dragDisabled]=\\\"!draggable() || appointment.readonly || readonly()\\\"\\n (click)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (dblclick)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n (contextmenu)=\\\"handleAppointmentEvent($event, appointment)\\\"\\n [title]=\\\"tooltipTemplate() ? '' : appointment.title\\\"\\n class=\\\"ax-scheduler-popover-appointment\\\"\\n [ngClass]=\\\"appointment.cssClass ?? `ax-scheduler-${appointment.priority ?? 'primary'}-periority`\\\"\\n [tooltipDisabled]=\\\"tooltipTemplate() ? false : true\\\"\\n [axTooltip]=\\\"tooltipTemplate()\\\"\\n >\\n <ax-title>\\n <span class=\\\"ax-scheduler-truncate\\\">{{ appointment.title }}</span>\\n @if (hasActions()) {\\n <ax-icon\\n (click)=\\\"handleActionClick($event, appointment)\\\"\\n class=\\\"ax-icon ax-icon-more-horizontal ax-scheduler-action-icon\\\"\\n ></ax-icon>\\n }\\n </ax-title>\\n <ax-subtitle>\\n {{\\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n -\\n {{\\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\\n }}\\n </ax-subtitle>\\n </div>\\n }\\n </div>\\n </ax-popover>\\n </div>\\n }\\n </div>\\n\\n <table aria-hidden=\\\"true\\\" [border]=\\\"1\\\">\\n <tbody>\\n @for (time of hoursArray(); track time.date.getTime()) {\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 0)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 0)\\\"\\n [attr.data-slot-id]=\\\"day.date.format('YYYYMMDD') + '-' + time.format('HHmm')\\\"\\n ></td>\\n }\\n </tr>\\n <tr>\\n @for (day of daysArray(); track day.date.date.getTime()) {\\n <td\\n axDropZone\\n #zone2=\\\"axDropZone\\\"\\n [class.ax-scheduler-slot-hovered]=\\\"zone2.isHovered()\\\"\\n (onElementDrop)=\\\"handleSingleDayDrop($event, time, day.date, 1)\\\"\\n (click)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (dblclick)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n (contextmenu)=\\\"handleSingleSlotEvent($event, time, day.date, 1)\\\"\\n [attr.data-slot-id]=\\\"day.date.format('YYYYMMDD') + '-' + time.add('minute', 30).format('HHmm')\\\"\\n ></td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n </div>\\n</div>\\n\", styles: [\"ax-scheduler-week-view{display:block;position:relative;background-color:inherit;min-width:var(--ax-comp-scheduler-width)}ax-scheduler-week-view .ax-scheduler-appointment-badge{display:flex;width:1.5rem;height:1.5rem;cursor:pointer;font-size:.75rem;align-items:center;border-radius:9999px;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header{top:0;z-index:2;width:100%;position:sticky;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days{display:flex;background-color:inherit;border-block-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-table{z-index:2;flex-shrink:0;position:sticky;text-align:center;inset-inline-start:0;width:var(--ax-comp-scheduler-basic-view-blocks-width);background-color:inherit;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date{width:100%;display:flex}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day{gap:.25rem;display:grid;align-items:center;padding-inline:.5rem;justify-content:center}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface));background-color:rgba(var(--ax-sys-color-primary-surface),.05)}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-char{font-weight:500}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-today .ax-scheduler-week-header-date-day-num{font-weight:700}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday{color:rgba(var(--ax-sys-color-danger-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day.ax-state-holiday.ax-state-today{color:rgba(var(--ax-sys-color-primary-surface))}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-char{max-width:100%;font-weight:300}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div.ax-scheduler-week-header-date-day .ax-scheduler-week-header-date-day-num{font-weight:500;font-size:1.25rem}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date div:last-child{border-inline-end-width:0}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot{gap:.25rem;display:flex;width:14.2857142857%}ax-scheduler-week-view .ax-scheduler-week-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot .ax-scheduler-header-week-appointment{display:block;overflow:hidden;text-align:start;padding-inline:.5rem;width:100%;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container{width:100%;display:flex;background-color:inherit}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time{z-index:1;position:sticky;inset-inline-start:0;background-color:var(--ax-comp-scheduler-all-day-bg, inherit)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-time div{display:block;text-align:center;padding-inline:.5rem;width:var(--ax-comp-scheduler-basic-view-blocks-width);height:calc(var(--ax-comp-scheduler-basic-view-blocks-height) * 2);border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container{width:100%;position:relative}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container{top:0;width:100%;position:absolute}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container .ax-scheduler-week-appointment-container .ax-scheduler-week-appointment{display:flex;position:absolute;inset-inline-start:0;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2)}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table{width:100%}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr{display:flex;height:var(--ax-comp-scheduler-basic-view-blocks-height);border-block-start:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr:first-child{border-block-start-width:0}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td{width:100%;text-align:center;border-inline-end:1px solid rgba(var(--ax-sys-color-border-lightest-surface))}ax-scheduler-week-view .ax-scheduler-week-time-container .ax-scheduler-week-table-container table tr td:last-child{border-inline-end-width:0}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-appointment,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-header-week-appointment{cursor:pointer}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td{cursor:pointer;transition-property:background-color;transition-duration:var(--ax-sys-transition-duration);transition-timing-function:var(--ax-sys-transition-timing-function)}ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-all-day-slot:hover,ax-scheduler-week-view:not(.ax-state-readonly) .ax-scheduler-week-table-container>table td:hover{background-color:rgba(var(--ax-comp-scheduler-slot-hover-bg, var(--ax-sys-color-primary-surface), .1))}ax-scheduler-week-view ax-title{display:flex;justify-content:space-between}ax-scheduler-week-view ax-title .ax-scheduler-action-icon{width:auto;cursor:pointer}\\n\"] }]\n }], propDecorators: { isReadonly: [{\n type: HostBinding,\n args: ['class.ax-state-readonly']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUE2QixNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENB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QUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLENBQUMsaURDOURsRiw2b2FBNlJBLG96TkQzT0ksT0FBTyxvRkFDUCwyQkFBMkIsb0xBQzNCLFNBQVMseUNBQ1QsZ0JBQWdCLGtEQUNoQixrQkFBa0Isc1JBQ2xCLFlBQVksK0NBQ1osZUFBZSwyVEFDZixtQkFBbUIsNEpBQ25CLGtCQUFrQiw2TUFDbEIsd0JBQXdCOzsyRkFLZiw0QkFBNEI7a0JBckJ4QyxTQUFTOytCQUNFLHdCQUF3QixtQkFHakIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxPQUFPO3dCQUNQLDJCQUEyQjt3QkFDM0IsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQix3QkFBd0I7d0JBQ3hCLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLDhCQUE4QixFQUFFLENBQUM7OEJBMmJsRSxVQUFVO3NCQUR2QixXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LCBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgQVhIb2xpZGF5RGF0ZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRE9DVU1FTlQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBbGxEYXlTbG90RGF0YSxcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dCxcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQsXG4gIEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQsXG4gIEFYU2NoZWR1bGVyT3ZlcmZsb3dCYWRnZSxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxudHlwZSBBWFNjaGVkdWxlckdyaWRCYWRnZUluZm8gPSBBWFNjaGVkdWxlck92ZXJmbG93QmFkZ2UgJiB7XG4gIGhpZGRlbkFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTtcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LXNjaGVkdWxlci13ZWVrLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhGb3JtYXRQaXBlLFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyb3Bab25lRGlyZWN0aXZlLFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgLy8gLS0tIEluamVjdGVkIFNlcnZpY2VzICYgUHJpdmF0ZSBTdGF0ZSAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkcmFnU3RhcnRTbG90SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gLS0tIENvbnN0YW50cyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBHQVBfUFggPSAxO1xuICBwcml2YXRlIHJlYWRvbmx5IEJBREdFX1NQQUNFX1JFTSA9IDI7XG5cbiAgLy8gLS0tIENvbXBvbmVudCBJbnB1dHMgLS0tXG4gIHB1YmxpYyByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgcHVibGljIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBwdWJsaWMgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgcHVibGljIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIHB1YmxpYyBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgcHVibGljIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBwdWJsaWMgZW5kRGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgcHVibGljIHN0YXJ0RGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgcHVibGljIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICBwdWJsaWMgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgLy8gLS0tIENvbXBvbmVudCBPdXRwdXRzIChJbnRlcm5hbCwgdG8gYmUgY2F1Z2h0IGJ5IHRoZSBtYWluIHNjaGVkdWxlcikgLS0tXG4gIHByb3RlY3RlZCByZWFkb25seSBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzbG90RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25BcHBvaW50bWVudERyb3BJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvL1xuICAvLyBWSUVXIE1PREVMIENPTVBVVEFUSU9OUyAoZm9yIHJlbmRlcmluZyB0aGUgdGVtcGxhdGUpXG4gIC8vXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2YgQVhEYXRlVGltZSBvYmplY3RzIGZvciB0aGUgaG91cnMgZGlzcGxheWVkIGluIHRoZSB2aWV3J3MgdGltZSBydWxlci5cbiAgICogVGhpcyBpcyB1c2VkIGZvciByZW5kZXJpbmcgdGhlIGBISDptbWAgbGFiZWxzIG9uIHRoZSBzaWRlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGhvdXJzQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IHRpbWUgPSB0aGlzLmRhdGUoKTtcbiAgICBpZiAoIXRpbWUpIHJldHVybiBbXTtcbiAgICB0aW1lID0gdGltZS5zZXQoJ2hvdXInLCB0aGlzLnN0YXJ0RGF5SG91cigpKS5zdGFydE9mKCdob3VyJyk7XG4gICAgY29uc3QgaG91cnMgPSBbdGltZV07XG4gICAgd2hpbGUgKHRpbWUuaG91ciA8IHRoaXMuZW5kRGF5SG91cigpIC0gMSkge1xuICAgICAgdGltZSA9IHRpbWUuYWRkKCdob3VyJywgMSk7XG4gICAgICBob3Vycy5wdXNoKHRpbWUpO1xuICAgIH1cbiAgICByZXR1cm4gaG91cnM7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiBkYXkgZGF0YSBvYmplY3RzIGZvciB0aGUgNyBkYXlzIGluIHRoZSB2aWV3LCBpbmNsdWRpbmcgaG9saWRheSBpbmZvLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgZGF5IGhlYWRlcnMgKGUuZy4sIFwiTW9uZGF5IDEwXCIpLlxuICAgKi9cbiAgcHJvdGVjdGVkIGRheXNBcnJheSA9IGNvbXB1dGVkKFxuICAgICgpOiB7IGRhdGU6IEFYRGF0ZVRpbWU7IGhvbGlkYXk/OiB7IHN0YXRlOiAnaG9saWRheScgfCAnd2Vla2VuZCcgfCAnbm9uZSc7IGhvbGlkYXk/OiBBWEhvbGlkYXlEYXRlIH0gfVtdID0+IHtcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmRhdGUoKTtcbiAgICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgICAgY29uc3QgZGF5cyA9IFt7IGRhdGU6IHRpbWUsIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KHRpbWUpIH1dO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSA2OyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aW1lLmFkZCgnZGF5JywgaW5kZXgpO1xuICAgICAgICBkYXlzLnB1c2goeyBkYXRlLCBob2xpZGF5OiB0aGlzLmlzSG9saWRheShkYXRlKSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXlzO1xuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgbnVtYmVyIG9mIDMwLW1pbnV0ZSBibG9ja3Mgd2l0aGluIHRoZSB2aXNpYmxlIGhvdXJzIG9mIGEgc2luZ2xlIGRheS5cbiAgICovXG4gIHByb3RlY3RlZCB0b3RhbEJsb2Nrc1BlclZpZXdEYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIChlbmRIIC0gc3RhcnRIKSAqICg2MCAvIDMwKSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEZpbHRlcnMgcHJvY2Vzc2VkIHNlZ21lbnRzIHRvIGdldCBvbmx5IHRob3NlIGZvciB0aGUgYWxsLWRheSBoZWFkZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWxsRGF5QXBwb2ludG1lbnRzUGVyRGF5ID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyQWxsRGF5U2xvdERhdGFbXSA9PiB7XG4gICAgY29uc3QgZGF5c0luV2VlayA9IHRoaXMuZGF5c0FycmF5KCkubWFwKChlKSA9PiBlLmRhdGUpO1xuICAgIGNvbnN0IGFsbERheVNlZ21lbnRzID0gdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKS5maWx0ZXIoKHMpID0+IHMuYWxsRGF5KTtcblxuICAgIHJldHVybiBkYXlzSW5XZWVrLm1hcCgoZGF5RGF0ZSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudERheVN0YXJ0ID0gZGF5RGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50c0ZvclRoaXNEYXkgPSBhbGxEYXlTZWdtZW50cy5maWx0ZXIoKHNlZ21lbnQpID0+XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShzZWdtZW50LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKS5zdGFydE9mKCdkYXknKS5lcXVhbChjdXJyZW50RGF5U3RhcnQsICdkYXknKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXk6IGRheURhdGUsXG4gICAgICAgIGFwcG9pbnRtZW50czogb3JkZXJCeShhcHBvaW50bWVudHNGb3JUaGlzRGF5LCBbJ29yaWdpbmFsU3RhcnREYXRlJywgJ3RpdGxlJ10sIFsnYXNjJywgJ2FzYyddKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy9cbiAgLy8gR1JJRCBMQVlPVVQgJiBCQURHRSBMT0dJQyAoVEhFIENPUkUgRklYKVxuICAvLyBUaGlzIGxvZ2ljIGZvbGxvd3MgYSB0aHJlZS1zdGVwIHByb2Nlc3M6XG4gIC8vIDEuIGBkYXlWaWV3TGF5b3V0c0J5RGF5YDogQ2FsY3VsYXRlIGEgZnVsbCBtdWx0aS1jb2x1bW4gbGF5b3V0IGZvciBlYWNoIGRheS4gVGhpcyBpcyBvdXIgXCJzb3VyY2Ugb2YgdHJ1dGhcIi5cbiAgLy8gMi4gYHZpc2libGVBcHBvaW50bWVudHNMYXlvdXRgOiBSZW5kZXIgT05MWSB0aGUgZmlyc3QgY29sdW1uIChgY29sdW1uSW5kZXg6IDBgKSBmcm9tIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG4gIC8vIDMuIGBvdmVyZmxvd0JhZGdlc1dpdGhEYXRhYDogUmVuZGVyIGJhZGdlcyBmb3IgYWxsIG90aGVyIGNvbHVtbnMgKGBjb2x1bW5JbmRleCA+IDBgKS5cbiAgLy9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBbU1RFUCAxIC0gUHJpdmF0ZV0gQ2FsY3VsYXRlIGEgZnVsbCBtdWx0aS1jb2x1bW4gbGF5b3V0IGZvciBlYWNoIGRheSwgYXMgaWYgaXQgd2VyZSBhIERheSBWaWV3LlxuICAgKiBUaGlzIGJlY29tZXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHdoYXQgb3ZlcmxhcHMgd2l0aCB3aGF0LlxuICAgKi9cbiAgcHJpdmF0ZSBkYXlWaWV3TGF5b3V0c0J5RGF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGxheW91dHNCeURheSA9IG5ldyBNYXA8bnVtYmVyLCBNYXA8YW55LCBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0Pj4oKTtcbiAgICBjb25zdCBhbGxTZWdtZW50cyA9IHRoaXMudGltZWRHcmlkU2VnbWVudHMoKTtcbiAgICBjb25zdCB2aWV3U3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG5cbiAgICBmb3IgKGxldCBkYXlJbmRleCA9IDA7IGRheUluZGV4IDwgNzsgZGF5SW5kZXgrKykge1xuICAgICAgY29uc3QgZGF5RGF0ZSA9IHZpZXdTdGFydERhdGUuYWRkKCdkYXknLCBkYXlJbmRleCk7XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXkgPSBhbGxTZWdtZW50cy5maWx0ZXIoKHNlZykgPT5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlZy5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSkuc3RhcnRPZignZGF5JykuZXF1YWwoZGF5RGF0ZS5zdGFydE9mKCdkYXknKSwgJ2RheScpLFxuICAgICAgKTtcbiAgICAgIGlmIChzZWdtZW50c0ZvclRoaXNEYXkubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgY29uY3VycmVuY3lJbmZvTWFwID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmNhbGN1bGF0ZURheVZpZXdDb25jdXJyZW5jeUluZm8oXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgZGF5RGF0ZSxcbiAgICAgICAgc3RhcnRILFxuICAgICAgICBlbmRILFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNvcnRlZEFwcG9pbnRtZW50cyA9IG9yZGVyQnkoXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgWyhlKSA9PiBlLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIChlKSA9PiBlLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBlLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKV0sXG4gICAgICAgIFsnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGRheUxheW91dHMgPSBuZXcgTWFwPGFueSwgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dD4oKTtcbiAgICAgIGNvbnN0IGNvbHVtbnNEYXRhOiB7IGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSB9W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHBvaW50bWVudFNlZ21lbnQgb2Ygc29ydGVkQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGxldCBhc3NpZ25lZENvbCA9IC0xO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgOyBjKyspIHtcbiAgICAgICAgICBpZiAoIWNvbHVtbnNEYXRhW2NdKSBjb2x1bW5zRGF0YVtjXSA9IHsgYXBwb2ludG1lbnRzOiBbXSB9O1xuICAgICAgICAgIGxldCBjb25mbGljdCA9IGZhbHNlO1xuICAgICAgICAgIGZvciAoY29uc3QgcGxhY2VkU2VnbWVudCBvZiBjb2x1bW5zRGF0YVtjXS5hcHBvaW50bWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNjaGVkdWxlclNlcnZpY2UuZG9BcHBvaW50bWVudHNPdmVybGFwKGFwcG9pbnRtZW50U2VnbWVudCwgcGxhY2VkU2VnbWVudCkpIHtcbiAgICAgICAgICAgICAgY29uZmxpY3QgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFjb25mbGljdCkge1xuICAgICAgICAgICAgYXNzaWduZWRDb2wgPSBjO1xuICAgICAgICAgICAgY29sdW1uc0RhdGFbY10uYXBwb2ludG1lbnRzLnB1c2goYXBwb2ludG1lbnRTZWdtZW50KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25jdXJyZW5jeUluZm8gPSBjb25jdXJyZW5jeUluZm9NYXAuZ2V0KGFwcG9pbnRtZW50U2VnbWVudC5pZCk7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUNvbHMgPSBjb25jdXJyZW5jeUluZm8gPyBjb25jdXJyZW5jeUluZm8uZWZmZWN0aXZlVG90YWxDb2x1bW5zIDogMTtcbiAgICAgICAgZGF5TGF5b3V0cy5zZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkLCB7IGNvbHVtbkluZGV4OiBhc3NpZ25lZENvbCwgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBlZmZlY3RpdmVDb2xzIH0pO1xuICAgICAgfVxuICAgICAgbGF5b3V0c0J5RGF5LnNldChkYXlJbmRleCwgZGF5TGF5b3V0cyk7XG4gICAgfVxuICAgIHJldHVybiBsYXlvdXRzQnlEYXk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIFtTVEVQIDJdIEZyb20gdGhlIGZ1bGwgbGF5b3V0LCBzZWxlY3QgT05MWSBhcHBvaW50bWVudHMgaW4gdGhlIGZpcnN0IGNvbHVtbiAoYGNvbHVtbkluZGV4OiAwYClcbiAgICogdG8gYmUgdmlzaWJsZS4gQ2FsY3VsYXRlIHRoZWlyIHdpZHRoIGJhc2VkIG9uIHdoZXRoZXIgdGhleSBoYXZlIHNpYmxpbmdzIGluIG90aGVyIGNvbHVtbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmlzaWJsZUFwcG9pbnRtZW50c0xheW91dCA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0W10gPT4ge1xuICAgIGNvbnN0IGZpbmFsTGF5b3V0czogQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dFtdID0gW107XG4gICAgY29uc3QgbGF5b3V0c0J5RGF5ID0gdGhpcy5kYXlWaWV3TGF5b3V0c0J5RGF5KCk7XG4gICAgY29uc3QgYWxsU2VnbWVudHMgPSB0aGlzLnRpbWVkR3JpZFNlZ21lbnRzKCk7XG4gICAgY29uc3QgYmxvY2tIZWlnaHRFeHByID0gYHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCwgMzBweClgO1xuICAgIGNvbnN0IE4gPSA3O1xuXG4gICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbFNlZ21lbnRzKSB7XG4gICAgICBjb25zdCBhcHB0U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSBNYXRoLmZsb29yKFxuICAgICAgICAoYXBwdFN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKS5kYXRlLmdldFRpbWUoKSAtIHRoaXMuZGF0ZSgpLnN0YXJ0T2YoJ2RheScpLmRhdGUuZ2V0VGltZSgpKSAvXG4gICAgICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLk1JTExJU0VDT05EU19QRVJfREFZLFxuICAgICAgKTtcbiAgICAgIGlmIChkYXlJbmRleCA8IDAgfHwgZGF5SW5kZXggPj0gTikgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGxheW91dEluZm8gPSBsYXlvdXRzQnlEYXkuZ2V0KGRheUluZGV4KT8uZ2V0KGFwcHQuaWQpO1xuICAgICAgaWYgKCFsYXlvdXRJbmZvIHx8IGxheW91dEluZm8uY29sdW1uSW5kZXggIT09IDApIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBzdGFydE1pbnV0ZXMgPSBhcHB0U3RhcnREYXRlLmhvdXIgKiA2MCArIGFwcHRTdGFydERhdGUubWludXRlO1xuICAgICAgY29uc3Qgc3RhcnRCbG9ja09mZnNldCA9IHN0YXJ0TWludXRlcyAtIHRoaXMuc3RhcnREYXlIb3VyKCkgKiA2MDtcbiAgICAgIGNvbnN0IGxheW91dFRvcCA9IGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7c3RhcnRCbG9ja09mZnNldCAvIDMwfSArIDFweClgO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlRHVyYXRpb25Jbk1pbnV0ZXMoYXBwdCk7XG4gICAgICBjb25zdCBsYXlvdXRIZWlnaHQgPSBgY2FsYygke2Jsb2NrSGVpZ2h0RXhwcn0gKiAke2R1cmF0aW9uTWludXRlcyAvIDMwfSAtICR7dGhpcy5HQVBfUFh9cHgpYDtcblxuICAgICAgY29uc3QgaGFzSGlkZGVuU2libGluZ3MgPSBsYXlvdXRJbmZvLmVmZmVjdGl2ZVRvdGFsQ29sdW1ucyA+IDE7XG4gICAgICBjb25zdCBsYXlvdXRXaWR0aCA9IGhhc0hpZGRlblNpYmxpbmdzXG4gICAgICAgID8gYGNhbGMoMTAwJSAvICR7Tn0gLSAke3RoaXMuQkFER0VfU1BBQ0VfUkVNICsgMC41fXJlbSlgXG4gICAgICAgIDogYGNhbGMoMTAwJSAvICR7Tn0pYDtcblxuICAgICAgZmluYWxMYXlvdXRzLnB1c2goe1xuICAgICAgICBhcHBvaW50bWVudDogYXBwdCxcbiAgICAgICAgbGF5b3V0VG9wLFxuICAgICAgICBsYXlvdXRIZWlnaHQsXG4gICAgICAgIGxheW91dExlZnQ6IGBjYWxjKCR7ZGF5SW5kZXggKiAoMTAwIC8gTil9JSlgLFxuICAgICAgICBsYXlvdXRXaWR0aCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmluYWxMYXlvdXRzO1xuICB9KTtcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBbU1RFUCAzXSBDcmVhdGUgYmFkZ2VzIGZvciBhbGwgYXBwb2ludG1lbnRzIE5PVCBpbiB0aGUgZmlyc3QgY29sdW1uIChgY29sdW1uSW5kZXggPiAwYCkuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcmZsb3dCYWRnZXNXaXRoRGF0YSA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlckdyaWRCYWRnZUluZm9bXSA9PiB7XG4gICAgY29uc3QgYmFkZ2VzSW5mbzogQVhTY2hlZHVsZXJHcmlkQmFkZ2VJbmZvW10gPSBbXTtcbiAgICBjb25zdCBsYXlvdXRzQnlEYXkgPSB0aGlzLmRheVZpZXdMYXlvdXRzQnlEYXkoKTtcbiAgICBjb25zdCBhbGxUaW1lZFNlZ21lbnRzID0gdGhpcy50aW1lZEdyaWRTZWdtZW50cygpO1xuICAgIGNvbnN0IGJsb2NrSGVpZ2h0RXhwciA9IGB2YXIoLS1heC1jb21wLXNjaGVkdWxlci1iYXNpYy12aWV3LWJsb2Nrcy1oZWlnaHQsIDMwcHgpYDtcbiAgICBjb25zdCBOID0gNztcblxuICAgIGNvbnN0IGhpZGRlbkFwcG9pbnRtZW50cyA9IGFsbFRpbWVkU2VnbWVudHMuZmlsdGVyKChhcHB0KSA9PiB7XG4gICAgICBjb25zdCBhcHB0U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSBNYXRoLmZsb29yKFxuICAgICAgICAoYXBwdFN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKS5kYXRlLmdldFRpbWUoKSAtIHRoaXMuZGF0ZSgpLnN0YXJ0T2YoJ2RheScpLmRhdGUuZ2V0VGltZSgpKSAvXG4gICAgICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLk1JTExJU0VDT05EU19QRVJfREFZLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGxheW91dEluZm8gPSBsYXlvdXRzQnlEYXkuZ2V0KGRheUluZGV4KT8uZ2V0KGFwcHQuaWQpO1xuICAgICAgcmV0dXJuIGxheW91dEluZm8gJiYgbGF5b3V0SW5mby5jb2x1bW5JbmRleCA+IDA7XG4gICAgfSk7XG5cbiAgICBjb25zdCBncm91cGVkSGlkZGVuID0gbmV3IE1hcDxzdHJpbmcsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCk7XG4gICAgZm9yIChjb25zdCBhcHB0IG9mIGhpZGRlbkFwcG9pbnRtZW50cykge1xuICAgICAgY29uc3QgYXBwdFN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgIGNvbnN0IHN0YXJ0SW5mbyA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRCbG9ja0lkZW50aWZpZXIoXG4gICAgICAgIGFwcHRTdGFydERhdGUsXG4gICAgICAgIHRoaXMuZGF0ZSgpLFxuICAgICAgICB0aGlzLnN0YXJ0RGF5SG91cigpLFxuICAgICAgICB0aGlzLmVuZERheUhvdXIoKSxcbiAgICAgICAgNyxcbiAgICAgICk7XG4gICAgICBpZiAoIXN0YXJ0SW5mbykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGtleSA9IGAke3N0YXJ0SW5mby5kYXlJbmRleH0tJHtzdGFydEluZm8uYmxvY2tJbmRleH1gO1xuICAgICAgaWYgKCFncm91cGVkSGlkZGVuLmhhcyhrZXkpKSBncm91cGVkSGlkZGVuLnNldChrZXksIFtdKTtcbiAgICAgIGdyb3VwZWRIaWRkZW4uZ2V0KGtleSkucHVzaChhcHB0KTtcbiAgICB9XG5cbiAgICBncm91cGVkSGlkZGVuLmZvckVhY2goKGdyb3VwLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IFtkYXlJbmRleFN0ciwgYmxvY2tJbmRleFN0cl0gPSBrZXkuc3BsaXQoJy0nKTtcbiAgICAgIGNvbnN0IGRheUluZGV4ID0gcGFyc2VJbnQoZGF5SW5kZXhTdHIpO1xuICAgICAgY29uc3QgYmxvY2tJbmRleCA9IHBhcnNlSW50KGJsb2NrSW5kZXhTdHIpO1xuXG4gICAgICBjb25zdCBiYWRnZVRvcCA9IGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7YmxvY2tJbmRleH0gKyAwLjc1cmVtKWA7XG4gICAgICBjb25zdCBiYWRnZUxlZnQgPSBgY2FsYygke2RheUluZGV4ICogKDEwMCAvIE4pfSUgKyAoMTAwJSAvICR7Tn0pIC0gJHt0aGlzLkJBREdFX1NQQUNFX1JFTX1yZW0pYDtcblxuICAgICAgYmFkZ2VzSW5mby5wdXNoKHtcbiAgICAgICAga2V5OiBgYmFkZ2UtJHtrZXl9YCxcbiAgICAgICAgY291bnQ6IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgYmFkZ2VUb3AsXG4gICAgICAgIGJhZGdlTGVmdCxcbiAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBncm91cCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJhZGdlc0luZm87XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy9cbiAgLy8gRVZFTlQgSEFORExFUlMgJiBVVElMSVRZIE1FVEhPRFNcbiAgLy9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRPdXRwdXRNYXAgPSB7XG4gICAgc2xvdDoge1xuICAgICAgY2xpY2s6IHRoaXMuc2xvdENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLnNsb3REYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5zbG90UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgICBhcHBvaW50bWVudDoge1xuICAgICAgY2xpY2s6IHRoaXMuYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5hcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLmFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlcyBjbGljaywgZGJsY2xpY2ssIGFuZCBjb250ZXh0bWVudSBldmVudHMgb24gYW4gYXBwb2ludG1lbnQgYW5kIGVtaXRzIHRoZW0gdG8gdGhlIHBhcmVudC5cbiAgICogQHBhcmFtIG1vdXNlRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnQuXG4gICAqIEBwYXJhbSBhcHBvaW50bWVudFNlZ21lbnQgVGhlIGFwcG9pbnRtZW50IGRhdGEgc2VnbWVudCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGguXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50U2VnbWVudDogQVhTY2hlZHVsZXJBcHBvaW50bWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudFNlZ21lbnQpO1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2xpY2ssIGRibGNsaWNrLCBhbmQgY29udGV4dG1lbnUgZXZlbnRzIG9uIGFuIGVtcHR5IHRpbWUgc2xvdCBhbmQgZW1pdHMgdGhlbSB0byB0aGUgcGFyZW50LlxuICAgKiBAcGFyYW0gbW91c2VFdmVudCBUaGUgbmF0aXZlIERPTSBldmVudC5cbiAgICogQHBhcmFtIGhvdXIgVGhlIHN0YXJ0aW5nIGhvdXIgb2YgdGhlIHNsb3QuXG4gICAqIEBwYXJhbSBkYXkgVGhlIGRheSBvZiB0aGUgc2xvdC5cbiAgICogQHBhcmFtIG1pbnV0ZUluZGV4IFRoZSBoYWxmLWhvdXIgaW5kZXggKDAgb3IgMSkuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyBoYW5kbGVTaW5nbGVTbG90RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgaG91cjogQVhEYXRlVGltZSwgZGF5OiBBWERhdGVUaW1lLCBtaW51dGVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5LnNldCgnaG91cicsIGhvdXIuaG91cikuc2V0KCdtaW51dGUnLCBtaW51dGVJbmRleCAqIDMwKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICd3ZWVrJyk7XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaW50ZXJhY3Rpb24gZXZlbnRzIG9uIHRoZSBhbGwtZGF5IHNsb3QuXG4gICAqIEBwYXJhbSBtb3VzZUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50LlxuICAgKiBAcGFyYW0gZGF5IFRoZSBjb3JyZXNwb25kaW5nIGRheSBmb3IgdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFsbERheVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBkYXk6IEFYRGF0ZVRpbWUpOiB2b2lkIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHsgc3RhcnREYXRlOiBkYXkuc3RhcnRPZignZGF5JyksIGVuZERhdGU6IGRheS5lbmRPZignZGF5JyksIHZpZXc6ICd3ZWVrJyBhcyBjb25zdCB9O1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ3Nsb3QnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBkcm9wcGluZyBhbiBhcHBvaW50bWVudCBvbnRvIHRoZSBhbGwtZGF5IHNsb3QuXG4gICAqIEBwYXJhbSBlIFRoZSBkcm9wIGV2ZW50IGZyb20gdGhlIENESy5cbiAgICogQHBhcmFtIGRheSBUaGUgY29ycmVzcG9uZGluZyBkYXkgZm9yIHRoZSBhbGwtZGF5IHNsb3QuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyBoYW5kbGVBbGxEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGRheTogQVhEYXRlVGltZSk6IHZvaWQge1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGU6IGRheS5zdGFydE9mKCdkYXknKSwgZW5kRGF0ZTogZGF5LmVuZE9mKCdkYXknKSwgdmlldzogJ3dlZWsnIGFzIGNvbnN0IH07XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KFxuICAgICAgZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgICApO1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGRyb3BwaW5nIGFuIGFwcG9pbnRtZW50IG9udG8gYSB0aW1lZCBncmlkIHNsb3QuXG4gICAqIEBwYXJhbSBlIFRoZSBkcm9wIGV2ZW50IGZyb20gdGhlIENESy5cbiAgICogQHBhcmFtIGhvdXIgVGhlIHN0YXJ0aW5nIGhvdXIgb2YgdGhlIGRyb3AgdGFyZ2V0LlxuICAgKiBAcGFyYW0gZGF5IFRoZSBkYXkgb2YgdGhlIGRyb3AgdGFyZ2V0LlxuICAgKiBAcGFyYW0gbWludXRlSW5kZXggVGhlIGhhbGYtaG91ciBpbmRleCAoMCBvciAxKSBvZiB0aGUgZHJvcCB0YXJnZXQuXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyBoYW5kbGVTaW5nbGVEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIGhvdXI6IEFYRGF0ZVRpbWUsIGRheTogQVhEYXRlVGltZSwgbWludXRlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGRheS5zZXQoJ2hvdXInLCBob3VyLmhvdXIpLnNldCgnbWludXRlJywgbWludXRlSW5kZXggKiAzMCk7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoc3RhcnREYXRlLCAnd2VlaycpO1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChcbiAgICAgIGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gICAgKTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjbGlja3Mgb24gdGhlIFwibW9yZVwiIGFjdGlvbiBpY29uIG9uIGFuIGFwcG9pbnRtZW50LlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIG5hdGl2ZSBtb3VzZSBldmVudC5cbiAgICogQHBhcmFtIGFwcG9pbnRtZW50SXRlbSBUaGUgYXBwb2ludG1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24uXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyBoYW5kbGVBY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrSW50ZXJuYWwuZW1pdCh7XG4gICAgICBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBkYXRlIGlzIHRoZSBjdXJyZW50IGRheS5cbiAgICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGF0ZSBpcyB0b2RheS5cbiAgICovXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUobmV3IERhdGUoKSksICdkYXknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGRhdGUgaXMgYSBob2xpZGF5IG9yIHdlZWtlbmQuXG4gICAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgZGF5J3Mgc3RhdHVzIChob2xpZGF5LCB3ZWVrZW5kLCBvciBub25lKS5cbiAgICovXG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaG9saWRheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLmZpbmQoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgIGlmIChob2xpZGF5KSByZXR1cm4geyBzdGF0ZTogJ2hvbGlkYXknLCBob2xpZGF5IH07XG4gICAgaWYgKHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKSkgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIENhcHR1cmVzIHRoZSBkYXRhLXNsb3QtaWQgYXR0cmlidXRlIHdoZW4gYSBkcmFnIG9wZXJhdGlvbiBzdGFydHMgb24gYW4gYXBwb2ludG1lbnQuXG4gICAqIEBwYXJhbSBlIFRoZSBwb2ludGVyIGV2ZW50IHRoYXQgaW5pdGlhdGVzIHRoZSBkcmFnLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiAoZWwgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKVxuICBwcm90ZWN0ZWQgZ2V0IGlzUmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxuXG4gIC8vIC0tLSBQcml2YXRlIERhdGEgUHJvY2Vzc2luZyAtLS1cbiAgcHJpdmF0ZSBwcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdPigoKSA9PiB7XG4gICAgY29uc3Qgdmlld0RheXMgPSB0aGlzLmRheXNBcnJheSgpLm1hcCgoZSkgPT4gZS5kYXRlKTtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgaWYgKHZpZXdEYXlzLmxlbmd0aCA9PT0gMCB8fCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHN0YXJ0SCA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3QgZW5kSCA9IHRoaXMuZW5kRGF5SG91cigpO1xuICAgIGNvbnN0IGFsbFNlZ21lbnRzSW5WaWV3OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGRheSBvZiB2aWV3RGF5cykge1xuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoYXBwdCwgZGF5LnN0YXJ0T2YoJ2RheScpLCBzdGFydEgsIGVuZEgpO1xuICAgICAgICBpZiAoc2VnbWVudCkgYWxsU2VnbWVudHNJblZpZXcucHVzaChzZWdtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdW5pcXVlU2VnbWVudHNNYXAgPSBuZXcgTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQ+KCk7XG4gICAgYWxsU2VnbWVudHNJblZpZXcuZm9yRWFjaCgoc2VnKSA9PiB7XG4gICAgICBjb25zdCBtYXBLZXkgPSBgJHtzZWcuaWR9LSR7c2VnLnN0YXJ0RGF0ZS5nZXRUaW1lKCl9LSR7c2VnLmVuZERhdGUuZ2V0VGltZSgpfWA7XG4gICAgICBpZiAoIXVuaXF1ZVNlZ21lbnRzTWFwLmhhcyhtYXBLZXkpKSB1bmlxdWVTZWdtZW50c01hcC5zZXQobWFwS2V5LCBzZWcpO1xuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHVuaXF1ZVNlZ21lbnRzTWFwLnZhbHVlcygpKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSB0aW1lZEdyaWRTZWdtZW50cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKChzZWdtZW50KSA9PiAhc2VnbWVudC5hbGxEYXkpID8/IFtdO1xuICB9KTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXlzXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci10YWJsZVwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgQGZvciAoZGF5IG9mIGRheXNBcnJheSgpOyB0cmFjayBkYXkuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImlzVG9kYXkoZGF5LmRhdGUpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheVwiXG4gICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLWhvbGlkYXldPVwiZGF5LmhvbGlkYXkuc3RhdGUgIT09ICdub25lJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJkYXkuaG9saWRheT8uaG9saWRheT8udGl0bGUgPz8gJydcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGRheS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ2RkZGQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIEBpZiAoZGF5LmhvbGlkYXkuc3RhdGUgPT09ICdob2xpZGF5JyAmJiBkYXkuaG9saWRheS5ob2xpZGF5LnRpdGxlKSB7XG4gICAgICAgICAgICAgICgge3sgZGF5LmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5LW51bVwiPlxuICAgICAgICAgICAge3sgZGF5LmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnREQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXlzXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci10YWJsZVwiPnt7ICdAYWNvcmV4OmRhdGVUaW1lLmR1cmF0aW9uLmFsbC1kYXknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2Rpdj5cbiAgICA8ZGl2IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGVcIj5cbiAgICAgIEBmb3IgKHNsb3REYXRhIG9mIGFsbERheUFwcG9pbnRtZW50c1BlckRheSgpOyB0cmFjayBzbG90RGF0YS5kYXkuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAjem9uZTI9XCJheERyb3Bab25lXCJcbiAgICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lMi5pc0hvdmVyZWQoKVwiXG4gICAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlQWxsRGF5RHJvcCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFsbC1kYXktc2xvdFwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5kYXkpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudCwgc2xvdERhdGEuZGF5KVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwic2xvdERhdGEuYXBwb2ludG1lbnRzWzBdXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNsb3REYXRhLmFwcG9pbnRtZW50c1swXSlcIlxuICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNsb3REYXRhLmFwcG9pbnRtZW50c1swXSlcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNsb3REYXRhLmFwcG9pbnRtZW50c1swXSlcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyAnJyA6IHNsb3REYXRhLmFwcG9pbnRtZW50c1swXS50aXRsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlci13ZWVrLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cInNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAxID8gJ2NhbGMoMTAwJSAtIDJyZW0pJyA6ICcxMDAlJ1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgIHNsb3REYXRhLmFwcG9pbnRtZW50c1swXS5jc3NDbGFzcyA/P1xuICAgICAgICAgICAgICAgIGBheC1zY2hlZHVsZXItJHtzbG90RGF0YS5hcHBvaW50bWVudHNbMF0ucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICNtb3JlQXBwb2ludG1lbnRzXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFwcG9pbnRtZW50LWJhZGdlXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIicxLjVyZW0nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICBzbG90RGF0YS5hcHBvaW50bWVudHNbMV0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgICAgICBgYXgtc2NoZWR1bGVyLSR7c2xvdERhdGEuYXBwb2ludG1lbnRzWzFdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre3sgc2xvdERhdGEuYXBwb2ludG1lbnRzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiIGF4RHJvcFpvbmU+XG4gICAgICAgICAgICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2Ygc2xvdERhdGEuYXBwb2ludG1lbnRzOyB0cmFjayBhcHBvaW50bWVudC5pZDsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay10aW1lLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstdGltZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICB7eyB0aW1lIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay10YWJsZS1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICBAZm9yIChhcHB0IG9mIHZpc2libGVBcHBvaW50bWVudHNMYXlvdXQoKTsgdHJhY2sgYXBwdC5hcHBvaW50bWVudC5pZCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgIFtkcmFnRGF0YV09XCJhcHB0LmFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgYXBwdC5hcHBvaW50bWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwdC5hcHBvaW50bWVudClcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwdC5hcHBvaW50bWVudClcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwdC5hcHBvaW50bWVudClcIlxuICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYXBwdC5hcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImFwcHQubGF5b3V0V2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYXBwdC5sYXlvdXRIZWlnaHRcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1ibG9jay1zdGFydF09XCJhcHB0LmxheW91dFRvcFwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWlubGluZS1zdGFydF09XCJhcHB0LmxheW91dExlZnRcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcHQuYXBwb2ludG1lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke2FwcHQuYXBwb2ludG1lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxheC10aXRsZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYXBwdC5hcHBvaW50bWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYXBwdC5hcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgYXBwdC5hcHBvaW50bWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC1cbiAgICAgICAgICAgIHt7IGFwcHQuYXBwb2ludG1lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gT3ZlcmZsb3cgQmFkZ2VzIHdpdGggUG9wb3ZlcnMgLS0+XG4gICAgICBAZm9yIChiYWRnZSBvZiBvdmVyZmxvd0JhZGdlc1dpdGhEYXRhKCk7IHRyYWNrIGJhZGdlLmtleSkge1xuICAgICAgICA8IS0tIFdyYXAgYmFkZ2UgYW5kIHBvcG92ZXIgZm9yIHRhcmdldGluZyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1iYWRnZS13cmFwcGVyXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtYmxvY2stc3RhcnRdPVwiYmFkZ2UuYmFkZ2VUb3BcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1pbmxpbmUtc3RhcnRdPVwiYmFkZ2UuYmFkZ2VMZWZ0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gVGhlIEJhZGdlIGl0c2VsZiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjYWN0aW9uQnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hcHBvaW50bWVudC1iYWRnZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgYmFkZ2UuaGlkZGVuQXBwb2ludG1lbnRzWzBdLmNzc0NsYXNzID8/XG4gICAgICAgICAgICAgIGBheC1zY2hlZHVsZXItJHtiYWRnZS5oaWRkZW5BcHBvaW50bWVudHNbMF0ucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICt7eyBiYWRnZS5jb3VudCB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gVGhlIFBvcG92ZXIgLS0+XG4gICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJhY3Rpb25CdXR0b25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBheERyb3Bab25lPlxuICAgICAgICAgICAgICBAZm9yIChhcHBvaW50bWVudCBvZiBiYWRnZS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIGFwcG9pbnRtZW50LmlkKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIGFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICBhcHBvaW50bWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8dGFibGUgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2JvcmRlcl09XCIxXCI+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgQGZvciAoZGF5IG9mIGRheXNBcnJheSgpOyB0cmFjayBkYXkuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDApXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDApXCJcbiAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDApXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDApXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF5LmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpICsgJy0nICsgdGltZS5mb3JtYXQoJ0hIbW0nKVwiXG4gICAgICAgICAgICAgID48L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgQGZvciAoZGF5IG9mIGRheXNBcnJheSgpOyB0cmFjayBkYXkuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgICAgICAgI3pvbmUyPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZTIuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZVNpbmdsZURheURyb3AoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMSlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMSlcIlxuICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMSlcIlxuICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLCBkYXkuZGF0ZSwgMSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXkuZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJykgKyAnLScgKyB0aW1lLmFkZCgnbWludXRlJywgMzApLmZvcm1hdCgnSEhtbScpXCJcbiAgICAgICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSelectBoxComponent } from '@acorex/components/select-box';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, linkedSignal, model, output, PLATFORM_ID, signal, untracked, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXSchedulerService } from './scheduler.service';\nimport { AXSchedulerAgendaViewComponent } from './views/agenda/scheduler-agenda-view.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerTimelineMonthViewComponent } from './views/timeline-month/scheduler-timeline-month-view.component';\nimport { AXSchedulerTimelineMultiDayViewComponent } from './views/timeline-multi-day/scheduler-timeline-multi-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class AXSchedulerComponent extends NXComponent {\n constructor() {\n super(...arguments);\n this.platformId = inject(PLATFORM_ID);\n this.unsubscriber = inject(AXUnsubscriber);\n this.formatService = inject(AXFormatService);\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n this.schedulerService = inject(AXSchedulerService);\n this.translationService = inject(AXTranslationService);\n this.viewModeSelectbox = viewChild(AXSelectBoxComponent);\n this.calendarPopover = viewChild('calendarPopover');\n this.displayViews = {\n day: 'daily',\n week: 'weekly',\n month: 'monthly',\n 'timeline-day': 'daily-timeline',\n 'timeline-multi-day': 'multi-day-timeline',\n 'timeline-month': 'monthly-timeline',\n agenda: 'agenda',\n };\n this.calendar = input();\n this.calendarType = linkedSignal(() => this.calendar() ?? this.localeService.activeProfile().calendar.system);\n this.startingDate = input(new Date());\n this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'));\n this._appointments = signal([]);\n this.appointments = this._appointments.asReadonly();\n this.rtl = signal(false);\n this.isFullScreen = signal(false);\n this.viewsDataSource = signal([]);\n this.prevDate = signal(this.calendarService.create(new Date(), this.calendarType()));\n this.endDayHour = input(24);\n this.startDayHour = input(8);\n this.hasHeader = input(true);\n this.readonly = input(false);\n this.draggable = input(true);\n this.hasActions = input(true);\n this.dragStartDelay = input(0);\n this.allowFullScreen = input(true);\n this.multiDayViewDaysCount = input(7);\n this.tooltipTemplate = input();\n this.dataSource = input([]);\n this.firstDayOfWeek = input('sunday');\n this.views = input([\n 'day',\n 'week',\n 'month',\n 'timeline-day',\n 'timeline-multi-day',\n 'timeline-month',\n 'agenda',\n ]);\n this.selectedView = model(this.views()[0]);\n this.prevView = signal(this.selectedView());\n // --- Public Outputs ---\n this.onDataLoaded = output();\n this.onRangeChanged = output();\n this.onSlotClicked = output();\n this.onSlotDblClicked = output();\n this.onSlotRightClick = output();\n this.onAppointmentDrop = output();\n this.onActionClick = output();\n this.onAppointmentClicked = output();\n this.onAppointmentDblClicked = output();\n this.onAppointmentRightClick = output();\n this.#appointmentEffect = effect(async () => {\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n const list = await func({ range });\n this._appointments.set(list);\n }\n else {\n const list = this.dataSource();\n this._appointments.set(list);\n }\n this.onDataLoaded.emit();\n });\n this.currentDateText = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n case 'week': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('week', 1).add('day', -1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('day', this.multiDayViewDaysCount() - 1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'month':\n case 'timeline-month':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'MMMM yyyy',\n calendar: this.calendarType(),\n });\n }\n });\n this.calendarDepth = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'week':\n case 'agenda':\n case 'timeline-day':\n case 'timeline-multi-day':\n return 'day';\n case 'month':\n case 'timeline-month':\n return 'month';\n }\n });\n this.mappedAppointments = computed(() => {\n const items = this._appointments();\n return items\n .map((item) => {\n const startDate = this.calendarService.create(item.startDate, this.calendarType());\n const endDate = this.calendarService.create(item.endDate, this.calendarType());\n // Basic validation\n if (!startDate?.date || !endDate?.date) {\n console.warn('Scheduler: Skipping item due to invalid date fields:', item);\n return null;\n }\n // Check if dates are valid after creation\n if (isNaN(startDate.date.getTime()) || isNaN(endDate.date.getTime())) {\n console.warn('Scheduler: Skipping item due to invalid parsed date (NaN):', item);\n return null;\n }\n return item;\n })\n .filter((appt) => appt !== null); // Filter out nulls from invalid dates\n });\n this.range = computed(() => {\n const view = this.selectedView();\n const current = this.currentDate().startOf('day');\n if (!current)\n return { from: null, end: null };\n switch (view) {\n case 'day':\n case 'timeline-day': {\n const range = { from: current.date, end: current.endOf('day').date };\n return range;\n }\n case 'week': {\n const range = { from: current.date, end: current.add('day', 7).date };\n return range;\n }\n case 'month': {\n const { gridStartDate, gridEndDate } = this.getGridDateRange(current);\n const range = { from: gridStartDate.date, end: gridEndDate.add('day', 1).date };\n return range;\n }\n case 'timeline-month': {\n const range = { from: current.startOf('month').date, end: current.endOf('month').date };\n return range;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const range = { from: current.date, end: current.add('day', this.multiDayViewDaysCount()).date };\n return range;\n }\n }\n });\n this.#rangeChangedEffect = effect(() => {\n this.onRangeChanged.emit(this.range());\n });\n this.#viewChangedEffect = effect(() => {\n const view = this.selectedView();\n untracked(() => {\n this.handleViewChanged(this.prevView(), view);\n });\n });\n this.viewAppointments = computed(() => {\n const current = this.currentDate();\n const mapped = this.mappedAppointments();\n const rangeStart = this.range().from;\n const rangeEnd = this.range().end;\n if (!current || mapped.length === 0)\n return [];\n return mapped.filter((appt) => this.calendarService.create(appt.startDate, this.calendarType()).compare(rangeEnd, 'second') <= 0 &&\n this.calendarService.create(appt.endDate, this.calendarType()).compare(rangeStart, 'second') >= 0);\n });\n }\n // --- Internal Handlers for View Outputs ---\n handleSlotClickInternal(eventData) {\n this.onSlotClicked.emit(eventData);\n }\n handleSlotDblClickInternal(eventData) {\n this.onSlotDblClicked.emit(eventData);\n }\n handleSlotRightClickInternal(eventData) {\n this.onSlotRightClick.emit(eventData);\n }\n handleAppointmentClickInternal(eventData) {\n this.onAppointmentClicked.emit(eventData);\n }\n handleAppointmentDblClickInternal(eventData) {\n this.onAppointmentDblClicked.emit(eventData);\n }\n handleAppointmentRightClickInternal(eventData) {\n this.onAppointmentRightClick.emit(eventData);\n }\n handleAppointmentDropInternal(eventData) {\n this.onAppointmentDrop.emit(eventData);\n }\n ngOnInit() {\n this.calendarService.calendarChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n const currentDate = this.calendarService.create(this.currentDate().date, this.calendarType());\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n });\n this.translationService.langChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.fillDataSource();\n this.viewModeSelectbox()?.selectItems(this.viewsDataSource().find((c) => c.id == this.selectedView()));\n const currentDate = this.calendarService.create(this.currentDate().date, this.calendarType());\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n });\n if (isPlatformBrowser(this.platformId))\n this.rtl.set(AXHtmlUtil.isRtl(this.nativeElement));\n this.fillDataSource();\n }\n #appointmentEffect;\n async fillDataSource() {\n const result = [];\n for await (const c of this.views()) {\n const text = await this.translationService.translateAsync(`@acorex:dateTime.duration.${this.displayViews[c]}`);\n result.push({ text, id: c });\n }\n this.viewsDataSource.set(result);\n }\n getGridDateRange(dateInMonth) {\n const firstDayOfMonth = dateInMonth.startOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const daysFromPrevMonth = (firstDisplayedDayOfWeek - firstDayGridNum + 7) % 7;\n const gridStartDate = firstDayOfMonth.add('day', -daysFromPrevMonth);\n // Calculate end date based on standard 6 weeks for safety, or calculate dynamically if preferred\n const gridEndDate = gridStartDate.add('day', 6 * 7 - 1);\n return { gridStartDate, gridEndDate };\n }\n #rangeChangedEffect;\n #viewChangedEffect;\n viewChanged(e) {\n const newView = e.value;\n const oldView = e.oldValue;\n this.selectedView.set(newView);\n this.handleViewChanged(oldView, newView);\n }\n handleViewChanged(oldView, newView) {\n if (oldView === 'week') {\n const oldDayOfWeek = this.prevDate().dayOfWeek % 7;\n const date = this.currentDate().add('day', oldDayOfWeek - 1);\n this.currentDate.set(date);\n }\n this.prevDate.set(this.currentDate());\n if (newView === 'week') {\n const currentDate = this.currentDate();\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n const startOfWeekDate = currentDate.add('day', -daysToSubtract);\n this.currentDate.set(startOfWeekDate);\n }\n this.prevView.set(newView);\n }\n nextClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', 1));\n break;\n case 'week':\n this.currentDate.set(this.currentDate().add('week', 1));\n break;\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', this.multiDayViewDaysCount()));\n break;\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', 1));\n break;\n }\n }\n prevClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', -1));\n break;\n case 'week':\n this.currentDate.set(this.currentDate().add('week', -1));\n break;\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', -this.multiDayViewDaysCount()));\n break;\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', -1));\n break;\n }\n }\n calendarDateChanged(e) {\n let currentDate = this.calendarService.create(e.value, this.calendarType());\n if (this.selectedView() === 'week') {\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n currentDate = currentDate.add('day', -daysToSubtract);\n }\n if (!currentDate.equal(this.currentDate())) {\n this.currentDate.set(currentDate);\n }\n this.calendarPopover()?.close();\n }\n handleFullScreen() {\n if (!this.isFullScreen())\n this.nativeElement.classList.add('ax-full-screen-container');\n else\n this.nativeElement.classList.remove('ax-full-screen-container');\n this.isFullScreen.set(!this.isFullScreen());\n }\n async refresh(appointments) {\n if (appointments) {\n const newAppointments = this._appointments().map((appt) => {\n return appointments.find((a) => a.id === appt.id) ?? appt;\n });\n this._appointments.set(newAppointments);\n this.onDataLoaded.emit();\n return;\n }\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n const list = await func({ range });\n this._appointments.set(list);\n this.onDataLoaded.emit();\n return;\n }\n const list = this.dataSource();\n this._appointments.set(list);\n this.onDataLoaded.emit();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.4\", type: AXSchedulerComponent, isStandalone: true, selector: \"ax-scheduler\", inputs: { calendar: { classPropertyName: \"calendar\", publicName: \"calendar\", isSignal: true, isRequired: false, transformFunction: null }, startingDate: { classPropertyName: \"startingDate\", publicName: \"startingDate\", isSignal: true, isRequired: false, transformFunction: null }, endDayHour: { classPropertyName: \"endDayHour\", publicName: \"endDayHour\", isSignal: true, isRequired: false, transformFunction: null }, startDayHour: { classPropertyName: \"startDayHour\", publicName: \"startDayHour\", isSignal: true, isRequired: false, transformFunction: null }, hasHeader: { classPropertyName: \"hasHeader\", publicName: \"hasHeader\", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: \"readonly\", publicName: \"readonly\", isSignal: true, isRequired: false, transformFunction: null }, draggable: { classPropertyName: \"draggable\", publicName: \"draggable\", isSignal: true, isRequired: false, transformFunction: null }, hasActions: { classPropertyName: \"hasActions\", publicName: \"hasActions\", isSignal: true, isRequired: false, transformFunction: null }, dragStartDelay: { classPropertyName: \"dragStartDelay\", publicName: \"dragStartDelay\", isSignal: true, isRequired: false, transformFunction: null }, allowFullScreen: { classPropertyName: \"allowFullScreen\", publicName: \"allowFullScreen\", isSignal: true, isRequired: false, transformFunction: null }, multiDayViewDaysCount: { classPropertyName: \"multiDayViewDaysCount\", publicName: \"multiDayViewDaysCount\", isSignal: true, isRequired: false, transformFunction: null }, tooltipTemplate: { classPropertyName: \"tooltipTemplate\", publicName: \"tooltipTemplate\", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: \"dataSource\", publicName: \"dataSource\", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: \"firstDayOfWeek\", publicName: \"firstDayOfWeek\", isSignal: true, isRequired: false, transformFunction: null }, views: { classPropertyName: \"views\", publicName: \"views\", isSignal: true, isRequired: false, transformFunction: null }, selectedView: { classPropertyName: \"selectedView\", publicName: \"selectedView\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedView: \"selectedViewChange\", onDataLoaded: \"onDataLoaded\", onRangeChanged: \"onRangeChanged\", onSlotClicked: \"onSlotClicked\", onSlotDblClicked: \"onSlotDblClicked\", onSlotRightClick: \"onSlotRightClick\", onAppointmentDrop: \"onAppointmentDrop\", onActionClick: \"onActionClick\", onAppointmentClicked: \"onAppointmentClicked\", onAppointmentDblClicked: \"onAppointmentDblClicked\", onAppointmentRightClick: \"onAppointmentRightClick\" }, providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], viewQueries: [{ propertyName: \"viewModeSelectbox\", first: true, predicate: AXSelectBoxComponent, descendants: true, isSignal: true }, { propertyName: \"calendarPopover\", first: true, predicate: [\"calendarPopover\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-scheduler-container\\\">\\n @if (hasHeader()) {\\n <div class=\\\"ax-scheduler-header\\\">\\n <div class=\\\"ax-scheduler-date\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"prevClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-left': !rtl(),\\n 'ax-icon-chevron-right': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"currentDateText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"nextClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-right': !rtl(),\\n 'ax-icon-chevron-left': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-popover [target]=\\\"date\\\" #calendarPopover>\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [ngModel]=\\\"currentDate()\\\"\\n (onValueChanged)=\\\"calendarDateChanged($event)\\\"\\n ></ax-calendar>\\n </div>\\n </ax-popover>\\n </div>\\n <div class=\\\"ax-scheduler-actions\\\">\\n <ax-select-box\\n [dropdownWidth]=\\\"200\\\"\\n [ngModel]=\\\"selectedView()\\\"\\n [dataSource]=\\\"viewsDataSource()\\\"\\n (onValueChanged)=\\\"viewChanged($event)\\\"\\n ></ax-select-box>\\n\\n @if (allowFullScreen()) {\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"handleFullScreen()\\\">\\n <ax-icon>\\n <i\\n class=\\\"fa-solid fa-expand\\\"\\n [ngClass]=\\\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\\\"\\n ></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n </div>\\n }\\n <div class=\\\"ax-scheduler-views-container\\\">\\n @switch (selectedView()) {\\n @case ('day') {\\n <ax-scheduler-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-day-view>\\n }\\n @case ('week') {\\n <ax-scheduler-week-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-week-view>\\n }\\n @case ('month') {\\n <ax-scheduler-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-month-view>\\n }\\n @case ('timeline-day') {\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n }\\n @case ('timeline-multi-day') {\\n <ax-scheduler-timeline-multi-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [daysCount]=\\\"multiDayViewDaysCount()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-multi-day-view>\\n }\\n @case ('timeline-month') {\\n <ax-scheduler-timeline-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-month-view>\\n }\\n @case ('agenda') {\\n <ax-scheduler-agenda-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-agenda-view>\\n }\\n }\\n </div>\\n</div>\\n\", styles: [\":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;left:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover ax-title,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title{display:flex;justify-content:space-between}.ax-overlay-pane.ax-scheduler-popover ax-title .ax-scheduler-action-icon,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\\n\"], dependencies: [{ kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: AXSelectBoxComponent, selector: \"ax-select-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"minValue\", \"maxValue\", \"value\", \"state\", \"name\", \"id\", \"type\", \"look\", \"multiple\", \"valueField\", \"textField\", \"disabledField\", \"textTemplate\", \"selectedItems\", \"dataSource\", \"minRecordsForSearch\", \"caption\", \"itemTemplate\", \"selectedTemplate\", \"emptyTemplate\", \"loadingTemplate\", \"dropdownWidth\", \"searchBoxAutoFocus\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXCalendarComponent, selector: \"ax-calendar\", inputs: [\"rtl\", \"readonly\", \"value\", \"name\", \"disabled\", \"depth\", \"activeView\", \"minValue\", \"maxValue\", \"disabledDates\", \"holidayDates\", \"type\", \"cellTemplate\", \"cellClass\", \"showNavigation\", \"count\", \"id\"], outputs: [\"onOptionChanged\", \"valueChange\", \"onValueChanged\", \"minValueChange\", \"maxValueChange\", \"onBlur\", \"onFocus\", \"depthChange\", \"typeChange\", \"activeViewChange\", \"disabledDatesChange\", \"holidayDatesChange\", \"onNavigate\", \"onSlotClick\", \"countChange\"] }, { kind: \"component\", type: AXSchedulerDayViewComponent, selector: \"ax-scheduler-day-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onActionClickInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerWeekViewComponent, selector: \"ax-scheduler-week-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onActionClickInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerMonthViewComponent, selector: \"ax-scheduler-month-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"appointments\", \"firstDayOfWeek\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onActionClickInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineDayViewComponent, selector: \"ax-scheduler-timeline-day-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onActionClickInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineMultiDayViewComponent, selector: \"ax-scheduler-timeline-multi-day-view\", inputs: [\"daysCount\", \"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"endDayHour\", \"startDayHour\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onActionClickInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerTimelineMonthViewComponent, selector: \"ax-scheduler-timeline-month-view\", inputs: [\"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onActionClickInternal\", \"onAppointmentDropInternal\"] }, { kind: \"component\", type: AXSchedulerAgendaViewComponent, selector: \"ax-scheduler-agenda-view\", inputs: [\"daysCount\", \"readonly\", \"draggable\", \"hasActions\", \"dragStartDelay\", \"calendar\", \"date\", \"appointments\", \"tooltipTemplate\"], outputs: [\"slotClickedInternal\", \"slotDblClickedInternal\", \"slotRightClickedInternal\", \"appointmentClickedInternal\", \"appointmentDblClickedInternal\", \"appointmentRightClickedInternal\", \"onActionClickInternal\", \"onAppointmentDropInternal\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-scheduler', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n FormsModule,\n AXSelectBoxComponent,\n AXDecoratorIconComponent,\n AXButtonComponent,\n NgClass,\n AXPopoverComponent,\n AXCalendarComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n AXSchedulerTimelineMultiDayViewComponent,\n AXSchedulerTimelineMonthViewComponent,\n AXSchedulerAgendaViewComponent,\n ], providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }], template: \"<div class=\\\"ax-scheduler-container\\\">\\n @if (hasHeader()) {\\n <div class=\\\"ax-scheduler-header\\\">\\n <div class=\\\"ax-scheduler-date\\\">\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"prevClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-left': !rtl(),\\n 'ax-icon-chevron-right': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-button look=\\\"blank\\\" [text]=\\\"currentDateText()\\\" #date></ax-button>\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"nextClick()\\\">\\n <ax-icon\\n class=\\\"ax-icon ax-text-xl\\\"\\n [ngClass]=\\\"{\\n 'ax-icon-chevron-right': !rtl(),\\n 'ax-icon-chevron-left': rtl(),\\n }\\\"\\n ></ax-icon>\\n </ax-button>\\n <ax-popover [target]=\\\"date\\\" #calendarPopover>\\n <div class=\\\"ax-overlay-pane\\\">\\n <ax-calendar\\n [type]=\\\"calendarType()\\\"\\n [depth]=\\\"calendarDepth()\\\"\\n [ngModel]=\\\"currentDate()\\\"\\n (onValueChanged)=\\\"calendarDateChanged($event)\\\"\\n ></ax-calendar>\\n </div>\\n </ax-popover>\\n </div>\\n <div class=\\\"ax-scheduler-actions\\\">\\n <ax-select-box\\n [dropdownWidth]=\\\"200\\\"\\n [ngModel]=\\\"selectedView()\\\"\\n [dataSource]=\\\"viewsDataSource()\\\"\\n (onValueChanged)=\\\"viewChanged($event)\\\"\\n ></ax-select-box>\\n\\n @if (allowFullScreen()) {\\n <ax-button look=\\\"blank\\\" (onClick)=\\\"handleFullScreen()\\\">\\n <ax-icon>\\n <i\\n class=\\\"fa-solid fa-expand\\\"\\n [ngClass]=\\\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\\\"\\n ></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n </div>\\n }\\n <div class=\\\"ax-scheduler-views-container\\\">\\n @switch (selectedView()) {\\n @case ('day') {\\n <ax-scheduler-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-day-view>\\n }\\n @case ('week') {\\n <ax-scheduler-week-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-week-view>\\n }\\n @case ('month') {\\n <ax-scheduler-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [firstDayOfWeek]=\\\"firstDayOfWeek()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n ></ax-scheduler-month-view>\\n }\\n @case ('timeline-day') {\\n <ax-scheduler-timeline-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-day-view>\\n }\\n @case ('timeline-multi-day') {\\n <ax-scheduler-timeline-multi-day-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [endDayHour]=\\\"endDayHour()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [startDayHour]=\\\"startDayHour()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [daysCount]=\\\"multiDayViewDaysCount()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-multi-day-view>\\n }\\n @case ('timeline-month') {\\n <ax-scheduler-timeline-month-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-timeline-month-view>\\n }\\n @case ('agenda') {\\n <ax-scheduler-agenda-view\\n [date]=\\\"currentDate()\\\"\\n [readonly]=\\\"readonly()\\\"\\n [draggable]=\\\"draggable()\\\"\\n [calendar]=\\\"calendarType()\\\"\\n [hasActions]=\\\"hasActions()\\\"\\n [appointments]=\\\"viewAppointments()\\\"\\n [dragStartDelay]=\\\"dragStartDelay()\\\"\\n [tooltipTemplate]=\\\"tooltipTemplate()\\\"\\n (onActionClickInternal)=\\\"onActionClick.emit($event)\\\"\\n (slotClickedInternal)=\\\"handleSlotClickInternal($event)\\\"\\n (slotDblClickedInternal)=\\\"handleSlotDblClickInternal($event)\\\"\\n (slotRightClickedInternal)=\\\"handleSlotRightClickInternal($event)\\\"\\n (onAppointmentDropInternal)=\\\"handleAppointmentDropInternal($event)\\\"\\n (appointmentClickedInternal)=\\\"handleAppointmentClickInternal($event)\\\"\\n (appointmentDblClickedInternal)=\\\"handleAppointmentDblClickInternal($event)\\\"\\n (appointmentRightClickedInternal)=\\\"handleAppointmentRightClickInternal($event)\\\"\\n >\\n </ax-scheduler-agenda-view>\\n }\\n }\\n </div>\\n</div>\\n\", styles: [\":root{--ax-comp-scheduler-width: 57.5rem;--ax-comp-scheduler-basic-view-blocks-height: 3rem;--ax-comp-scheduler-basic-view-blocks-width: 3.5rem;--ax-comp-scheduler-timeline-view-blocks-width: 20rem;--ax-comp-scheduler-timeline-view-blocks-height: 3rem;--ax-comp-scheduler-primary-bg-color: var(--ax-sys-color-primary-surface);--ax-comp-scheduler-primary-text-color: var(--ax-sys-color-on-primary-surface);--ax-comp-scheduler-highest-periority-bg-color: var(--ax-sys-color-danger-dark-surface);--ax-comp-scheduler-highest-periority-text-color: var(--ax-sys-color-on-danger-dark-surface);--ax-comp-scheduler-high-periority-bg-color: var(--ax-sys-color-danger-surface);--ax-comp-scheduler-high-periority-text-color: var(--ax-sys-color-on-danger-surface);--ax-comp-scheduler-medium-periority-bg-color: var(--ax-sys-color-warning-surface);--ax-comp-scheduler-medium-periority-text-color: var(--ax-sys-color-on-warning-surface);--ax-comp-scheduler-low-periority-bg-color: var(--ax-sys-color-success-light-surface);--ax-comp-scheduler-low-periority-text-color: var(--ax-sys-color-on-success-light-surface);--ax-comp-scheduler-lowest-periority-bg-color: var(--ax-sys-color-success-lightest-surface);--ax-comp-scheduler-lowest-periority-text-color: var(--ax-sys-color-on-success-lightest-surface)}ax-scheduler{width:100%;height:100%;display:block;-webkit-user-select:none;user-select:none;font-size:.875rem;background-color:inherit}ax-scheduler.ax-full-screen-container{top:0;left:0;z-index:61;width:100vw;height:100vh;position:fixed}ax-scheduler .ax-scheduler-container{height:100%;display:flex;overflow:hidden;border-width:1px;flex-direction:column;background-color:inherit;border-radius:var(--ax-sys-border-radius)}ax-scheduler .ax-scheduler-container .ax-scheduler-header{display:flex;padding:1rem;overflow-x:auto;overflow-y:hidden;align-items:center;border-bottom-width:1px;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date{display:flex;min-width:20.5rem;align-items:center;justify-content:space-between}ax-scheduler .ax-scheduler-container .ax-scheduler-header .ax-scheduler-date p{margin:0;font-size:1rem;min-width:10rem;font-weight:500;text-align:center}ax-scheduler .ax-scheduler-container .ax-scheduler-actions{gap:.75rem;display:flex;align-items:center;justify-content:center}ax-scheduler .ax-scheduler-container .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}ax-scheduler .ax-scheduler-container ax-subtitle{font-size:.75rem}ax-scheduler .ax-scheduler-container .ax-scheduler-views-container{height:100%;overflow:auto;background-color:inherit}ax-scheduler .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}ax-scheduler .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}ax-scheduler .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}ax-scheduler .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}ax-scheduler .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}ax-scheduler .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover{gap:.25rem;display:grid;overflow:auto;padding:.25rem;max-height:10rem;font-size:.875rem;border-radius:.5rem}.ax-overlay-pane.ax-scheduler-popover.ax-scheduler-month-popover-appointment{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover:not(.ax-state-readonly) .ax-scheduler-popover-appointment{cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment{display:flex;overflow:hidden;-webkit-user-select:none;user-select:none;flex-direction:column;padding-block:.25rem;padding-inline:.5rem;border-radius:calc(var(--ax-sys-border-radius) / 2);color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment ax-subtitle{font-size:.75rem}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-popover-appointment .ax-scheduler-truncate{display:block;overflow:hidden;text-wrap:nowrap;text-overflow:ellipsis}.ax-overlay-pane.ax-scheduler-popover ax-title,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title{display:flex;justify-content:space-between}.ax-overlay-pane.ax-scheduler-popover ax-title .ax-scheduler-action-icon,.ax-overlay-pane.ax-scheduler-popover .ax-appointment-chip-title .ax-scheduler-action-icon{width:auto;cursor:pointer}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-primary-periority{color:rgba(var(--ax-comp-scheduler-primary-text-color));background-color:rgba(var(--ax-comp-scheduler-primary-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-highest-periority{color:rgba(var(--ax-comp-scheduler-highest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-highest-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-high-periority{color:rgba(var(--ax-comp-scheduler-high-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-high-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-medium-periority{color:rgba(var(--ax-comp-scheduler-medium-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-medium-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-low-periority{color:rgba(var(--ax-comp-scheduler-low-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-low-periority-bg-color))}.ax-overlay-pane.ax-scheduler-popover .ax-scheduler-lowest-periority{color:rgba(var(--ax-comp-scheduler-lowest-periority-text-color));background-color:rgba(var(--ax-comp-scheduler-lowest-periority-bg-color))}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXVCLFdBQVcsRUFBMEIsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFD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WENvbXBvbmVudCwgQVhWYWx1ZUNoYW5nZWRFdmVudCwgTlhDb21wb25lbnQsIE5YRXZlbnQsIE5YTmF0aXZlRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jYWxlbmRhcic7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFNlbGVjdEJveENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhIdG1sVXRpbCwgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbGlua2VkU2lnbmFsLFxuICBtb2RlbCxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICB1bnRyYWNrZWQsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBWERheU9mV2Vla05hbWUsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnREYXRhU291cmNlLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyLFxuICBBWFNjaGVkdWxlckRhdGVSYW5nZSxcbiAgQVhTY2hlZHVsZXJWaWV3LFxufSBmcm9tICcuL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy9kYXkvc2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvbW9udGgvc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1kYXkvc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50LCBNb3VzZUV2ZW50PiB7XG4gIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50IGV4dGVuZHMgTlhOYXRpdmVFdmVudDxBWFNjaGVkdWxlckNvbXBvbmVudCwgTW91c2VFdmVudD4ge1xuICBzbG90OiB7XG4gICAgZW5kRGF0ZTogQVhEYXRlVGltZTtcbiAgICBzdGFydERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgdmlldzogQVhTY2hlZHVsZXJWaWV3O1xuICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQgZXh0ZW5kcyBOWEV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50PiB7XG4gIGRyb3BFdmVudDogQVhEcm9wWm9uZURyb3BFdmVudDtcbiAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gIHNsb3Q6IHtcbiAgICBlbmREYXRlOiBBWERhdGVUaW1lO1xuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZTtcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXc7XG4gIH07XG4gIGlzU2FtZVNsb3REcm9wOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQVhTZWxlY3RCb3hDb21wb25lbnQsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYQnV0dG9uQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyV2Vla1ZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQVhVbnN1YnNjcmliZXIsIHsgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlckNvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmVyID0gaW5qZWN0KEFYVW5zdWJzY3JpYmVyKTtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgbG9jYWxlU2VydmljZSA9IGluamVjdChBWExvY2FsZVNlcnZpY2UpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB2aWV3TW9kZVNlbGVjdGJveCA9IHZpZXdDaGlsZChBWFNlbGVjdEJveENvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJQb3BvdmVyID0gdmlld0NoaWxkPEFYUG9wb3ZlckNvbXBvbmVudD4oJ2NhbGVuZGFyUG9wb3ZlcicpO1xuXG4gIHByaXZhdGUgZGlzcGxheVZpZXdzOiBSZWNvcmQ8QVhTY2hlZHVsZXJWaWV3LCBzdHJpbmc+ID0ge1xuICAgIGRheTogJ2RhaWx5JyxcbiAgICB3ZWVrOiAnd2Vla2x5JyxcbiAgICBtb250aDogJ21vbnRobHknLFxuICAgICd0aW1lbGluZS1kYXknOiAnZGFpbHktdGltZWxpbmUnLFxuICAgICd0aW1lbGluZS1tdWx0aS1kYXknOiAnbXVsdGktZGF5LXRpbWVsaW5lJyxcbiAgICAndGltZWxpbmUtbW9udGgnOiAnbW9udGhseS10aW1lbGluZScsXG4gICAgYWdlbmRhOiAnYWdlbmRhJyxcbiAgfTtcblxuICBwdWJsaWMgY2FsZW5kYXIgPSBpbnB1dDwnZ3JlZ29yaWFuJyB8ICdzb2xhci1oaWpyaScgfCBzdHJpbmc+KCk7XG4gIHByb3RlY3RlZCBjYWxlbmRhclR5cGUgPSBsaW5rZWRTaWduYWw8J2dyZWdvcmlhbicgfCAnc29sYXItaGlqcmknIHwgc3RyaW5nPihcbiAgICAoKSA9PiB0aGlzLmNhbGVuZGFyKCkgPz8gdGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5jYWxlbmRhci5zeXN0ZW0sXG4gICk7XG5cbiAgcHVibGljIHN0YXJ0aW5nRGF0ZSA9IGlucHV0PERhdGU+KG5ldyBEYXRlKCkpO1xuICBwdWJsaWMgY3VycmVudERhdGUgPSBsaW5rZWRTaWduYWw8QVhEYXRlVGltZT4oKCkgPT5cbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGhpcy5zdGFydGluZ0RhdGUoKSwgdGhpcy5jYWxlbmRhclR5cGUoKSkuc3RhcnRPZignZGF5JyksXG4gICk7XG5cbiAgcHJpdmF0ZSBfYXBwb2ludG1lbnRzID0gc2lnbmFsPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICBwdWJsaWMgYXBwb2ludG1lbnRzID0gdGhpcy5fYXBwb2ludG1lbnRzLmFzUmVhZG9ubHkoKTtcbiAgcHJvdGVjdGVkIHJ0bCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBpc0Z1bGxTY3JlZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgdmlld3NEYXRhU291cmNlID0gc2lnbmFsPHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXT4oW10pO1xuICBwcml2YXRlIHByZXZEYXRlID0gc2lnbmFsPEFYRGF0ZVRpbWU+KHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpLCB0aGlzLmNhbGVuZGFyVHlwZSgpKSk7XG5cbiAgcHVibGljIGVuZERheUhvdXIgPSBpbnB1dCgyNCk7XG4gIHB1YmxpYyBzdGFydERheUhvdXIgPSBpbnB1dCg4KTtcbiAgcHVibGljIGhhc0hlYWRlciA9IGlucHV0KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIHB1YmxpYyBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIGhhc0FjdGlvbnMgPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIHB1YmxpYyBhbGxvd0Z1bGxTY3JlZW4gPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIG11bHRpRGF5Vmlld0RheXNDb3VudCA9IGlucHV0KDcpO1xuICBwdWJsaWMgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG4gIHB1YmxpYyBkYXRhU291cmNlID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudERhdGFTb3VyY2U+KFtdKTtcbiAgcHVibGljIGZpcnN0RGF5T2ZXZWVrID0gaW5wdXQ8QVhEYXlPZldlZWtOYW1lPignc3VuZGF5Jyk7XG4gIHB1YmxpYyB2aWV3cyA9IGlucHV0PEFYU2NoZWR1bGVyVmlld1tdPihbXG4gICAgJ2RheScsXG4gICAgJ3dlZWsnLFxuICAgICdtb250aCcsXG4gICAgJ3RpbWVsaW5lLWRheScsXG4gICAgJ3RpbWVsaW5lLW11bHRpLWRheScsXG4gICAgJ3RpbWVsaW5lLW1vbnRoJyxcbiAgICAnYWdlbmRhJyxcbiAgXSk7XG5cbiAgcHVibGljIHNlbGVjdGVkVmlldyA9IG1vZGVsPEFYU2NoZWR1bGVyVmlldz4odGhpcy52aWV3cygpWzBdKTtcbiAgcHJpdmF0ZSBwcmV2VmlldyA9IHNpZ25hbDxBWFNjaGVkdWxlclZpZXc+KHRoaXMuc2VsZWN0ZWRWaWV3KCkpO1xuXG4gIC8vIC0tLSBQdWJsaWMgT3V0cHV0cyAtLS1cbiAgcHVibGljIG9uRGF0YUxvYWRlZCA9IG91dHB1dDx2b2lkPigpO1xuICBwdWJsaWMgb25SYW5nZUNoYW5nZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJEYXRlUmFuZ2U+KCk7XG4gIHB1YmxpYyBvblNsb3RDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvblNsb3REYmxDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvblNsb3RSaWdodENsaWNrID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50RHJvcCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFjdGlvbkNsaWNrID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25BcHBvaW50bWVudENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50RGJsQ2xpY2tlZCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uQXBwb2ludG1lbnRSaWdodENsaWNrID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuXG4gIC8vIC0tLSBJbnRlcm5hbCBIYW5kbGVycyBmb3IgVmlldyBPdXRwdXRzIC0tLVxuICBwcm90ZWN0ZWQgaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vblNsb3RDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vblNsb3REYmxDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbChldmVudERhdGE6IEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uU2xvdFJpZ2h0Q2xpY2suZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudENsaWNrZWQuZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudERibENsaWNrZWQuZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbChldmVudERhdGE6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50UmlnaHRDbGljay5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50KSB7XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhckNoYW5nZXMkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRoaXMuY3VycmVudERhdGUoKS5kYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICAgIGlmICghY3VycmVudERhdGUuZXF1YWwodGhpcy5jdXJyZW50RGF0ZSgpKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChjdXJyZW50RGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5sYW5nQ2hhbmdlcyQucGlwZSh0aGlzLnVuc3Vic2NyaWJlci50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5maWxsRGF0YVNvdXJjZSgpO1xuICAgICAgdGhpcy52aWV3TW9kZVNlbGVjdGJveCgpPy5zZWxlY3RJdGVtcyh0aGlzLnZpZXdzRGF0YVNvdXJjZSgpLmZpbmQoKGMpID0+IGMuaWQgPT0gdGhpcy5zZWxlY3RlZFZpZXcoKSkpO1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGhpcy5jdXJyZW50RGF0ZSgpLmRhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgICAgaWYgKCFjdXJyZW50RGF0ZS5lcXVhbCh0aGlzLmN1cnJlbnREYXRlKCkpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KGN1cnJlbnREYXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB0aGlzLnJ0bC5zZXQoQVhIdG1sVXRpbC5pc1J0bCh0aGlzLm5hdGl2ZUVsZW1lbnQpKTtcbiAgICB0aGlzLmZpbGxEYXRhU291cmNlKCk7XG4gIH1cblxuICAjYXBwb2ludG1lbnRFZmZlY3QgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhU291cmNlKCkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyO1xuICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgIGVuZDogdGhpcy5yYW5nZSgpLmVuZCxcbiAgICAgICAgZnJvbTogdGhpcy5yYW5nZSgpLmZyb20sXG4gICAgICB9O1xuICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGZ1bmMoeyByYW5nZSB9KTtcbiAgICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobGlzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50W107XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgIH1cbiAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gIH0pO1xuXG4gIHByaXZhdGUgYXN5bmMgZmlsbERhdGFTb3VyY2UoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBjIG9mIHRoaXMudmlld3MoKSkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGBAYWNvcmV4OmRhdGVUaW1lLmR1cmF0aW9uLiR7dGhpcy5kaXNwbGF5Vmlld3NbY119YCk7XG4gICAgICByZXN1bHQucHVzaCh7IHRleHQsIGlkOiBjIH0pO1xuICAgIH1cbiAgICB0aGlzLnZpZXdzRGF0YVNvdXJjZS5zZXQocmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3JpZERhdGVSYW5nZShkYXRlSW5Nb250aDogQVhEYXRlVGltZSk6IHsgZ3JpZFN0YXJ0RGF0ZTogQVhEYXRlVGltZTsgZ3JpZEVuZERhdGU6IEFYRGF0ZVRpbWUgfSB7XG4gICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gZGF0ZUluTW9udGguc3RhcnRPZignbW9udGgnKTtcbiAgICBjb25zdCBmaXJzdERheUdyaWROdW0gPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKHRoaXMuZmlyc3REYXlPZldlZWsoKSk7XG4gICAgY29uc3QgZmlyc3REaXNwbGF5ZWREYXlPZldlZWsgPSBmaXJzdERheU9mTW9udGguZGF5T2ZXZWVrO1xuICAgIGNvbnN0IGRheXNGcm9tUHJldk1vbnRoID0gKGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrIC0gZmlyc3REYXlHcmlkTnVtICsgNykgJSA3O1xuICAgIGNvbnN0IGdyaWRTdGFydERhdGUgPSBmaXJzdERheU9mTW9udGguYWRkKCdkYXknLCAtZGF5c0Zyb21QcmV2TW9udGgpO1xuICAgIC8vIENhbGN1bGF0ZSBlbmQgZGF0ZSBiYXNlZCBvbiBzdGFuZGFyZCA2IHdlZWtzIGZvciBzYWZldHksIG9yIGNhbGN1bGF0ZSBkeW5hbWljYWxseSBpZiBwcmVmZXJyZWRcbiAgICBjb25zdCBncmlkRW5kRGF0ZSA9IGdyaWRTdGFydERhdGUuYWRkKCdkYXknLCA2ICogNyAtIDEpO1xuICAgIHJldHVybiB7IGdyaWRTdGFydERhdGUsIGdyaWRFbmREYXRlIH07XG4gIH1cblxuICBwdWJsaWMgY3VycmVudERhdGVUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ0REIE1NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnd2Vlayc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnRPZldlZWsgPSB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ0REIE1NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRPZldlZWsgPSB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ3dlZWsnLCAxKS5hZGQoJ2RheScsIC0xKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ0REIE1NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYCR7c3RhcnRPZldlZWt9IC0gJHtlbmRPZldlZWt9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgICB0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCB0aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpIC0gMSksXG4gICAgICAgICAgJ2RhdGV0aW1lJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0T2ZXZWVrfSAtICR7ZW5kT2ZXZWVrfWA7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ01NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcHVibGljIGNhbGVuZGFyRGVwdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkVmlldygpKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICAgIHJldHVybiAnZGF5JztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgcmV0dXJuICdtb250aCc7XG4gICAgfVxuICB9KTtcblxuICBwcml2YXRlIG1hcHBlZEFwcG9pbnRtZW50cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fYXBwb2ludG1lbnRzKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuXG4gICAgcmV0dXJuIGl0ZW1zXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShpdGVtLnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoaXRlbS5lbmREYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICAgICAgLy8gQmFzaWMgdmFsaWRhdGlvblxuICAgICAgICBpZiAoIXN0YXJ0RGF0ZT8uZGF0ZSB8fCAhZW5kRGF0ZT8uZGF0ZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignU2NoZWR1bGVyOiBTa2lwcGluZyBpdGVtIGR1ZSB0byBpbnZhbGlkIGRhdGUgZmllbGRzOicsIGl0ZW0pO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIGRhdGVzIGFyZSB2YWxpZCBhZnRlciBjcmVhdGlvblxuICAgICAgICBpZiAoaXNOYU4oc3RhcnREYXRlLmRhdGUuZ2V0VGltZSgpKSB8fCBpc05hTihlbmREYXRlLmRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignU2NoZWR1bGVyOiBTa2lwcGluZyBpdGVtIGR1ZSB0byBpbnZhbGlkIHBhcnNlZCBkYXRlIChOYU4pOicsIGl0ZW0pO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGFwcHQpOiBhcHB0IGlzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQgPT4gYXBwdCAhPT0gbnVsbCk7IC8vIEZpbHRlciBvdXQgbnVsbHMgZnJvbSBpbnZhbGlkIGRhdGVzXG4gIH0pO1xuXG4gIHB1YmxpYyByYW5nZSA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyRGF0ZVJhbmdlPigoKSA9PiB7XG4gICAgY29uc3QgdmlldyA9IHRoaXMuc2VsZWN0ZWRWaWV3KCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudERhdGUoKS5zdGFydE9mKCdkYXknKTtcblxuICAgIGlmICghY3VycmVudCkgcmV0dXJuIHsgZnJvbTogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBmcm9tOiBjdXJyZW50LmRhdGUsIGVuZDogY3VycmVudC5lbmRPZignZGF5JykuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICd3ZWVrJzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5kYXRlLCBlbmQ6IGN1cnJlbnQuYWRkKCdkYXknLCA3KS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICBjb25zdCB7IGdyaWRTdGFydERhdGUsIGdyaWRFbmREYXRlIH0gPSB0aGlzLmdldEdyaWREYXRlUmFuZ2UoY3VycmVudCk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBmcm9tOiBncmlkU3RhcnREYXRlLmRhdGUsIGVuZDogZ3JpZEVuZERhdGUuYWRkKCdkYXknLCAxKS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5zdGFydE9mKCdtb250aCcpLmRhdGUsIGVuZDogY3VycmVudC5lbmRPZignbW9udGgnKS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBmcm9tOiBjdXJyZW50LmRhdGUsIGVuZDogY3VycmVudC5hZGQoJ2RheScsIHRoaXMubXVsdGlEYXlWaWV3RGF5c0NvdW50KCkpLmRhdGUgfTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgI3JhbmdlQ2hhbmdlZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdGhpcy5vblJhbmdlQ2hhbmdlZC5lbWl0KHRoaXMucmFuZ2UoKSk7XG4gIH0pO1xuXG4gICN2aWV3Q2hhbmdlZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdmlldyA9IHRoaXMuc2VsZWN0ZWRWaWV3KCk7XG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlVmlld0NoYW5nZWQodGhpcy5wcmV2VmlldygpLCB2aWV3KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmlld0FwcG9pbnRtZW50cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnREYXRlKCk7XG4gICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBwZWRBcHBvaW50bWVudHMoKTtcbiAgICBjb25zdCByYW5nZVN0YXJ0ID0gdGhpcy5yYW5nZSgpLmZyb207XG4gICAgY29uc3QgcmFuZ2VFbmQgPSB0aGlzLnJhbmdlKCkuZW5kO1xuXG4gICAgaWYgKCFjdXJyZW50IHx8IG1hcHBlZC5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICAgIHJldHVybiBtYXBwZWQuZmlsdGVyKFxuICAgICAgKGFwcHQpID0+XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSkuY29tcGFyZShyYW5nZUVuZCwgJ3NlY29uZCcpIDw9IDAgJiZcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuZW5kRGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSkuY29tcGFyZShyYW5nZVN0YXJ0LCAnc2Vjb25kJykgPj0gMCxcbiAgICApO1xuICB9KTtcblxuICB2aWV3Q2hhbmdlZChlOiBBWFZhbHVlQ2hhbmdlZEV2ZW50PEFYU2NoZWR1bGVyVmlldz4pIHtcbiAgICBjb25zdCBuZXdWaWV3ID0gZS52YWx1ZTtcbiAgICBjb25zdCBvbGRWaWV3ID0gZS5vbGRWYWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkVmlldy5zZXQobmV3Vmlldyk7XG5cbiAgICB0aGlzLmhhbmRsZVZpZXdDaGFuZ2VkKG9sZFZpZXcsIG5ld1ZpZXcpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWV3Q2hhbmdlZChvbGRWaWV3OiBBWFNjaGVkdWxlclZpZXcsIG5ld1ZpZXc6IEFYU2NoZWR1bGVyVmlldykge1xuICAgIGlmIChvbGRWaWV3ID09PSAnd2VlaycpIHtcbiAgICAgIGNvbnN0IG9sZERheU9mV2VlayA9IHRoaXMucHJldkRhdGUoKS5kYXlPZldlZWsgJSA3O1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIG9sZERheU9mV2VlayAtIDEpO1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoZGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpKTtcblxuICAgIGlmIChuZXdWaWV3ID09PSAnd2VlaycpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5jdXJyZW50RGF0ZSgpO1xuICAgICAgY29uc3QgY3VycmVudERheU9mV2VlayA9IGN1cnJlbnREYXRlLmRheU9mV2VlaztcbiAgICAgIGNvbnN0IGRlc2lyZWRGaXJzdERheU5hbWUgPSB0aGlzLmZpcnN0RGF5T2ZXZWVrKCk7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOdW1iZXIgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKGRlc2lyZWRGaXJzdERheU5hbWUpO1xuICAgICAgY29uc3QgZGF5c1RvU3VidHJhY3QgPSAoY3VycmVudERheU9mV2VlayAtIGRlc2lyZWRGaXJzdERheU51bWJlciArIDcpICUgNztcbiAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrRGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHN0YXJ0T2ZXZWVrRGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2Vmlldy5zZXQobmV3Vmlldyk7XG4gIH1cblxuICBuZXh0Q2xpY2soKSB7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkVmlldygpKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5JzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ3dlZWsnLCAxKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5JzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgdGhpcy5tdWx0aURheVZpZXdEYXlzQ291bnQoKSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdtb250aCcsIDEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJldkNsaWNrKCkge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIC0xKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnd2VlaycsIC0xKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5JzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgLXRoaXMubXVsdGlEYXlWaWV3RGF5c0NvdW50KCkpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnbW9udGgnLCAtMSkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjYWxlbmRhckRhdGVDaGFuZ2VkKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQ8RGF0ZT4pIHtcbiAgICBsZXQgY3VycmVudERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoZS52YWx1ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWaWV3KCkgPT09ICd3ZWVrJykge1xuICAgICAgY29uc3QgY3VycmVudERheU9mV2VlayA9IGN1cnJlbnREYXRlLmRheU9mV2VlaztcbiAgICAgIGNvbnN0IGRlc2lyZWRGaXJzdERheU5hbWUgPSB0aGlzLmZpcnN0RGF5T2ZXZWVrKCk7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOdW1iZXIgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKGRlc2lyZWRGaXJzdERheU5hbWUpO1xuICAgICAgY29uc3QgZGF5c1RvU3VidHJhY3QgPSAoY3VycmVudERheU9mV2VlayAtIGRlc2lyZWRGaXJzdERheU51bWJlciArIDcpICUgNztcbiAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGUuYWRkKCdkYXknLCAtZGF5c1RvU3VidHJhY3QpO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnREYXRlLmVxdWFsKHRoaXMuY3VycmVudERhdGUoKSkpIHtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KGN1cnJlbnREYXRlKTtcbiAgICB9XG4gICAgdGhpcy5jYWxlbmRhclBvcG92ZXIoKT8uY2xvc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVGdWxsU2NyZWVuKCkge1xuICAgIGlmICghdGhpcy5pc0Z1bGxTY3JlZW4oKSkgdGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2F4LWZ1bGwtc2NyZWVuLWNvbnRhaW5lcicpO1xuICAgIGVsc2UgdGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2F4LWZ1bGwtc2NyZWVuLWNvbnRhaW5lcicpO1xuICAgIHRoaXMuaXNGdWxsU2NyZWVuLnNldCghdGhpcy5pc0Z1bGxTY3JlZW4oKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaChhcHBvaW50bWVudHM/OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10pIHtcbiAgICBpZiAoYXBwb2ludG1lbnRzKSB7XG4gICAgICBjb25zdCBuZXdBcHBvaW50bWVudHMgPSB0aGlzLl9hcHBvaW50bWVudHMoKS5tYXAoKGFwcHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcG9pbnRtZW50cy5maW5kKChhKSA9PiBhLmlkID09PSBhcHB0LmlkKSA/PyBhcHB0O1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KG5ld0FwcG9pbnRtZW50cyk7XG4gICAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhU291cmNlKCkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyO1xuICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgIGVuZDogdGhpcy5yYW5nZSgpLmVuZCxcbiAgICAgICAgZnJvbTogdGhpcy5yYW5nZSgpLmZyb20sXG4gICAgICB9O1xuICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGZ1bmMoeyByYW5nZSB9KTtcbiAgICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobGlzdCk7XG4gICAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50W107XG4gICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChsaXN0KTtcbiAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItY29udGFpbmVyXCI+XG4gIEBpZiAoaGFzSGVhZGVyKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXRlXCI+XG4gICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgKG9uQ2xpY2spPVwicHJldkNsaWNrKClcIj5cbiAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LXRleHQteGxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLWxlZnQnOiAhcnRsKCksXG4gICAgICAgICAgICAgICdheC1pY29uLWNoZXZyb24tcmlnaHQnOiBydGwoKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIFt0ZXh0XT1cImN1cnJlbnREYXRlVGV4dCgpXCIgI2RhdGU+PC9heC1idXR0b24+XG4gICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgKG9uQ2xpY2spPVwibmV4dENsaWNrKClcIj5cbiAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LXRleHQteGxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLXJpZ2h0JzogIXJ0bCgpLFxuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLWxlZnQnOiBydGwoKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtcG9wb3ZlciBbdGFyZ2V0XT1cImRhdGVcIiAjY2FsZW5kYXJQb3BvdmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmVcIj5cbiAgICAgICAgICAgIDxheC1jYWxlbmRhclxuICAgICAgICAgICAgICBbdHlwZV09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgICAgIFtkZXB0aF09XCJjYWxlbmRhckRlcHRoKClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImNhbGVuZGFyRGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9heC1jYWxlbmRhcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFjdGlvbnNcIj5cbiAgICAgICAgPGF4LXNlbGVjdC1ib3hcbiAgICAgICAgICBbZHJvcGRvd25XaWR0aF09XCIyMDBcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkVmlldygpXCJcbiAgICAgICAgICBbZGF0YVNvdXJjZV09XCJ2aWV3c0RhdGFTb3VyY2UoKVwiXG4gICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cInZpZXdDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICA+PC9heC1zZWxlY3QtYm94PlxuXG4gICAgICAgIEBpZiAoYWxsb3dGdWxsU2NyZWVuKCkpIHtcbiAgICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cImhhbmRsZUZ1bGxTY3JlZW4oKVwiPlxuICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYS1zb2xpZCBmYS1leHBhbmRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZhLWNvbXByZXNzJzogaXNGdWxsU2NyZWVuKCksICdmYS1leHBhbmQnOiAhaXNGdWxsU2NyZWVuKCkgfVwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdmlld3MtY29udGFpbmVyXCI+XG4gICAgQHN3aXRjaCAoc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIEBjYXNlICgnZGF5Jykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLWRheS12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYXgtc2NoZWR1bGVyLWRheS12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd3ZWVrJykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLXdlZWstdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgICAgW2hhc0FjdGlvbnNdPVwiaGFzQWN0aW9ucygpXCJcbiAgICAgICAgICBbc3RhcnREYXlIb3VyXT1cInN0YXJ0RGF5SG91cigpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgIChvbkFjdGlvbkNsaWNrSW50ZXJuYWwpPVwib25BY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID48L2F4LXNjaGVkdWxlci13ZWVrLXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ21vbnRoJykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLW1vbnRoLXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWsoKVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgIChvbkFjdGlvbkNsaWNrSW50ZXJuYWwpPVwib25BY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID48L2F4LXNjaGVkdWxlci1tb250aC12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd0aW1lbGluZS1kYXknKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2hhc0FjdGlvbnNdPVwiaGFzQWN0aW9ucygpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd0aW1lbGluZS1tdWx0aS1kYXknKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbZGF5c0NvdW50XT1cIm11bHRpRGF5Vmlld0RheXNDb3VudCgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCd0aW1lbGluZS1tb250aCcpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2hhc0FjdGlvbnNdPVwiaGFzQWN0aW9ucygpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgIChvbkFjdGlvbkNsaWNrSW50ZXJuYWwpPVwib25BY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC1zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnYWdlbmRhJykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2hhc0FjdGlvbnNdPVwiaGFzQWN0aW9ucygpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgIChvbkFjdGlvbkNsaWNrSW50ZXJuYWwpPVwib25BY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC1zY2hlZHVsZXItYWdlbmRhLXZpZXc+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { NgModule } from '@angular/core';\nimport { AXSchedulerComponent } from './scheduler.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\nimport * as i0 from \"@angular/core\";\nconst COMPONENT = [\n AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n];\nexport class AXSchedulerModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, imports: [AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent], exports: [AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, imports: [COMPONENT] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXSchedulerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUUxRixNQUFNLFNBQVMsR0FBRztJQUNoQixvQkFBb0I7SUFDcEIsMkJBQTJCO0lBQzNCLDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsbUNBQW1DO0NBQ3BDLENBQUM7QUFPRixNQUFNLE9BQU8saUJBQWlCOzhHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixZQVo1QixvQkFBb0I7WUFDcEIsMkJBQTJCO1lBQzNCLDRCQUE0QjtZQUM1Qiw2QkFBNkI7WUFDN0IsbUNBQW1DLGFBSm5DLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0IsNEJBQTRCO1lBQzVCLDZCQUE2QjtZQUM3QixtQ0FBbUM7K0dBUXhCLGlCQUFpQixZQUpmLFNBQVM7OzJGQUlYLGlCQUFpQjtrQkFMN0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTVBPTkVOVCA9IFtcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogWy4uLkNPTVBPTkVOVF0sXG4gIGV4cG9ydHM6IFsuLi5DT01QT05FTlRdLFxuICBwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlck1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9zY2hlZHVsZXIvc3JjL2Fjb3JleC1jb21wb25lbnRzLXNjaGVkdWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|