@acorex/components 20.1.18 → 20.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/datetime-box/index.d.ts +1 -0
  2. package/fesm2022/acorex-components-autocomplete.mjs +1 -1
  3. package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
  4. package/fesm2022/acorex-components-calendar.mjs +36 -15
  5. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  6. package/fesm2022/acorex-components-color-palette.mjs +1 -1
  7. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  8. package/fesm2022/acorex-components-conversation.mjs +2 -2
  9. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  10. package/fesm2022/acorex-components-cron-job.mjs +6 -6
  11. package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
  12. package/fesm2022/acorex-components-datetime-box.mjs +16 -3
  13. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  14. package/fesm2022/acorex-components-image-editor.mjs +5 -5
  15. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  16. package/fesm2022/acorex-components-kanban.mjs +2 -2
  17. package/fesm2022/acorex-components-kanban.mjs.map +1 -1
  18. package/fesm2022/acorex-components-list.mjs +22 -7
  19. package/fesm2022/acorex-components-list.mjs.map +1 -1
  20. package/fesm2022/acorex-components-paint.mjs +1 -1
  21. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  22. package/fesm2022/acorex-components-phone-box.mjs +1 -1
  23. package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
  24. package/fesm2022/acorex-components-popover.mjs +30 -1
  25. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  26. package/fesm2022/acorex-components-popup.mjs +2 -2
  27. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  28. package/fesm2022/acorex-components-query-builder.mjs +1 -1
  29. package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
  30. package/fesm2022/acorex-components-rest-api-generator.mjs +1 -1
  31. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  32. package/fesm2022/acorex-components-rrule.mjs +1 -1
  33. package/fesm2022/acorex-components-rrule.mjs.map +1 -1
  34. package/fesm2022/acorex-components-scheduler.mjs +16 -16
  35. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  36. package/fesm2022/acorex-components-select-box.mjs +16 -4
  37. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  38. package/fesm2022/acorex-components-tag-box.mjs +2 -2
  39. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  40. package/fesm2022/acorex-components-text-box.mjs +2 -2
  41. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  42. package/fesm2022/acorex-components-time-duration.mjs +1 -1
  43. package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
  44. package/fesm2022/acorex-components-tooltip.mjs +3 -3
  45. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  46. package/fesm2022/acorex-components-tree-view.mjs +1 -1
  47. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  48. package/fesm2022/acorex-components-wysiwyg.mjs +1 -1
  49. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  50. package/list/index.d.ts +15 -2
  51. package/package.json +1 -1
  52. package/popover/index.d.ts +10 -2
  53. package/scheduler/index.d.ts +1 -1
  54. package/select-box/index.d.ts +13 -1
  55. package/tooltip/index.d.ts +2 -2
@@ -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, signal } 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 this.internalHoliday = signal([], ...(ngDevMode ? [{ debugName: \"internalHoliday\" }] : []));\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 const globalHolidays = this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n const internalHolidays = this.internalHoliday().some((d) => date.equal(d.date, 'day'));\n return globalHolidays || internalHolidays;\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.1.3\", ngImport: i0, type: AXSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXSchedulerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3NjaGVkdWxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWUzRCxNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSVUsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUzQyxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLDRCQUF1QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEMseUJBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBRTFHLG9CQUFlLEdBQUcsTUFBTSxDQUFrQixFQUFFLDJEQUFDLENBQUM7S0F3bUIvQztJQXRtQkM7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxZQUFvQyxFQUFFLFlBQW9DO1FBQzlGLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0csT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxNQUFN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SSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sY0FBYyxJQUFJLGdCQUFnQixDQUFDO0lBQzVDLENBQUM7SUFDRCxTQUFTLENBQUMsSUFBZ0IsRUFBRSxRQUFnQjtRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkUsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs4R0FqbkJVLGtCQUFrQjtrSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTSxFQUFFLG1DQUFtQztpQkFDeEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgQVhIb2xpZGF5RGF0ZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhEYXlPZldlZWtOYW1lLFxuICBBWFNjaGVkdWxlckFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2ssXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJCbG9ja0lkZW50aWZpZXIsXG4gIEFYU2NoZWR1bGVyVmlldyxcbn0gZnJvbSAnLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfSBmcm9tICcuL3NjaGVkdWxlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JywgLy8gUHJvdmlkZSBzZXJ2aWNlIGFwcGxpY2F0aW9uLXdpZGVcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBIT1VSU19QRVJfREFZID0gMjQ7XG4gIHJlYWRvbmx5IE1JTlVURVNfUEVSX0hPVVIgPSA2MDtcbiAgcmVhZG9ubHkgQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyA9IDMwO1xuICByZWFkb25seSBNSUxMSVNFQ09ORFNfUEVSX01JTlVURSA9IDYwICogMTAwMDtcbiAgcmVhZG9ubHkgTUlMTElTRUNPTkRTX1BFUl9EQVkgPSB0aGlzLkhPVVJTX1BFUl9EQVkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKiB0aGlzLk1JTExJU0VDT05EU19QRVJfTUlOVVRFO1xuXG4gIGludGVybmFsSG9saWRheSA9IHNpZ25hbDxBWEhvbGlkYXlEYXRlW10+KFtdKTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHR3byBhcHBvaW50bWVudHMgb3ZlcmxhcCBpbiB0aW1lLlxuICAgKi9cbiAgZG9BcHBvaW50bWVudHNPdmVybGFwKGFwcG9pbnRtZW50QTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCwgYXBwb2ludG1lbnRCOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCFhcHBvaW50bWVudEE/LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnRBLmVuZERhdGUgfHwgIWFwcG9pbnRtZW50Qj8uc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudEIuZW5kRGF0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEEgPSBhcHBvaW50bWVudEEuc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICBjb25zdCBlbmRBID0gYXBwb2ludG1lbnRBLmVuZERhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IHN0YXJ0QiA9IGFwcG9pbnRtZW50Qi5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZEIgPSBhcHBvaW50bWVudEIuZW5kRGF0ZS5nZXRUaW1lKCk7XG4gICAgLy8gVXNlcyBzdHJpY3Qgb3ZlcmxhcCBjaGVjayAoY2hhbmdlIDwgLyA+IHRvIDw9IC8gPj0gaWYgdG91Y2hpbmcgYm91bmRhcmllcyBjb3VudClcbiAgICByZXR1cm4gc3RhcnRBIDwgZW5kQiAmJiBlbmRBID4gc3RhcnRCO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYXBwb2ludG1lbnQgZHVyYXRpb24gaW4gbWludXRlcy5cbiAgICovXG4gIGNhbGN1bGF0ZUR1cmF0aW9uSW5NaW51dGVzKEFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogbnVtYmVyIHtcbiAgICBpZiAoIUFwcG9pbnRtZW50Py5zdGFydERhdGUgfHwgIUFwcG9pbnRtZW50LmVuZERhdGUpIHJldHVybiAwO1xuICAgIGNvbnN0IGR1cmF0aW9uTWlsbGlzID0gQXBwb2ludG1lbnQuZW5kRGF0ZS5nZXRUaW1lKCkgLSBBcHBvaW50bWVudC5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBkdXJhdGlvbk1pbGxpcyAvIHRoaXMuTUlMTElTRUNPTkRTX1BFUl9NSU5VVEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYXBwb2ludG1lbnQgZHVyYXRpb24gaW4gYmxvY2tzIChkZWZhdWx0IDMwIG1pbikuXG4gICAqL1xuICBjYWxjdWxhdGVEdXJhdGlvbkluQmxvY2tzKGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSB0aGlzLmNhbGN1bGF0ZUR1cmF0aW9uSW5NaW51dGVzKGFwcG9pbnRtZW50KTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKGR1cmF0aW9uTWludXRlcyAvIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGF5IGluZGV4IChyZWxhdGl2ZSB0byB2aWV3IHN0YXJ0KSBhbmQgYmxvY2sgaW5kZXggKHJlbGF0aXZlIHRvIHN0YXJ0IGhvdXIpXG4gICAqIGZvciBhIGdpdmVuIGRhdGUgdGltZSB3aXRoaW4gdGhlIHZpZXcgY29udGV4dC4gUmV0dXJucyBudWxsIGlmIG91dHNpZGUgdmlldy5cbiAgICovXG4gIGdldEJsb2NrSWRlbnRpZmllcihcbiAgICBkYXRlVGltZTogQVhEYXRlVGltZSxcbiAgICB2aWV3U3RhcnREYXRlOiBBWERhdGVUaW1lLFxuICAgIHN0YXJ0SG91cjogbnVtYmVyLFxuICAgIGVuZEhvdXI6IG51bWJlciwgLy8gRXhjbHVzaXZlIGVuZCBob3VyXG4gICAgdmlld1RvdGFsRGF5cyA9IDEsIC8vIERlZmF1bHQgdG8gMSBmb3IgZGF5IHZpZXdcbiAgKTogQVhTY2hlZHVsZXJCbG9ja0lkZW50aWZpZXIgfCBudWxsIHtcbiAgICBpZiAoIXZpZXdTdGFydERhdGUgfHwgIWRhdGVUaW1lIHx8IHR5cGVvZiBzdGFydEhvdXIgIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbmRIb3VyICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZpZXdFbmREYXRlID0gdmlld1N0YXJ0RGF0ZS5hZGQoJ2RheScsIHZpZXdUb3RhbERheXMpOyAvLyBDYWxjdWxhdGUgZXhjbHVzaXZlIGVuZCBkYXRlXG5cbiAgICAvLyBDaGVjayBpZiBkYXRlVGltZSBpcyB3aXRoaW4gdGhlIHZpZXcncyBkYXRlIGFuZCB0aW1lIHJhbmdlXG4gICAgaWYgKFxuICAgICAgZGF0ZVRpbWUuY29tcGFyZSh2aWV3U3RhcnREYXRlLCAnZGF5JykgPCAwIHx8XG4gICAgICBkYXRlVGltZS5jb21wYXJlKHZpZXdFbmREYXRlLCAnZGF5JykgPj0gMCB8fCAvLyBDaGVjayBhZ2FpbnN0IGV4Y2x1c2l2ZSBlbmQgZGF0ZVxuICAgICAgZGF0ZVRpbWUuaG91ciA8IHN0YXJ0SG91ciB8fFxuICAgICAgZGF0ZVRpbWUuaG91ciA+PSBlbmRIb3VyIC8vIENoZWNrIGFnYWluc3QgZXhjbHVzaXZlIGVuZCBob3VyXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgZGF5IGluZGV4IHJlbGF0aXZlIHRvIHZpZXcgc3RhcnRcbiAgICBjb25zdCBkYXlJbmRleCA9IE1hdGguZmxvb3IoKGRhdGVUaW1lLmRhdGUuZ2V0VGltZSgpIC0gdmlld1N0YXJ0RGF0ZS5kYXRlLmdldFRpbWUoKSkgLyB0aGlzLk1JTExJU0VDT05EU19QRVJfREFZKTtcblxuICAgIC8vIEVuc3VyZSBkYXlJbmRleCBpcyB2YWxpZCBmb3IgdGhlIHZpZXcgZHVyYXRpb25cbiAgICBpZiAoZGF5SW5kZXggPCAwIHx8IGRheUluZGV4ID49IHZpZXdUb3RhbERheXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1pbnV0ZXNJbnRvRGF5ID0gZGF0ZVRpbWUuaG91ciAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUiArIGRhdGVUaW1lLm1pbnV0ZTtcbiAgICBjb25zdCBtaW51dGVzSW50b1ZpZXdIb3VycyA9IG1pbnV0ZXNJbnRvRGF5IC0gc3RhcnRIb3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSO1xuXG4gICAgLy8gVGhpcyBjaGVjayBzaG91bGQgYmUgcmVkdW5kYW50IGR1ZSB0byBpbml0aWFsIGhvdXIgY2hlY2ssIGJ1dCBzYWZlIHRvIGtlZXBcbiAgICBpZiAobWludXRlc0ludG9WaWV3SG91cnMgPCAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGJsb2NrSW5kZXggPSBNYXRoLmZsb29yKG1pbnV0ZXNJbnRvVmlld0hvdXJzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcblxuICAgIHJldHVybiB7IGRheUluZGV4LCBibG9ja0luZGV4IH07XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGFwcG9pbnRtZW50cyBieSB0aGUgYmxvY2tzIHRoZXkgYXJlIEFDVElWRSBpbiBmb3IgYSBnaXZlbiB2aWV3LlxuICAgKiBAcGFyYW0gdmlld1RvdGFsRGF5cyAtIE51bWJlciBvZiBkYXlzIGluIHRoZSBjdXJyZW50IHZpZXcgKDEgZm9yIERheSwgNyBmb3IgV2VlaywgZXRjLilcbiAgICovXG4gIGNhbGN1bGF0ZUFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdLFxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLFxuICAgIHZpZXdUb3RhbERheXM6IG51bWJlciwgLy8gTm93IHJlcXVpcmVkXG4gICk6IEFYU2NoZWR1bGVyQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayB7XG4gICAgY29uc3QgYmxvY2tzOiBBWFNjaGVkdWxlckFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2sgPSB7fTtcbiAgICBpZiAoIXZpZXdTdGFydERhdGUgfHwgdHlwZW9mIHN0YXJ0SG91ciAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEhvdXIgIT09ICdudW1iZXInIHx8IHZpZXdUb3RhbERheXMgPD0gMCkge1xuICAgICAgcmV0dXJuIGJsb2NrcztcbiAgICB9XG4gICAgY29uc3Qgdmlld0VuZERhdGUgPSB2aWV3U3RhcnREYXRlLmFkZCgnZGF5Jywgdmlld1RvdGFsRGF5cyk7IC8vIEV4Y2x1c2l2ZSBlbmQgZGF0ZVxuICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBibG9ja3MgYmFzZWQgb24gY29uc2lzdGVudCBibG9jayBkdXJhdGlvblxuICAgIGNvbnN0IHRvdGFsQmxvY2tzUGVyRGF5ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgKGVuZEhvdXIgLSBzdGFydEhvdXIpICogKHRoaXMuTUlOVVRFU19QRVJfSE9VUiAvIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyksXG4gICAgKTtcblxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChhcHBvaW50bWVudCkgPT4ge1xuICAgICAgaWYgKCFhcHBvaW50bWVudC5zdGFydERhdGUgfHwgIWFwcG9pbnRtZW50LmVuZERhdGUgfHwgIWFwcG9pbnRtZW50LmlkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50RW5kRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSk7XG5cbiAgICAgIC8vIENsYW1wIGFwcG9pbnRtZW50IHN0YXJ0L2VuZCB0aW1lcyB0byB0aGUgdmlldyBib3VuZGFyaWVzIChkYXlzIGFuZCBob3VycylcbiAgICAgIGxldCBlZmZlY3RpdmVTdGFydCA9IGFwcG9pbnRtZW50U3RhcnREYXRlLmNvbXBhcmUodmlld1N0YXJ0RGF0ZSkgPCAwID8gdmlld1N0YXJ0RGF0ZSA6IGFwcG9pbnRtZW50U3RhcnREYXRlO1xuICAgICAgaWYgKGVmZmVjdGl2ZVN0YXJ0LmhvdXIgPCBzdGFydEhvdXIpIGVmZmVjdGl2ZVN0YXJ0ID0gZWZmZWN0aXZlU3RhcnQuc2V0KCdob3VyJywgc3RhcnRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG5cbiAgICAgIGxldCBlZmZlY3RpdmVFbmQgPSBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZSh2aWV3RW5kRGF0ZSkgPj0gMCA/IHZpZXdFbmREYXRlIDogYXBwb2ludG1lbnRFbmREYXRlO1xuICAgICAgaWYgKGVmZmVjdGl2ZUVuZC5ob3VyID49IGVuZEhvdXIpIHtcbiAgICAgICAgY29uc3QgZW5kRGF5QmFzZSA9IGVmZmVjdGl2ZUVuZC5jb21wYXJlKHZpZXdFbmREYXRlKSA+PSAwID8gdmlld0VuZERhdGUuYWRkKCdkYXknLCAtMSkgOiBlZmZlY3RpdmVFbmQ7XG4gICAgICAgIGVmZmVjdGl2ZUVuZCA9IGVuZERheUJhc2Uuc2V0KCdob3VyJywgZW5kSG91cikuc3RhcnRPZignaG91cicpO1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgc3RhcnQgYmxvY2sgaW5mbyB1c2luZyB0aGUgc3BlY2lmaWVkIHZpZXdUb3RhbERheXNcbiAgICAgIGNvbnN0IHN0YXJ0SW5mbyA9IHRoaXMuZ2V0QmxvY2tJZGVudGlmaWVyKGVmZmVjdGl2ZVN0YXJ0LCB2aWV3U3RhcnREYXRlLCBzdGFydEhvdXIsIGVuZEhvdXIsIHZpZXdUb3RhbERheXMpO1xuICAgICAgaWYgKCFzdGFydEluZm8pIHJldHVybjsgLy8gQXBwb2ludG1lbnQgc3RhcnRzIGNvbXBsZXRlbHkgb3V0c2lkZSB2aWV3XG5cbiAgICAgIC8vIEdldCBlbmQgYmxvY2sgaW5mbyAobGFzdCBibG9jayBvY2N1cGllZCkgdXNpbmcgdGhlIHNwZWNpZmllZCB2aWV3VG90YWxEYXlzXG4gICAgICBjb25zdCB0aW1lQmVmb3JlRW5kID0gZWZmZWN0aXZlRW5kLmFkZCgnbWludXRlJywgLTEpO1xuICAgICAgY29uc3QgZW5kSW5mbyA9IHRoaXMuZ2V0QmxvY2tJZGVudGlmaWVyKHRpbWVCZWZvcmVFbmQsIHZpZXdTdGFydERhdGUsIHN0YXJ0SG91ciwgZW5kSG91ciwgdmlld1RvdGFsRGF5cyk7XG4gICAgICAvLyBJZiBlbmRJbmZvIGlzIG51bGwsIGl0IG1lYW5zIHRoZSBhcHBvaW50bWVudCBlbmRzIGJlZm9yZSB0aGUgdmlld2FibGUgcGFydCBzdGFydHMsXG4gICAgICAvLyBvciBleGFjdGx5IGF0IHRoZSBzdGFydCwgc28gaXQgb2NjdXBpZXMgbm8gYmxvY2tzLiBIYW5kbGUgdGhpcyBjYXNlLlxuICAgICAgaWYgKFxuICAgICAgICAhZW5kSW5mbyB8fFxuICAgICAgICBlbmRJbmZvLmRheUluZGV4IDwgc3RhcnRJbmZvLmRheUluZGV4IHx8XG4gICAgICAgIChlbmRJbmZvLmRheUluZGV4ID09PSBzdGFydEluZm8uZGF5SW5kZXggJiYgZW5kSW5mby5ibG9ja0luZGV4IDwgc3RhcnRJbmZvLmJsb2NrSW5kZXgpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuOyAvLyBBcHBvaW50bWVudCBlZmZlY3RpdmVseSBoYXMgbm8gZHVyYXRpb24gd2l0aGluIHRoZSB2aWV3YWJsZSBibG9ja3NcbiAgICAgIH1cblxuICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBkYXlzIGFuZCBibG9ja3MgdGhlIGFwcG9pbnRtZW50IHNwYW5zIHdpdGhpbiB0aGUgdmlld1xuICAgICAgZm9yIChsZXQgZElkeCA9IHN0YXJ0SW5mby5kYXlJbmRleDsgZElkeCA8PSBlbmRJbmZvLmRheUluZGV4OyBkSWR4KyspIHtcbiAgICAgICAgLy8gQ2xhbXAgZGF5IGluZGV4IGp1c3QgaW4gY2FzZSAoc2hvdWxkIGJlIGhhbmRsZWQgYnkgZ2V0QmxvY2tJZGVudGlmaWVyIGNoZWNrcylcbiAgICAgICAgaWYgKGRJZHggPCAwIHx8IGRJZHggPj0gdmlld1RvdGFsRGF5cykgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRCbG9jayA9IGRJZHggPT09IHN0YXJ0SW5mby5kYXlJbmRleCA/IHN0YXJ0SW5mby5ibG9ja0luZGV4IDogMDtcbiAgICAgICAgLy8gTWFrZSBzdXJlIGVuZEJsb2NrIGRvZXNuJ3QgZXhjZWVkIHRoZSBjYWxjdWxhdGVkIHRvdGFsQmxvY2tzUGVyRGF5XG4gICAgICAgIGNvbnN0IGVuZEJsb2NrID0gZElkeCA9PT0gZW5kSW5mby5kYXlJbmRleCA/IGVuZEluZm8uYmxvY2tJbmRleCA6IHRvdGFsQmxvY2tzUGVyRGF5IC0gMTtcblxuICAgICAgICBpZiAoIWJsb2Nrc1tkSWR4XSkgYmxvY2tzW2RJZHhdID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgYklkeCA9IHN0YXJ0QmxvY2s7IGJJZHggPD0gZW5kQmxvY2s7IGJJZHgrKykge1xuICAgICAgICAgIC8vIEZpbmFsIGNoZWNrIGZvciBibG9jayBpbmRleCB2YWxpZGl0eVxuICAgICAgICAgIGlmIChiSWR4ID49IDAgJiYgYklkeCA8IHRvdGFsQmxvY2tzUGVyRGF5KSB7XG4gICAgICAgICAgICBpZiAoIWJsb2Nrc1tkSWR4XVtiSWR4XSkgYmxvY2tzW2RJZHhdW2JJZHhdID0gW107XG4gICAgICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVzIGlmIHRoZSBzYW1lIGFwcG9pbnRtZW50IGlzIHByb2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyAoc2hvdWxkbid0IGhhcHBlbiB3aXRoIG91dGVyIGxvb3ApXG4gICAgICAgICAgICBpZiAoIWJsb2Nrc1tkSWR4XVtiSWR4XS5zb21lKChlKSA9PiBlLmlkID09PSBhcHBvaW50bWVudC5pZCkpIHtcbiAgICAgICAgICAgICAgYmxvY2tzW2RJZHhdW2JJZHhdLnB1c2goYXBwb2ludG1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBtYXggY29uY3VycmVuY3kgYW5kIGVmZmVjdGl2ZSB0b3RhbCBjb2x1bW5zIGZvciBEYXkgVmlldyBhcHBvaW50bWVudHMuXG4gICAqL1xuICBjYWxjdWxhdGVEYXlWaWV3Q29uY3VycmVuY3lJbmZvKFxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSwgLy8gVGhlc2UgYXJlIHNlZ21lbnRzIGZvciB0aGUgY3VycmVudCBkYXlcbiAgICB2aWV3U3RhcnREYXRlOiBBWERhdGVUaW1lLFxuICAgIHN0YXJ0SG91cjogbnVtYmVyLFxuICAgIGVuZEhvdXI6IG51bWJlcixcbiAgKTogTWFwPGFueSwgeyBtYXhDb25jdXJyZW5jeTogbnVtYmVyOyBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IG51bWJlciB9PiB7XG4gICAgY29uc3QgcmVzdWx0SW5mbyA9IG5ldyBNYXA8YW55LCB7IG1heENvbmN1cnJlbmN5OiBudW1iZXI7IGVmZmVjdGl2ZVRvdGFsQ29sdW1uczogbnVtYmVyIH0+KCk7XG4gICAgaWYgKHNpbmdsZURheUFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHJldHVybiByZXN1bHRJbmZvO1xuXG4gICAgY29uc3QgYWN0aXZlQXBwb2ludG1lbnRzTWFwID0gdGhpcy5jYWxjdWxhdGVBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrKFxuICAgICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLFxuICAgICAgdmlld1N0YXJ0RGF0ZSxcbiAgICAgIHN0YXJ0SG91cixcbiAgICAgIGVuZEhvdXIsXG4gICAgICAxLCAvLyBEYXkgdmlld1xuICAgICk7XG4gICAgY29uc3QgYmxvY2tzID0gYWN0aXZlQXBwb2ludG1lbnRzTWFwWzBdID8/IHt9O1xuXG4gICAgLy8gMS4gQ2FsY3VsYXRlIGluaXRpYWwgbWF4Q29uY3VycmVuY3kgZm9yIGVhY2ggYXBwb2ludG1lbnQgc2VnbWVudFxuICAgIGNvbnN0IG1heENvbmN1cnJlbmN5TWFwID0gbmV3IE1hcDxhbnksIG51bWJlcj4oKTtcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoc2VnbWVudCkgPT4ge1xuICAgICAgbGV0IG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MgPSAwO1xuICAgICAgY29uc3Qgc2VnbWVudFN0YXJ0TWludXRlcyA9IHNlZ21lbnQuc3RhcnREYXRlLmdldEhvdXJzKCkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKyBzZWdtZW50LnN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBzZWdtZW50RW5kTWludXRlcyA9IHNlZ21lbnQuZW5kRGF0ZS5nZXRIb3VycygpICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSICsgc2VnbWVudC5lbmREYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIGJsb2NrcyB0aGlzIHNlZ21lbnQgb2NjdXBpZXMgcmVsYXRpdmUgdG8gdmlldydzIHN0YXJ0SG91clxuICAgICAgY29uc3Qgdmlld1JlbGF0aXZlU3RhcnRNaW51dGVzID0gTWF0aC5tYXgoMCwgc2VnbWVudFN0YXJ0TWludXRlcyAtIHN0YXJ0SG91ciAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUik7XG4gICAgICBjb25zdCB2aWV3UmVsYXRpdmVFbmRNaW51dGVzID0gTWF0aC5taW4oXG4gICAgICAgIChlbmRIb3VyIC0gc3RhcnRIb3VyKSAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUixcbiAgICAgICAgc2VnbWVudEVuZE1pbnV0ZXMgLSBzdGFydEhvdXIgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBmaXJzdEJsb2NrSW5kZXggPSBNYXRoLmZsb29yKHZpZXdSZWxhdGl2ZVN0YXJ0TWludXRlcyAvIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyk7XG4gICAgICBjb25zdCBsYXN0QmxvY2tJbmRleCA9IE1hdGguZmxvb3IoKHZpZXdSZWxhdGl2ZUVuZE1pbnV0ZXMgLSAxKSAvIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyk7IC8vIC0xIGJlY2F1c2UgZW5kIGlzIGV4Y2x1c2l2ZSBmb3IgYmxvY2sgY291bnRpbmdcblxuICAgICAgZm9yIChsZXQgYmxvY2tJZHggPSBmaXJzdEJsb2NrSW5kZXg7IGJsb2NrSWR4IDw9IGxhc3RCbG9ja0luZGV4OyBibG9ja0lkeCsrKSB7XG4gICAgICAgIGNvbnN0IGFwcG9pbnRtZW50c0luQmxvY2sgPSBibG9ja3NbYmxvY2tJZHhdO1xuICAgICAgICBpZiAoYXBwb2ludG1lbnRzSW5CbG9jaykge1xuICAgICAgICAgIG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MgPSBNYXRoLm1heChtYXhPdmVybGFwSW5TZWdtZW50QmxvY2tzLCBhcHBvaW50bWVudHNJbkJsb2NrLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1heENvbmN1cnJlbmN5TWFwLnNldChzZWdtZW50LmlkLCBtYXhPdmVybGFwSW5TZWdtZW50QmxvY2tzIHx8IDEpO1xuICAgIH0pO1xuXG4gICAgLy8gMi4gSXRlcmF0aXZlbHkgZGV0ZXJtaW5lIGVmZmVjdGl2ZVRvdGFsQ29sdW1ucyBmb3IgZ3JvdXBzIG9mIG92ZXJsYXBwaW5nIGFwcG9pbnRtZW50c1xuICAgIGNvbnN0IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMgPSBuZXcgTWFwPGFueSwgbnVtYmVyPigpO1xuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLnNldChzZWdtZW50LmlkLCBtYXhDb25jdXJyZW5jeU1hcC5nZXQoc2VnbWVudC5pZCkgfHwgMSk7XG4gICAgfSk7XG5cbiAgICBsZXQgY2hhbmdlZCA9IHRydWU7XG4gICAgd2hpbGUgKGNoYW5nZWQpIHtcbiAgICAgIGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50QSkgPT4ge1xuICAgICAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoc2VnbWVudEIpID0+IHtcbiAgICAgICAgICBpZiAoc2VnbWVudEEuaWQgPT09IHNlZ21lbnRCLmlkKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAodGhpcy5kb0FwcG9pbnRtZW50c092ZXJsYXAoc2VnbWVudEEsIHNlZ21lbnRCKSkge1xuICAgICAgICAgICAgY29uc3QgZXRjQSA9IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuZ2V0KHNlZ21lbnRBLmlkKSB8fCAxO1xuICAgICAgICAgICAgY29uc3QgZXRjQiA9IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuZ2V0KHNlZ21lbnRCLmlkKSB8fCAxO1xuICAgICAgICAgICAgY29uc3QgbWF4RVRDID0gTWF0aC5tYXgoZXRjQSwgZXRjQik7XG5cbiAgICAgICAgICAgIGlmIChldGNBICE9PSBtYXhFVEMpIHtcbiAgICAgICAgICAgICAgaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5zZXQoc2VnbWVudEEuaWQsIG1heEVUQyk7XG4gICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV0Y0IgIT09IG1heEVUQykge1xuICAgICAgICAgICAgICBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLnNldChzZWdtZW50Qi5pZCwgbWF4RVRDKTtcbiAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBvcHVsYXRlIGZpbmFsIHJlc3VsdFxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICByZXN1bHRJbmZvLnNldChzZWdtZW50LmlkLCB7XG4gICAgICAgIG1heENvbmN1cnJlbmN5OiBtYXhDb25jdXJyZW5jeU1hcC5nZXQoc2VnbWVudC5pZCkgfHwgMSxcbiAgICAgICAgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLmdldChzZWdtZW50LmlkKSB8fCAxLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0SW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYXBwb2ludG1lbnRzIGJ5IHRoZSBibG9jayB0aGV5IFNUQVJUIGluIGZvciBXZWVrIFZpZXcuXG4gICAqL1xuICBjYWxjdWxhdGVXZWVrVmlld0FwcG9pbnRtZW50c0J5U3RhcnRCbG9jayhcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICBzdGFydEhvdXI6IG51bWJlcixcbiAgICBlbmRIb3VyOiBudW1iZXIsXG4gICk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrIHtcbiAgICBjb25zdCBibG9ja3M6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrID0ge307XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcG9pbnRtZW50KSA9PiB7XG4gICAgICBpZiAoIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSkgcmV0dXJuO1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIoXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5zdGFydERhdGUpLFxuICAgICAgICB2aWV3U3RhcnREYXRlLFxuICAgICAgICBzdGFydEhvdXIsXG4gICAgICAgIGVuZEhvdXIsXG4gICAgICAgIDcsXG4gICAgICApO1xuICAgICAgaWYgKHN0YXJ0SW5mbykge1xuICAgICAgICBjb25zdCB7IGRheUluZGV4LCBibG9ja0luZGV4IH0gPSBzdGFydEluZm87XG4gICAgICAgIGlmICghYmxvY2tzW2RheUluZGV4XSkgYmxvY2tzW2RheUluZGV4XSA9IHt9O1xuICAgICAgICBpZiAoIWJsb2Nrc1tkYXlJbmRleF1bYmxvY2tJbmRleF0pIGJsb2Nrc1tkYXlJbmRleF1bYmxvY2tJbmRleF0gPSBbXTtcbiAgICAgICAgYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XS5wdXNoKGFwcG9pbnRtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYmxvY2tzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBhcHBvaW50bWVudHMgYnkgdGhlIGRheShzKSB0aGV5IG9jY3VyIG9uIHdpdGhpbiBhIGdpdmVuIGRhdGUgcmFuZ2UuXG4gICAqIFJldHVybnMgYSBNYXAgd2hlcmUgdGhlIGtleSBpcyB0aGUgZGF0ZSBzdHJpbmcgKCdZWVlZLU1NLUREJykgYW5kIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSBvZiBhcHBvaW50bWVudHMuXG4gICAqL1xuICBncm91cEFwcG9pbnRtZW50c0J5RGF5KFxuICAgIGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdLFxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsIC8vIEZpcnN0IGRheSB2aXNpYmxlIGluIHRoZSBncmlkXG4gICAgdmlld0VuZERhdGU6IEFYRGF0ZVRpbWUsIC8vIExhc3QgZGF5IHZpc2libGUgaW4gdGhlIGdyaWRcbiAgKTogTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPiB7XG4gICAgY29uc3QgZ3JvdXBlZEFwcG9pbnRtZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCk7XG4gICAgaWYgKCFhcHBvaW50bWVudHMgfHwgYXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCB8fCAhdmlld1N0YXJ0RGF0ZSB8fCAhdmlld0VuZERhdGUpIHtcbiAgICAgIHJldHVybiBncm91cGVkQXBwb2ludG1lbnRzO1xuICAgIH1cblxuICAgIC8vIFByZS1jYWxjdWxhdGUgdGhlIGVuZCBkYXRlIGZvciBjb21wYXJpc29uIChleGNsdXNpdmUpXG4gICAgY29uc3QgZXhjbHVzaXZlVmlld0VuZERhdGUgPSB2aWV3RW5kRGF0ZS5hZGQoJ2RheScsIDEpO1xuXG4gICAgYXBwb2ludG1lbnRzLmZvckVhY2goKGFwcG9pbnRtZW50KSA9PiB7XG4gICAgICBpZiAoIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnQuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnQuaWQpIHJldHVybjtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBlZmZlY3RpdmUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgYXBwb2ludG1lbnQgY2xhbXBlZCBieSB0aGUgdmlldyByYW5nZVxuICAgICAgY29uc3QgYXBwb2ludG1lbnRTdGFydCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5zdGFydERhdGUpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRFbmQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuZW5kRGF0ZSk7XG5cbiAgICAgIC8vIFNraXAgaWYgYXBwb2ludG1lbnQgZW5kcyBiZWZvcmUgdGhlIHZpZXcgc3RhcnRzIG9yIHN0YXJ0cyBhZnRlciB0aGUgdmlldyBlbmRzXG4gICAgICBpZiAoXG4gICAgICAgIGFwcG9pbnRtZW50RW5kLmNvbXBhcmUodmlld1N0YXJ0RGF0ZSwgJ2RheScpIDwgMCB8fFxuICAgICAgICBhcHBvaW50bWVudFN0YXJ0LmNvbXBhcmUoZXhjbHVzaXZlVmlld0VuZERhdGUsICdkYXknKSA+PSAwXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGFtcCBzdGFydCBkYXRlIHRvIHRoZSB2aWV3IHN0YXJ0IGRhdGVcbiAgICAgIGxldCBjdXJyZW50RGF5ID1cbiAgICAgICAgYXBwb2ludG1lbnRTdGFydC5jb21wYXJlKHZpZXdTdGFydERhdGUsICdkYXknKSA8IDAgPyB2aWV3U3RhcnREYXRlIDogYXBwb2ludG1lbnRTdGFydC5zdGFydE9mKCdkYXknKTtcblxuICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZGF5IHRoZSBhcHBvaW50bWVudCBzcGFucyB3aXRoaW4gdGhlIHZpZXcgcmFuZ2VcbiAgICAgIGxldCBzYWZlQ291bnQgPSAwOyAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gICAgICB3aGlsZSAoXG4gICAgICAgIGN1cnJlbnREYXkuY29tcGFyZShhcHBvaW50bWVudEVuZCwgJ2RheScpIDw9IDAgJiZcbiAgICAgICAgY3VycmVudERheS5jb21wYXJlKGV4Y2x1c2l2ZVZpZXdFbmREYXRlLCAnZGF5JykgPCAwICYmXG4gICAgICAgIHNhZmVDb3VudCA8IDEwMFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KGN1cnJlbnREYXksICdkYXRldGltZScsIHsgZm9ybWF0OiAnWVlZWS1NTS1ERCcgfSk7IC8vIFVzZSBhIGNvbnNpc3RlbnQga2V5IGZvcm1hdFxuXG4gICAgICAgIGlmICghZ3JvdXBlZEFwcG9pbnRtZW50cy5oYXMoZGF0ZVN0cmluZykpIHtcbiAgICAgICAgICBncm91cGVkQXBwb2ludG1lbnRzLnNldChkYXRlU3RyaW5nLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIHRoZSBhcHBvaW50bWVudCBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0IGZvciB0aGF0IGRheVxuICAgICAgICBpZiAoIWdyb3VwZWRBcHBvaW50bWVudHMuZ2V0KGRhdGVTdHJpbmcpLnNvbWUoKGUpID0+IGUuaWQgPT09IGFwcG9pbnRtZW50LmlkKSkge1xuICAgICAgICAgIGdyb3VwZWRBcHBvaW50bWVudHMuZ2V0KGRhdGVTdHJpbmcpLnB1c2goYXBwb2ludG1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERheSA9IGN1cnJlbnREYXkuYWRkKCdkYXknLCAxKTtcbiAgICAgICAgc2FmZUNvdW50Kys7XG4gICAgICB9XG4gICAgICBpZiAoc2FmZUNvdW50ID49IDEwMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1NhZmV0eSBicmVhayBoaXQgaW4gZ3JvdXBBcHBvaW50bWVudHNCeURheSBsb29wIGZvciBhcHBvaW50bWVudDonLCBhcHBvaW50bWVudC5pZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3JvdXBlZEFwcG9pbnRtZW50cztcbiAgfVxuXG4gIGdldERheU9mV2Vla051bWJlcihkYXlOYW1lOiBBWERheU9mV2Vla05hbWUpOiBudW1iZXIge1xuICAgIHN3aXRjaCAoZGF5TmFtZSkge1xuICAgICAgY2FzZSAnc3VuZGF5JzpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBjYXNlICdtb25kYXknOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGNhc2UgJ3R1ZXNkYXknOlxuICAgICAgICByZXR1cm4gMztcbiAgICAgIGNhc2UgJ3dlZG5lc2RheSc6XG4gICAgICAgIHJldHVybiA0O1xuICAgICAgY2FzZSAndGh1cnNkYXknOlxuICAgICAgICByZXR1cm4gNTtcbiAgICAgIGNhc2UgJ2ZyaWRheSc6XG4gICAgICAgIHJldHVybiA2O1xuICAgICAgY2FzZSAnc2F0dXJkYXknOlxuICAgICAgICByZXR1cm4gNztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBkYXkgbmFtZTogJHtkYXlOYW1lfS4gRGVmYXVsdGluZyB0byBTdW5kYXkgKDEpLmApO1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBnZXRTbG90RGF0YShcbiAgICBzdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgdmlldzogQVhTY2hlZHVsZXJWaWV3LFxuICApOiB7IHN0YXJ0RGF0ZTogQVhEYXRlVGltZTsgZW5kRGF0ZTogQVhEYXRlVGltZTsgdmlldzogQVhTY2hlZHVsZXJWaWV3IH0ge1xuICAgIGxldCBlbmREYXRlOiBBWERhdGVUaW1lO1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmFkZCgnbWludXRlJywgdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5JzpcbiAgICAgICAgZW5kRGF0ZSA9IHN0YXJ0RGF0ZS5hZGQoJ21pbnV0ZScsIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyAqIDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgZW5kRGF0ZSA9IHN0YXJ0RGF0ZS5lbmRPZignZGF5Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXcgfTtcbiAgfVxuXG4gIGhhbmRsZUV2ZW50KFxuICAgIGV2ZW50OiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50IHwgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gICAgZXZlbnRPdXRwdXRNYXAsXG4gICAgZXZlbnRUeXBlOiAnYXBwb2ludG1lbnQnIHwgJ3Nsb3QnLFxuICApIHtcbiAgICBjb25zdCBtb3VzZUV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIG1vdXNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcG9pbnRtZW50Jykge1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRPdXRwdXRNYXAgPSBldmVudE91dHB1dE1hcFtldmVudFR5cGVdO1xuICAgICAgY29uc3QgZW1pdHRlciA9IGFwcG9pbnRtZW50T3V0cHV0TWFwW21vdXNlRXZlbnQudHlwZSBhcyBrZXlvZiB0eXBlb2YgYXBwb2ludG1lbnRPdXRwdXRNYXBdO1xuICAgICAgaWYgKGVtaXR0ZXIpIGVtaXR0ZXIuZW1pdChldmVudCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCk7XG4gICAgfVxuICAgIGlmIChldmVudFR5cGUgPT09ICdzbG90Jykge1xuICAgICAgY29uc3Qgc2xvdE91dHB1dE1hcCA9IGV2ZW50T3V0cHV0TWFwW2V2ZW50VHlwZV07XG4gICAgICBjb25zdCBlbWl0dGVyID0gc2xvdE91dHB1dE1hcFttb3VzZUV2ZW50LnR5cGUgYXMga2V5b2YgdHlwZW9mIHNsb3RPdXRwdXRNYXBdO1xuICAgICAgaWYgKGVtaXR0ZXIpIGVtaXR0ZXIuZW1pdChldmVudCBhcyBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVGltZWxpbmUgU3BlY2lmaWMgSGVscGVycyAtLS1cblxuICBjYWxjdWxhdGVUaW1lbGluZUxheW91dChcbiAgICAvLyBgYXBwdGAgaGVyZSB3aWxsIGJlIGFuIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50VHlwZSB3aGVuIGNhbGxlZCBmcm9tIFRpbWVsaW5lRGF5Vmlld1xuICAgIGFwcHQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gICAgdmlld1N0YXJ0SG91cjogbnVtYmVyLCAvLyBlLmcuLCA4IGZvciA4IEFNXG4gICAgdmlld0VuZEhvdXI6IG51bWJlciwgLy8gZS5nLiwgMTggZm9yIDYgUE0gKHRpbWVsaW5lIHJ1bnMgZnJvbSA4OjAwIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgMTg6MDApXG4gICk6IHsgbGVmdDogc3RyaW5nOyB3aWR0aDogc3RyaW5nIH0gfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICAhYXBwdD8uc3RhcnREYXRlIHx8XG4gICAgICAhYXBwdC5lbmREYXRlIHx8XG4gICAgICB0eXBlb2Ygdmlld1N0YXJ0SG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGVvZiB2aWV3RW5kSG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIHZpZXdTdGFydEhvdXIgPj0gdmlld0VuZEhvdXIgLy8gQmFzaWMgc2FuaXR5IGNoZWNrXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2NhbGN1bGF0ZVRpbWVsaW5lTGF5b3V0OiBJbnZhbGlkIGlucHV0JywgeyBhcHB0LCB2aWV3U3RhcnRIb3VyLCB2aWV3RW5kSG91ciB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsVmlld0R1cmF0aW9uTWludXRlcyA9ICh2aWV3RW5kSG91ciAtIHZpZXdTdGFydEhvdXIpICogNjA7XG4gICAgaWYgKHRvdGFsVmlld0R1cmF0aW9uTWludXRlcyA8PSAwKSByZXR1cm4gbnVsbDsgLy8gTm8gdmlld2FibGUgZHVyYXRpb25cblxuICAgIC8vIFNlZ21lbnQncyBzdGFydCBhbmQgZW5kIHRpbWVzICh0aGVzZSBhcmUgYWxyZWFkeSBjbGlwcGVkIHRvIHRoZSBkYXkgYnkgZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkpXG4gICAgY29uc3Qgc2VnbWVudFN0YXJ0ID0gYXBwdC5zdGFydERhdGU7XG4gICAgY29uc3Qgc2VnbWVudEVuZCA9IGFwcHQuZW5kRGF0ZTtcblxuICAgIC8vIC0tLSBDYWxjdWxhdGUgU3RhcnQgUG9zaXRpb24gKGxlZnQpIC0tLVxuICAgIC8vIEVmZmVjdGl2ZSBzdGFydCBvZiB0aGUgc2VnbWVudCB3aXRoaW4gdGhlIHZpZXcncyBob3VycyBmb3IgVEhJUyBkYXlcbiAgICBsZXQgZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5ID0gc2VnbWVudFN0YXJ0LmdldEhvdXJzKCkgKiA2MCArIHNlZ21lbnRTdGFydC5nZXRNaW51dGVzKCk7XG5cbiAgICAvLyBDbGFtcCB0byB2aWV3U3RhcnRIb3VyIGZvciBjYWxjdWxhdGlvbiBpZiBzZWdtZW50IHN0YXJ0cyBiZWZvcmUgdmlld2FibGUgaG91cnMgKHNob3VsZG4ndCBoYXBwZW4gaWYgc2VnbWVudGVyIHdvcmtlZClcbiAgICBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgPSBNYXRoLm1heChlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXksIHZpZXdTdGFydEhvdXIgKiA2MCk7XG4gICAgLy8gQ2xhbXAgdG8gdmlld0VuZEhvdXIgZm9yIGNhbGN1bGF0aW9uIGlmIHNlZ21lbnQgc3RhcnRzIGFmdGVyIHZpZXdhYmxlIGhvdXJzIChzaG91bGRuJ3QgaGFwcGVuKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSA9IE1hdGgubWluKGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSwgdmlld0VuZEhvdXIgKiA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzRnJvbVZpZXdTdGFydFRvU2VnbWVudFN0YXJ0ID0gZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5IC0gdmlld1N0YXJ0SG91ciAqIDYwO1xuXG4gICAgLy8gSWYgc2VnbWVudCBlZmZlY3RpdmVseSBzdGFydHMgYmVmb3JlIHRoZSB2aWV3YWJsZSBwYXJ0IChhZnRlciBjbGFtcGluZyksIGl0IG1lYW5zIGl0J3Mgbm90IHZpc2libGUgb3Igc3RhcnRzIGF0IDAlXG4gICAgaWYgKFxuICAgICAgbWludXRlc0Zyb21WaWV3U3RhcnRUb1NlZ21lbnRTdGFydCA8IDAgJiZcbiAgICAgIE1hdGguYWJzKG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQpID4gMWUtNiAvKmVwc2lsb24gZm9yIGZsb2F0IGlzc3VlcyovXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGNhc2Ugc2hvdWxkIGlkZWFsbHkgYmUgY2F1Z2h0IGJ5IHRoZSBzZWdtZW50ZXIgb3IgaW5pdGlhbCBvdmVybGFwIGNoZWNrcy5cbiAgICAgIC8vIElmIGl0IGhhcHBlbnMsIHRyZWF0IGFzIHN0YXJ0aW5nIGF0IDAlIGJ1dCBpdCBtaWdodCBtZWFuIG5vIHZpc2libGUgcGFydC5cbiAgICB9XG5cbiAgICBjb25zdCBsZWZ0UGVyY2VudGFnZSA9IChNYXRoLm1heCgwLCBtaW51dGVzRnJvbVZpZXdTdGFydFRvU2VnbWVudFN0YXJ0KSAvIHRvdGFsVmlld0R1cmF0aW9uTWludXRlcykgKiAxMDA7XG5cbiAgICAvLyAtLS0gQ2FsY3VsYXRlIER1cmF0aW9uIGFuZCBXaWR0aCAtLS1cbiAgICAvLyBFZmZlY3RpdmUgZW5kIG9mIHRoZSBzZWdtZW50IHdpdGhpbiB0aGUgdmlldydzIGhvdXJzIGZvciBUSElTIGRheVxuICAgIGxldCBlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5ID0gc2VnbWVudEVuZC5nZXRIb3VycygpICogNjAgKyBzZWdtZW50RW5kLmdldE1pbnV0ZXMoKTtcbiAgICBpZiAoc2VnbWVudEVuZC5nZXRIb3VycygpID09PSAwICYmIHNlZ21lbnRFbmQuZ2V0TWludXRlcygpID09PSAwICYmIHNlZ21lbnRFbmQuZ2V0VGltZSgpID4gc2VnbWVudFN0YXJ0LmdldFRpbWUoKSkge1xuICAgICAgLy8gSWYgc2VnbWVudCBlbmRzIGV4YWN0bHkgYXQgbWlkbmlnaHQgKDAwOjAwIG9mIG5leHQgZGF5LCBtZWFuaW5nIGl0IGZpbGxlZCB1cCB0byAyNDowMCBvZiBjdXJyZW50IGRheSlcbiAgICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSAyNCAqIDYwO1xuICAgIH1cblxuICAgIC8vIENsYW1wIHRvIHZpZXdFbmRIb3VyIGZvciBjYWxjdWxhdGlvblxuICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBNYXRoLm1pbihlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5LCB2aWV3RW5kSG91ciAqIDYwKTtcbiAgICAvLyBDbGFtcCB0byB2aWV3U3RhcnRIb3VyIGZvciBjYWxjdWxhdGlvbiAoaWYgc2VnbWVudCBlbmRzIGJlZm9yZSB2aWV3IHN0YXJ0cylcbiAgICBlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5ID0gTWF0aC5tYXgoZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSwgdmlld1N0YXJ0SG91ciAqIDYwKTtcblxuICAgIGNvbnN0IHNlZ21lbnREdXJhdGlvbk1pbnV0ZXNJblZpZXcgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5IC0gZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5LFxuICAgICk7XG5cbiAgICBpZiAoc2VnbWVudER1cmF0aW9uTWludXRlc0luVmlldyA8PSAwKSB7XG4gICAgICAvLyBTZWdtZW50IGhhcyBubyB2aXNpYmxlIGR1cmF0aW9uIHdpdGhpbiB0aGUgdGltZWxpbmUgaG91cnNcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoUGVyY2VudGFnZSA9IChzZWdtZW50RHVyYXRpb25NaW51dGVzSW5WaWV3IC8gdG90YWxWaWV3RHVyYXRpb25NaW51dGVzKSAqIDEwMDtcblxuICAgIC8vIEVuc3VyZSBwZXJjZW50YWdlcyBhcmUgdmFsaWRcbiAgICBpZiAoXG4gICAgICBsZWZ0UGVyY2VudGFnZSA+IDEwMCB8fFxuICAgICAgbGVmdFBlcmNlbnRhZ2UgPCAwIHx8XG4gICAgICB3aWR0aFBlcmNlbnRhZ2UgPD0gMCB8fFxuICAgICAgd2lkdGhQZXJjZW50YWdlID4gMTAwIHx8XG4gICAgICBsZWZ0UGVyY2VudGFnZSArIHdpZHRoUGVyY2VudGFnZSA+IDEwMC4wMDAxIC8qYWxsb3cgZm9yIGZsb2F0IGVycm9ycyovXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIG1pZ2h0IGluZGljYXRlIGFuIGlzc3VlIHdpdGggZGF0ZSBjbGFtcGluZyBvciBsb2dpYy5cbiAgICAgIC8vIEZvciBub3csIGlmIGl0IHJlc3VsdHMgaW4gYW4gaW52YWxpZCBsYXlvdXQsIHJldHVybiBudWxsLlxuICAgICAgLy8gY29uc29sZS53YXJuKFwiVGltZWxpbmUgbGF5b3V0IGNhbGN1bGF0aW9uIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcGVyY2VudGFnZXM6XCIsXG4gICAgICAvLyAgICAgICAgICAgICAge2xlZnRQZXJjZW50YWdlLCB3aWR0aFBlcmNlbnRhZ2UsIHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgdmlld1N0YXJ0SG91ciwgdmlld0VuZEhvdXJ9KTtcbiAgICAgIC8vIEEgY29tbW9uIGNhc2UgZm9yIChsZWZ0ICsgd2lkdGggPiAxMDApIGlzIGlmIGFuIGV2ZW50IGVuZHMgKmV4YWN0bHkqIGF0IHZpZXdFbmRIb3VyLFxuICAgICAgLy8gYW5kIHZpZXdFbmRIb3VyIGl0c2VsZiBpcyB0aGUgYm91bmRhcnkuXG4gICAgICAvLyBMZXQncyBiZSBhIGJpdCB0b2xlcmFudCBoZXJlIGlmIHdpZHRoIGlzIHBvc2l0aXZlLlxuICAgICAgaWYgKHdpZHRoUGVyY2VudGFnZSA8PSAwKSByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogYCR7TWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBsZWZ0UGVyY2VudGFnZSkpfSVgLFxuICAgICAgd2lkdGg6IGAke01hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgd2lkdGhQZXJjZW50YWdlKSl9JWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSB2aXNpYmxlIHNlZ21lbnQgb2YgYSB0aW1lZCBhcHBvaW50bWVudCBvbiBhIHNwZWNpZmljIGRheSxcbiAgICogY29uc3RyYWluZWQgYnkgdGhlIHZpZXcncyBzdGFydCBhbmQgZW5kIGhvdXJzLlxuICAgKiBSZXR1cm5zIGEgbmV3IGFwcG9pbnRtZW50LWxpa2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VnbWVudC5cbiAgICovXG4gIGdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KFxuICAgIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCAvLyBUaGlzIGlzIHRoZSBPUklHSU5BTCBhcHBvaW50bWVudFxuICAgIGRheTogQVhEYXRlVGltZSxcbiAgICB2aWV3U3RhcnRIb3VyOiBudW1iZXIsXG4gICAgdmlld0VuZEhvdXI6IG51bWJlcixcbiAgICBpc0Z1bGxEYXlDZWxsQ29udGV4dCA9IGZhbHNlLFxuICApOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB8IG51bGwge1xuICAgIGlmICghYXBwb2ludG1lbnQgfHwgIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnQuZW5kRGF0ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwb2ludG1lbnRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuc3RhcnREYXRlKTtcbiAgICBjb25zdCBhcHBvaW50bWVudEVuZERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuZW5kRGF0ZSk7XG5cbiAgICBpZiAoYXBwb2ludG1lbnQuYWxsRGF5KSB7XG4gICAgICBjb25zdCBkYXlTdGFydE9mID0gZGF5LmNsb25lKCkuc3RhcnRPZignZGF5Jyk7XG4gICAgICBpZiAoYXBwb2ludG1lbnRTdGFydERhdGUuc3RhcnRPZignZGF5JykuZXF1YWwoZGF5U3RhcnRPZiwgJ2RheScpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICAgICAgc3RhcnREYXRlOiBkYXlTdGFydE9mLmRhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogZGF5U3RhcnRPZi5jbG9uZSgpLmFkZCgnZGF5JywgMSkuc3RhcnRPZignZGF5JykuZGF0ZSxcbiAgICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICAgICAgb3JpZ2luYWxTdGFydERhdGU6IGFwcG9pbnRtZW50U3RhcnREYXRlLmRhdGUsXG4gICAgICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheTogZmFsc2UsXG4gICAgICAgICAgaXNDb250aW51YXRpb25Ub05leHREYXk6IGFwcG9pbnRtZW50RW5kRGF0ZS5zdGFydE9mKCdkYXknKS5jb21wYXJlKGRheVN0YXJ0T2YsICdkYXknKSA+IDAsXG4gICAgICAgICAgb3JpZ2luYWxBcHBvaW50bWVudFJlZjogYXBwb2ludG1lbnQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBhcHBvaW50bWVudFN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKS5jb21wYXJlKGRheVN0YXJ0T2YsICdkYXknKSA8IDAgJiZcbiAgICAgICAgYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID49IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFwcG9pbnRtZW50LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogZGF5U3RhcnRPZi5kYXRlLFxuICAgICAgICAgIGVuZERhdGU6IGRheVN0YXJ0T2YuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpLmRhdGUsXG4gICAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgICAgIG9yaWdpbmFsU3RhcnREYXRlOiBhcHBvaW50bWVudFN0YXJ0RGF0ZS5kYXRlLFxuICAgICAgICAgIG9yaWdpbmFsRW5kRGF0ZTogYXBwb2ludG1lbnRFbmREYXRlLmRhdGUsXG4gICAgICAgICAgaXNDb250aW51YXRpb25Gcm9tUHJldmlvdXNEYXk6IHRydWUsXG4gICAgICAgICAgaXNDb250aW51YXRpb25Ub05leHREYXk6IGFwcG9pbnRtZW50RW5kRGF0ZS5zdGFydE9mKCdkYXknKS5jb21wYXJlKGRheVN0YXJ0T2YsICdkYXknKSA+IDAsXG4gICAgICAgICAgb3JpZ2luYWxBcHBvaW50bWVudFJlZjogYXBwb2ludG1lbnQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXlTdGFydEJvdW5kYXJ5ID0gaXNGdWxsRGF5Q2VsbENvbnRleHRcbiAgICAgID8gZGF5LmNsb25lKCkuc3RhcnRPZignZGF5JylcbiAgICAgIDogZGF5LmNsb25lKCkuc2V0KCdob3VyJywgdmlld1N0YXJ0SG91cikuc3RhcnRPZignaG91cicpO1xuICAgIGNvbnN0IGRheUVuZEJvdW5kYXJ5ID0gaXNGdWxsRGF5Q2VsbENvbnRleHRcbiAgICAgID8gZGF5LmNsb25lKCkuYWRkKCdkYXknLCAxKS5zdGFydE9mKCdkYXknKVxuICAgICAgOiB2aWV3RW5kSG91ciA9PT0gMjQgfHwgKHZpZXdFbmRIb3VyID09PSAwICYmIHZpZXdTdGFydEhvdXIgPT09IDApXG4gICAgICAgID8gZGF5LmNsb25lKCkuYWRkKCdkYXknLCAxKS5zdGFydE9mKCdkYXknKVxuICAgICAgICA6IGRheS5jbG9uZSgpLnNldCgnaG91cicsIHZpZXdFbmRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG5cbiAgICBpZiAoXG4gICAgICBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZShkYXlTdGFydEJvdW5kYXJ5LCAnc2Vjb25kJykgPD0gMCB8fFxuICAgICAgYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZShkYXlFbmRCb3VuZGFyeSwgJ3NlY29uZCcpID49IDBcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzZWdtZW50U3RhcnREYXRlID1cbiAgICAgIGFwcG9pbnRtZW50U3RhcnREYXRlLmNvbXBhcmUoZGF5U3RhcnRCb3VuZGFyeSwgJ3NlY29uZCcpID4gMCA/IGFwcG9pbnRtZW50U3RhcnREYXRlIDogZGF5U3RhcnRCb3VuZGFyeTtcbiAgICBjb25zdCBzZWdtZW50RW5kRGF0ZSA9XG4gICAgICBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZShkYXlFbmRCb3VuZGFyeSwgJ3NlY29uZCcpIDwgMCA/IGFwcG9pbnRtZW50RW5kRGF0ZSA6IGRheUVuZEJvdW5kYXJ5O1xuXG4gICAgaWYgKHNlZ21lbnRTdGFydERhdGUuY29tcGFyZShzZWdtZW50RW5kRGF0ZSwgJ3NlY29uZCcpID49IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5ID0gYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZShzZWdtZW50U3RhcnREYXRlLCAnc2Vjb25kJykgPCAwO1xuICAgIGNvbnN0IGlzQ29udGludWF0aW9uVG9OZXh0RGF5ID0gYXBwb2ludG1lbnRFbmREYXRlLmNvbXBhcmUoc2VnbWVudEVuZERhdGUsICdzZWNvbmQnKSA+IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBhcHBvaW50bWVudFN0YXJ0RGF0ZS5kdXJhdGlvbihhcHBvaW50bWVudEVuZERhdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcG9pbnRtZW50LFxuICAgICAgc3RhcnREYXRlOiBzZWdtZW50U3RhcnREYXRlLmRhdGUsXG4gICAgICBlbmREYXRlOiBzZWdtZW50RW5kRGF0ZS5kYXRlLFxuICAgICAgYWxsRGF5OiBhcHBvaW50bWVudC5hbGxEYXkgfHwgZHVyYXRpb24udG90YWwubWlsaXNlY29uZHMgPj0gMjQgKiA2MCAqIDYwICogMTAwMCAtIDEsXG4gICAgICBvcmlnaW5hbFN0YXJ0RGF0ZTogYXBwb2ludG1lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgIG9yaWdpbmFsRW5kRGF0ZTogYXBwb2ludG1lbnRFbmREYXRlLmRhdGUsXG4gICAgICBpc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheSxcbiAgICAgIGlzQ29udGludWF0aW9uVG9OZXh0RGF5LFxuICAgICAgb3JpZ2luYWxBcHBvaW50bWVudFJlZjogYXBwb2ludG1lbnQsXG4gICAgfTtcbiAgfVxuXG4gIGdldE9yaWdpbmFsQXBwb2ludG1lbnQoaXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCB8IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCB7XG4gICAgY29uc3Qgc2VnbWVudCA9IGl0ZW0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQ7XG4gICAgaWYgKHNlZ21lbnQub3JpZ2luYWxBcHBvaW50bWVudFJlZikge1xuICAgICAgcmV0dXJuIHNlZ21lbnQub3JpZ2luYWxBcHBvaW50bWVudFJlZjtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGdsb2JhbEhvbGlkYXlzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuc29tZSgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgY29uc3QgaW50ZXJuYWxIb2xpZGF5cyA9IHRoaXMuaW50ZXJuYWxIb2xpZGF5KCkuc29tZSgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgcmV0dXJuIGdsb2JhbEhvbGlkYXlzIHx8IGludGVybmFsSG9saWRheXM7XG4gIH1cbiAgaXNXZWVrZW5kKGRhdGU6IEFYRGF0ZVRpbWUsIGNhbGVuZGFyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB3ZWVrZW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyKS53ZWVrZW5kO1xuICAgIHJldHVybiB3ZWVrZW5kLmluY2x1ZGVzKGRhdGUuZGF5T2ZXZWVrIC0gMSk7XG4gIH1cbn1cbiJdfQ==","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, ...(ngDevMode ? [{ debugName: \"daysCount\" }] : []));\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"agendaDaysLayout\" }] : []));\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 globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\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.1.3\", ngImport: i0, type: AXSchedulerAgendaViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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-scheduler-agenda-view-container {{\\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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{gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center;width:calc(100% - 7rem)}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:5rem;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: \"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: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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-scheduler-agenda-view-container {{\\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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{gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center;width:calc(100% - 7rem)}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:5rem;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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QWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxJQUE0QyxVQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBbktVLDhCQUE4QjtrR0FBOUIsOEJBQThCLDZ4REFGOUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLDhCQUE4QixFQUFFLENBQUMsaURDdkRwRiw4N0lBaUdBLHEySURyREksT0FBTyxvRkFHUCwyQkFBMkIseUxBQzNCLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUVuQixrQkFBa0IsNk1BQ2xCLHdCQUF3QixpRUFQeEIsU0FBUyx5Q0FDVCxZQUFZLDBDQUlaLGdCQUFnQjs7MkZBT1AsOEJBQThCO2tCQXBCMUMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osMkJBQTJCO3dCQUMzQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsZ0NBQWdDLEVBQUUsQ0FBQzs4QkFtS3RDLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbmRhRGF5RGF0YSB7XG4gIGRhdGU6IEFYRGF0ZVRpbWU7XG4gIGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJBZ2VuZGFWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIGRheXNDb3VudCA9IGlucHV0KDcpO1xuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0U2xvdElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGFnZW5kYURheXNMYXlvdXQgPSBjb21wdXRlZDxBZ2VuZGFEYXlEYXRhW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgYWdlbmRhU3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghYWdlbmRhU3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQWdlbmRhRGF5RGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5ID0gYWdlbmRhU3RhcnREYXRlLmFkZCgnZGF5JywgaSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoYXBwdCwgY3VycmVudERheSwgMCwgMjQsIHRydWUpO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvcnRlZFNlZ21lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IChzLmFsbERheSA/IDAgOiAxKSxcbiAgICAgICAgICAocykgPT4gcy5zdGFydERhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheSxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgaG9saWRheTogdGhpcy5pc0hvbGlkYXkoY3VycmVudERheSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnYWdlbmRhJyk7XG4gICAgaWYgKHNsb3REYXRhKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGhhbmRsZURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICdhZ2VuZGEnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrSW50ZXJuYWwuZW1pdCh7XG4gICAgICBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNUb2RheShkYXRlOiBBWERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUobmV3IERhdGUoKSk7XG4gICAgcmV0dXJuIGRhdGUuZXF1YWwodG9kYXksICdkYXknKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNIb2xpZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiB7IHN0YXRlOiAnaG9saWRheScgfCAnd2Vla2VuZCcgfCAnbm9uZSc7IGhvbGlkYXk/OiBBWEhvbGlkYXlEYXRlIH0ge1xuICAgIGNvbnN0IGlzSG9saWRheSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc0hvbGlkYXkoZGF0ZSk7XG4gICAgaWYgKGlzSG9saWRheSkge1xuICAgICAgY29uc3QgZ2xvYmFsSG9saWRheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLmZpbmQoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgICAgY29uc3QgaW50ZXJuYWxIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmludGVybmFsSG9saWRheSgpLmZpbmQoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgICAgY29uc3QgaG9saWRheSA9IGdsb2JhbEhvbGlkYXkgfHwgaW50ZXJuYWxIb2xpZGF5O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6ICdob2xpZGF5JyxcbiAgICAgICAgaG9saWRheSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlzV2Vla2VuZCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogJ3dlZWtlbmQnIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxuXG4gIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1jb250YWluZXJcIj5cbiAgQGZvciAoZGF5RGF0YSBvZiBhZ2VuZGFEYXlzTGF5b3V0KCk7IHRyYWNrIGRheURhdGEuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXZcbiAgICAgIGF4RHJvcFpvbmVcbiAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheURhdGEuZGF0ZSlcIlxuICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLXZpZXctY29udGFpbmVyIHt7XG4gICAgICAgIGRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnID8gKGRheURhdGEuaG9saWRheS5ob2xpZGF5Py5jc3NDbGFzcyA/PyAnYXgtc3RhdGUtaG9saWRheScpIDogJydcbiAgICAgIH19XCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXlEYXRhLmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1oZWFkZXItZGF0ZS1kYXlcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtaGVhZGVyLWRhdGUtZGF5LWNoYXIgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCJcbiAgICAgICAgICBbYXhUb29sdGlwXT1cImRheURhdGEuaG9saWRheT8uaG9saWRheT8udGl0bGUgPz8gJydcIlxuICAgICAgICAgIFtheFRvb2x0aXBQbGFjZW1lbnRdPVwiJ3RvcC1zdGFydCdcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ2RkZGQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICBAaWYgKGRheURhdGEuaG9saWRheS5zdGF0ZSA9PT0gJ2hvbGlkYXknICYmIGRheURhdGEuaG9saWRheS5ob2xpZGF5LnRpdGxlKSB7XG4gICAgICAgICAgICAoIHt7IGRheURhdGEuaG9saWRheS5ob2xpZGF5LnRpdGxlIH19IClcbiAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICB7eyBkYXlEYXRhLmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnREQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlEYXRhLmFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJnZXRTbG90SWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBUZW1wbGF0ZSgpXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgPyAnIChBbGwgRGF5KSdcbiAgICAgICAgICAgICAgICAgICAgOiAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICcpJylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWFwcG9pbnRtZW50LXRpbWVcIj5cbiAgICAgICAgICAgICAgQGlmIChzZWdtZW50LmFsbERheSkge1xuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdAYWNvcmV4OmRhdGVUaW1lLmR1cmF0aW9uLmFsbC1kYXknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXRpdGxlIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1hcHBvaW50bWVudC10aXRsZSBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBzZWdtZW50LnRpdGxlIH19PC9heC10aXRsZT5cbiAgICAgICAgICAgIDwhLS0gRGVzY3JpcHRpb24gY291bGQgZ28gaGVyZSBpZiBuZWVkZWQgLS0+XG4gICAgICAgICAgICA8IS0tIEBpZiAoc2VnbWVudC5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+e3sgc2VnbWVudC5kZXNjcmlwdGlvbiB9fTwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICB9IC0tPlxuICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZGF5RGF0YS5hcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtbm8tYXBwb2ludG1lbnRzXCI+XG4gICAgICAgICAgICB7eyAnQGFjb3JleDpjb21tb24uZ2VuZXJhbC5uby1yZWNvcmQnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19","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, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.endDayHour = input.required(...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input.required(...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"processedAppointmentsForLayout\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"allDayAppointments\" }] : []));\n this.singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n }, ...(ngDevMode ? [{ debugName: \"singleDayAppointments\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"hoursArray\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"appointmentLayouts\" }] : []));\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.1.3\", ngImport: i0, type: AXSchedulerDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"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: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2RheS9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1wQyxPQUFPLEVBRUwsb0JBQW9CLEdBR3JCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBc0I3RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQXBCNUQ7O1FBcUJVLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFN0MsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVwQixhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssb0RBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDLElBQUkscURBQUMsQ0FBQztRQUN4QixlQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssc0RBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLDBEQUFDLENBQUM7UUFDMUIsYUFBUSxHQUFHLEtBQUssOERBQVUsQ0FBQztRQUMzQixTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsK0NBQWMsQ0FBQztRQUNwQyxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEscURBQVUsQ0FBQztRQUN0QyxpQkFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLHVEQUFVLENBQUM7UUFDeEMsaUJBQVksR0FBRyxLQUFLLENBQTJCLEVBQUUsd0RBQUMsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLEtBQUsscUVBQWlDLENBQUM7UUFFakQsb0JBQWUsR0FBRyxNQUFNLENBQWdCLElBQUksMkRBQUMsQ0FBQztRQUV0RCxtQ0FBOEIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9CLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxRQUFRLElBQUkscUJBQXFCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxNQUFNLGtCQUFrQixHQUFvQyxFQUFFLENBQUM7WUFDL0QsS0FBSyxNQUFNLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JHLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sa0JBQWtCLENBQUM7UUFDNUIsQ0FBQywwRUFBQyxDQUFDO1FBQ0gsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNGLE1BQU0sOEJBQThCLEdBQ2xDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sQ0FDM0MsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUM5RyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1lBQ3hELDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUUsOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMzQixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDLDhEQUFDLENBQUM7UUFDSCwwQkFBcUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BGLENBQUMsaUVBQUMsQ0FBQztRQUVILHdCQUFtQixHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUMxRCwyQkFBc0IsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDN0QsNkJBQXdCLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQy9ELCtCQUEwQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUN4RSxrQ0FBNkIsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDM0Usb0NBQStCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQzdFLDBCQUFxQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUNuRSw4QkFBeUIsR0FBRyxNQUFNLEVBQTRCLENBQUM7UUFFOUMsbUJBQWMsR0FBRztZQUNoQyxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUNyQyxXQUFXLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjthQUMzQztZQUNELFdBQVcsRUFBRTtnQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjtnQkFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyw2QkFBNkI7Z0JBQzVDLFdBQVcsRUFBRSxJQUFJLENBQUMsK0JBQStCO2FBQ2xEO1NBQ0YsQ0FBQztRQW1HRixlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLHNEQUFDLENBQUM7UUFFSCx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF3QyxDQUFDO1lBQ2hFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFL0IsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDN0csT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQztZQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUM5RSxvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLENBQ0wsQ0FBQztZQUVGLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUNoQyxvQkFBb0IsRUFDcEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDbEcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQ2hCLENBQUM7WUFFRixNQUFNLFdBQVcsR0FBd0QsRUFBRSxDQUFDO1lBRTVFLEtBQUssTUFBTSxrQkFBa0IsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNwQixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUM7b0JBQ3hDLENBQUM7b0JBRUQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO29CQUVyQixLQUFLLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO3dCQUM3RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7d0JBQ3pGLElBQ0UsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7NEJBQ3RELE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQ3RELENBQUM7NEJBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQzs0QkFDaEIsTUFBTTt3QkFDUixDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNkLFdBQVcsR0FBRyxDQUFDLENBQUM7d0JBQ2hCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQ3JELE1BQU07b0JBQ1IsQ0FBQztvQkFFRCxJQUFJLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDcEMsT0FBTyxDQUFDLElBQUksQ0FDVixrREFBa0Qsa0JBQWtCLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxFQUFFLENBQzNHLENBQUM7d0JBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDO3dCQUMzRCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUNyRCxXQUFXLEdBQUcsQ0FBQyxDQUFDO3dCQUNoQixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWxGLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO29CQUNqQyxXQUFXLEVBQUUsV0FBVztvQkFDeEIscUJBQXFCLEVBQUUsYUFBYTtpQkFDckMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsOERBQUMsQ0FBQztLQTJFSjtJQW5RQyxzQkFBc0IsQ0FBQyxVQUFzQixFQUFFLFdBQW1DO1FBQ2hGLE1BQU0sbUJBQW1CLEdBQUksV0FBNkMsQ0FBQyxpQkFBaUI7WUFDMUYsQ0FBQyxDQUFFO2dCQUNDLEdBQUcsV0FBVztnQkFDZCxTQUFTLEVBQUcsV0FBNkMsQ0FBQyxpQkFBaUI7Z0JBQzNFLE9BQU8sRUFBRyxXQUE2QyxDQUFDLGVBQWU7YUFDN0M7WUFDOUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNoQixNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLG1CQUFtQjtZQUN0QixPQUFPLEVBQUUsbUJBQW1CLENBQUMsT0FBTztZQUNwQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsU0FBUztTQUN6QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FDL0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFDaEYsSUFBSSxDQUFDLGNBQWMsRUFDbkIsYUFBYSxDQUNkLENBQUM7SUFDSixDQUFDO0lBQ0QscUJBQXFCLENBQUMsVUFBc0IsRUFBRSxTQUFxQjtRQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRSxJQUFJLFFBQVE7WUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUMvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUNuRSxJQUFJLENBQUMsY0FBYyxFQUNuQixNQUFNLENBQ1AsQ0FBQztJQUNOLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxVQUFzQjtRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFjLEVBQUUsQ0FBQztRQUM5RCxJQUFJLFFBQVE7WUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUMvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUNuRSxJQUFJLENBQUMsY0FBYyxFQUNuQixNQUFNLENBQ1AsQ0FBQztJQUNOLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxDQUFzQjtRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFjLEVBQUUsQ0FBQztRQUU5RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBNEIsQ0FBQztRQUNuRSxNQUFNLG1CQUFtQixHQUFJLFdBQTZDLENBQUMsaUJBQWlCO1lBQzFGLENBQUMsQ0FBRTtnQkFDQyxHQUFHLFdBQVc7Z0JBQ2QsU0FBUyxFQUFHLFdBQTZDLENBQUMsaUJBQWlCO2dCQUMzRSxPQUFPLEVBQUcsV0FBNkMsQ0FBQyxlQUFlO2FBQzdDO1lBQzlCLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEIsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDbEMsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztZQUN0QixXQUFXLEVBQUUsY0FBYztZQUMzQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNoRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsQ0FBc0IsRUFBRSxTQUFxQjtRQUMvRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBNEIsQ0FBQztRQUNuRSxNQUFNLG1CQUFtQixHQUFJLFdBQTZDLENBQUMsaUJBQWlCO1lBQzFGLENBQUMsQ0FBRTtnQkFDQyxHQUFHLFdBQVc7Z0JBQ2QsU0FBUyxFQUFHLFdBQTZDLENBQUMsaUJBQWlCO2dCQUMzRSxPQUFPLEVBQUcsV0FBNkMsQ0FBQyxlQUFlO2FBQzdDO1lBQzlCLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEIsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDbEMsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztZQUN0QixXQUFXLEVBQUUsY0FBYztZQUMzQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNoRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBaUIsRUFBRSxlQUF1QztRQUMxRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM5QixXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBMEZELG9CQUFvQixDQUFDLEdBQVE7UUFDM0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQVE7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFDdkMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVixPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDcEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sUUFBUSxXQUFXLE9BQU8sV0FBVyxLQUFLLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQVE7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFFdkMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sZUFBZSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFFcEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBRW5DLE9BQU8sUUFBUSxZQUFZLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3JELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFRO1FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWxGLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM5RyxNQUFNLGdCQUFnQixHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNyQyxPQUFPLDREQUE0RCxNQUFNLFNBQVMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBUTtRQUMzQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNsRixJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyRyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxjQUFjLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxJQUFJLGVBQWUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXZDLE1BQU0sV0FBVyxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDekMsTUFBTSxlQUFlLEdBQUcsbURBQW1ELENBQUM7WUFFNUUsT0FBTyxRQUFRLGVBQWUsTUFBTSxXQUFXLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBZTtRQUN2QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNsQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdkMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFxQixFQUFFLENBQUMsRUFBRSxZQUFZLFdBQVcsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQTRDLFVBQVU7UUFDcEQsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0FoVlUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsdzZEQUYzQixDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxpREN0RGpGLHlxUkFrTUEsb2hKRHZKSSxPQUFPLG9GQUNQLDJCQUEyQix5TEFHM0Isa0JBQWtCLG9TQUVsQixlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsd0JBQXdCLHNFQUN4QixrQkFBa0Isd01BUGxCLFNBQVMseUNBQ1QsZ0JBQWdCLDZDQUVoQixZQUFZOzsyRkFRSCwyQkFBMkI7a0JBcEJ2QyxTQUFTOytCQUNFLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxPQUFPO3dCQUNQLDJCQUEyQjt3QkFDM0IsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyw2QkFBNkIsRUFBRSxDQUFDOzhCQWdWbkMsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50LFxuICBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItZGF5LXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBWERyYWdEaXJlY3RpdmUsXG4gICAgQVhEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlckRheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgR0FQX1BYID0gMTtcblxuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgZW5kRGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgc3RhcnREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBhcHBvaW50bWVudHMgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KFtdKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSBkcmFnU3RhcnRTbG90SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgY29uc3QgYWxsQXBwb2ludG1lbnRzSW5WaWV3ID0gdGhpcy5hcHBvaW50bWVudHMoKTtcbiAgICBpZiAoIXZpZXdEYXRlIHx8IGFsbEFwcG9pbnRtZW50c0luVmlldy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2VnbWVudHNGb3JUaGlzRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbEFwcG9pbnRtZW50c0luVmlldykge1xuICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShhcHB0LCB2aWV3RGF0ZSwgc3RhcnRILCBlbmRIKTtcbiAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHNGb3JUaGlzRGF5O1xuICB9KTtcbiAgYWxsRGF5QXBwb2ludG1lbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsQWxsRGF5QXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKT8uZmlsdGVyKChlKSA9PiBlICYmIGUuYWxsRGF5KSA/PyBbXTtcbiAgICBjb25zdCBtdWx0aURheUJlY29taW5nQWxsRGF5U2VnbWVudHMgPVxuICAgICAgdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKFxuICAgICAgICAoc2VnbWVudCkgPT4gc2VnbWVudCAmJiBzZWdtZW50LmFsbERheSAmJiAhdGhpcy5hcHBvaW50bWVudHMoKS5maW5kKChvcmlnKSA9PiBvcmlnLmlkID09PSBzZWdtZW50LmlkKT8uYWxsRGF5LFxuICAgICAgKSA/PyBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50PigpO1xuICAgIG9yaWdpbmFsQWxsRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcHQpID0+IGNvbWJpbmVkLnNldChhcHB0LmlkLCBhcHB0KSk7XG4gICAgbXVsdGlEYXlCZWNvbWluZ0FsbERheVNlZ21lbnRzLmZvckVhY2goKGFwcHQpID0+IHtcbiAgICAgIGlmICghY29tYmluZWQuaGFzKGFwcHQuaWQpKSB7XG4gICAgICAgIGNvbWJpbmVkLnNldChhcHB0LmlkLCBhcHB0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb21iaW5lZC52YWx1ZXMoKSk7XG4gIH0pO1xuICBzaW5nbGVEYXlBcHBvaW50bWVudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0KCk/LmZpbHRlcigoZSkgPT4gZSAmJiAhZS5hbGxEYXkpID8/IFtdO1xuICB9KTtcblxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmFwcG9pbnRtZW50LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoYXBwb2ludG1lbnQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBhcHBvaW50bWVudDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG4gIGhhbmRsZVNpbmdsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBzdGFydERhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICdkYXknKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cbiAgaGFuZGxlQWxsRGF5U2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBlbmREYXRlID0gdGhpcy5kYXRlKCkuZW5kT2YoJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuZGF0ZSgpLnN0YXJ0T2YoJ2RheScpO1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXc6ICdkYXknIGFzIGNvbnN0IH07XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCkge1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmRhdGUoKS5lbmRPZignZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5Jyk7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldzogJ2RheScgYXMgY29uc3QgfTtcblxuICAgIGNvbnN0IGRyb3BwZWRBcHB0ID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERyb3BwZWRBcHB0ID0gKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmRyb3BwZWRBcHB0LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoZHJvcHBlZEFwcHQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBkcm9wcGVkQXBwdDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsRHJvcHBlZEFwcHQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsRHJvcHBlZEFwcHQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVTaW5nbGVEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ2RheScpO1xuICAgIGNvbnN0IGRyb3BwZWRBcHB0ID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERyb3BwZWRBcHB0ID0gKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmRyb3BwZWRBcHB0LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoZHJvcHBlZEFwcHQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBkcm9wcGVkQXBwdDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsRHJvcHBlZEFwcHQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsRHJvcHBlZEFwcHQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrSW50ZXJuYWwuZW1pdCh7XG4gICAgICBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgfSk7XG4gIH1cblxuICBob3Vyc0FycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCB0aW1lID0gdGhpcy5kYXRlKCk7XG4gICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgdGltZSA9IHRpbWUuc2V0KCdob3VyJywgdGhpcy5zdGFydERheUhvdXIoKSkuc3RhcnRPZignaG91cicpO1xuICAgIGNvbnN0IGhvdXJzID0gW3RpbWVdO1xuICAgIHdoaWxlICh0aW1lLmhvdXIgPCB0aGlzLmVuZERheUhvdXIoKSAtIDEpIHtcbiAgICAgIHRpbWUgPSB0aW1lLmFkZCgnaG91cicsIDEpO1xuICAgICAgaG91cnMucHVzaCh0aW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvdXJzO1xuICB9KTtcblxuICBhcHBvaW50bWVudExheW91dHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0cyA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0PigpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50c1RvTGF5b3V0ID0gdGhpcy5zaW5nbGVEYXlBcHBvaW50bWVudHMoKTtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0SCA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3QgZW5kSCA9IHRoaXMuZW5kRGF5SG91cigpO1xuXG4gICAgaWYgKGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCA9PT0gMCB8fCAhdmlld0RhdGUgfHwgdHlwZW9mIHN0YXJ0SCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEggIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbGF5b3V0cztcbiAgICB9XG5cbiAgICBjb25zdCBjb25jdXJyZW5jeUluZm9NYXAgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlRGF5Vmlld0NvbmN1cnJlbmN5SW5mbyhcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0LFxuICAgICAgdmlld0RhdGUsXG4gICAgICBzdGFydEgsXG4gICAgICBlbmRILFxuICAgICk7XG5cbiAgICBjb25zdCBzb3J0ZWRBcHBvaW50bWVudHMgPSBvcmRlckJ5KFxuICAgICAgYXBwb2ludG1lbnRzVG9MYXlvdXQsXG4gICAgICBbKGUpID0+IGUuc3RhcnREYXRlLmdldFRpbWUoKSwgKGUpID0+IGUub3JpZ2luYWxFbmREYXRlLmdldFRpbWUoKSAtIGUub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpXSxcbiAgICAgIFsnYXNjJywgJ2Rlc2MnXSxcbiAgICApO1xuXG4gICAgY29uc3QgY29sdW1uc0RhdGE6IHsgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdIH1bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBhcHBvaW50bWVudFNlZ21lbnQgb2Ygc29ydGVkQXBwb2ludG1lbnRzKSB7XG4gICAgICBsZXQgYXNzaWduZWRDb2wgPSAtMTtcblxuICAgICAgZm9yIChsZXQgYyA9IDA7IDsgYysrKSB7XG4gICAgICAgIGlmICghY29sdW1uc0RhdGFbY10pIHtcbiAgICAgICAgICBjb2x1bW5zRGF0YVtjXSA9IHsgYXBwb2ludG1lbnRzOiBbXSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbmZsaWN0ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChjb25zdCBwbGFjZWRTZWdtZW50IG9mIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cykge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudFNlZ21lbnQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnRTZWdtZW50LmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhcnREYXRlLmNvbXBhcmUocGxhY2VkU2VnbWVudC5lbmREYXRlLCAnbWludXRlJykgPCAwICYmXG4gICAgICAgICAgICBlbmREYXRlLmNvbXBhcmUocGxhY2VkU2VnbWVudC5zdGFydERhdGUsICdtaW51dGUnKSA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmxpY3QpIHtcbiAgICAgICAgICBhc3NpZ25lZENvbCA9IGM7XG4gICAgICAgICAgY29sdW1uc0RhdGFbY10uYXBwb2ludG1lbnRzLnB1c2goYXBwb2ludG1lbnRTZWdtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjID4gYXBwb2ludG1lbnRzVG9MYXlvdXQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYERheVZpZXc6IFNhZmV0eSBicmVhayBpbiBjb2x1bW4gYXNzaWdubWVudCBmb3IgJHthcHBvaW50bWVudFNlZ21lbnQudGl0bGV9LCBhc3NpZ25pbmcgdG8gbmV3IGNvbHVtbiAke2N9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghY29sdW1uc0RhdGFbY10pIGNvbHVtbnNEYXRhW2NdID0geyBhcHBvaW50bWVudHM6IFtdIH07XG4gICAgICAgICAgY29sdW1uc0RhdGFbY10uYXBwb2ludG1lbnRzLnB1c2goYXBwb2ludG1lbnRTZWdtZW50KTtcbiAgICAgICAgICBhc3NpZ25lZENvbCA9IGM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29uY3VycmVuY3lJbmZvID0gY29uY3VycmVuY3lJbmZvTWFwLmdldChhcHBvaW50bWVudFNlZ21lbnQuaWQpO1xuICAgICAgY29uc3QgZWZmZWN0aXZlQ29scyA9IGNvbmN1cnJlbmN5SW5mbyA/IGNvbmN1cnJlbmN5SW5mby5lZmZlY3RpdmVUb3RhbENvbHVtbnMgOiAxO1xuXG4gICAgICBsYXlvdXRzLnNldChhcHBvaW50bWVudFNlZ21lbnQuaWQsIHtcbiAgICAgICAgY29sdW1uSW5kZXg6IGFzc2lnbmVkQ29sLFxuICAgICAgICBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGVmZmVjdGl2ZUNvbHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dHM7XG4gIH0pO1xuXG4gIGdldEFwcG9pbnRtZW50TGF5b3V0KGtleTogYW55KTogQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXBwb2ludG1lbnRMYXlvdXRzKCkuZ2V0KGtleSk7XG4gIH1cblxuICBnZXRBcHBvaW50bWVudExlZnQoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxheW91dCA9IHRoaXMuZ2V0QXBwb2ludG1lbnRMYXlvdXQoa2V5KTtcbiAgICBpZiAobGF5b3V0ICYmIGxheW91dC5lZmZlY3RpdmVUb3RhbENvbHVtbnMgPiAwKSB7XG4gICAgICBjb25zdCBOID0gbGF5b3V0LmVmZmVjdGl2ZVRvdGFsQ29sdW1ucztcbiAgICAgIGNvbnN0IEMgPSBsYXlvdXQuY29sdW1uSW5kZXg7XG4gICAgICBpZiAoQyA8IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGNvbHVtbkluZGV4IDwgMCBmb3Iga2V5OicsIGtleSk7XG4gICAgICAgIHJldHVybiAnMHB4JztcbiAgICAgIH1cbiAgICAgIGlmIChDID09PSAwIHx8IE4gPD0gMSkgcmV0dXJuICcwcHgnO1xuICAgICAgY29uc3QgbGVmdFBlcmNlbnQgPSBDICogKDEwMCAvIE4pO1xuICAgICAgY29uc3QgZ2FwT2Zmc2V0UHggPSBDICogdGhpcy5HQVBfUFg7XG4gICAgICByZXR1cm4gYGNhbGMoJHtsZWZ0UGVyY2VudH0lICsgJHtnYXBPZmZzZXRQeH1weClgO1xuICAgIH1cbiAgICByZXR1cm4gJzBweCc7XG4gIH1cblxuICBnZXRBcHBvaW50bWVudFdpZHRoKGtleTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmdldEFwcG9pbnRtZW50TGF5b3V0KGtleSk7XG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMCkge1xuICAgICAgY29uc3QgTiA9IGxheW91dC5lZmZlY3RpdmVUb3RhbENvbHVtbnM7XG5cbiAgICAgIGlmIChOIDw9IDApIHJldHVybiAnMCUnO1xuICAgICAgaWYgKE4gPT09IDEpIHJldHVybiBgY2FsYygxMDAlIC0gJHt0aGlzLkdBUF9QWH1weClgO1xuXG4gICAgICBjb25zdCB3aWR0aFBlcmNlbnQgPSAoMSAvIE4pICogMTAwO1xuXG4gICAgICByZXR1cm4gYGNhbGMoJHt3aWR0aFBlcmNlbnR9JSAtICR7dGhpcy5HQVBfUFh9cHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcwJSc7XG4gIH1cblxuICBnZXRBcHBvaW50bWVudFRvcChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgYXBwb2ludG1lbnRTZWdtZW50ID0gdGhpcy5zaW5nbGVEYXlBcHBvaW50bWVudHMoKS5maW5kKChlKSA9PiBlLmlkID09PSBrZXkpO1xuXG4gICAgaWYgKGFwcG9pbnRtZW50U2VnbWVudCkge1xuICAgICAgY29uc3Qgc3RhcnRNaW51dGVzID0gYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZS5nZXRIb3VycygpICogNjAgKyBhcHBvaW50bWVudFNlZ21lbnQuc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgIGNvbnN0IHN0YXJ0QmxvY2tPZmZzZXQgPSBzdGFydE1pbnV0ZXMgLSB0aGlzLnN0YXJ0RGF5SG91cigpICogNjA7XG4gICAgICBjb25zdCB5QmxvY2sgPSBzdGFydEJsb2NrT2Zmc2V0IC8gMzA7XG4gICAgICByZXR1cm4gYGNhbGModmFyKC0tYXgtY29tcC1zY2hlZHVsZXItYmFzaWMtdmlldy1ibG9ja3MtaGVpZ2h0KSAqICR7eUJsb2NrfSArIDFweClgO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRBcHBvaW50bWVudEhlaWdodChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgYXBwb2ludG1lbnRTZWdtZW50ID0gdGhpcy5zaW5nbGVEYXlBcHBvaW50bWVudHMoKS5maW5kKChlKSA9PiBlLmlkID09PSBrZXkpO1xuICAgIGlmIChhcHBvaW50bWVudFNlZ21lbnQpIHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uTWlsbGlzID0gYXBwb2ludG1lbnRTZWdtZW50LmVuZERhdGUuZ2V0VGltZSgpIC0gYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSBNYXRoLm1heCgwLCBkdXJhdGlvbk1pbGxpcyAvICgxMDAwICogNjApKTtcbiAgICAgIGlmIChkdXJhdGlvbk1pbnV0ZXMgPD0gMCkgcmV0dXJuICcwcHgnO1xuXG4gICAgICBjb25zdCBoZWlnaHRCbG9jayA9IGR1cmF0aW9uTWludXRlcyAvIDMwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRFeHByID0gYHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodClgO1xuXG4gICAgICByZXR1cm4gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtoZWlnaHRCbG9ja30gLSAke3RoaXMuR0FQX1BYfXB4KWA7XG4gICAgfVxuICAgIHJldHVybiAnMHB4JztcbiAgfVxuXG4gIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLXRhYmxlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdj5cbiAgICAgIHt7ICdAYWNvcmV4OmRhdGVUaW1lLmR1cmF0aW9uLmFsbC1kYXknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBheERyb3Bab25lXG4gICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVBbGxEYXlEcm9wKCRldmVudClcIlxuICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgIChjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50KVwiXG4gICAgKGRibGNsaWNrKT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQpXCJcbiAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudClcIlxuICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXItdGFibGUtY29udGFpbmVyXCJcbiAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF0ZSgpLmZvcm1hdCgnWVlZWU1NREQnKSArICctYWxsZGF5J1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXItYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGFsbERheUFwcG9pbnRtZW50cygpLmxlbmd0aCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgIFtkcmFnRGF0YV09XCJhbGxEYXlBcHBvaW50bWVudHMoKVswXVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhbGxEYXlBcHBvaW50bWVudHMoKVswXSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0pXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFsbERheUFwcG9pbnRtZW50cygpWzBdKVwiXG4gICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhbGxEYXlBcHBvaW50bWVudHMoKVswXS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItaGVhZGVyLWRheS1hcHBvaW50bWVudFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5jc3NDbGFzcyA/P1xuICAgICAgICAgICAgYGF4LXNjaGVkdWxlci0ke2FsbERheUFwcG9pbnRtZW50cygpWzBdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFsbERheUFwcG9pbnRtZW50cygpWzBdLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhbGxEYXlBcHBvaW50bWVudHMoKVswXSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIHt7IGFsbERheUFwcG9pbnRtZW50cygpWzBdLnN0YXJ0RGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIC1cbiAgICAgICAgICAgIHt7IGFsbERheUFwcG9pbnRtZW50cygpWzBdLmVuZERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGFsbERheUFwcG9pbnRtZW50cygpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICNtb3JlQXBwb2ludG1lbnRzXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWhlYWRlci1tb3JlLXRhZ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICBhbGxEYXlBcHBvaW50bWVudHMoKVsxXS5jc3NDbGFzcyA/P1xuICAgICAgICAgICAgYGF4LXNjaGVkdWxlci0ke2FsbERheUFwcG9pbnRtZW50cygpWzFdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgJ0BhY29yZXg6Y29tbW9uLmdlbmVyYWwubW9yZS1pdGVtcydcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgcGFyYW1zOiB7IG51bWJlcjogYWxsRGF5QXBwb2ludG1lbnRzKCkubGVuZ3RoIC0gMSB9IH1cbiAgICAgICAgICAgICAgfCBhc3luY1xuICAgICAgICAgIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXgtcG9wb3ZlciBbdGFyZ2V0XT1cIm1vcmVBcHBvaW50bWVudHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyXCIgW2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIiBheERyb3Bab25lPlxuICAgICAgICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2YgYWxsRGF5QXBwb2ludG1lbnRzKCk7IHRyYWNrIGFwcG9pbnRtZW50LmlkOyBsZXQgZmlyc3QgPSAkZmlyc3QpIHtcbiAgICAgICAgICAgICAgQGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgYXBwb2ludG1lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyAnJyA6IGFwcG9pbnRtZW50LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiYXBwb2ludG1lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke2FwcG9pbnRtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxheC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBhcHBvaW50bWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIHt7IGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICB7eyBhcHBvaW50bWVudC5lbmREYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LXRpbWUtY29udGFpbmVyXCI+XG4gIDx0YWJsZSBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktdGltZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtib3JkZXJdPVwiMVwiPlxuICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICB7eyB0aW1lIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvdGFibGU+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LXRhYmxlLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWFwcG9pbnRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2Ygc2luZ2xlRGF5QXBwb2ludG1lbnRzKCk7IHRyYWNrIGFwcG9pbnRtZW50LmlkKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBheERyYWdcbiAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgIFtkcmFnRGF0YV09XCJhcHBvaW50bWVudFwiXG4gICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgYXBwb2ludG1lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICBbdGl0bGVdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyAnJyA6IGFwcG9pbnRtZW50LnRpdGxlXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJnZXRBcHBvaW50bWVudFdpZHRoKGFwcG9pbnRtZW50LmlkKVwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRBcHBvaW50bWVudEhlaWdodChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1ibG9jay1zdGFydF09XCJnZXRBcHBvaW50bWVudFRvcChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1pbmxpbmUtc3RhcnRdPVwiZ2V0QXBwb2ludG1lbnRMZWZ0KGFwcG9pbnRtZW50LmlkKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiYXBwb2ludG1lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke2FwcG9pbnRtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcG9pbnRtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIHt7IGFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fSAtXG4gICAgICAgICAgICB7eyBhcHBvaW50bWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktc2xvdFwiPlxuICAgICAgQGZvciAodGltZSBvZiBob3Vyc0FycmF5KCk7IHRyYWNrIHRpbWUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZVNpbmdsZURheURyb3AoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1zbG90LWlkXT1cInRpbWUuZm9ybWF0KCdZWVlZTU1ERC1ISG1tJylcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgI3pvbmUyPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZTIuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZVNpbmdsZURheURyb3AoJGV2ZW50LCB0aW1lLmFkZCgnbWludXRlJywgMzApKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUuYWRkKCdtaW51dGUnLCAzMCkpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLmFkZCgnbWludXRlJywgMzApKVwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1zbG90LWlkXT1cInRpbWUuYWRkKCdtaW51dGUnLCAzMCkuZm9ybWF0KCdZWVlZTU1ERC1ISG1tJylcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","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, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.firstDayOfWeek = input('saturday', ...(ngDevMode ? [{ debugName: \"firstDayOfWeek\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n // --- Constants ---\n this.DAYS_IN_WEEK = 7;\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"monthStartDate\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"daysArray\" }] : []));\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 let holidayCssClass = null;\n if (isHoliday) {\n const globalHoliday = this.calendarService.holidays.find((d) => currentDay.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => currentDay.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\n if (holiday) {\n holidayTitle = holiday.title;\n holidayCssClass = holiday.cssClass;\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 holidayCssClass,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n }, ...(ngDevMode ? [{ debugName: \"calendarDaysInfo\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"appointmentsGroupedByDay\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"dayCellLayouts\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"gridTemplateRowsStyle\" }] : []));\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.1.3\", ngImport: i0, type: AXSchedulerMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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 dayCell.isHoliday ? (dayCell.holidayCssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\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: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"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\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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 dayCell.isHoliday ? (dayCell.holidayCssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\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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LGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxJQUE0QyxVQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBclJVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLDJ5REFGN0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixFQUFFLENBQUMsaURDbEVuRixvNlBBc0tBLG9ySkRoSEksT0FBTyxvRkFHUCxrQkFBa0Isb1NBR2xCLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQixrQkFBa0IsNk1BQ2xCLHdCQUF3QixpRUFSeEIsU0FBUyx5Q0FDVCxnQkFBZ0IsNkNBRWhCLFlBQVk7OzJGQVVILDZCQUE2QjtrQkFyQnpDLFNBQVM7K0JBQ0UseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixTQUFTO3dCQUNULGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsK0JBQStCLEVBQUUsQ0FBQzs4QkFxUnJDLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7IC8vIEFkanVzdCBwYXRoXG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRE9DVU1FTlQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhEYXlPZldlZWtOYW1lLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7IC8vIEFkanVzdCBwYXRoXG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbi8vIC0tLSBUeXBlcyBzcGVjaWZpYyB0byBNb250aCBWaWV3IExheW91dCAtLS1cbi8vIFJlcHJlc2VudHMgYSBzaW5nbGUgZGF5IGNlbGwgaW4gdGhlIG1vbnRoIGdyaWRcbmV4cG9ydCB0eXBlIEFYU2NoZWR1bGVyTW9udGhEYXlDZWxsID0ge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICBpc0N1cnJlbnRNb250aDogYm9vbGVhbjtcbiAgaXNUb2RheTogYm9vbGVhbjtcbiAgaXNIb2xpZGF5OiBib29sZWFuO1xuICBob2xpZGF5VGl0bGU/OiBzdHJpbmc7XG4gIGhvbGlkYXlDc3NDbGFzcz86IHN0cmluZztcbiAgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBbGwgYXBwb2ludG1lbnRzIGZvciB0aGlzIGRheVxuICB2aXNpYmxlQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBcHBvaW50bWVudHMgdG8gZGlzcGxheSBhcyBjaGlwc1xuICBoaWRkZW5BcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107IC8vIEFwcG9pbnRtZW50cyBoaWRkZW4gYmVoaW5kIHRoZSBiYWRnZVxuICBvdmVyZmxvd0NvdW50OiBudW1iZXI7IC8vIENvdW50IG9mIGhpZGRlbiBhcHBvaW50bWVudHMgKGxlbmd0aCBvZiBoaWRkZW5BcHBvaW50bWVudHMpXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItbW9udGgtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhGb3JtYXRQaXBlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWERyYWdEaXJlY3RpdmUsXG4gICAgQVhEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyTW9udGhWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICAvLyAtLS0gSW5wdXRzIC0tLVxuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIGZpcnN0RGF5T2ZXZWVrID0gaW5wdXQ8QVhEYXlPZldlZWtOYW1lPignc2F0dXJkYXknKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgLy8gLS0tIENvbnN0YW50cyAtLS1cbiAgcmVhZG9ubHkgREFZU19JTl9XRUVLID0gNztcbiAgcmVhZG9ubHkgTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkgPSAyO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0U2xvdElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICAvLyAtLS0gRXZlbnQgSGFuZGxlcnMgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRPdXRwdXRNYXAgPSB7XG4gICAgc2xvdDoge1xuICAgICAgY2xpY2s6IHRoaXMuc2xvdENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLnNsb3REYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5zbG90UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgICBhcHBvaW50bWVudDoge1xuICAgICAgY2xpY2s6IHRoaXMuYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5hcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLmFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgfTtcbiAgaGFuZGxlQXBwb2ludG1lbnRFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudFNlZ21lbnRPck9yaWdpbmFsOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50U2VnbWVudE9yT3JpZ2luYWwpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnbW9udGgnKTsgLy8gRW5zdXJlIGl0J3Mgc3RhcnQgb2YgZGF5XG4gICAgaWYgKHNsb3REYXRhKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGhhbmRsZURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICdtb250aCcpO1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBCYXNlIENvbXB1dGVkcyAtLS1cbiAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgbW9udGggYmFzZWQgb24gdGhlIGlucHV0IGRhdGVcbiAgbW9udGhTdGFydERhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZCA9IHRoaXMuZGF0ZSgpO1xuICAgIHJldHVybiBkID8gZC5zdGFydE9mKCdtb250aCcpIDogbnVsbDtcbiAgfSk7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIGxpc3Qgb2Ygd2Vla2RheSBuYW1lcyBiYXNlZCBvbiB0aGUgZmlyc3REYXlPZldlZWtcbiAgZGF5c0FycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRheU5hbWVzOiBBWERhdGVUaW1lW10gPSBbXTtcblxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5kYXRlKCk7IC8vIFVzZSBhIHN0YWJsZSBkYXRlIGZvciBnZW5lcmF0aW5nIHdlZWsgaGVhZGVyc1xuICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TmFtZSA9IHRoaXMuZmlyc3REYXlPZldlZWsoKTtcbiAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOdW1iZXIgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKGRlc2lyZWRGaXJzdERheU5hbWUpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGRheXMgdG8gc3VidHJhY3QgdG8gZ2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgd2VlayBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgbGV0IGhlYWRlclN0YXJ0RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBkYXlOYW1lcy5wdXNoKGhlYWRlclN0YXJ0RGF0ZSk7XG4gICAgICBoZWFkZXJTdGFydERhdGUgPSBoZWFkZXJTdGFydERhdGUuYWRkKCdkYXknLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRheU5hbWVzO1xuICB9KTtcblxuICAvLyAtLS0gQ2FsZW5kYXIgR3JpZCBDYWxjdWxhdGlvbiAtLS1cbiAgY2FsZW5kYXJEYXlzSW5mbyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtb250aFN0YXJ0ID0gdGhpcy5tb250aFN0YXJ0RGF0ZSgpO1xuICAgIGlmICghbW9udGhTdGFydCkgcmV0dXJuIHsgZGF5czogW10sIHdlZWtzTmVlZGVkOiAwIH07XG5cbiAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBtb250aFN0YXJ0O1xuICAgIGNvbnN0IGxhc3REYXlPZk1vbnRoID0gbW9udGhTdGFydC5lbmRPZignbW9udGgnKTtcblxuICAgIGNvbnN0IGZpcnN0RGF5R3JpZE51bSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIodGhpcy5maXJzdERheU9mV2VlaygpKTtcbiAgICBjb25zdCBmaXJzdERpc3BsYXllZERheU9mV2VlayA9IGZpcnN0RGF5T2ZNb250aC5kYXlPZldlZWs7XG5cbiAgICBjb25zdCBsZWFkaW5nRGF5cyA9IChmaXJzdERpc3BsYXllZERheU9mV2VlayAtIGZpcnN0RGF5R3JpZE51bSArIHRoaXMuREFZU19JTl9XRUVLKSAlIHRoaXMuREFZU19JTl9XRUVLO1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZHcmlkID0gZmlyc3REYXlPZk1vbnRoLmFkZCgnZGF5JywgLWxlYWRpbmdEYXlzKTtcblxuICAgIC8vIERldGVybWluZSBob3cgbWFueSB0b3RhbCBkYXlzIHRvIHNob3cgdG8gZmlsbCBvdXQgdGhlIHdlZWtzXG4gICAgLy8gQSBjb21tb24gYXBwcm9hY2ggaXMgNiB3ZWVrcyB0byBlbnN1cmUgY29uc2lzdGVuY3ksIGJ1dCB5b3VyIGR5bmFtaWMgd2Vla3NOZWVkZWQgaXMgZmluZSB0b28uXG4gICAgLy8gTGV0J3Mgc3RpY2sgdG8geW91ciBkeW5hbWljIGB3ZWVrc05lZWRlZGAgYW5kIGB0b3RhbERheXNUb0dlbmVyYXRlYFxuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbGFzdERheU9mTW9udGguZGF5T2ZNb250aDtcbiAgICBjb25zdCB0b3RhbENlbGxzTWluaW11bSA9IGxlYWRpbmdEYXlzICsgZGF5c0luTW9udGg7XG4gICAgY29uc3Qgd2Vla3NOZWVkZWREeW5hbWljID0gTWF0aC5jZWlsKHRvdGFsQ2VsbHNNaW5pbXVtIC8gdGhpcy5EQVlTX0lOX1dFRUspO1xuICAgIGNvbnN0IGFjdHVhbFdlZWtzVG9TaG93ID0gTWF0aC5tYXgoNCwgTWF0aC5taW4od2Vla3NOZWVkZWREeW5hbWljLCA2KSk7IC8vIENsYW1wIHdlZWtzXG4gICAgY29uc3QgdG90YWxEYXlzVG9HZW5lcmF0ZSA9IGFjdHVhbFdlZWtzVG9TaG93ICogdGhpcy5EQVlTX0lOX1dFRUs7XG5cbiAgICBjb25zdCBkYXlzOiB7XG4gICAgICBkYXRlOiBBWERhdGVUaW1lO1xuICAgICAgaXNDdXJyZW50TW9udGg6IGJvb2xlYW47XG4gICAgICBpc1RvZGF5OiBib29sZWFuO1xuICAgICAgaXNIb2xpZGF5OiBib29sZWFuO1xuICAgICAgaG9saWRheVRpdGxlPzogc3RyaW5nO1xuICAgICAgaG9saWRheUNzc0NsYXNzPzogc3RyaW5nO1xuICAgIH1bXSA9IFtdO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIGxldCBjdXJyZW50RGF5ID0gZmlyc3REYXlPZkdyaWQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsRGF5c1RvR2VuZXJhdGU7IGkrKykge1xuICAgICAgY29uc3QgaXNIb2xpZGF5ID1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShjdXJyZW50RGF5KSB8fCB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGN1cnJlbnREYXksIHRoaXMuY2FsZW5kYXIoKSk7XG5cbiAgICAgIGxldCBob2xpZGF5VGl0bGU6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICAgICAgbGV0IGhvbGlkYXlDc3NDbGFzczogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gICAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbEhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maW5kKChkKSA9PiBjdXJyZW50RGF5LmVxdWFsKGQuZGF0ZSwgJ2RheScpKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmludGVybmFsSG9saWRheSgpLmZpbmQoKGQpID0+IGN1cnJlbnREYXkuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgICAgICBjb25zdCBob2xpZGF5ID0gZ2xvYmFsSG9saWRheSB8fCBpbnRlcm5hbEhvbGlkYXk7XG4gICAgICAgIGlmIChob2xpZGF5KSB7XG4gICAgICAgICAgaG9saWRheVRpdGxlID0gaG9saWRheS50aXRsZTtcbiAgICAgICAgICBob2xpZGF5Q3NzQ2xhc3MgPSBob2xpZGF5LmNzc0NsYXNzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRheXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXksXG4gICAgICAgIGlzQ3VycmVudE1vbnRoOiBjdXJyZW50RGF5Lm1vbnRoT2ZZZWFyID09PSBtb250aFN0YXJ0Lm1vbnRoT2ZZZWFyLFxuICAgICAgICBpc1RvZGF5OiBjdXJyZW50RGF5LmVxdWFsKHRvZGF5LCAnZGF5JyksXG4gICAgICAgIGlzSG9saWRheSxcbiAgICAgICAgaG9saWRheVRpdGxlLFxuICAgICAgICBob2xpZGF5Q3NzQ2xhc3MsXG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnREYXkgPSBjdXJyZW50RGF5LmFkZCgnZGF5JywgMSk7XG4gICAgfVxuICAgIHJldHVybiB7IGRheXM6IGRheXMsIHdlZWtzTmVlZGVkOiBhY3R1YWxXZWVrc1RvU2hvdyB9O1xuICB9KTtcblxuICAvLyAtLS0gQXBwb2ludG1lbnQgR3JvdXBpbmcgLS0tXG4gIGFwcG9pbnRtZW50c0dyb3VwZWRCeURheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB7IGRheXMgfSA9IHRoaXMuY2FsZW5kYXJEYXlzSW5mbygpOyAvLyBEZXN0cnVjdHVyZSB0byBnZXQgZGF5cyBhcnJheVxuICAgIGlmIChkYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCk7XG5cbiAgICBjb25zdCB2aWV3U3RhcnREYXRlID0gZGF5c1swXS5kYXRlO1xuICAgIGNvbnN0IHZpZXdFbmREYXRlID0gZGF5c1tkYXlzLmxlbmd0aCAtIDFdLmRhdGU7XG4gICAgY29uc3QgcmVsZXZhbnRBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyU2VydmljZS5ncm91cEFwcG9pbnRtZW50c0J5RGF5KHJlbGV2YW50QXBwb2ludG1lbnRzLCB2aWV3U3RhcnREYXRlLCB2aWV3RW5kRGF0ZSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBEYXkgQ2VsbCBMYXlvdXQgQ2FsY3VsYXRpb24gLS0tXG4gIGRheUNlbGxMYXlvdXRzID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJNb250aERheUNlbGxbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHsgZGF5czogaW5pdGlhbERheXNJbmZvIH0gPSB0aGlzLmNhbGVuZGFyRGF5c0luZm8oKTtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG5cbiAgICBpZiAoaW5pdGlhbERheXNJbmZvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdOyAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gZGF5cyB0byBwcm9jZXNzXG4gICAgfVxuICAgIGlmICghYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgfHwgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBJZiBubyBhcHBvaW50bWVudHMsIG1hcCBpbml0aWFsRGF5c0luZm8gdG8gdGhlIGZ1bGwgc3RydWN0dXJlIHdpdGggZW1wdHkgYXBwb2ludG1lbnQgYXJyYXlzXG4gICAgICByZXR1cm4gaW5pdGlhbERheXNJbmZvLm1hcCgoZGF5SW5mbykgPT4gKHtcbiAgICAgICAgLi4uZGF5SW5mbyxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBbXSxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogW10sXG4gICAgICAgIGhpZGRlbkFwcG9pbnRtZW50czogW10sXG4gICAgICAgIG92ZXJmbG93Q291bnQ6IDAsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXRpYWxEYXlzSW5mby5tYXAoKGRheUluZm8pID0+IHtcbiAgICAgIGNvbnN0IGRheUFzU3RhcnRPZkRheSA9IGRheUluZm8uZGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShcbiAgICAgICAgICBhcHB0LFxuICAgICAgICAgIGRheUFzU3RhcnRPZkRheSxcbiAgICAgICAgICAwLCAvLyB2aWV3U3RhcnRIb3VyIGZvciBtb250aCBjZWxsIGNvbnRleHQgKGZ1bGwgZGF5KVxuICAgICAgICAgIDI0LCAvLyB2aWV3RW5kSG91ciBmb3IgbW9udGggY2VsbCBjb250ZXh0IChmdWxsIGRheSlcbiAgICAgICAgICB0cnVlLCAvLyBpc0Z1bGxEYXlDZWxsQ29udGV4dCA9IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBzZWdtZW50c0ZvclRoaXNEYXkucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3J0ZWRTZWdtZW50cyA9IG9yZGVyQnkoXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgW1xuICAgICAgICAgIChzKSA9PiAocy5hbGxEYXkgPyAwIDogMSksIC8vIFNlZ21lbnRzIG1hcmtlZCBhcyBhbGxEYXkgZmlyc3RcbiAgICAgICAgICAocykgPT4gcy5vcmlnaW5hbFN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFRoZW4gYnkgb3JpZ2luYWwgc3RhcnQgdGltZVxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSwgLy8gVGhlbiBieSBkdXJhdGlvbiAobG9uZ2VyIGZpcnN0KVxuICAgICAgICAgIChzKSA9PiBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpID8/ICcnLCAvLyBUaGVuIGJ5IHRpdGxlXG4gICAgICAgIF0sXG4gICAgICAgIFsnYXNjJywgJ2FzYycsICdkZXNjJywgJ2FzYyddLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdmlzaWJsZUFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKDAsIHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuICAgICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gc29ydGVkU2VnbWVudHMuc2xpY2UodGhpcy5NQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSk7XG4gICAgICBjb25zdCBvdmVyZmxvd0NvdW50ID0gaGlkZGVuQXBwb2ludG1lbnRzLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF5SW5mbyxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50cyxcbiAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzLFxuICAgICAgICBvdmVyZmxvd0NvdW50LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIER5bmFtaWMgR3JpZCBSb3dzIC0tLVxuICBncmlkVGVtcGxhdGVSb3dzU3R5bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgeyB3ZWVrc05lZWRlZCB9ID0gdGhpcy5jYWxlbmRhckRheXNJbmZvKCk7XG4gICAgaWYgKCF3ZWVrc05lZWRlZCB8fCB3ZWVrc05lZWRlZCA8PSAwKSB7XG4gICAgICByZXR1cm4gYHJlcGVhdCg2LCBtaW5tYXgoMCwgMWZyKSlgOyAvLyBGYWxsYmFjaywgZW5zdXJlcyBncmlkIGlzIGF0IGxlYXN0IHNvbWV3aGF0IHNlbnNpYmxlXG4gICAgfVxuICAgIHJldHVybiBgcmVwZWF0KCR7d2Vla3NOZWVkZWR9LCBtaW5tYXgoMCwgMWZyKSlgOyAvLyBVc2UgMWZyIGZvciBlcXVhbCBkaXN0cmlidXRpb25cbiAgfSk7XG5cbiAgZ2V0U2xvdElkKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IGRyb3BMaXN0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICAgIC5lbGVtZW50c0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSlcbiAgICAgIC5maW5kKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnc2xvdElkJ10gIT09IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kcmFnU3RhcnRTbG90SWQuc2V0KGRyb3BMaXN0RWxlbWVudCA/IGRyb3BMaXN0RWxlbWVudC5kYXRhc2V0WydzbG90SWQnXSA6IG51bGwpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5heC1zdGF0ZS1yZWFkb25seScpIGdldCBpc1JlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtY29udGFpbmVyXCI+XG4gIDwhLS0gV2Vla2RheSBIZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtd2Vla2RheXNcIj5cbiAgICBAZm9yIChkYXkgb2YgZGF5c0FycmF5KCk7IHRyYWNrIGRheS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC13ZWVrZGF5XCI+XG4gICAgICAgIHt7IGRheSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2FsZW5kYXIgR3JpZCAtLT5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1ncmlkXCIgW3N0eWxlLmdyaWRUZW1wbGF0ZVJvd3NdPVwiZ3JpZFRlbXBsYXRlUm93c1N0eWxlKClcIj5cbiAgICBAZm9yIChkYXlDZWxsIG9mIGRheUNlbGxMYXlvdXRzKCk7IHRyYWNrIGRheUNlbGwuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyb3Bab25lXG4gICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheUNlbGwuZGF0ZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5Q2VsbC5kYXRlKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWRheS1jZWxsIHt7XG4gICAgICAgICAgZGF5Q2VsbC5pc0hvbGlkYXkgPyAoZGF5Q2VsbC5ob2xpZGF5Q3NzQ2xhc3MgPz8gJ2F4LXN0YXRlLWhvbGlkYXknKSA6ICcnXG4gICAgICAgIH19XCJcbiAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImRheUNlbGwuaXNUb2RheVwiXG4gICAgICAgIFtjbGFzcy5heC1vdGhlci1tb250aF09XCIhZGF5Q2VsbC5pc0N1cnJlbnRNb250aFwiXG4gICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXlDZWxsLmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1kYXktaGVhZGVyXCI+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, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.endDayHour = input.required(...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input.required(...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"processedSegmentsForLayout\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"hoursArray\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"appointmentLayouts\" }] : []));\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.1.3\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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: \"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\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL3RpbWVsaW5lLWRheS9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBRVgsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1wQyxPQUFPLEVBRUwsb0JBQW9CLEdBR3JCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBb0I3RCxNQUFNLE9BQU8sbUNBQW9DLFNBQVEsV0FBVztJQWxCcEU7O1FBbUJVLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFN0MsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVwQixhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssb0RBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDLElBQUkscURBQUMsQ0FBQztRQUN4QixlQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssc0RBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLDBEQUFDLENBQUM7UUFDMUIsYUFBUSxHQUFHLEtBQUssOERBQVUsQ0FBQztRQUMzQixTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsK0NBQWMsQ0FBQztRQUNwQyxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEscURBQVUsQ0FBQztRQUN0QyxpQkFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLHVEQUFVLENBQUM7UUFDeEMsaUJBQVksR0FBRyxLQUFLLENBQTJCLEVBQUUsd0RBQUMsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLEtBQUsscUVBQWlDLENBQUM7UUFFakQsb0JBQWUsR0FBRyxNQUFNLENBQWdCLElBQUksMkRBQUMsQ0FBQztRQUV0RDs7O1dBR0c7UUFDSCwrQkFBMEIsR0FBRyxRQUFRLENBQWtDLEdBQUcsRUFBRTtZQUMxRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFNUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLHVCQUF1QixJQUFJLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEYsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBb0MsRUFBRSxDQUFDO1lBQzlELEtBQUssTUFBTSxJQUFJLElBQUksdUJBQXVCLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2hCLFNBQVM7Z0JBQ1gsQ0FBQztnQkFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0NBQWdDLENBQ3BFLElBQUksRUFDSixRQUFRLEVBQ1IsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixLQUFLLENBQ04sQ0FBQztnQkFFRixJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLGlCQUFpQixDQUFDO1FBQzNCLENBQUMsc0VBQUMsQ0FBQztRQUVILCtEQUErRDtRQUMvRCx3QkFBbUIsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDMUQsMkJBQXNCLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQzdELDZCQUF3QixHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUMvRCwrQkFBMEIsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDeEUsa0NBQTZCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQzNFLG9DQUErQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUM3RSwwQkFBcUIsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDbkUsOEJBQXlCLEdBQUcsTUFBTSxFQUE0QixDQUFDO1FBRS9ELHlCQUF5QjtRQUNSLG1CQUFjLEdBQUc7WUFDaEMsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtnQkFDckMsV0FBVyxFQUFFLElBQUksQ0FBQyx3QkFBd0I7YUFDM0M7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQywwQkFBMEI7Z0JBQ3RDLFFBQVEsRUFBRSxJQUFJLENBQUMsNkJBQTZCO2dCQUM1QyxXQUFXLEVBQUUsSUFBSSxDQUFDLCtCQUErQjthQUNsRDtTQUNGLENBQUM7UUFrREYsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxzREFBQyxDQUFDO1FBRUgseUNBQXlDO1FBQ3pDLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFtQyxFQUFFO1lBQ2pFLE1BQU0sWUFBWSxHQUFtQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLGVBQWU7WUFFL0UsSUFDRSxPQUFPLG1CQUFtQixLQUFLLFFBQVE7Z0JBQ3ZDLE9BQU8saUJBQWlCLEtBQUssUUFBUTtnQkFDckMsb0JBQW9CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDakMsQ0FBQztnQkFDRCxPQUFPLFlBQVksQ0FBQztZQUN0QixDQUFDO1lBRUQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQ2hDLG9CQUFvQixFQUNwQixDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQzFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUNoQixDQUFDO1lBRUYsTUFBTSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztZQUVyQyxLQUFLLE1BQU0sT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FDL0QsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsbUJBQW1CLEVBQ25CLGlCQUFpQixDQUNsQixDQUFDO2dCQUVGLElBQUksQ0FBQyxXQUFXO29CQUFFLFNBQVMsQ0FBQyx3REFBd0Q7Z0JBRXBGLDJEQUEyRDtnQkFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUVyRixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM1QyxtRUFBbUU7b0JBQ25FLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDNUQsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO3dCQUNyQixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxJQUFJLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7b0JBQ3RDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7Z0JBQzdFLENBQUM7cUJBQU0sQ0FBQztvQkFDTix3RUFBd0U7b0JBQ3hFLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGNBQWMsQ0FBQztnQkFDakQsQ0FBQztnQkFFRCxNQUFNLFlBQVksR0FBRyxzREFBc0QsQ0FBQyxDQUFDLDBCQUEwQjtnQkFDdkcsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEMsTUFBTSxXQUFXLEdBQUcsUUFBUSxXQUFXLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLDhGQUE4RjtnQkFDbkssTUFBTSxTQUFTLEdBQUcsUUFBUSxnQkFBZ0IsT0FBTyxZQUFZLE1BQU0sSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsNkJBQTZCO2dCQUVuSCxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUNoQixXQUFXLEVBQUUsT0FBTyxFQUFFLHlCQUF5QjtvQkFDL0MsVUFBVTtvQkFDVixXQUFXO29CQUNYLFNBQVM7b0JBQ1QsWUFBWTtpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyw4REFBQyxDQUFDO0tBWUo7SUE3SUMsc0JBQXNCLENBQUMsVUFBc0IsRUFBRSxlQUF1QztRQUNwRixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRixNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLG1CQUFtQjtZQUN0QixPQUFPLEVBQUUsbUJBQW1CLENBQUMsT0FBTztZQUNwQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsU0FBUztTQUN6QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FDL0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFDaEYsSUFBSSxDQUFDLGNBQWMsRUFDbkIsYUFBYSxDQUNkLENBQUM7SUFDSixDQUFDO0lBQ0QsZUFBZSxDQUFDLFVBQXNCLEVBQUUsU0FBcUI7UUFDM0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDOUUsSUFBSSxRQUFRO1lBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FDL0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFDbkUsSUFBSSxDQUFDLGNBQWMsRUFDbkIsTUFBTSxDQUNQLENBQUM7SUFDTixDQUFDO0lBQ0QsVUFBVSxDQUFDLENBQXNCLEVBQUUsU0FBcUI7UUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQTRCLENBQUM7UUFDbkUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDbEMsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztZQUN0QixXQUFXLEVBQUUsY0FBYztZQUMzQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNoRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBaUIsRUFBRSxlQUF1QztRQUMxRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM5QixXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBb0ZELFNBQVMsQ0FBQyxDQUFlO1FBQ3ZCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRO2FBQ2xDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQzthQUN2QyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQXFCLEVBQUUsQ0FBQyxFQUFFLFlBQVksV0FBVyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsSUFBNEMsVUFBVTtRQUNwRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDOzhHQTNOVSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyxpN0RBRm5DLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLGlEQ2xEekYsczdGQXFFQSx1aEZENUJJLE9BQU8sb0ZBQ1AsMkJBQTJCLHlMQUczQixlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsd0JBQXdCLHNFQUN4QixrQkFBa0Isd01BTGxCLFlBQVksMENBQ1osU0FBUzs7MkZBUUEsbUNBQW1DO2tCQWxCL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsbUJBR3pCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCwyQkFBMkI7d0JBQzNCLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxxQ0FBcUMsRUFBRSxDQUFDOzhCQTJOM0MsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBHQVBfUFggPSAxO1xuXG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+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, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"processedDayData\" }] : []));\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 globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\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.1.3\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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-state-today]=\\\"isToday(dayData.date)\\\"\\n class=\\\"ax-scheduler-month-header-date-day {{\\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"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\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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-state-today]=\\\"isToday(dayData.date)\\\"\\n class=\\\"ax-scheduler-month-header-date-day {{\\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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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QUM7SUFDekIsQ0FBQzs4R0F4TFUscUNBQXFDO2tHQUFyQyxxQ0FBcUMsaXFEQUZyQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUscUNBQXFDLEVBQUUsQ0FBQyxpREM3RDNGLHVtUEE4SkEsc3JKRDVHSSxPQUFPLG9GQUNQLDJCQUEyQix5TEFJM0Isa0JBQWtCLG9TQUNsQixlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsa0JBQWtCLDZNQUNsQix3QkFBd0IsaUVBUHhCLFlBQVksMENBQ1osU0FBUyx5Q0FDVCxnQkFBZ0I7OzJGQVNQLHFDQUFxQztrQkFwQmpELFNBQVM7K0JBQ0Usa0NBQWtDLG1CQUczQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHdCQUF3QjtxQkFDekIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLHVDQUF1QyxFQUFFLENBQUM7OEJBd0w3QyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LCBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgQVhIb2xpZGF5RGF0ZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBET0NVTUVOVCxcbiAgSG9zdEJpbmRpbmcsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YSB7XG4gIGRhdGU6IEFYRGF0ZVRpbWU7XG4gIC8vIFRoZXNlIHdpbGwgYmUgc2VnbWVudHMsIHByZWNpc2VseSBjbGlwcGVkIGFuZCBmbGFnZ2VkIGZvciB0aGlzIGRheVxuICB2aXNpYmxlQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xuICBoaWRkZW5BcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107XG4gIG1vcmVDb3VudDogbnVtYmVyO1xuICAvLyBZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHN0b3JlIGFsbCBzZWdtZW50cyBmb3IgdGhlIGRheSBpZiBuZWVkZWQgZWxzZXdoZXJlXG4gIC8vIGFsbFNlZ21lbnRzRm9yRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFR5cGVbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSA9IDM7XG5cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICBwcml2YXRlIGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcm9jZXNzZWREYXlEYXRhID0gY29tcHV0ZWQ8VGltZWxpbmVNb250aFZpZXdEYXlEYXRhW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgbW9udGhTdGFydERhdGUgPSB0aGlzLmRhdGUoKS5zdGFydE9mKCdtb250aCcpO1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbW9udGhTdGFydERhdGUuZW5kT2YoJ21vbnRoJykuZGF5T2ZNb250aDtcblxuICAgIGlmICghYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCBkYXlEYXRlID0gbW9udGhTdGFydERhdGUuYWRkKCdkYXknLCBpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6IGRheURhdGUsXG4gICAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogW10sXG4gICAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBbXSxcbiAgICAgICAgICBtb3JlQ291bnQ6IDAsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRheXNJbk1vbnRoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlEYXRlID0gbW9udGhTdGFydERhdGUuYWRkKCdkYXknLCBpKS5zdGFydE9mKCdkYXknKTsgLy8gRW5zdXJlIGl0J3Mgc3RhcnQgb2YgZGF5XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIC8vIEZvciBUaW1lbGluZSBNb250aCBWaWV3LCBlYWNoIGRheSBpcyBhIHJvdy4gV2Ugd2FudCBzZWdtZW50cyBmb3IgdGhlIGZ1bGwgMjRoIG9mIHRoYXQgZGF5LlxuICAgICAgICAvLyBUaGUgdmlldydzIHN0YXJ0SG91ci9lbmRIb3VyIGFyZSBOT1QgdXNlZCB0byBjbGlwIHNlZ21lbnRzIGhlcmUsXG4gICAgICAgIC8vIGFzIGl0J3Mgbm90IGEgaG9yaXpvbnRhbCB0aW1lIHNjYWxlICp3aXRoaW4qIHRoZSBkYXkgcm93LlxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KGFwcHQsIGN1cnJlbnREYXlEYXRlLCAwLCAyNCwgdHJ1ZSk7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU29ydCBzZWdtZW50czogYWxsLWRheSBmaXJzdCwgdGhlbiBieSBzZWdtZW50IHN0YXJ0IHRpbWUgKHdoaWNoIGlzIGNsaXBwZWQgdG8gdGhlIGRheSlcbiAgICAgIGNvbnN0IHNvcnRlZFNlZ21lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IChzLmFsbERheSA/IDAgOiAxKSwgLy8gU2VnbWVudHMgbWFya2VkIGFzIGFsbERheSBmaXJzdFxuICAgICAgICAgIChzKSA9PiBzLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFNlZ21lbnQncyBzdGFydCB0aW1lIG9uIHRoaXMgZGF5XG4gICAgICAgICAgKHMpID0+IHMuZW5kRGF0ZS5nZXRUaW1lKCkgLSBzLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFNlZ21lbnQncyBkdXJhdGlvbiBvbiB0aGlzIGRheVxuICAgICAgICAgIChzKSA9PiBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxuICAgICAgICBdLFxuICAgICAgICBbJ2FzYycsICdhc2MnLCAnZGVzYycsICdhc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHZpc2libGVBcHBvaW50bWVudHMgPSBzb3J0ZWRTZWdtZW50cy5zbGljZSgwLCB0aGlzLk1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZKTtcbiAgICAgIGNvbnN0IGhpZGRlbkFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuXG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXlEYXRlLFxuICAgICAgICB2aXNpYmxlQXBwb2ludG1lbnRzOiB2aXNpYmxlQXBwb2ludG1lbnRzLFxuICAgICAgICBoaWRkZW5BcHBvaW50bWVudHM6IGhpZGRlbkFwcG9pbnRtZW50cyxcbiAgICAgICAgbW9yZUNvdW50OiBoaWRkZW5BcHBvaW50bWVudHMubGVuZ3RoLFxuICAgICAgICBob2xpZGF5OiB0aGlzLmlzSG9saWRheShjdXJyZW50RGF5RGF0ZSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICAvLyBkYXRlIGlzIHRoZSBzcGVjaWZpYyBkYXlcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAndGltZWxpbmUtbW9udGgnKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cbiAgaGFuZGxlRHJvcChlOiBBWERyb3Bab25lRHJvcEV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgLy8gZGF0ZSBpcyB0aGUgc3BlY2lmaWMgZGF5XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ3RpbWVsaW5lLW1vbnRoJyk7XG4gICAgY29uc3QgZHJvcHBlZEl0ZW0gPSBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChkcm9wcGVkSXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIHRoaXMub25BY3Rpb25DbGlja0ludGVybmFsLmVtaXQoe1xuICAgICAgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRvZGF5LCAnZGF5Jyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBpc0hvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGRhdGUpO1xuICAgIGlmIChpc0hvbGlkYXkpIHtcbiAgICAgIGNvbnN0IGdsb2JhbEhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maW5kKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKTtcbiAgICAgIGNvbnN0IGludGVybmFsSG9saWRheSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pbnRlcm5hbEhvbGlkYXkoKS5maW5kKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKTtcbiAgICAgIGNvbnN0IGhvbGlkYXkgPSBnbG9iYWxIb2xpZGF5IHx8IGludGVybmFsSG9saWRheTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICBnZXRTbG90SWQoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKVxuICAgICAgLmZpbmQoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5kYXRhc2V0WydzbG90SWQnXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYWdTdGFydFNsb3RJZC5zZXQoZHJvcExpc3RFbGVtZW50ID8gZHJvcExpc3RFbGVtZW50LmRhdGFzZXRbJ3Nsb3RJZCddIDogbnVsbCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC1jb250YWluZXJcIj5cbiAgQGZvciAoZGF5RGF0YSBvZiBwcm9jZXNzZWREYXlEYXRhKCk7IHRyYWNrIGRheURhdGEuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWhlYWRlclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImlzVG9kYXkoZGF5RGF0YS5kYXRlKVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtaGVhZGVyLWRhdGUtZGF5IHt7XG4gICAgICAgICAgICBkYXlEYXRhLmhvbGlkYXkuc3RhdGUgIT09ICdub25lJyA/IChkYXlEYXRhLmhvbGlkYXkuaG9saWRheT8uY3NzQ2xhc3MgPz8gJ2F4LXN0YXRlLWhvbGlkYXknKSA6ICcnXG4gICAgICAgICAgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgICBbYXhUb29sdGlwXT1cImRheURhdGEuaG9saWRheS5ob2xpZGF5Py50aXRsZSA/PyAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ2RkZGQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIEBpZiAoZGF5RGF0YS5ob2xpZGF5LnN0YXRlID09PSAnaG9saWRheScgJiYgZGF5RGF0YS5ob2xpZGF5LmhvbGlkYXkudGl0bGUpIHtcbiAgICAgICAgICAgICAgKCB7eyBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICAgIHt7IGRheURhdGEuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdERCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBheERyb3Bab25lXG4gICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWNvbnRlbnRcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF5RGF0YS5kYXRlLmZvcm1hdCgnWVlZWU1NREQnKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlEYXRhLnZpc2libGVBcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBzZWdtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcFRlbXBsYXRlKClcbiAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgIDogc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgPyBzZWdtZW50LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VnbWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC10aXRsZT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IHNlZ21lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICA8IS0tIERpc3BsYXkgc2VnbWVudCdzIHN0YXJ0L2VuZCB0aW1lcyBpZiBub3QgYWxsRGF5IGZvciB0aGlzIHNlZ21lbnQgLS0+XG4gICAgICAgICAgICAgIEBpZiAoIXNlZ21lbnQuYWxsRGF5KSB7XG4gICAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fSAtXG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGRheURhdGEubW9yZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgPGRpdiAjbW9yZUFwcG9pbnRtZW50cyBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1vdmVyZmxvdy1iYWRnZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgK3t7ICdAYWNvcmV4OmNvbW1vbi5nZW5lcmFsLm1vcmUtaXRlbXMnIHwgdHJhbnNsYXRlOiB7IHBhcmFtczogeyBudW1iZXI6IGRheURhdGEubW9yZUNvdW50IH0gfSB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwibW9yZUFwcG9pbnRtZW50c1wiIHBsYWNlbWVudD1cImJvdHRvbS1zdGFydFwiIHRyaWdnZXI9XCJjbGlja1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LW92ZXJsYXktcGFuZSBheC1zY2hlZHVsZXItcG9wb3ZlciBheC1zY2hlZHVsZXItbW9udGgtcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheURhdGEuaGlkZGVuQXBwb2ludG1lbnRzOyB0cmFjayBzZWdtZW50LmlkICsgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZW1wbGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlZ21lbnQuYWxsRGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VnbWVudC50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyknXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VnbWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxheC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IHNlZ21lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFzZWdtZW50LmFsbERheSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=","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, ...(ngDevMode ? [{ debugName: \"daysCount\" }] : []));\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.endDayHour = input.required(...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input.required(...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"daysDataForTimelineViews\" }] : []));\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 globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\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.1.3\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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-state-today]=\\\"isToday(daySlot.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day {{\\n daySlot.holiday.state !== 'none' ? (daySlot.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"tooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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-state-today]=\\\"isToday(daySlot.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day {{\\n daySlot.holiday.state !== 'none' ? (daySlot.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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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LE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7OEdBL0VVLHdDQUF3QztrR0FBeEMsd0NBQXdDLG0vREFGeEMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHdDQUF3QyxFQUFFLENBQUMsaURDdkM5RixzckVBNkNBLHdsRURQWSxtQ0FBbUMsbWRBQTJCLGtCQUFrQix3TUFBM0MsU0FBUyx5Q0FBRSxZQUFZOzsyRkFHM0Qsd0NBQXdDO2tCQVRwRCxTQUFTOytCQUNFLHNDQUFzQyxtQkFHL0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLG1DQUFtQyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsYUFDaEYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVywwQ0FBMEMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90IHtcbiAgZGF0ZTogQVhEYXRlVGltZTtcbiAgLy8gUGFzcyB0aGUgUkFXIG9yaWdpbmFsIGFwcG9pbnRtZW50cyB0aGF0ICpvdmVybGFwKiB3aXRoIHRoaXMgZGF5LlxuICAvLyBUaGUgY2hpbGQgdGltZWxpbmUtZGF5LXZpZXcgd2lsbCBoYW5kbGUgc2VnbWVudGF0aW9uLlxuICBvcmlnaW5hbEFwcG9pbnRtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW0FYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LCBBc3luY1BpcGUsIEFYRm9ybWF0UGlwZSwgQVhUb29sdGlwRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgZGF5c0NvdW50ID0gaW5wdXQoNyk7XG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICBkYXlzRGF0YUZvclRpbWVsaW5lVmlld3MgPSBjb21wdXRlZDxUaW1lbGluZU11bHRpRGF5RGF5U2xvdFtdPigoKSA9PiB7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGNvbnN0IG11bHRpVmlld1N0YXJ0RGF0ZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGNvbnN0IG51bWJlck9mRGF5cyA9IHRoaXMuZGF5c0NvdW50KCk7XG5cbiAgICBpZiAoIW11bHRpVmlld1N0YXJ0RGF0ZSB8fCAhYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZEYXlzOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlEYXRlID0gbXVsdGlWaWV3U3RhcnREYXRlLmFkZCgnZGF5JywgaSk7XG4gICAgICBjb25zdCBjdXJyZW50RGF5U3RhcnQgPSBjdXJyZW50RGF5RGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlFbmQgPSBjdXJyZW50RGF5RGF0ZS5lbmRPZignZGF5Jyk7IC8vIFVzZSBmdWxsIGRheSBmb3Igb3ZlcmxhcCBjaGVja1xuXG4gICAgICBjb25zdCBhcHBvaW50bWVudHNPdmVybGFwcGluZ1RoaXNEYXkgPSBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cy5maWx0ZXIoKGFwcHQpID0+IHtcbiAgICAgICAgaWYgKGFwcHQuYWxsRGF5KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFwcHRTdGFydCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgY29uc3QgYXBwdEVuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICAgIHJldHVybiBhcHB0U3RhcnQuY29tcGFyZShjdXJyZW50RGF5RW5kLCAnc2Vjb25kJykgPD0gMCAmJiBhcHB0RW5kLmNvbXBhcmUoY3VycmVudERheVN0YXJ0LCAnc2Vjb25kJykgPj0gMDtcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXlEYXRlLFxuICAgICAgICBob2xpZGF5OiB0aGlzLmlzSG9saWRheShjdXJyZW50RGF5RGF0ZSksXG4gICAgICAgIG9yaWdpbmFsQXBwb2ludG1lbnRzRm9yVGhpc0RheTogYXBwb2ludG1lbnRzT3ZlcmxhcHBpbmdUaGlzRGF5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBnbG9iYWxIb2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmluZCgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgICBjb25zdCBpbnRlcm5hbEhvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaW50ZXJuYWxIb2xpZGF5KCkuZmluZCgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgICBjb25zdCBob2xpZGF5ID0gZ2xvYmFsSG9saWRheSB8fCBpbnRlcm5hbEhvbGlkYXk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0ZTogJ2hvbGlkYXknLFxuICAgICAgICBob2xpZGF5LFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaXNXZWVrZW5kID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzV2Vla2VuZChkYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgIGlmIChpc1dlZWtlbmQpIHtcbiAgICAgIHJldHVybiB7IHN0YXRlOiAnd2Vla2VuZCcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3RhdGU6ICdub25lJyB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LWNvbnRhaW5lclwiPlxuICBAZm9yIChkYXlTbG90IG9mIGRheXNEYXRhRm9yVGltZWxpbmVWaWV3cygpOyB0cmFjayBkYXlTbG90LmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS1jb2x1bW5cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImlzVG9kYXkoZGF5U2xvdC5kYXRlKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5IHt7XG4gICAgICAgICAgZGF5U2xvdC5ob2xpZGF5LnN0YXRlICE9PSAnbm9uZScgPyAoZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXk/LmNzc0NsYXNzID8/ICdheC1zdGF0ZS1ob2xpZGF5JykgOiAnJ1xuICAgICAgICB9fVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwiZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXk/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, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\n // --- Constants ---\n this.GAP_PX = 1;\n this.BADGE_SPACE_REM = 2;\n // --- Component Inputs ---\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.endDayHour = input.required(...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input.required(...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"hoursArray\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"daysArray\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"totalBlocksPerViewDay\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"allDayAppointmentsPerDay\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"dayViewLayoutsByDay\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"visibleAppointmentsLayout\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"overflowBadgesWithData\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"processedAppointmentsForLayout\" }] : []));\n this.timedGridSegments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n }, ...(ngDevMode ? [{ debugName: \"timedGridSegments\" }] : []));\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 globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\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.1.3\", ngImport: i0, type: AXSchedulerWeekViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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 day.holiday.state !== 'none' ? (day.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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:calc(100% - var(--ax-comp-scheduler-basic-view-blocks-width));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-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot ax-popover{display:none}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: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"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\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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 day.holiday.state !== 'none' ? (day.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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:calc(100% - var(--ax-comp-scheduler-basic-view-blocks-width));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-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot ax-popover{display:none}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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QWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQ2MsVUFBVTtRQUN0QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDOzhHQTdiVSw0QkFBNEI7a0dBQTVCLDRCQUE0Qix5NkRBRjVCLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLGlEQzlEbEYsZ3NhQThSQSwrZ09ENU9JLE9BQU8sb0ZBQ1AsMkJBQTJCLHlMQUczQixrQkFBa0Isb1NBRWxCLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQixrQkFBa0IsNk1BQ2xCLHdCQUF3QixpRUFQeEIsU0FBUyx5Q0FDVCxnQkFBZ0IsNkNBRWhCLFlBQVk7OzJGQVNILDRCQUE0QjtrQkFyQnhDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsOEJBQThCLEVBQUUsQ0FBQzs4QkE2YmxFLFVBQVU7c0JBRHZCLFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBET0NVTUVOVCxcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFsbERheVNsb3REYXRhLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dCxcbiAgQVhTY2hlZHVsZXJPdmVyZmxvd0JhZGdlLFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG50eXBlIEFYU2NoZWR1bGVyR3JpZEJhZGdlSW5mbyA9IEFYU2NoZWR1bGVyT3ZlcmZsb3dCYWRnZSAmIHtcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXdlZWstdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci13ZWVrLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWFRyYW5zbGF0b3JQaXBlLFxuICAgIEFYUG9wb3ZlckNvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gIF0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlcldlZWtWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlcldlZWtWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICAvLyAtLS0gSW5qZWN0ZWQgU2VydmljZXMgJiBQcml2YXRlIFN0YXRlIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyAtLS0gQ29uc3RhbnRzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IEdBUF9QWCA9IDE7XG4gIHByaXZhdGUgcmVhZG9ubHkgQkFER0VfU1BBQ0VfUkVNID0gMjtcblxuICAvLyAtLS0gQ29tcG9uZW50IElucHV0cyAtLS1cbiAgcHVibGljIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIHB1YmxpYyBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgcHVibGljIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIHB1YmxpYyBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBwdWJsaWMgc3RhcnREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBwdWJsaWMgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHB1YmxpYyB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICAvLyAtLS0gQ29tcG9uZW50IE91dHB1dHMgKEludGVybmFsLCB0byBiZSBjYXVnaHQgYnkgdGhlIG1haW4gc2NoZWR1bGVyKSAtLS1cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vXG4gIC8vIFZJRVcgTU9ERUwgQ09NUFVUQVRJT05TIChmb3IgcmVuZGVyaW5nIHRoZSB0ZW1wbGF0ZSlcbiAgLy9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiBBWERhdGVUaW1lIG9iamVjdHMgZm9yIHRoZSBob3VycyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXcncyB0aW1lIHJ1bGVyLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgYEhIOm1tYCBsYWJlbHMgb24gdGhlIHNpZGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIGRheSBkYXRhIG9iamVjdHMgZm9yIHRoZSA3IGRheXMgaW4gdGhlIHZpZXcsIGluY2x1ZGluZyBob2xpZGF5IGluZm8uXG4gICAqIFRoaXMgaXMgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBkYXkgaGVhZGVycyAoZS5nLiwgXCJNb25kYXkgMTBcIikuXG4gICAqL1xuICBwcm90ZWN0ZWQgZGF5c0FycmF5ID0gY29tcHV0ZWQoXG4gICAgKCk6IHsgZGF0ZTogQVhEYXRlVGltZTsgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB9W10gPT4ge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgICBjb25zdCBkYXlzID0gW3sgZGF0ZTogdGltZSwgaG9saWRheTogdGhpcy5pc0hvbGlkYXkodGltZSkgfV07XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDw9IDY7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRpbWUuYWRkKCdkYXknLCBpbmRleCk7XG4gICAgICAgIGRheXMucHVzaCh7IGRhdGUsIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGRhdGUpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRheXM7XG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgMzAtbWludXRlIGJsb2NrcyB3aXRoaW4gdGhlIHZpc2libGUgaG91cnMgb2YgYSBzaW5nbGUgZGF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvdGFsQmxvY2tzUGVyVmlld0RheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgKGVuZEggLSBzdGFydEgpICogKDYwIC8gMzApKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogRmlsdGVycyBwcm9jZXNzZWQgc2VnbWVudHMgdG8gZ2V0IG9ubHkgdGhvc2UgZm9yIHRoZSBhbGwtZGF5IGhlYWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhbGxEYXlBcHBvaW50bWVudHNQZXJEYXkgPSBjb21wdXRlZCgoKTogQVhTY2hlZHVsZXJBbGxEYXlTbG90RGF0YVtdID0+IHtcbiAgICBjb25zdCBkYXlzSW5XZWVrID0gdGhpcy5kYXlzQXJyYXkoKS5tYXAoKGUpID0+IGUuZGF0ZSk7XG4gICAgY29uc3QgYWxsRGF5U2VnbWVudHMgPSB0aGlzLnByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCgpLmZpbHRlcigocykgPT4gcy5hbGxEYXkpO1xuXG4gICAgcmV0dXJuIGRheXNJbldlZWsubWFwKChkYXlEYXRlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRzRm9yVGhpc0RheSA9IGFsbERheVNlZ21lbnRzLmZpbHRlcigoc2VnbWVudCkgPT5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlZ21lbnQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpLnN0YXJ0T2YoJ2RheScpLmVxdWFsKGN1cnJlbnREYXlTdGFydCwgJ2RheScpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheTogZGF5RGF0ZSxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBvcmRlckJ5KGFwcG9pbnRtZW50c0ZvclRoaXNEYXksIFsnb3JpZ2luYWxTdGFydERhdGUnLCAndGl0bGUnXSwgWydhc2MnLCAnYXNjJ10pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvL1xuICAvLyBHUklEIExBWU9VVCAmIEJBREdFIExPR0lDIChUSEUgQ09SRSBGSVgpXG4gIC8vIFRoaXMgbG9naWMgZm9sbG93cyBhIHRocmVlLXN0ZXAgcHJvY2VzczpcbiAgLy8gMS4gYGRheVZpZXdMYXlvdXRzQnlEYXlgOiBDYWxjdWxhdGUgYSBmdWxsIG11bHRpLWNvbHVtbiBsYXlvdXQgZm9yIGVhY2ggZGF5LiBUaGlzIGlzIG91ciBcInNvdXJjZSBvZiB0cnV0aFwiLlxuICAvLyAyLiBgdmlzaWJsZUFwcG9pbnRtZW50c0xheW91dGA6IFJlbmRlciBPTkxZIHRoZSBmaXJzdCBjb2x1bW4gKGBjb2x1bW5JbmRleDogMGApIGZyb20gdGhlIHNvdXJjZSBvZiB0cnV0aC5cbiAgLy8gMy4gYG92ZXJmbG93QmFkZ2VzV2l0aERhdGFgOiBSZW5kZXIgYmFkZ2VzIGZvciBhbGwgb3RoZXIgY29sdW1ucyAoYGNvbHVtbkluZGV4ID4gMGApLlxuICAvL1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFtTVEVQIDEgLSBQcml2YXRlXSBDYWxjdWxhdGUgYSBmdWxsIG11bHRpLWNvbHVtbiBsYXlvdXQgZm9yIGVhY2ggZGF5LCBhcyBpZiBpdCB3ZXJlIGEgRGF5IFZpZXcuXG4gICAqIFRoaXMgYmVjb21lcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3Igd2hhdCBvdmVybGFwcyB3aXRoIHdoYXQuXG4gICAqL1xuICBwcml2YXRlIGRheVZpZXdMYXlvdXRzQnlEYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0c0J5RGF5ID0gbmV3IE1hcDxudW1iZXIsIE1hcDxhbnksIEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQ+PigpO1xuICAgIGNvbnN0IGFsbFNlZ21lbnRzID0gdGhpcy50aW1lZEdyaWRTZWdtZW50cygpO1xuICAgIGNvbnN0IHZpZXdTdGFydERhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcblxuICAgIGZvciAobGV0IGRheUluZGV4ID0gMDsgZGF5SW5kZXggPCA3OyBkYXlJbmRleCsrKSB7XG4gICAgICBjb25zdCBkYXlEYXRlID0gdmlld1N0YXJ0RGF0ZS5hZGQoJ2RheScsIGRheUluZGV4KTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheSA9IGFsbFNlZ21lbnRzLmZpbHRlcigoc2VnKSA9PlxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnLnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKS5zdGFydE9mKCdkYXknKS5lcXVhbChkYXlEYXRlLnN0YXJ0T2YoJ2RheScpLCAnZGF5JyksXG4gICAgICApO1xuICAgICAgaWYgKHNlZ21lbnRzRm9yVGhpc0RheS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjb25jdXJyZW5jeUluZm9NYXAgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlRGF5Vmlld0NvbmN1cnJlbmN5SW5mbyhcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBkYXlEYXRlLFxuICAgICAgICBzdGFydEgsXG4gICAgICAgIGVuZEgsXG4gICAgICApO1xuICAgICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbKGUpID0+IGUuc3RhcnREYXRlLmdldFRpbWUoKSwgKGUpID0+IGUub3JpZ2luYWxFbmREYXRlLmdldFRpbWUoKSAtIGUub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpXSxcbiAgICAgICAgWydhc2MnLCAnZGVzYyddLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF5TGF5b3V0cyA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0PigpO1xuICAgICAgY29uc3QgY29sdW1uc0RhdGE6IHsgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdIH1bXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCBvZiBzb3J0ZWRBcHBvaW50bWVudHMpIHtcbiAgICAgICAgbGV0IGFzc2lnbmVkQ29sID0gLTE7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyA7IGMrKykge1xuICAgICAgICAgIGlmICghY29sdW1uc0RhdGFbY10pIGNvbHVtbnNEYXRhW2NdID0geyBhcHBvaW50bWVudHM6IFtdIH07XG4gICAgICAgICAgbGV0IGNvbmZsaWN0ID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChjb25zdCBwbGFjZWRTZWdtZW50IG9mIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NoZWR1bGVyU2VydmljZS5kb0FwcG9pbnRtZW50c092ZXJsYXAoYXBwb2ludG1lbnRTZWdtZW50LCBwbGFjZWRTZWdtZW50KSkge1xuICAgICAgICAgICAgICBjb25mbGljdCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWNvbmZsaWN0KSB7XG4gICAgICAgICAgICBhc3NpZ25lZENvbCA9IGM7XG4gICAgICAgICAgICBjb2x1bW5zRGF0YVtjXS5hcHBvaW50bWVudHMucHVzaChhcHBvaW50bWVudFNlZ21lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmN1cnJlbmN5SW5mbyA9IGNvbmN1cnJlbmN5SW5mb01hcC5nZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkKTtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQ29scyA9IGNvbmN1cnJlbmN5SW5mbyA/IGNvbmN1cnJlbmN5SW5mby5lZmZlY3RpdmVUb3RhbENvbHVtbnMgOiAxO1xuICAgICAgICBkYXlMYXlvdXRzLnNldChhcHBvaW50bWVudFNlZ21lbnQuaWQsIHsgY29sdW1uSW5kZXg6IGFzc2lnbmVkQ29sLCBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGVmZmVjdGl2ZUNvbHMgfSk7XG4gICAgICB9XG4gICAgICBsYXlvdXRzQnlEYXkuc2V0KGRheUluZGV4LCBkYXlMYXlvdXRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dHNCeURheTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogW1NURVAgMl0gRnJvbSB0aGUgZnVsbCBsYXlvdXQsIHNlbGVjdCBPTkxZIGFwcG9pbnRtZW50cyBpbiB0aGUgZmlyc3QgY29sdW1uIChgY29sdW1uSW5kZXg6IDBgKVxuICAgKiB0byBiZSB2aXNpYmxlLiBDYWxjdWxhdGUgdGhlaXIgd2lkdGggYmFzZWQgb24gd2hldGhlciB0aGV5IGhhdmUgc2libGluZ3MgaW4gb3RoZXIgY29sdW1ucy5cbiAgICovXG4gIHByb3RlY3RlZCB2aXNpYmxlQXBwb2ludG1lbnRzTGF5b3V0ID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMYXlvdXRbXSA9PiB7XG4gICAgY29uc3QgZmluYWxMYXlvdXRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0W10gPSBbXTtcbiAgICBjb25zdCBsYXlvdXRzQnlEYXkgPSB0aGlzLmRheVZpZXdMYXlvdXRzQnlEYXkoKTtcbiAgICBjb25zdCBhbGxTZWdtZW50cyA9IHRoaXMudGltZWRHcmlkU2VnbWVudHMoKTtcbiAgICBjb25zdCBibG9ja0hlaWdodEV4cHIgPSBgdmFyKC0tYXgtY29tcC1zY2hlZHVsZXItYmFzaWMtdmlldy1ibG9ja3MtaGVpZ2h0LCAzMHB4KWA7XG4gICAgY29uc3QgTiA9IDc7XG5cbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsU2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IGFwcHRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IE1hdGguZmxvb3IoXG4gICAgICAgIChhcHB0U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmRhdGUuZ2V0VGltZSgpIC0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5JykuZGF0ZS5nZXRUaW1lKCkpIC9cbiAgICAgICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuTUlMTElTRUNPTkRTX1BFUl9EQVksXG4gICAgICApO1xuICAgICAgaWYgKGRheUluZGV4IDwgMCB8fCBkYXlJbmRleCA+PSBOKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgbGF5b3V0SW5mbyA9IGxheW91dHNCeURheS5nZXQoZGF5SW5kZXgpPy5nZXQoYXBwdC5pZCk7XG4gICAgICBpZiAoIWxheW91dEluZm8gfHwgbGF5b3V0SW5mby5jb2x1bW5JbmRleCAhPT0gMCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IGFwcHRTdGFydERhdGUuaG91ciAqIDYwICsgYXBwdFN0YXJ0RGF0ZS5taW51dGU7XG4gICAgICBjb25zdCBzdGFydEJsb2NrT2Zmc2V0ID0gc3RhcnRNaW51dGVzIC0gdGhpcy5zdGFydERheUhvdXIoKSAqIDYwO1xuICAgICAgY29uc3QgbGF5b3V0VG9wID0gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtzdGFydEJsb2NrT2Zmc2V0IC8gMzB9ICsgMXB4KWA7XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5jYWxjdWxhdGVEdXJhdGlvbkluTWludXRlcyhhcHB0KTtcbiAgICAgIGNvbnN0IGxheW91dEhlaWdodCA9IGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7ZHVyYXRpb25NaW51dGVzIC8gMzB9IC0gJHt0aGlzLkdBUF9QWH1weClgO1xuXG4gICAgICBjb25zdCBoYXNIaWRkZW5TaWJsaW5ncyA9IGxheW91dEluZm8uZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMTtcbiAgICAgIGNvbnN0IGxheW91dFdpZHRoID0gaGFzSGlkZGVuU2libGluZ3NcbiAgICAgICAgPyBgY2FsYygxMDAlIC8gJHtOfSAtICR7dGhpcy5CQURHRV9TUEFDRV9SRU0gKyAwLjV9cmVtKWBcbiAgICAgICAgOiBgY2FsYygxMDAlIC8gJHtOfSlgO1xuXG4gICAgICBmaW5hbExheW91dHMucHVzaCh7XG4gICAgICAgIGFwcG9pbnRtZW50OiBhcHB0LFxuICAgICAgICBsYXlvdXRUb3AsXG4gICAgICAgIGxheW91dEhlaWdodCxcbiAgICAgICAgbGF5b3V0TGVmdDogYGNhbGMoJHtkYXlJbmRleCAqICgxMDAgLyBOKX0lKWAsXG4gICAgICAgIGxheW91dFdpZHRoLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmaW5hbExheW91dHM7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIFtTVEVQIDNdIENyZWF0ZSBiYWRnZXMgZm9yIGFsbCBhcHBvaW50bWVudHMgTk9UIGluIHRoZSBmaXJzdCBjb2x1bW4gKGBjb2x1bW5JbmRleCA+IDBgKS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVyZmxvd0JhZGdlc1dpdGhEYXRhID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyR3JpZEJhZGdlSW5mb1tdID0+IHtcbiAgICBjb25zdCBiYWRnZXNJbmZvOiBBWFNjaGVkdWxlckdyaWRCYWRnZUluZm9bXSA9IFtdO1xuICAgIGNvbnN0IGxheW91dHNCeURheSA9IHRoaXMuZGF5Vmlld0xheW91dHNCeURheSgpO1xuICAgIGNvbnN0IGFsbFRpbWVkU2VnbWVudHMgPSB0aGlzLnRpbWVkR3JpZFNlZ21lbnRzKCk7XG4gICAgY29uc3QgYmxvY2tIZWlnaHRFeHByID0gYHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCwgMzBweClgO1xuICAgIGNvbnN0IE4gPSA3O1xuXG4gICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gYWxsVGltZWRTZWdtZW50cy5maWx0ZXIoKGFwcHQpID0+IHtcbiAgICAgIGNvbnN0IGFwcHRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IE1hdGguZmxvb3IoXG4gICAgICAgIChhcHB0U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmRhdGUuZ2V0VGltZSgpIC0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5JykuZGF0ZS5nZXRUaW1lKCkpIC9cbiAgICAgICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuTUlMTElTRUNPTkRTX1BFUl9EQVksXG4gICAgICApO1xuICAgICAgY29uc3QgbGF5b3V0SW5mbyA9IGxheW91dHNCeURheS5nZXQoZGF5SW5kZXgpPy5nZXQoYXBwdC5pZCk7XG4gICAgICByZXR1cm4gbGF5b3V0SW5mbyAmJiBsYXlvdXRJbmZvLmNvbHVtbkluZGV4ID4gMDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGdyb3VwZWRIaWRkZW4gPSBuZXcgTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgaGlkZGVuQXBwb2ludG1lbnRzKSB7XG4gICAgICBjb25zdCBhcHB0U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgYXBwdFN0YXJ0RGF0ZSxcbiAgICAgICAgdGhpcy5kYXRlKCksXG4gICAgICAgIHRoaXMuc3RhcnREYXlIb3VyKCksXG4gICAgICAgIHRoaXMuZW5kRGF5SG91cigpLFxuICAgICAgICA3LFxuICAgICAgKTtcbiAgICAgIGlmICghc3RhcnRJbmZvKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qga2V5ID0gYCR7c3RhcnRJbmZvLmRheUluZGV4fS0ke3N0YXJ0SW5mby5ibG9ja0luZGV4fWA7XG4gICAgICBpZiAoIWdyb3VwZWRIaWRkZW4uaGFzKGtleSkpIGdyb3VwZWRIaWRkZW4uc2V0KGtleSwgW10pO1xuICAgICAgZ3JvdXBlZEhpZGRlbi5nZXQoa2V5KS5wdXNoKGFwcHQpO1xuICAgIH1cblxuICAgIGdyb3VwZWRIaWRkZW4uZm9yRWFjaCgoZ3JvdXAsIGtleSkgPT4ge1xuICAgICAgY29uc3QgW2RheUluZGV4U3RyLCBibG9ja0luZGV4U3RyXSA9IGtleS5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSBwYXJzZUludChkYXlJbmRleFN0cik7XG4gICAgICBjb25zdCBibG9ja0luZGV4ID0gcGFyc2VJbnQoYmxvY2tJbmRleFN0cik7XG5cbiAgICAgIGNvbnN0IGJhZGdlVG9wID0gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtibG9ja0luZGV4fSArIDAuNzVyZW0pYDtcbiAgICAgIGNvbnN0IGJhZGdlTGVmdCA9IGBjYWxjKCR7ZGF5SW5kZXggKiAoMTAwIC8gTil9JSArICgxMDAlIC8gJHtOfSkgLSAke3RoaXMuQkFER0VfU1BBQ0VfUkVNfXJlbSlgO1xuXG4gICAgICBiYWRnZXNJbmZvLnB1c2goe1xuICAgICAgICBrZXk6IGBiYWRnZS0ke2tleX1gLFxuICAgICAgICBjb3VudDogZ3JvdXAubGVuZ3RoLFxuICAgICAgICBiYWRnZVRvcCxcbiAgICAgICAgYmFkZ2VMZWZ0LFxuICAgICAgICBoaWRkZW5BcHBvaW50bWVudHM6IGdyb3VwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmFkZ2VzSW5mbztcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvL1xuICAvLyBFVkVOVCBIQU5ETEVSUyAmIFVUSUxJVFkgTUVUSE9EU1xuICAvL1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrLCBkYmxjbGljaywgYW5kIGNvbnRleHRtZW51IGV2ZW50cyBvbiBhbiBhcHBvaW50bWVudCBhbmQgZW1pdHMgdGhlbSB0byB0aGUgcGFyZW50LlxuICAgKiBAcGFyYW0gbW91c2VFdmVudCBUaGUgbmF0aXZlIERPTSBldmVudC5cbiAgICogQHBhcmFtIGFwcG9pbnRtZW50U2VnbWVudCBUaGUgYXBwb2ludG1lbnQgZGF0YSBzZWdtZW50IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRTZWdtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjbGljaywgZGJsY2xpY2ssIGFuZCBjb250ZXh0bWVudSBldmVudHMgb24gYW4gZW1wdHkgdGltZSBzbG90IGFuZCBlbWl0cyB0aGVtIHRvIHRoZSBwYXJlbnQuXG4gICAqIEBwYXJhbSBtb3VzZUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50LlxuICAgKiBAcGFyYW0gaG91ciBUaGUgc3RhcnRpbmcgaG91ciBvZiB0aGUgc2xvdC5cbiAgICogQHBhcmFtIGRheSBUaGUgZGF5IG9mIHRoZSBzbG90LlxuICAgKiBAcGFyYW0gbWludXRlSW5kZXggVGhlIGhhbGYtaG91ciBpbmRleCAoMCBvciAxKS5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZVNpbmdsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBob3VyOiBBWERhdGVUaW1lLCBkYXk6IEFYRGF0ZVRpbWUsIG1pbnV0ZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXkuc2V0KCdob3VyJywgaG91ci5ob3VyKS5zZXQoJ21pbnV0ZScsIG1pbnV0ZUluZGV4ICogMzApO1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3dlZWsnKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBpbnRlcmFjdGlvbiBldmVudHMgb24gdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHBhcmFtIG1vdXNlRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnQuXG4gICAqIEBwYXJhbSBkYXkgVGhlIGNvcnJlc3BvbmRpbmcgZGF5IGZvciB0aGUgYWxsLWRheSBzbG90LlxuICAgKiBAcHVibGljXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlQWxsRGF5U2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRheTogQVhEYXRlVGltZSk6IHZvaWQge1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGU6IGRheS5zdGFydE9mKCdkYXknKSwgZW5kRGF0ZTogZGF5LmVuZE9mKCdkYXknKSwgdmlldzogJ3dlZWsnIGFzIGNvbnN0IH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnc2xvdCcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGRyb3BwaW5nIGFuIGFwcG9pbnRtZW50IG9udG8gdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHBhcmFtIGUgVGhlIGRyb3AgZXZlbnQgZnJvbSB0aGUgQ0RLLlxuICAgKiBAcGFyYW0gZGF5IFRoZSBjb3JyZXNwb25kaW5nIGRheSBmb3IgdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFsbERheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF5OiBBWERhdGVUaW1lKTogdm9pZCB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB7IHN0YXJ0RGF0ZTogZGF5LnN0YXJ0T2YoJ2RheScpLCBlbmREYXRlOiBkYXkuZW5kT2YoJ2RheScpLCB2aWV3OiAnd2VlaycgYXMgY29uc3QgfTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoXG4gICAgICBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICAgICk7XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZHJvcHBpbmcgYW4gYXBwb2ludG1lbnQgb250byBhIHRpbWVkIGdyaWQgc2xvdC5cbiAgICogQHBhcmFtIGUgVGhlIGRyb3AgZXZlbnQgZnJvbSB0aGUgQ0RLLlxuICAgKiBAcGFyYW0gaG91ciBUaGUgc3RhcnRpbmcgaG91ciBvZiB0aGUgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSBkYXkgVGhlIGRheSBvZiB0aGUgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSBtaW51dGVJbmRleCBUaGUgaGFsZi1ob3VyIGluZGV4ICgwIG9yIDEpIG9mIHRoZSBkcm9wIHRhcmdldC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZVNpbmdsZURheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgaG91cjogQVhEYXRlVGltZSwgZGF5OiBBWERhdGVUaW1lLCBtaW51dGVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5LnNldCgnaG91cicsIGhvdXIuaG91cikuc2V0KCdtaW51dGUnLCBtaW51dGVJbmRleCAqIDMwKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICd3ZWVrJyk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KFxuICAgICAgZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgICApO1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrcyBvbiB0aGUgXCJtb3JlXCIgYWN0aW9uIGljb24gb24gYW4gYXBwb2ludG1lbnQuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgbmF0aXZlIG1vdXNlIGV2ZW50LlxuICAgKiBAcGFyYW0gYXBwb2ludG1lbnRJdGVtIFRoZSBhcHBvaW50bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGFjdGlvbi5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGRhdGUgaXMgdGhlIGN1cnJlbnQgZGF5LlxuICAgKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBkYXRlIGlzIHRvZGF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKSwgJ2RheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZGF0ZSBpcyBhIGhvbGlkYXkgb3Igd2Vla2VuZC5cbiAgICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSBkYXkncyBzdGF0dXMgKGhvbGlkYXksIHdlZWtlbmQsIG9yIG5vbmUpLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBnbG9iYWxIb2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmluZCgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgY29uc3QgaW50ZXJuYWxIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmludGVybmFsSG9saWRheSgpLmZpbmQoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgIGNvbnN0IGhvbGlkYXkgPSBnbG9iYWxIb2xpZGF5IHx8IGludGVybmFsSG9saWRheTtcbiAgICBpZiAoaG9saWRheSkgcmV0dXJuIHsgc3RhdGU6ICdob2xpZGF5JywgaG9saWRheSB9O1xuICAgIGlmICh0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSkpIHJldHVybiB7IHN0YXRlOiAnd2Vla2VuZCcgfTtcbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBDYXB0dXJlcyB0aGUgZGF0YS1zbG90LWlkIGF0dHJpYnV0ZSB3aGVuIGEgZHJhZyBvcGVyYXRpb24gc3RhcnRzIG9uIGFuIGFwcG9pbnRtZW50LlxuICAgKiBAcGFyYW0gZSBUaGUgcG9pbnRlciBldmVudCB0aGF0IGluaXRpYXRlcyB0aGUgZHJhZy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRTbG90SWQoZTogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKVxuICAgICAgLmZpbmQoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0WydzbG90SWQnXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYWdTdGFydFNsb3RJZC5zZXQoZHJvcExpc3RFbGVtZW50ID8gZHJvcExpc3RFbGVtZW50LmRhdGFzZXRbJ3Nsb3RJZCddIDogbnVsbCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JylcbiAgcHJvdGVjdGVkIGdldCBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cblxuICAvLyAtLS0gUHJpdmF0ZSBEYXRhIFByb2Nlc3NpbmcgLS0tXG4gIHByaXZhdGUgcHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0ID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEYXlzID0gdGhpcy5kYXlzQXJyYXkoKS5tYXAoKGUpID0+IGUuZGF0ZSk7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGlmICh2aWV3RGF5cy5sZW5ndGggPT09IDAgfHwgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICBjb25zdCBhbGxTZWdtZW50c0luVmlldzogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXkgb2Ygdmlld0RheXMpIHtcbiAgICAgIGZvciAoY29uc3QgYXBwdCBvZiBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KGFwcHQsIGRheS5zdGFydE9mKCdkYXknKSwgc3RhcnRILCBlbmRIKTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIGFsbFNlZ21lbnRzSW5WaWV3LnB1c2goc2VnbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHVuaXF1ZVNlZ21lbnRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50PigpO1xuICAgIGFsbFNlZ21lbnRzSW5WaWV3LmZvckVhY2goKHNlZykgPT4ge1xuICAgICAgY29uc3QgbWFwS2V5ID0gYCR7c2VnLmlkfS0ke3NlZy5zdGFydERhdGUuZ2V0VGltZSgpfS0ke3NlZy5lbmREYXRlLmdldFRpbWUoKX1gO1xuICAgICAgaWYgKCF1bmlxdWVTZWdtZW50c01hcC5oYXMobWFwS2V5KSkgdW5pcXVlU2VnbWVudHNNYXAuc2V0KG1hcEtleSwgc2VnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh1bmlxdWVTZWdtZW50c01hcC52YWx1ZXMoKSk7XG4gIH0pO1xuXG4gIHByaXZhdGUgdGltZWRHcmlkU2VnbWVudHMgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0KCk/LmZpbHRlcigoc2VnbWVudCkgPT4gIXNlZ21lbnQuYWxsRGF5KSA/PyBbXTtcbiAgfSk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF5c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItdGFibGVcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgIEBmb3IgKGRheSBvZiBkYXlzQXJyYXkoKTsgdHJhY2sgZGF5LmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheS5kYXRlKVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXkge3tcbiAgICAgICAgICAgIGRheS5ob2xpZGF5LnN0YXRlICE9PSAnbm9uZScgPyAoZGF5LmhvbGlkYXkuaG9saWRheT8uY3NzQ2xhc3MgPz8gJ2F4LXN0YXRlLWhvbGlkYXknKSA6ICcnXG4gICAgICAgICAgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5LWNoYXIgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCJcbiAgICAgICAgICAgIFtheFRvb2x0aXBdPVwiZGF5LmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBkYXkuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICBAaWYgKGRheS5ob2xpZGF5LnN0YXRlID09PSAnaG9saWRheScgJiYgZGF5LmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgICAoIHt7IGRheS5ob2xpZGF5LmhvbGlkYXkudGl0bGUgfX0gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICAgIHt7IGRheS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF5c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItdGFibGVcIj57eyAnQGFjb3JleDpkYXRlVGltZS5kdXJhdGlvbi5hbGwtZGF5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9kaXY+XG4gICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlXCI+XG4gICAgICBAZm9yIChzbG90RGF0YSBvZiBhbGxEYXlBcHBvaW50bWVudHNQZXJEYXkoKTsgdHJhY2sgc2xvdERhdGEuZGF5LmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgI3pvbmUyPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZTIuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZUFsbERheURyb3AoJGV2ZW50LCBzbG90RGF0YS5kYXkpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hbGwtZGF5LXNsb3RcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5kYXkpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudCwgc2xvdERhdGEuZGF5KVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChzbG90RGF0YS5hcHBvaW50bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNsb3REYXRhLmFwcG9pbnRtZW50c1swXVwiXG4gICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNsb3REYXRhLmFwcG9pbnRtZW50c1swXS5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0udGl0bGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1oZWFkZXItd2Vlay1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJzbG90RGF0YS5hcHBvaW50bWVudHMubGVuZ3RoID4gMSA/ICdjYWxjKDEwMCUgLSAycmVtKScgOiAnMTAwJSdcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgICAgICBgYXgtc2NoZWR1bGVyLSR7c2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC10aXRsZT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IHNsb3REYXRhLmFwcG9pbnRtZW50c1swXS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2xvdERhdGEuYXBwb2ludG1lbnRzWzBdKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChzbG90RGF0YS5hcHBvaW50bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjbW9yZUFwcG9pbnRtZW50c1xuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hcHBvaW50bWVudC1iYWRnZVwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCInMS41cmVtJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwiJ25vbmUnXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgc2xvdERhdGEuYXBwb2ludG1lbnRzWzFdLmNzc0NsYXNzID8/XG4gICAgICAgICAgICAgICAgYGF4LXNjaGVkdWxlci0ke3Nsb3REYXRhLmFwcG9pbnRtZW50c1sxXS5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgK3t7IHNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwibW9yZUFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyXCIgW2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIiBheERyb3Bab25lPlxuICAgICAgICAgICAgICAgIEBmb3IgKGFwcG9pbnRtZW50IG9mIHNsb3REYXRhLmFwcG9pbnRtZW50czsgdHJhY2sgYXBwb2ludG1lbnQuaWQ7IGxldCBmaXJzdCA9ICRmaXJzdCkge1xuICAgICAgICAgICAgICAgICAgQGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cImFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhcHBvaW50bWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyAnJyA6IGFwcG9pbnRtZW50LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhcHBvaW50bWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7YXBwb2ludG1lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxheC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstdGltZS1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLXRpbWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdj5cbiAgICAgICAge3sgdGltZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstdGFibGUtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWFwcG9pbnRtZW50LWNvbnRhaW5lclwiPlxuICAgICAgQGZvciAoYXBwdCBvZiB2aXNpYmxlQXBwb2ludG1lbnRzTGF5b3V0KCk7IHRyYWNrIGFwcHQuYXBwb2ludG1lbnQuaWQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwdC5hcHBvaW50bWVudFwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcHQuYXBwb2ludG1lbnQucmVhZG9ubHkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICBbdGl0bGVdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyAnJyA6IGFwcHQuYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJhcHB0LmxheW91dFdpZHRoXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImFwcHQubGF5b3V0SGVpZ2h0XCJcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtYmxvY2stc3RhcnRdPVwiYXBwdC5sYXlvdXRUb3BcIlxuICAgICAgICAgIFtzdHlsZS5pbnNldC1pbmxpbmUtc3RhcnRdPVwiYXBwdC5sYXlvdXRMZWZ0XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJhcHB0LmFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHB0LmFwcG9pbnRtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcHQuYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIGFwcHQuYXBwb2ludG1lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICAtXG4gICAgICAgICAgICB7eyBhcHB0LmFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIE92ZXJmbG93IEJhZGdlcyB3aXRoIFBvcG92ZXJzIC0tPlxuICAgICAgQGZvciAoYmFkZ2Ugb2Ygb3ZlcmZsb3dCYWRnZXNXaXRoRGF0YSgpOyB0cmFjayBiYWRnZS5rZXkpIHtcbiAgICAgICAgPCEtLSBXcmFwIGJhZGdlIGFuZCBwb3BvdmVyIGZvciB0YXJnZXRpbmcgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYmFkZ2Utd3JhcHBlclwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWJsb2NrLXN0YXJ0XT1cImJhZGdlLmJhZGdlVG9wXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImJhZGdlLmJhZGdlTGVmdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIFRoZSBCYWRnZSBpdHNlbGYgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2FjdGlvbkJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYXBwb2ludG1lbnQtYmFkZ2VcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgIGJhZGdlLmhpZGRlbkFwcG9pbnRtZW50c1swXS5jc3NDbGFzcyA/P1xuICAgICAgICAgICAgICBgYXgtc2NoZWR1bGVyLSR7YmFkZ2UuaGlkZGVuQXBwb2ludG1lbnRzWzBdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAre3sgYmFkZ2UuY291bnQgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFRoZSBQb3BvdmVyIC0tPlxuICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwiYWN0aW9uQnV0dG9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyXCIgYXhEcm9wWm9uZT5cbiAgICAgICAgICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2YgYmFkZ2UuaGlkZGVuQXBwb2ludG1lbnRzOyB0cmFjayBhcHBvaW50bWVudC5pZCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJhcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhcHBvaW50bWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhcHBvaW50bWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7YXBwb2ludG1lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcG9pbnRtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICBhcHBvaW50bWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgYXBwb2ludG1lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgPHRhYmxlIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtib3JkZXJdPVwiMVwiPlxuICAgICAgPHRib2R5PlxuICAgICAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGRheSBvZiBkYXlzQXJyYXkoKTsgdHJhY2sgZGF5LmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgICAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlU2luZ2xlRGF5RHJvcCgkZXZlbnQsIHRpbWUsIGRheS5kYXRlLCAwKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUsIGRheS5kYXRlLCAwKVwiXG4gICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUsIGRheS5kYXRlLCAwKVwiXG4gICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUsIGRheS5kYXRlLCAwKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1zbG90LWlkXT1cImRheS5kYXRlLmZvcm1hdCgnWVlZWU1NREQnKSArICctJyArIHRpbWUuZm9ybWF0KCdISG1tJylcIlxuICAgICAgICAgICAgICA+PC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGRheSBvZiBkYXlzQXJyYXkoKTsgdHJhY2sgZGF5LmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICAgICAgICN6b25lMj1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUyLmlzSG92ZXJlZCgpXCJcbiAgICAgICAgICAgICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVTaW5nbGVEYXlEcm9wKCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSwgZGF5LmRhdGUsIDEpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF5LmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpICsgJy0nICsgdGltZS5hZGQoJ21pbnV0ZScsIDMwKS5mb3JtYXQoJ0hIbW0nKVwiXG4gICAgICAgICAgICAgID48L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==","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, ...(ngDevMode ? [{ debugName: \"viewModeSelectbox\" }] : []));\n this.calendarPopover = viewChild('calendarPopover', ...(ngDevMode ? [{ debugName: \"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(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.calendarType = linkedSignal(() => this.calendar() ?? this.localeService.activeProfile().calendar.system);\n this.startingDate = input(new Date(), ...(ngDevMode ? [{ debugName: \"startingDate\" }] : []));\n this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'));\n this._appointments = signal([], ...(ngDevMode ? [{ debugName: \"_appointments\" }] : []));\n this.appointments = this._appointments.asReadonly();\n this.rtl = signal(false, ...(ngDevMode ? [{ debugName: \"rtl\" }] : []));\n this.isFullScreen = signal(false, ...(ngDevMode ? [{ debugName: \"isFullScreen\" }] : []));\n this.viewsDataSource = signal([], ...(ngDevMode ? [{ debugName: \"viewsDataSource\" }] : []));\n this.prevDate = signal(this.calendarService.create(new Date(), this.calendarType()), ...(ngDevMode ? [{ debugName: \"prevDate\" }] : []));\n this.endDayHour = input(24, ...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input(8, ...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.hasHeader = input(true, ...(ngDevMode ? [{ debugName: \"hasHeader\" }] : []));\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.allowFullScreen = input(true, ...(ngDevMode ? [{ debugName: \"allowFullScreen\" }] : []));\n this.multiDayViewDaysCount = input(7, ...(ngDevMode ? [{ debugName: \"multiDayViewDaysCount\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dataSource = input([], ...(ngDevMode ? [{ debugName: \"dataSource\" }] : []));\n this.holidays = input(...(ngDevMode ? [undefined, { debugName: \"holidays\" }] : []));\n this.firstDayOfWeek = input('sunday', ...(ngDevMode ? [{ debugName: \"firstDayOfWeek\" }] : []));\n this.views = input([\n 'day',\n 'week',\n 'month',\n 'timeline-day',\n 'timeline-multi-day',\n 'timeline-month',\n 'agenda',\n ], ...(ngDevMode ? [{ debugName: \"views\" }] : []));\n this.selectedView = model(this.views()[0], ...(ngDevMode ? [{ debugName: \"selectedView\" }] : []));\n this.prevView = signal(this.selectedView(), ...(ngDevMode ? [{ debugName: \"prevView\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"#appointmentEffect\" }] : []));\n this.#holidayEffect = effect(() => {\n const func = this.holidays();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n this.schedulerService.internalHoliday.set(func(range));\n }, ...(ngDevMode ? [{ debugName: \"#holidayEffect\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"currentDateText\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"calendarDepth\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"mappedAppointments\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"range\" }] : []));\n this.#rangeChangedEffect = effect(() => {\n this.onRangeChanged.emit(this.range());\n }, ...(ngDevMode ? [{ debugName: \"#rangeChangedEffect\" }] : []));\n this.#viewChangedEffect = effect(() => {\n const view = this.selectedView();\n untracked(() => {\n this.handleViewChanged(this.prevView(), view);\n });\n }, ...(ngDevMode ? [{ debugName: \"#viewChangedEffect\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"viewAppointments\" }] : []));\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 #holidayEffect;\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.1.3\", ngImport: i0, type: AXSchedulerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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 }, holidays: { classPropertyName: \"holidays\", publicName: \"holidays\", 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]=\\\"'200px'\\\"\\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 [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-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: [\"width\", \"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.1.3\", 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]=\\\"'200px'\\\"\\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 [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-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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXVCLFdBQVcsRUFBMEIsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVB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Qjs7MkZBSXJCLG9CQUFvQjtrQkF4QmhDLFNBQVM7K0JBQ0UsY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLFdBQVc7d0JBQ1gsb0JBQW9CO3dCQUNwQix3QkFBd0I7d0JBQ3hCLGlCQUFpQjt3QkFDakIsT0FBTzt3QkFDUCxrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsMkJBQTJCO3dCQUMzQiw0QkFBNEI7d0JBQzVCLDZCQUE2Qjt3QkFDN0IsbUNBQW1DO3dCQUNuQyx3Q0FBd0M7d0JBQ3hDLHFDQUFxQzt3QkFDckMsOEJBQThCO3FCQUMvQixhQUNVLENBQUMsY0FBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLHNCQUFzQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgQVhWYWx1ZUNoYW5nZWRFdmVudCwgTlhDb21wb25lbnQsIE5YRXZlbnQsIE5YTmF0aXZlRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jYWxlbmRhcic7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFNlbGVjdEJveENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhIdG1sVXRpbCwgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbGlua2VkU2lnbmFsLFxuICBtb2RlbCxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICB1bnRyYWNrZWQsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBWERheU9mV2Vla05hbWUsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnREYXRhU291cmNlLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyLFxuICBBWFNjaGVkdWxlckRhdGVSYW5nZSxcbiAgQVhTY2hlZHVsZXJWaWV3LFxufSBmcm9tICcuL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvYWdlbmRhL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy9kYXkvc2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvbW9udGgvc2NoZWR1bGVyLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1kYXkvc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi92aWV3cy90aW1lbGluZS1tb250aC9zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtbXVsdGktZGF5L3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3Mvd2Vlay9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQgZXh0ZW5kcyBOWE5hdGl2ZUV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50LCBNb3VzZUV2ZW50PiB7XG4gIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50IGV4dGVuZHMgTlhOYXRpdmVFdmVudDxBWFNjaGVkdWxlckNvbXBvbmVudCwgTW91c2VFdmVudD4ge1xuICBzbG90OiB7XG4gICAgZW5kRGF0ZTogQVhEYXRlVGltZTtcbiAgICBzdGFydERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgdmlldzogQVhTY2hlZHVsZXJWaWV3O1xuICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQgZXh0ZW5kcyBOWEV2ZW50PEFYU2NoZWR1bGVyQ29tcG9uZW50PiB7XG4gIGRyb3BFdmVudDogQVhEcm9wWm9uZURyb3BFdmVudDtcbiAgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gIHNsb3Q6IHtcbiAgICBlbmREYXRlOiBBWERhdGVUaW1lO1xuICAgIHN0YXJ0RGF0ZTogQVhEYXRlVGltZTtcbiAgICB2aWV3OiBBWFNjaGVkdWxlclZpZXc7XG4gIH07XG4gIGlzU2FtZVNsb3REcm9wOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQVhTZWxlY3RCb3hDb21wb25lbnQsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYQnV0dG9uQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYQ2FsZW5kYXJDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyV2Vla1ZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJUaW1lbGluZURheVZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJUaW1lbGluZU11bHRpRGF5Vmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlclRpbWVsaW5lTW9udGhWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQVhVbnN1YnNjcmliZXIsIHsgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlckNvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmVyID0gaW5qZWN0KEFYVW5zdWJzY3JpYmVyKTtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgbG9jYWxlU2VydmljZSA9IGluamVjdChBWExvY2FsZVNlcnZpY2UpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB2aWV3TW9kZVNlbGVjdGJveCA9IHZpZXdDaGlsZChBWFNlbGVjdEJveENvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJQb3BvdmVyID0gdmlld0NoaWxkPEFYUG9wb3ZlckNvbXBvbmVudD4oJ2NhbGVuZGFyUG9wb3ZlcicpO1xuXG4gIHByaXZhdGUgZGlzcGxheVZpZXdzOiBSZWNvcmQ8QVhTY2hlZHVsZXJWaWV3LCBzdHJpbmc+ID0ge1xuICAgIGRheTogJ2RhaWx5JyxcbiAgICB3ZWVrOiAnd2Vla2x5JyxcbiAgICBtb250aDogJ21vbnRobHknLFxuICAgICd0aW1lbGluZS1kYXknOiAnZGFpbHktdGltZWxpbmUnLFxuICAgICd0aW1lbGluZS1tdWx0aS1kYXknOiAnbXVsdGktZGF5LXRpbWVsaW5lJyxcbiAgICAndGltZWxpbmUtbW9udGgnOiAnbW9udGhseS10aW1lbGluZScsXG4gICAgYWdlbmRhOiAnYWdlbmRhJyxcbiAgfTtcblxuICBwdWJsaWMgY2FsZW5kYXIgPSBpbnB1dDwnZ3JlZ29yaWFuJyB8ICdzb2xhci1oaWpyaScgfCBzdHJpbmc+KCk7XG4gIHByb3RlY3RlZCBjYWxlbmRhclR5cGUgPSBsaW5rZWRTaWduYWw8J2dyZWdvcmlhbicgfCAnc29sYXItaGlqcmknIHwgc3RyaW5nPihcbiAgICAoKSA9PiB0aGlzLmNhbGVuZGFyKCkgPz8gdGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5jYWxlbmRhci5zeXN0ZW0sXG4gICk7XG5cbiAgcHVibGljIHN0YXJ0aW5nRGF0ZSA9IGlucHV0PERhdGU+KG5ldyBEYXRlKCkpO1xuICBwdWJsaWMgY3VycmVudERhdGUgPSBsaW5rZWRTaWduYWw8QVhEYXRlVGltZT4oKCkgPT5cbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGhpcy5zdGFydGluZ0RhdGUoKSwgdGhpcy5jYWxlbmRhclR5cGUoKSkuc3RhcnRPZignZGF5JyksXG4gICk7XG5cbiAgcHJpdmF0ZSBfYXBwb2ludG1lbnRzID0gc2lnbmFsPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICBwdWJsaWMgYXBwb2ludG1lbnRzID0gdGhpcy5fYXBwb2ludG1lbnRzLmFzUmVhZG9ubHkoKTtcbiAgcHJvdGVjdGVkIHJ0bCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBpc0Z1bGxTY3JlZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgdmlld3NEYXRhU291cmNlID0gc2lnbmFsPHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXT4oW10pO1xuICBwcml2YXRlIHByZXZEYXRlID0gc2lnbmFsPEFYRGF0ZVRpbWU+KHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpLCB0aGlzLmNhbGVuZGFyVHlwZSgpKSk7XG5cbiAgcHVibGljIGVuZERheUhvdXIgPSBpbnB1dCgyNCk7XG4gIHB1YmxpYyBzdGFydERheUhvdXIgPSBpbnB1dCg4KTtcbiAgcHVibGljIGhhc0hlYWRlciA9IGlucHV0KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIHB1YmxpYyBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIHB1YmxpYyBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBwdWJsaWMgYWxsb3dGdWxsU2NyZWVuID0gaW5wdXQodHJ1ZSk7XG4gIHB1YmxpYyBtdWx0aURheVZpZXdEYXlzQ291bnQgPSBpbnB1dCg3KTtcbiAgcHVibGljIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuICBwdWJsaWMgZGF0YVNvdXJjZSA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnREYXRhU291cmNlPihbXSk7XG4gIHB1YmxpYyBob2xpZGF5cyA9IGlucHV0PChyYW5nZTogQVhTY2hlZHVsZXJEYXRlUmFuZ2UpID0+IEFYSG9saWRheURhdGVbXT4oKTtcbiAgcHVibGljIGZpcnN0RGF5T2ZXZWVrID0gaW5wdXQ8QVhEYXlPZldlZWtOYW1lPignc3VuZGF5Jyk7XG4gIHB1YmxpYyB2aWV3cyA9IGlucHV0PEFYU2NoZWR1bGVyVmlld1tdPihbXG4gICAgJ2RheScsXG4gICAgJ3dlZWsnLFxuICAgICdtb250aCcsXG4gICAgJ3RpbWVsaW5lLWRheScsXG4gICAgJ3RpbWVsaW5lLW11bHRpLWRheScsXG4gICAgJ3RpbWVsaW5lLW1vbnRoJyxcbiAgICAnYWdlbmRhJyxcbiAgXSk7XG5cbiAgcHVibGljIHNlbGVjdGVkVmlldyA9IG1vZGVsPEFYU2NoZWR1bGVyVmlldz4odGhpcy52aWV3cygpWzBdKTtcbiAgcHJpdmF0ZSBwcmV2VmlldyA9IHNpZ25hbDxBWFNjaGVkdWxlclZpZXc+KHRoaXMuc2VsZWN0ZWRWaWV3KCkpO1xuXG4gIC8vIC0tLSBQdWJsaWMgT3V0cHV0cyAtLS1cbiAgcHVibGljIG9uRGF0YUxvYWRlZCA9IG91dHB1dDx2b2lkPigpO1xuICBwdWJsaWMgb25SYW5nZUNoYW5nZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJEYXRlUmFuZ2U+KCk7XG4gIHB1YmxpYyBvblNsb3RDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvblNsb3REYmxDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvblNsb3RSaWdodENsaWNrID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50RHJvcCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFjdGlvbkNsaWNrID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25BcHBvaW50bWVudENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50RGJsQ2xpY2tlZCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uQXBwb2ludG1lbnRSaWdodENsaWNrID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuXG4gIC8vIC0tLSBJbnRlcm5hbCBIYW5kbGVycyBmb3IgVmlldyBPdXRwdXRzIC0tLVxuICBwcm90ZWN0ZWQgaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vblNsb3RDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vblNsb3REYmxDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbChldmVudERhdGE6IEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uU2xvdFJpZ2h0Q2xpY2suZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudENsaWNrZWQuZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudERibENsaWNrZWQuZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbChldmVudERhdGE6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50UmlnaHRDbGljay5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50KSB7XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhckNoYW5nZXMkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRoaXMuY3VycmVudERhdGUoKS5kYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICAgIGlmICghY3VycmVudERhdGUuZXF1YWwodGhpcy5jdXJyZW50RGF0ZSgpKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChjdXJyZW50RGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5sYW5nQ2hhbmdlcyQucGlwZSh0aGlzLnVuc3Vic2NyaWJlci50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5maWxsRGF0YVNvdXJjZSgpO1xuICAgICAgdGhpcy52aWV3TW9kZVNlbGVjdGJveCgpPy5zZWxlY3RJdGVtcyh0aGlzLnZpZXdzRGF0YVNvdXJjZSgpLmZpbmQoKGMpID0+IGMuaWQgPT0gdGhpcy5zZWxlY3RlZFZpZXcoKSkpO1xuICAgICAgY29uc3QgY3VycmVudERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUodGhpcy5jdXJyZW50RGF0ZSgpLmRhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgICAgaWYgKCFjdXJyZW50RGF0ZS5lcXVhbCh0aGlzLmN1cnJlbnREYXRlKCkpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KGN1cnJlbnREYXRlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB0aGlzLnJ0bC5zZXQoQVhIdG1sVXRpbC5pc1J0bCh0aGlzLm5hdGl2ZUVsZW1lbnQpKTtcbiAgICB0aGlzLmZpbGxEYXRhU291cmNlKCk7XG4gIH1cblxuICAjYXBwb2ludG1lbnRFZmZlY3QgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhU291cmNlKCkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyO1xuICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgIGVuZDogdGhpcy5yYW5nZSgpLmVuZCxcbiAgICAgICAgZnJvbTogdGhpcy5yYW5nZSgpLmZyb20sXG4gICAgICB9O1xuICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGZ1bmMoeyByYW5nZSB9KTtcbiAgICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobGlzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50W107XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgIH1cbiAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gIH0pO1xuXG4gICNob2xpZGF5RWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmdW5jID0gdGhpcy5ob2xpZGF5cygpO1xuICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgZW5kOiB0aGlzLnJhbmdlKCkuZW5kLFxuICAgICAgZnJvbTogdGhpcy5yYW5nZSgpLmZyb20sXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaW50ZXJuYWxIb2xpZGF5LnNldChmdW5jKHJhbmdlKSk7XG4gIH0pO1xuXG4gIHByaXZhdGUgYXN5bmMgZmlsbERhdGFTb3VyY2UoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIGF3YWl0IChjb25zdCBjIG9mIHRoaXMudmlld3MoKSkge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGBAYWNvcmV4OmRhdGVUaW1lLmR1cmF0aW9uLiR7dGhpcy5kaXNwbGF5Vmlld3NbY119YCk7XG4gICAgICByZXN1bHQucHVzaCh7IHRleHQsIGlkOiBjIH0pO1xuICAgIH1cbiAgICB0aGlzLnZpZXdzRGF0YVNvdXJjZS5zZXQocmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0R3JpZERhdGVSYW5nZShkYXRlSW5Nb250aDogQVhEYXRlVGltZSk6IHsgZ3JpZFN0YXJ0RGF0ZTogQVhEYXRlVGltZTsgZ3JpZEVuZERhdGU6IEFYRGF0ZVRpbWUgfSB7XG4gICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gZGF0ZUluTW9udGguc3RhcnRPZignbW9udGgnKTtcbiAgICBjb25zdCBmaXJzdERheUdyaWROdW0gPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKHRoaXMuZmlyc3REYXlPZldlZWsoKSk7XG4gICAgY29uc3QgZmlyc3REaXNwbGF5ZWREYXlPZldlZWsgPSBmaXJzdERheU9mTW9udGguZGF5T2ZXZWVrO1xuICAgIGNvbnN0IGRheXNGcm9tUHJldk1vbnRoID0gKGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrIC0gZmlyc3REYXlHcmlkTnVtICsgNykgJSA3O1xuICAgIGNvbnN0IGdyaWRTdGFydERhdGUgPSBmaXJzdERheU9mTW9udGguYWRkKCdkYXknLCAtZGF5c0Zyb21QcmV2TW9udGgpO1xuICAgIC8vIENhbGN1bGF0ZSBlbmQgZGF0ZSBiYXNlZCBvbiBzdGFuZGFyZCA2IHdlZWtzIGZvciBzYWZldHksIG9yIGNhbGN1bGF0ZSBkeW5hbWljYWxseSBpZiBwcmVmZXJyZWRcbiAgICBjb25zdCBncmlkRW5kRGF0ZSA9IGdyaWRTdGFydERhdGUuYWRkKCdkYXknLCA2ICogNyAtIDEpO1xuICAgIHJldHVybiB7IGdyaWRTdGFydERhdGUsIGdyaWRFbmREYXRlIH07XG4gIH1cblxuICBwdWJsaWMgY3VycmVudERhdGVUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ0REIE1NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnd2Vlayc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnRPZldlZWsgPSB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ0REIE1NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRPZldlZWsgPSB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ3dlZWsnLCAxKS5hZGQoJ2RheScsIC0xKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ0REIE1NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYCR7c3RhcnRPZldlZWt9IC0gJHtlbmRPZldlZWt9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdChcbiAgICAgICAgICB0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCB0aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpIC0gMSksXG4gICAgICAgICAgJ2RhdGV0aW1lJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0T2ZXZWVrfSAtICR7ZW5kT2ZXZWVrfWA7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KHRoaXMuY3VycmVudERhdGUoKSwgJ2RhdGV0aW1lJywge1xuICAgICAgICAgIGZvcm1hdDogJ01NTU0geXl5eScsXG4gICAgICAgICAgY2FsZW5kYXI6IHRoaXMuY2FsZW5kYXJUeXBlKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcHVibGljIGNhbGVuZGFyRGVwdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkVmlldygpKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICAgIHJldHVybiAnZGF5JztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgcmV0dXJuICdtb250aCc7XG4gICAgfVxuICB9KTtcblxuICBwcml2YXRlIG1hcHBlZEFwcG9pbnRtZW50cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fYXBwb2ludG1lbnRzKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuXG4gICAgcmV0dXJuIGl0ZW1zXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShpdGVtLnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoaXRlbS5lbmREYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICAgICAgLy8gQmFzaWMgdmFsaWRhdGlvblxuICAgICAgICBpZiAoIXN0YXJ0RGF0ZT8uZGF0ZSB8fCAhZW5kRGF0ZT8uZGF0ZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignU2NoZWR1bGVyOiBTa2lwcGluZyBpdGVtIGR1ZSB0byBpbnZhbGlkIGRhdGUgZmllbGRzOicsIGl0ZW0pO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIGRhdGVzIGFyZSB2YWxpZCBhZnRlciBjcmVhdGlvblxuICAgICAgICBpZiAoaXNOYU4oc3RhcnREYXRlLmRhdGUuZ2V0VGltZSgpKSB8fCBpc05hTihlbmREYXRlLmRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignU2NoZWR1bGVyOiBTa2lwcGluZyBpdGVtIGR1ZSB0byBpbnZhbGlkIHBhcnNlZCBkYXRlIChOYU4pOicsIGl0ZW0pO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGFwcHQpOiBhcHB0IGlzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQgPT4gYXBwdCAhPT0gbnVsbCk7IC8vIEZpbHRlciBvdXQgbnVsbHMgZnJvbSBpbnZhbGlkIGRhdGVzXG4gIH0pO1xuXG4gIHB1YmxpYyByYW5nZSA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyRGF0ZVJhbmdlPigoKSA9PiB7XG4gICAgY29uc3QgdmlldyA9IHRoaXMuc2VsZWN0ZWRWaWV3KCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudERhdGUoKS5zdGFydE9mKCdkYXknKTtcblxuICAgIGlmICghY3VycmVudCkgcmV0dXJuIHsgZnJvbTogbnVsbCwgZW5kOiBudWxsIH07XG5cbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBmcm9tOiBjdXJyZW50LmRhdGUsIGVuZDogY3VycmVudC5lbmRPZignZGF5JykuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICd3ZWVrJzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5kYXRlLCBlbmQ6IGN1cnJlbnQuYWRkKCdkYXknLCA3KS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICBjb25zdCB7IGdyaWRTdGFydERhdGUsIGdyaWRFbmREYXRlIH0gPSB0aGlzLmdldEdyaWREYXRlUmFuZ2UoY3VycmVudCk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBmcm9tOiBncmlkU3RhcnREYXRlLmRhdGUsIGVuZDogZ3JpZEVuZERhdGUuYWRkKCdkYXknLCAxKS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5zdGFydE9mKCdtb250aCcpLmRhdGUsIGVuZDogY3VycmVudC5lbmRPZignbW9udGgnKS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0geyBmcm9tOiBjdXJyZW50LmRhdGUsIGVuZDogY3VycmVudC5hZGQoJ2RheScsIHRoaXMubXVsdGlEYXlWaWV3RGF5c0NvdW50KCkpLmRhdGUgfTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgI3JhbmdlQ2hhbmdlZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdGhpcy5vblJhbmdlQ2hhbmdlZC5lbWl0KHRoaXMucmFuZ2UoKSk7XG4gIH0pO1xuXG4gICN2aWV3Q2hhbmdlZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdmlldyA9IHRoaXMuc2VsZWN0ZWRWaWV3KCk7XG4gICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlVmlld0NoYW5nZWQodGhpcy5wcmV2VmlldygpLCB2aWV3KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmlld0FwcG9pbnRtZW50cyA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnREYXRlKCk7XG4gICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBwZWRBcHBvaW50bWVudHMoKTtcbiAgICBjb25zdCByYW5nZVN0YXJ0ID0gdGhpcy5yYW5nZSgpLmZyb207XG4gICAgY29uc3QgcmFuZ2VFbmQgPSB0aGlzLnJhbmdlKCkuZW5kO1xuXG4gICAgaWYgKCFjdXJyZW50IHx8IG1hcHBlZC5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICAgIHJldHVybiBtYXBwZWQuZmlsdGVyKFxuICAgICAgKGFwcHQpID0+XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSkuY29tcGFyZShyYW5nZUVuZCwgJ3NlY29uZCcpIDw9IDAgJiZcbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuZW5kRGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSkuY29tcGFyZShyYW5nZVN0YXJ0LCAnc2Vjb25kJykgPj0gMCxcbiAgICApO1xuICB9KTtcblxuICB2aWV3Q2hhbmdlZChlOiBBWFZhbHVlQ2hhbmdlZEV2ZW50PEFYU2NoZWR1bGVyVmlldz4pIHtcbiAgICBjb25zdCBuZXdWaWV3ID0gZS52YWx1ZTtcbiAgICBjb25zdCBvbGRWaWV3ID0gZS5vbGRWYWx1ZTtcbiAgICB0aGlzLnNlbGVjdGVkVmlldy5zZXQobmV3Vmlldyk7XG5cbiAgICB0aGlzLmhhbmRsZVZpZXdDaGFuZ2VkKG9sZFZpZXcsIG5ld1ZpZXcpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWV3Q2hhbmdlZChvbGRWaWV3OiBBWFNjaGVkdWxlclZpZXcsIG5ld1ZpZXc6IEFYU2NoZWR1bGVyVmlldykge1xuICAgIGlmIChvbGRWaWV3ID09PSAnd2VlaycpIHtcbiAgICAgIGNvbnN0IG9sZERheU9mV2VlayA9IHRoaXMucHJldkRhdGUoKS5kYXlPZldlZWsgJSA3O1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIG9sZERheU9mV2VlayAtIDEpO1xuICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoZGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpKTtcblxuICAgIGlmIChuZXdWaWV3ID09PSAnd2VlaycpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5jdXJyZW50RGF0ZSgpO1xuICAgICAgY29uc3QgY3VycmVudERheU9mV2VlayA9IGN1cnJlbnREYXRlLmRheU9mV2VlaztcbiAgICAgIGNvbnN0IGRlc2lyZWRGaXJzdERheU5hbWUgPSB0aGlzLmZpcnN0RGF5T2ZXZWVrKCk7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOdW1iZXIgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKGRlc2lyZWRGaXJzdERheU5hbWUpO1xuICAgICAgY29uc3QgZGF5c1RvU3VidHJhY3QgPSAoY3VycmVudERheU9mV2VlayAtIGRlc2lyZWRGaXJzdERheU51bWJlciArIDcpICUgNztcbiAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrRGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHN0YXJ0T2ZXZWVrRGF0ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2Vmlldy5zZXQobmV3Vmlldyk7XG4gIH1cblxuICBuZXh0Q2xpY2soKSB7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkVmlldygpKSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5JzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ3dlZWsnLCAxKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5JzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgdGhpcy5tdWx0aURheVZpZXdEYXlzQ291bnQoKSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdtb250aCcsIDEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJldkNsaWNrKCkge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIC0xKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnd2VlaycsIC0xKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5JzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgLXRoaXMubXVsdGlEYXlWaWV3RGF5c0NvdW50KCkpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnbW9udGgnLCAtMSkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjYWxlbmRhckRhdGVDaGFuZ2VkKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQ8RGF0ZT4pIHtcbiAgICBsZXQgY3VycmVudERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoZS52YWx1ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWaWV3KCkgPT09ICd3ZWVrJykge1xuICAgICAgY29uc3QgY3VycmVudERheU9mV2VlayA9IGN1cnJlbnREYXRlLmRheU9mV2VlaztcbiAgICAgIGNvbnN0IGRlc2lyZWRGaXJzdERheU5hbWUgPSB0aGlzLmZpcnN0RGF5T2ZXZWVrKCk7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOdW1iZXIgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKGRlc2lyZWRGaXJzdERheU5hbWUpO1xuICAgICAgY29uc3QgZGF5c1RvU3VidHJhY3QgPSAoY3VycmVudERheU9mV2VlayAtIGRlc2lyZWRGaXJzdERheU51bWJlciArIDcpICUgNztcbiAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGUuYWRkKCdkYXknLCAtZGF5c1RvU3VidHJhY3QpO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnREYXRlLmVxdWFsKHRoaXMuY3VycmVudERhdGUoKSkpIHtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KGN1cnJlbnREYXRlKTtcbiAgICB9XG4gICAgdGhpcy5jYWxlbmRhclBvcG92ZXIoKT8uY2xvc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVGdWxsU2NyZWVuKCkge1xuICAgIGlmICghdGhpcy5pc0Z1bGxTY3JlZW4oKSkgdGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2F4LWZ1bGwtc2NyZWVuLWNvbnRhaW5lcicpO1xuICAgIGVsc2UgdGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2F4LWZ1bGwtc2NyZWVuLWNvbnRhaW5lcicpO1xuICAgIHRoaXMuaXNGdWxsU2NyZWVuLnNldCghdGhpcy5pc0Z1bGxTY3JlZW4oKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaChhcHBvaW50bWVudHM/OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10pIHtcbiAgICBpZiAoYXBwb2ludG1lbnRzKSB7XG4gICAgICBjb25zdCBuZXdBcHBvaW50bWVudHMgPSB0aGlzLl9hcHBvaW50bWVudHMoKS5tYXAoKGFwcHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGFwcG9pbnRtZW50cy5maW5kKChhKSA9PiBhLmlkID09PSBhcHB0LmlkKSA/PyBhcHB0O1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KG5ld0FwcG9pbnRtZW50cyk7XG4gICAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhU291cmNlKCkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50TG9hZGVyO1xuICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgIGVuZDogdGhpcy5yYW5nZSgpLmVuZCxcbiAgICAgICAgZnJvbTogdGhpcy5yYW5nZSgpLmZyb20sXG4gICAgICB9O1xuICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGZ1bmMoeyByYW5nZSB9KTtcbiAgICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobGlzdCk7XG4gICAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmRhdGFTb3VyY2UoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50W107XG4gICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChsaXN0KTtcbiAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItY29udGFpbmVyXCI+XG4gIEBpZiAoaGFzSGVhZGVyKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWhlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXRlXCI+XG4gICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgKG9uQ2xpY2spPVwicHJldkNsaWNrKClcIj5cbiAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LXRleHQteGxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLWxlZnQnOiAhcnRsKCksXG4gICAgICAgICAgICAgICdheC1pY29uLWNoZXZyb24tcmlnaHQnOiBydGwoKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIFt0ZXh0XT1cImN1cnJlbnREYXRlVGV4dCgpXCIgI2RhdGU+PC9heC1idXR0b24+XG4gICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgKG9uQ2xpY2spPVwibmV4dENsaWNrKClcIj5cbiAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LXRleHQteGxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLXJpZ2h0JzogIXJ0bCgpLFxuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLWxlZnQnOiBydGwoKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtcG9wb3ZlciBbdGFyZ2V0XT1cImRhdGVcIiAjY2FsZW5kYXJQb3BvdmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmVcIj5cbiAgICAgICAgICAgIDxheC1jYWxlbmRhclxuICAgICAgICAgICAgICBbdHlwZV09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgICAgIFtkZXB0aF09XCJjYWxlbmRhckRlcHRoKClcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImNhbGVuZGFyRGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9heC1jYWxlbmRhcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFjdGlvbnNcIj5cbiAgICAgICAgPGF4LXNlbGVjdC1ib3hcbiAgICAgICAgICBbZHJvcGRvd25XaWR0aF09XCInMjAwcHgnXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFZpZXcoKVwiXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwidmlld3NEYXRhU291cmNlKClcIlxuICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJ2aWV3Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYXgtc2VsZWN0LWJveD5cblxuICAgICAgICBAaWYgKGFsbG93RnVsbFNjcmVlbigpKSB7XG4gICAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiAob25DbGljayk9XCJoYW5kbGVGdWxsU2NyZWVuKClcIj5cbiAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEtc29saWQgZmEtZXhwYW5kXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdmYS1jb21wcmVzcyc6IGlzRnVsbFNjcmVlbigpLCAnZmEtZXhwYW5kJzogIWlzRnVsbFNjcmVlbigpIH1cIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXZpZXdzLWNvbnRhaW5lclwiPlxuICAgIEBzd2l0Y2ggKHNlbGVjdGVkVmlldygpKSB7XG4gICAgICBAY2FzZSAoJ2RheScpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci1kYXktdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgICBbc3RhcnREYXlIb3VyXT1cInN0YXJ0RGF5SG91cigpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgIChvbkFjdGlvbkNsaWNrSW50ZXJuYWwpPVwib25BY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID48L2F4LXNjaGVkdWxlci1kYXktdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnd2VlaycpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci13ZWVrLXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+PC9heC1zY2hlZHVsZXItd2Vlay12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdtb250aCcpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci1tb250aC12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2hhc0FjdGlvbnNdPVwiaGFzQWN0aW9ucygpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+PC9heC1zY2hlZHVsZXItbW9udGgtdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgndGltZWxpbmUtZGF5Jykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbZW5kRGF5SG91cl09XCJlbmREYXlIb3VyKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgndGltZWxpbmUtbXVsdGktZGF5Jykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW2RheXNDb3VudF09XCJtdWx0aURheVZpZXdEYXlzQ291bnQoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgndGltZWxpbmUtbW9udGgnKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItdGltZWxpbmUtbW9udGgtdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ2FnZW5kYScpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci1hZ2VuZGEtdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbZGF5c0NvdW50XT1cIm11bHRpRGF5Vmlld0RheXNDb3VudCgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+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.1.3\", ngImport: i0, type: AXSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.3\", 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.1.3\", ngImport: i0, type: AXSchedulerModule, imports: [COMPONENT] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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, signal } 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 this.internalHoliday = signal([], ...(ngDevMode ? [{ debugName: \"internalHoliday\" }] : []));\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 const globalHolidays = this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n const internalHolidays = this.internalHoliday().some((d) => date.equal(d.date, 'day'));\n return globalHolidays || internalHolidays;\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.1.3\", ngImport: i0, type: AXSchedulerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXSchedulerService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3NjaGVkdWxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBNkIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWUzRCxNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSVUsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUzQyxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsMkJBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLDRCQUF1QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDcEMseUJBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBRTFHLG9CQUFlLEdBQUcsTUFBTSxDQUFrQixFQUFFLDJEQUFDLENBQUM7S0F3bUIvQztJQXRtQkM7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxZQUFvQyxFQUFFLFlBQW9DO1FBQzlGLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0csT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxNQUFN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SSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sY0FBYyxJQUFJLGdCQUFnQixDQUFDO0lBQzVDLENBQUM7SUFDRCxTQUFTLENBQUMsSUFBZ0IsRUFBRSxRQUFnQjtRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkUsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs4R0FqbkJVLGtCQUFrQjtrSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTSxFQUFFLG1DQUFtQztpQkFDeEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgQVhIb2xpZGF5RGF0ZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhEYXlPZldlZWtOYW1lLFxuICBBWFNjaGVkdWxlckFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2ssXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJCbG9ja0lkZW50aWZpZXIsXG4gIEFYU2NoZWR1bGVyVmlldyxcbn0gZnJvbSAnLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQgfSBmcm9tICcuL3NjaGVkdWxlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JywgLy8gUHJvdmlkZSBzZXJ2aWNlIGFwcGxpY2F0aW9uLXdpZGVcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBIT1VSU19QRVJfREFZID0gMjQ7XG4gIHJlYWRvbmx5IE1JTlVURVNfUEVSX0hPVVIgPSA2MDtcbiAgcmVhZG9ubHkgQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyA9IDMwO1xuICByZWFkb25seSBNSUxMSVNFQ09ORFNfUEVSX01JTlVURSA9IDYwICogMTAwMDtcbiAgcmVhZG9ubHkgTUlMTElTRUNPTkRTX1BFUl9EQVkgPSB0aGlzLkhPVVJTX1BFUl9EQVkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKiB0aGlzLk1JTExJU0VDT05EU19QRVJfTUlOVVRFO1xuXG4gIGludGVybmFsSG9saWRheSA9IHNpZ25hbDxBWEhvbGlkYXlEYXRlW10+KFtdKTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHR3byBhcHBvaW50bWVudHMgb3ZlcmxhcCBpbiB0aW1lLlxuICAgKi9cbiAgZG9BcHBvaW50bWVudHNPdmVybGFwKGFwcG9pbnRtZW50QTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCwgYXBwb2ludG1lbnRCOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKCFhcHBvaW50bWVudEE/LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnRBLmVuZERhdGUgfHwgIWFwcG9pbnRtZW50Qj8uc3RhcnREYXRlIHx8ICFhcHBvaW50bWVudEIuZW5kRGF0ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEEgPSBhcHBvaW50bWVudEEuc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICBjb25zdCBlbmRBID0gYXBwb2ludG1lbnRBLmVuZERhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IHN0YXJ0QiA9IGFwcG9pbnRtZW50Qi5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZEIgPSBhcHBvaW50bWVudEIuZW5kRGF0ZS5nZXRUaW1lKCk7XG4gICAgLy8gVXNlcyBzdHJpY3Qgb3ZlcmxhcCBjaGVjayAoY2hhbmdlIDwgLyA+IHRvIDw9IC8gPj0gaWYgdG91Y2hpbmcgYm91bmRhcmllcyBjb3VudClcbiAgICByZXR1cm4gc3RhcnRBIDwgZW5kQiAmJiBlbmRBID4gc3RhcnRCO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYXBwb2ludG1lbnQgZHVyYXRpb24gaW4gbWludXRlcy5cbiAgICovXG4gIGNhbGN1bGF0ZUR1cmF0aW9uSW5NaW51dGVzKEFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogbnVtYmVyIHtcbiAgICBpZiAoIUFwcG9pbnRtZW50Py5zdGFydERhdGUgfHwgIUFwcG9pbnRtZW50LmVuZERhdGUpIHJldHVybiAwO1xuICAgIGNvbnN0IGR1cmF0aW9uTWlsbGlzID0gQXBwb2ludG1lbnQuZW5kRGF0ZS5nZXRUaW1lKCkgLSBBcHBvaW50bWVudC5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBkdXJhdGlvbk1pbGxpcyAvIHRoaXMuTUlMTElTRUNPTkRTX1BFUl9NSU5VVEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYXBwb2ludG1lbnQgZHVyYXRpb24gaW4gYmxvY2tzIChkZWZhdWx0IDMwIG1pbikuXG4gICAqL1xuICBjYWxjdWxhdGVEdXJhdGlvbkluQmxvY2tzKGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSB0aGlzLmNhbGN1bGF0ZUR1cmF0aW9uSW5NaW51dGVzKGFwcG9pbnRtZW50KTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKGR1cmF0aW9uTWludXRlcyAvIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGF5IGluZGV4IChyZWxhdGl2ZSB0byB2aWV3IHN0YXJ0KSBhbmQgYmxvY2sgaW5kZXggKHJlbGF0aXZlIHRvIHN0YXJ0IGhvdXIpXG4gICAqIGZvciBhIGdpdmVuIGRhdGUgdGltZSB3aXRoaW4gdGhlIHZpZXcgY29udGV4dC4gUmV0dXJucyBudWxsIGlmIG91dHNpZGUgdmlldy5cbiAgICovXG4gIGdldEJsb2NrSWRlbnRpZmllcihcbiAgICBkYXRlVGltZTogQVhEYXRlVGltZSxcbiAgICB2aWV3U3RhcnREYXRlOiBBWERhdGVUaW1lLFxuICAgIHN0YXJ0SG91cjogbnVtYmVyLFxuICAgIGVuZEhvdXI6IG51bWJlciwgLy8gRXhjbHVzaXZlIGVuZCBob3VyXG4gICAgdmlld1RvdGFsRGF5cyA9IDEsIC8vIERlZmF1bHQgdG8gMSBmb3IgZGF5IHZpZXdcbiAgKTogQVhTY2hlZHVsZXJCbG9ja0lkZW50aWZpZXIgfCBudWxsIHtcbiAgICBpZiAoIXZpZXdTdGFydERhdGUgfHwgIWRhdGVUaW1lIHx8IHR5cGVvZiBzdGFydEhvdXIgIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbmRIb3VyICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZpZXdFbmREYXRlID0gdmlld1N0YXJ0RGF0ZS5hZGQoJ2RheScsIHZpZXdUb3RhbERheXMpOyAvLyBDYWxjdWxhdGUgZXhjbHVzaXZlIGVuZCBkYXRlXG5cbiAgICAvLyBDaGVjayBpZiBkYXRlVGltZSBpcyB3aXRoaW4gdGhlIHZpZXcncyBkYXRlIGFuZCB0aW1lIHJhbmdlXG4gICAgaWYgKFxuICAgICAgZGF0ZVRpbWUuY29tcGFyZSh2aWV3U3RhcnREYXRlLCAnZGF5JykgPCAwIHx8XG4gICAgICBkYXRlVGltZS5jb21wYXJlKHZpZXdFbmREYXRlLCAnZGF5JykgPj0gMCB8fCAvLyBDaGVjayBhZ2FpbnN0IGV4Y2x1c2l2ZSBlbmQgZGF0ZVxuICAgICAgZGF0ZVRpbWUuaG91ciA8IHN0YXJ0SG91ciB8fFxuICAgICAgZGF0ZVRpbWUuaG91ciA+PSBlbmRIb3VyIC8vIENoZWNrIGFnYWluc3QgZXhjbHVzaXZlIGVuZCBob3VyXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgZGF5IGluZGV4IHJlbGF0aXZlIHRvIHZpZXcgc3RhcnRcbiAgICBjb25zdCBkYXlJbmRleCA9IE1hdGguZmxvb3IoKGRhdGVUaW1lLmRhdGUuZ2V0VGltZSgpIC0gdmlld1N0YXJ0RGF0ZS5kYXRlLmdldFRpbWUoKSkgLyB0aGlzLk1JTExJU0VDT05EU19QRVJfREFZKTtcblxuICAgIC8vIEVuc3VyZSBkYXlJbmRleCBpcyB2YWxpZCBmb3IgdGhlIHZpZXcgZHVyYXRpb25cbiAgICBpZiAoZGF5SW5kZXggPCAwIHx8IGRheUluZGV4ID49IHZpZXdUb3RhbERheXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1pbnV0ZXNJbnRvRGF5ID0gZGF0ZVRpbWUuaG91ciAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUiArIGRhdGVUaW1lLm1pbnV0ZTtcbiAgICBjb25zdCBtaW51dGVzSW50b1ZpZXdIb3VycyA9IG1pbnV0ZXNJbnRvRGF5IC0gc3RhcnRIb3VyICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSO1xuXG4gICAgLy8gVGhpcyBjaGVjayBzaG91bGQgYmUgcmVkdW5kYW50IGR1ZSB0byBpbml0aWFsIGhvdXIgY2hlY2ssIGJ1dCBzYWZlIHRvIGtlZXBcbiAgICBpZiAobWludXRlc0ludG9WaWV3SG91cnMgPCAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGJsb2NrSW5kZXggPSBNYXRoLmZsb29yKG1pbnV0ZXNJbnRvVmlld0hvdXJzIC8gdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcblxuICAgIHJldHVybiB7IGRheUluZGV4LCBibG9ja0luZGV4IH07XG4gIH1cblxuICAvKipcbiAgICogR3JvdXBzIGFwcG9pbnRtZW50cyBieSB0aGUgYmxvY2tzIHRoZXkgYXJlIEFDVElWRSBpbiBmb3IgYSBnaXZlbiB2aWV3LlxuICAgKiBAcGFyYW0gdmlld1RvdGFsRGF5cyAtIE51bWJlciBvZiBkYXlzIGluIHRoZSBjdXJyZW50IHZpZXcgKDEgZm9yIERheSwgNyBmb3IgV2VlaywgZXRjLilcbiAgICovXG4gIGNhbGN1bGF0ZUFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2soXG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdLFxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgc3RhcnRIb3VyOiBudW1iZXIsXG4gICAgZW5kSG91cjogbnVtYmVyLFxuICAgIHZpZXdUb3RhbERheXM6IG51bWJlciwgLy8gTm93IHJlcXVpcmVkXG4gICk6IEFYU2NoZWR1bGVyQWN0aXZlQXBwb2ludG1lbnRzSW5CbG9jayB7XG4gICAgY29uc3QgYmxvY2tzOiBBWFNjaGVkdWxlckFjdGl2ZUFwcG9pbnRtZW50c0luQmxvY2sgPSB7fTtcbiAgICBpZiAoIXZpZXdTdGFydERhdGUgfHwgdHlwZW9mIHN0YXJ0SG91ciAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEhvdXIgIT09ICdudW1iZXInIHx8IHZpZXdUb3RhbERheXMgPD0gMCkge1xuICAgICAgcmV0dXJuIGJsb2NrcztcbiAgICB9XG4gICAgY29uc3Qgdmlld0VuZERhdGUgPSB2aWV3U3RhcnREYXRlLmFkZCgnZGF5Jywgdmlld1RvdGFsRGF5cyk7IC8vIEV4Y2x1c2l2ZSBlbmQgZGF0ZVxuICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBibG9ja3MgYmFzZWQgb24gY29uc2lzdGVudCBibG9jayBkdXJhdGlvblxuICAgIGNvbnN0IHRvdGFsQmxvY2tzUGVyRGF5ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgKGVuZEhvdXIgLSBzdGFydEhvdXIpICogKHRoaXMuTUlOVVRFU19QRVJfSE9VUiAvIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyksXG4gICAgKTtcblxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChhcHBvaW50bWVudCkgPT4ge1xuICAgICAgaWYgKCFhcHBvaW50bWVudC5zdGFydERhdGUgfHwgIWFwcG9pbnRtZW50LmVuZERhdGUgfHwgIWFwcG9pbnRtZW50LmlkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50RW5kRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5lbmREYXRlKTtcbiAgICAgIGNvbnN0IGFwcG9pbnRtZW50U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcG9pbnRtZW50LnN0YXJ0RGF0ZSk7XG5cbiAgICAgIC8vIENsYW1wIGFwcG9pbnRtZW50IHN0YXJ0L2VuZCB0aW1lcyB0byB0aGUgdmlldyBib3VuZGFyaWVzIChkYXlzIGFuZCBob3VycylcbiAgICAgIGxldCBlZmZlY3RpdmVTdGFydCA9IGFwcG9pbnRtZW50U3RhcnREYXRlLmNvbXBhcmUodmlld1N0YXJ0RGF0ZSkgPCAwID8gdmlld1N0YXJ0RGF0ZSA6IGFwcG9pbnRtZW50U3RhcnREYXRlO1xuICAgICAgaWYgKGVmZmVjdGl2ZVN0YXJ0LmhvdXIgPCBzdGFydEhvdXIpIGVmZmVjdGl2ZVN0YXJ0ID0gZWZmZWN0aXZlU3RhcnQuc2V0KCdob3VyJywgc3RhcnRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG5cbiAgICAgIGxldCBlZmZlY3RpdmVFbmQgPSBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZSh2aWV3RW5kRGF0ZSkgPj0gMCA/IHZpZXdFbmREYXRlIDogYXBwb2ludG1lbnRFbmREYXRlO1xuICAgICAgaWYgKGVmZmVjdGl2ZUVuZC5ob3VyID49IGVuZEhvdXIpIHtcbiAgICAgICAgY29uc3QgZW5kRGF5QmFzZSA9IGVmZmVjdGl2ZUVuZC5jb21wYXJlKHZpZXdFbmREYXRlKSA+PSAwID8gdmlld0VuZERhdGUuYWRkKCdkYXknLCAtMSkgOiBlZmZlY3RpdmVFbmQ7XG4gICAgICAgIGVmZmVjdGl2ZUVuZCA9IGVuZERheUJhc2Uuc2V0KCdob3VyJywgZW5kSG91cikuc3RhcnRPZignaG91cicpO1xuICAgICAgfVxuXG4gICAgICAvLyBHZXQgc3RhcnQgYmxvY2sgaW5mbyB1c2luZyB0aGUgc3BlY2lmaWVkIHZpZXdUb3RhbERheXNcbiAgICAgIGNvbnN0IHN0YXJ0SW5mbyA9IHRoaXMuZ2V0QmxvY2tJZGVudGlmaWVyKGVmZmVjdGl2ZVN0YXJ0LCB2aWV3U3RhcnREYXRlLCBzdGFydEhvdXIsIGVuZEhvdXIsIHZpZXdUb3RhbERheXMpO1xuICAgICAgaWYgKCFzdGFydEluZm8pIHJldHVybjsgLy8gQXBwb2ludG1lbnQgc3RhcnRzIGNvbXBsZXRlbHkgb3V0c2lkZSB2aWV3XG5cbiAgICAgIC8vIEdldCBlbmQgYmxvY2sgaW5mbyAobGFzdCBibG9jayBvY2N1cGllZCkgdXNpbmcgdGhlIHNwZWNpZmllZCB2aWV3VG90YWxEYXlzXG4gICAgICBjb25zdCB0aW1lQmVmb3JlRW5kID0gZWZmZWN0aXZlRW5kLmFkZCgnbWludXRlJywgLTEpO1xuICAgICAgY29uc3QgZW5kSW5mbyA9IHRoaXMuZ2V0QmxvY2tJZGVudGlmaWVyKHRpbWVCZWZvcmVFbmQsIHZpZXdTdGFydERhdGUsIHN0YXJ0SG91ciwgZW5kSG91ciwgdmlld1RvdGFsRGF5cyk7XG4gICAgICAvLyBJZiBlbmRJbmZvIGlzIG51bGwsIGl0IG1lYW5zIHRoZSBhcHBvaW50bWVudCBlbmRzIGJlZm9yZSB0aGUgdmlld2FibGUgcGFydCBzdGFydHMsXG4gICAgICAvLyBvciBleGFjdGx5IGF0IHRoZSBzdGFydCwgc28gaXQgb2NjdXBpZXMgbm8gYmxvY2tzLiBIYW5kbGUgdGhpcyBjYXNlLlxuICAgICAgaWYgKFxuICAgICAgICAhZW5kSW5mbyB8fFxuICAgICAgICBlbmRJbmZvLmRheUluZGV4IDwgc3RhcnRJbmZvLmRheUluZGV4IHx8XG4gICAgICAgIChlbmRJbmZvLmRheUluZGV4ID09PSBzdGFydEluZm8uZGF5SW5kZXggJiYgZW5kSW5mby5ibG9ja0luZGV4IDwgc3RhcnRJbmZvLmJsb2NrSW5kZXgpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuOyAvLyBBcHBvaW50bWVudCBlZmZlY3RpdmVseSBoYXMgbm8gZHVyYXRpb24gd2l0aGluIHRoZSB2aWV3YWJsZSBibG9ja3NcbiAgICAgIH1cblxuICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBkYXlzIGFuZCBibG9ja3MgdGhlIGFwcG9pbnRtZW50IHNwYW5zIHdpdGhpbiB0aGUgdmlld1xuICAgICAgZm9yIChsZXQgZElkeCA9IHN0YXJ0SW5mby5kYXlJbmRleDsgZElkeCA8PSBlbmRJbmZvLmRheUluZGV4OyBkSWR4KyspIHtcbiAgICAgICAgLy8gQ2xhbXAgZGF5IGluZGV4IGp1c3QgaW4gY2FzZSAoc2hvdWxkIGJlIGhhbmRsZWQgYnkgZ2V0QmxvY2tJZGVudGlmaWVyIGNoZWNrcylcbiAgICAgICAgaWYgKGRJZHggPCAwIHx8IGRJZHggPj0gdmlld1RvdGFsRGF5cykgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRCbG9jayA9IGRJZHggPT09IHN0YXJ0SW5mby5kYXlJbmRleCA/IHN0YXJ0SW5mby5ibG9ja0luZGV4IDogMDtcbiAgICAgICAgLy8gTWFrZSBzdXJlIGVuZEJsb2NrIGRvZXNuJ3QgZXhjZWVkIHRoZSBjYWxjdWxhdGVkIHRvdGFsQmxvY2tzUGVyRGF5XG4gICAgICAgIGNvbnN0IGVuZEJsb2NrID0gZElkeCA9PT0gZW5kSW5mby5kYXlJbmRleCA/IGVuZEluZm8uYmxvY2tJbmRleCA6IHRvdGFsQmxvY2tzUGVyRGF5IC0gMTtcblxuICAgICAgICBpZiAoIWJsb2Nrc1tkSWR4XSkgYmxvY2tzW2RJZHhdID0ge307XG5cbiAgICAgICAgZm9yIChsZXQgYklkeCA9IHN0YXJ0QmxvY2s7IGJJZHggPD0gZW5kQmxvY2s7IGJJZHgrKykge1xuICAgICAgICAgIC8vIEZpbmFsIGNoZWNrIGZvciBibG9jayBpbmRleCB2YWxpZGl0eVxuICAgICAgICAgIGlmIChiSWR4ID49IDAgJiYgYklkeCA8IHRvdGFsQmxvY2tzUGVyRGF5KSB7XG4gICAgICAgICAgICBpZiAoIWJsb2Nrc1tkSWR4XVtiSWR4XSkgYmxvY2tzW2RJZHhdW2JJZHhdID0gW107XG4gICAgICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVzIGlmIHRoZSBzYW1lIGFwcG9pbnRtZW50IGlzIHByb2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyAoc2hvdWxkbid0IGhhcHBlbiB3aXRoIG91dGVyIGxvb3ApXG4gICAgICAgICAgICBpZiAoIWJsb2Nrc1tkSWR4XVtiSWR4XS5zb21lKChlKSA9PiBlLmlkID09PSBhcHBvaW50bWVudC5pZCkpIHtcbiAgICAgICAgICAgICAgYmxvY2tzW2RJZHhdW2JJZHhdLnB1c2goYXBwb2ludG1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBibG9ja3M7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBtYXggY29uY3VycmVuY3kgYW5kIGVmZmVjdGl2ZSB0b3RhbCBjb2x1bW5zIGZvciBEYXkgVmlldyBhcHBvaW50bWVudHMuXG4gICAqL1xuICBjYWxjdWxhdGVEYXlWaWV3Q29uY3VycmVuY3lJbmZvKFxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSwgLy8gVGhlc2UgYXJlIHNlZ21lbnRzIGZvciB0aGUgY3VycmVudCBkYXlcbiAgICB2aWV3U3RhcnREYXRlOiBBWERhdGVUaW1lLFxuICAgIHN0YXJ0SG91cjogbnVtYmVyLFxuICAgIGVuZEhvdXI6IG51bWJlcixcbiAgKTogTWFwPGFueSwgeyBtYXhDb25jdXJyZW5jeTogbnVtYmVyOyBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IG51bWJlciB9PiB7XG4gICAgY29uc3QgcmVzdWx0SW5mbyA9IG5ldyBNYXA8YW55LCB7IG1heENvbmN1cnJlbmN5OiBudW1iZXI7IGVmZmVjdGl2ZVRvdGFsQ29sdW1uczogbnVtYmVyIH0+KCk7XG4gICAgaWYgKHNpbmdsZURheUFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHJldHVybiByZXN1bHRJbmZvO1xuXG4gICAgY29uc3QgYWN0aXZlQXBwb2ludG1lbnRzTWFwID0gdGhpcy5jYWxjdWxhdGVBY3RpdmVBcHBvaW50bWVudHNJbkJsb2NrKFxuICAgICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLFxuICAgICAgdmlld1N0YXJ0RGF0ZSxcbiAgICAgIHN0YXJ0SG91cixcbiAgICAgIGVuZEhvdXIsXG4gICAgICAxLCAvLyBEYXkgdmlld1xuICAgICk7XG4gICAgY29uc3QgYmxvY2tzID0gYWN0aXZlQXBwb2ludG1lbnRzTWFwWzBdID8/IHt9O1xuXG4gICAgLy8gMS4gQ2FsY3VsYXRlIGluaXRpYWwgbWF4Q29uY3VycmVuY3kgZm9yIGVhY2ggYXBwb2ludG1lbnQgc2VnbWVudFxuICAgIGNvbnN0IG1heENvbmN1cnJlbmN5TWFwID0gbmV3IE1hcDxhbnksIG51bWJlcj4oKTtcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoc2VnbWVudCkgPT4ge1xuICAgICAgbGV0IG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MgPSAwO1xuICAgICAgY29uc3Qgc2VnbWVudFN0YXJ0TWludXRlcyA9IHNlZ21lbnQuc3RhcnREYXRlLmdldEhvdXJzKCkgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIgKyBzZWdtZW50LnN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBzZWdtZW50RW5kTWludXRlcyA9IHNlZ21lbnQuZW5kRGF0ZS5nZXRIb3VycygpICogdGhpcy5NSU5VVEVTX1BFUl9IT1VSICsgc2VnbWVudC5lbmREYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIGJsb2NrcyB0aGlzIHNlZ21lbnQgb2NjdXBpZXMgcmVsYXRpdmUgdG8gdmlldydzIHN0YXJ0SG91clxuICAgICAgY29uc3Qgdmlld1JlbGF0aXZlU3RhcnRNaW51dGVzID0gTWF0aC5tYXgoMCwgc2VnbWVudFN0YXJ0TWludXRlcyAtIHN0YXJ0SG91ciAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUik7XG4gICAgICBjb25zdCB2aWV3UmVsYXRpdmVFbmRNaW51dGVzID0gTWF0aC5taW4oXG4gICAgICAgIChlbmRIb3VyIC0gc3RhcnRIb3VyKSAqIHRoaXMuTUlOVVRFU19QRVJfSE9VUixcbiAgICAgICAgc2VnbWVudEVuZE1pbnV0ZXMgLSBzdGFydEhvdXIgKiB0aGlzLk1JTlVURVNfUEVSX0hPVVIsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBmaXJzdEJsb2NrSW5kZXggPSBNYXRoLmZsb29yKHZpZXdSZWxhdGl2ZVN0YXJ0TWludXRlcyAvIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyk7XG4gICAgICBjb25zdCBsYXN0QmxvY2tJbmRleCA9IE1hdGguZmxvb3IoKHZpZXdSZWxhdGl2ZUVuZE1pbnV0ZXMgLSAxKSAvIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyk7IC8vIC0xIGJlY2F1c2UgZW5kIGlzIGV4Y2x1c2l2ZSBmb3IgYmxvY2sgY291bnRpbmdcblxuICAgICAgZm9yIChsZXQgYmxvY2tJZHggPSBmaXJzdEJsb2NrSW5kZXg7IGJsb2NrSWR4IDw9IGxhc3RCbG9ja0luZGV4OyBibG9ja0lkeCsrKSB7XG4gICAgICAgIGNvbnN0IGFwcG9pbnRtZW50c0luQmxvY2sgPSBibG9ja3NbYmxvY2tJZHhdO1xuICAgICAgICBpZiAoYXBwb2ludG1lbnRzSW5CbG9jaykge1xuICAgICAgICAgIG1heE92ZXJsYXBJblNlZ21lbnRCbG9ja3MgPSBNYXRoLm1heChtYXhPdmVybGFwSW5TZWdtZW50QmxvY2tzLCBhcHBvaW50bWVudHNJbkJsb2NrLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1heENvbmN1cnJlbmN5TWFwLnNldChzZWdtZW50LmlkLCBtYXhPdmVybGFwSW5TZWdtZW50QmxvY2tzIHx8IDEpO1xuICAgIH0pO1xuXG4gICAgLy8gMi4gSXRlcmF0aXZlbHkgZGV0ZXJtaW5lIGVmZmVjdGl2ZVRvdGFsQ29sdW1ucyBmb3IgZ3JvdXBzIG9mIG92ZXJsYXBwaW5nIGFwcG9pbnRtZW50c1xuICAgIGNvbnN0IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMgPSBuZXcgTWFwPGFueSwgbnVtYmVyPigpO1xuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLnNldChzZWdtZW50LmlkLCBtYXhDb25jdXJyZW5jeU1hcC5nZXQoc2VnbWVudC5pZCkgfHwgMSk7XG4gICAgfSk7XG5cbiAgICBsZXQgY2hhbmdlZCA9IHRydWU7XG4gICAgd2hpbGUgKGNoYW5nZWQpIHtcbiAgICAgIGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50QSkgPT4ge1xuICAgICAgICBzaW5nbGVEYXlBcHBvaW50bWVudHMuZm9yRWFjaCgoc2VnbWVudEIpID0+IHtcbiAgICAgICAgICBpZiAoc2VnbWVudEEuaWQgPT09IHNlZ21lbnRCLmlkKSByZXR1cm47XG5cbiAgICAgICAgICBpZiAodGhpcy5kb0FwcG9pbnRtZW50c092ZXJsYXAoc2VnbWVudEEsIHNlZ21lbnRCKSkge1xuICAgICAgICAgICAgY29uc3QgZXRjQSA9IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuZ2V0KHNlZ21lbnRBLmlkKSB8fCAxO1xuICAgICAgICAgICAgY29uc3QgZXRjQiA9IGluaXRpYWxFZmZlY3RpdmVUb3RhbENvbHVtbnMuZ2V0KHNlZ21lbnRCLmlkKSB8fCAxO1xuICAgICAgICAgICAgY29uc3QgbWF4RVRDID0gTWF0aC5tYXgoZXRjQSwgZXRjQik7XG5cbiAgICAgICAgICAgIGlmIChldGNBICE9PSBtYXhFVEMpIHtcbiAgICAgICAgICAgICAgaW5pdGlhbEVmZmVjdGl2ZVRvdGFsQ29sdW1ucy5zZXQoc2VnbWVudEEuaWQsIG1heEVUQyk7XG4gICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV0Y0IgIT09IG1heEVUQykge1xuICAgICAgICAgICAgICBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLnNldChzZWdtZW50Qi5pZCwgbWF4RVRDKTtcbiAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFBvcHVsYXRlIGZpbmFsIHJlc3VsdFxuICAgIHNpbmdsZURheUFwcG9pbnRtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICByZXN1bHRJbmZvLnNldChzZWdtZW50LmlkLCB7XG4gICAgICAgIG1heENvbmN1cnJlbmN5OiBtYXhDb25jdXJyZW5jeU1hcC5nZXQoc2VnbWVudC5pZCkgfHwgMSxcbiAgICAgICAgZWZmZWN0aXZlVG90YWxDb2x1bW5zOiBpbml0aWFsRWZmZWN0aXZlVG90YWxDb2x1bW5zLmdldChzZWdtZW50LmlkKSB8fCAxLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0SW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYXBwb2ludG1lbnRzIGJ5IHRoZSBibG9jayB0aGV5IFNUQVJUIGluIGZvciBXZWVrIFZpZXcuXG4gICAqL1xuICBjYWxjdWxhdGVXZWVrVmlld0FwcG9pbnRtZW50c0J5U3RhcnRCbG9jayhcbiAgICBzaW5nbGVEYXlBcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10sXG4gICAgdmlld1N0YXJ0RGF0ZTogQVhEYXRlVGltZSxcbiAgICBzdGFydEhvdXI6IG51bWJlcixcbiAgICBlbmRIb3VyOiBudW1iZXIsXG4gICk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrIHtcbiAgICBjb25zdCBibG9ja3M6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRzQnlTdGFydEJsb2NrID0ge307XG4gICAgc2luZ2xlRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcG9pbnRtZW50KSA9PiB7XG4gICAgICBpZiAoIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSkgcmV0dXJuO1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5nZXRCbG9ja0lkZW50aWZpZXIoXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5zdGFydERhdGUpLFxuICAgICAgICB2aWV3U3RhcnREYXRlLFxuICAgICAgICBzdGFydEhvdXIsXG4gICAgICAgIGVuZEhvdXIsXG4gICAgICAgIDcsXG4gICAgICApO1xuICAgICAgaWYgKHN0YXJ0SW5mbykge1xuICAgICAgICBjb25zdCB7IGRheUluZGV4LCBibG9ja0luZGV4IH0gPSBzdGFydEluZm87XG4gICAgICAgIGlmICghYmxvY2tzW2RheUluZGV4XSkgYmxvY2tzW2RheUluZGV4XSA9IHt9O1xuICAgICAgICBpZiAoIWJsb2Nrc1tkYXlJbmRleF1bYmxvY2tJbmRleF0pIGJsb2Nrc1tkYXlJbmRleF1bYmxvY2tJbmRleF0gPSBbXTtcbiAgICAgICAgYmxvY2tzW2RheUluZGV4XVtibG9ja0luZGV4XS5wdXNoKGFwcG9pbnRtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYmxvY2tzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBhcHBvaW50bWVudHMgYnkgdGhlIGRheShzKSB0aGV5IG9jY3VyIG9uIHdpdGhpbiBhIGdpdmVuIGRhdGUgcmFuZ2UuXG4gICAqIFJldHVybnMgYSBNYXAgd2hlcmUgdGhlIGtleSBpcyB0aGUgZGF0ZSBzdHJpbmcgKCdZWVlZLU1NLUREJykgYW5kIHRoZSB2YWx1ZSBpcyBhbiBhcnJheSBvZiBhcHBvaW50bWVudHMuXG4gICAqL1xuICBncm91cEFwcG9pbnRtZW50c0J5RGF5KFxuICAgIGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdLFxuICAgIHZpZXdTdGFydERhdGU6IEFYRGF0ZVRpbWUsIC8vIEZpcnN0IGRheSB2aXNpYmxlIGluIHRoZSBncmlkXG4gICAgdmlld0VuZERhdGU6IEFYRGF0ZVRpbWUsIC8vIExhc3QgZGF5IHZpc2libGUgaW4gdGhlIGdyaWRcbiAgKTogTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPiB7XG4gICAgY29uc3QgZ3JvdXBlZEFwcG9pbnRtZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCk7XG4gICAgaWYgKCFhcHBvaW50bWVudHMgfHwgYXBwb2ludG1lbnRzLmxlbmd0aCA9PT0gMCB8fCAhdmlld1N0YXJ0RGF0ZSB8fCAhdmlld0VuZERhdGUpIHtcbiAgICAgIHJldHVybiBncm91cGVkQXBwb2ludG1lbnRzO1xuICAgIH1cblxuICAgIC8vIFByZS1jYWxjdWxhdGUgdGhlIGVuZCBkYXRlIGZvciBjb21wYXJpc29uIChleGNsdXNpdmUpXG4gICAgY29uc3QgZXhjbHVzaXZlVmlld0VuZERhdGUgPSB2aWV3RW5kRGF0ZS5hZGQoJ2RheScsIDEpO1xuXG4gICAgYXBwb2ludG1lbnRzLmZvckVhY2goKGFwcG9pbnRtZW50KSA9PiB7XG4gICAgICBpZiAoIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnQuZW5kRGF0ZSB8fCAhYXBwb2ludG1lbnQuaWQpIHJldHVybjtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBlZmZlY3RpdmUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgYXBwb2ludG1lbnQgY2xhbXBlZCBieSB0aGUgdmlldyByYW5nZVxuICAgICAgY29uc3QgYXBwb2ludG1lbnRTdGFydCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudC5zdGFydERhdGUpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRFbmQgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuZW5kRGF0ZSk7XG5cbiAgICAgIC8vIFNraXAgaWYgYXBwb2ludG1lbnQgZW5kcyBiZWZvcmUgdGhlIHZpZXcgc3RhcnRzIG9yIHN0YXJ0cyBhZnRlciB0aGUgdmlldyBlbmRzXG4gICAgICBpZiAoXG4gICAgICAgIGFwcG9pbnRtZW50RW5kLmNvbXBhcmUodmlld1N0YXJ0RGF0ZSwgJ2RheScpIDwgMCB8fFxuICAgICAgICBhcHBvaW50bWVudFN0YXJ0LmNvbXBhcmUoZXhjbHVzaXZlVmlld0VuZERhdGUsICdkYXknKSA+PSAwXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGFtcCBzdGFydCBkYXRlIHRvIHRoZSB2aWV3IHN0YXJ0IGRhdGVcbiAgICAgIGxldCBjdXJyZW50RGF5ID1cbiAgICAgICAgYXBwb2ludG1lbnRTdGFydC5jb21wYXJlKHZpZXdTdGFydERhdGUsICdkYXknKSA8IDAgPyB2aWV3U3RhcnREYXRlIDogYXBwb2ludG1lbnRTdGFydC5zdGFydE9mKCdkYXknKTtcblxuICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZGF5IHRoZSBhcHBvaW50bWVudCBzcGFucyB3aXRoaW4gdGhlIHZpZXcgcmFuZ2VcbiAgICAgIGxldCBzYWZlQ291bnQgPSAwOyAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gICAgICB3aGlsZSAoXG4gICAgICAgIGN1cnJlbnREYXkuY29tcGFyZShhcHBvaW50bWVudEVuZCwgJ2RheScpIDw9IDAgJiZcbiAgICAgICAgY3VycmVudERheS5jb21wYXJlKGV4Y2x1c2l2ZVZpZXdFbmREYXRlLCAnZGF5JykgPCAwICYmXG4gICAgICAgIHNhZmVDb3VudCA8IDEwMFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSB0aGlzLmZvcm1hdFNlcnZpY2UuZm9ybWF0KGN1cnJlbnREYXksICdkYXRldGltZScsIHsgZm9ybWF0OiAnWVlZWS1NTS1ERCcgfSk7IC8vIFVzZSBhIGNvbnNpc3RlbnQga2V5IGZvcm1hdFxuXG4gICAgICAgIGlmICghZ3JvdXBlZEFwcG9pbnRtZW50cy5oYXMoZGF0ZVN0cmluZykpIHtcbiAgICAgICAgICBncm91cGVkQXBwb2ludG1lbnRzLnNldChkYXRlU3RyaW5nLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIHRoZSBhcHBvaW50bWVudCBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0IGZvciB0aGF0IGRheVxuICAgICAgICBpZiAoIWdyb3VwZWRBcHBvaW50bWVudHMuZ2V0KGRhdGVTdHJpbmcpLnNvbWUoKGUpID0+IGUuaWQgPT09IGFwcG9pbnRtZW50LmlkKSkge1xuICAgICAgICAgIGdyb3VwZWRBcHBvaW50bWVudHMuZ2V0KGRhdGVTdHJpbmcpLnB1c2goYXBwb2ludG1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERheSA9IGN1cnJlbnREYXkuYWRkKCdkYXknLCAxKTtcbiAgICAgICAgc2FmZUNvdW50Kys7XG4gICAgICB9XG4gICAgICBpZiAoc2FmZUNvdW50ID49IDEwMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1NhZmV0eSBicmVhayBoaXQgaW4gZ3JvdXBBcHBvaW50bWVudHNCeURheSBsb29wIGZvciBhcHBvaW50bWVudDonLCBhcHBvaW50bWVudC5pZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3JvdXBlZEFwcG9pbnRtZW50cztcbiAgfVxuXG4gIGdldERheU9mV2Vla051bWJlcihkYXlOYW1lOiBBWERheU9mV2Vla05hbWUpOiBudW1iZXIge1xuICAgIHN3aXRjaCAoZGF5TmFtZSkge1xuICAgICAgY2FzZSAnc3VuZGF5JzpcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBjYXNlICdtb25kYXknOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGNhc2UgJ3R1ZXNkYXknOlxuICAgICAgICByZXR1cm4gMztcbiAgICAgIGNhc2UgJ3dlZG5lc2RheSc6XG4gICAgICAgIHJldHVybiA0O1xuICAgICAgY2FzZSAndGh1cnNkYXknOlxuICAgICAgICByZXR1cm4gNTtcbiAgICAgIGNhc2UgJ2ZyaWRheSc6XG4gICAgICAgIHJldHVybiA2O1xuICAgICAgY2FzZSAnc2F0dXJkYXknOlxuICAgICAgICByZXR1cm4gNztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBkYXkgbmFtZTogJHtkYXlOYW1lfS4gRGVmYXVsdGluZyB0byBTdW5kYXkgKDEpLmApO1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBnZXRTbG90RGF0YShcbiAgICBzdGFydERhdGU6IEFYRGF0ZVRpbWUsXG4gICAgdmlldzogQVhTY2hlZHVsZXJWaWV3LFxuICApOiB7IHN0YXJ0RGF0ZTogQVhEYXRlVGltZTsgZW5kRGF0ZTogQVhEYXRlVGltZTsgdmlldzogQVhTY2hlZHVsZXJWaWV3IH0ge1xuICAgIGxldCBlbmREYXRlOiBBWERhdGVUaW1lO1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBlbmREYXRlID0gc3RhcnREYXRlLmFkZCgnbWludXRlJywgdGhpcy5CTE9DS19EVVJBVElPTl9NSU5VVEVTKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5JzpcbiAgICAgICAgZW5kRGF0ZSA9IHN0YXJ0RGF0ZS5hZGQoJ21pbnV0ZScsIHRoaXMuQkxPQ0tfRFVSQVRJT05fTUlOVVRFUyAqIDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ2FnZW5kYSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgZW5kRGF0ZSA9IHN0YXJ0RGF0ZS5lbmRPZignZGF5Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXcgfTtcbiAgfVxuXG4gIGhhbmRsZUV2ZW50KFxuICAgIGV2ZW50OiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50IHwgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gICAgZXZlbnRPdXRwdXRNYXAsXG4gICAgZXZlbnRUeXBlOiAnYXBwb2ludG1lbnQnIHwgJ3Nsb3QnLFxuICApIHtcbiAgICBjb25zdCBtb3VzZUV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIG1vdXNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcG9pbnRtZW50Jykge1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRPdXRwdXRNYXAgPSBldmVudE91dHB1dE1hcFtldmVudFR5cGVdO1xuICAgICAgY29uc3QgZW1pdHRlciA9IGFwcG9pbnRtZW50T3V0cHV0TWFwW21vdXNlRXZlbnQudHlwZSBhcyBrZXlvZiB0eXBlb2YgYXBwb2ludG1lbnRPdXRwdXRNYXBdO1xuICAgICAgaWYgKGVtaXR0ZXIpIGVtaXR0ZXIuZW1pdChldmVudCBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCk7XG4gICAgfVxuICAgIGlmIChldmVudFR5cGUgPT09ICdzbG90Jykge1xuICAgICAgY29uc3Qgc2xvdE91dHB1dE1hcCA9IGV2ZW50T3V0cHV0TWFwW2V2ZW50VHlwZV07XG4gICAgICBjb25zdCBlbWl0dGVyID0gc2xvdE91dHB1dE1hcFttb3VzZUV2ZW50LnR5cGUgYXMga2V5b2YgdHlwZW9mIHNsb3RPdXRwdXRNYXBdO1xuICAgICAgaWYgKGVtaXR0ZXIpIGVtaXR0ZXIuZW1pdChldmVudCBhcyBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVGltZWxpbmUgU3BlY2lmaWMgSGVscGVycyAtLS1cblxuICBjYWxjdWxhdGVUaW1lbGluZUxheW91dChcbiAgICAvLyBgYXBwdGAgaGVyZSB3aWxsIGJlIGFuIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50VHlwZSB3aGVuIGNhbGxlZCBmcm9tIFRpbWVsaW5lRGF5Vmlld1xuICAgIGFwcHQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gICAgdmlld1N0YXJ0SG91cjogbnVtYmVyLCAvLyBlLmcuLCA4IGZvciA4IEFNXG4gICAgdmlld0VuZEhvdXI6IG51bWJlciwgLy8gZS5nLiwgMTggZm9yIDYgUE0gKHRpbWVsaW5lIHJ1bnMgZnJvbSA4OjAwIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgMTg6MDApXG4gICk6IHsgbGVmdDogc3RyaW5nOyB3aWR0aDogc3RyaW5nIH0gfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICAhYXBwdD8uc3RhcnREYXRlIHx8XG4gICAgICAhYXBwdC5lbmREYXRlIHx8XG4gICAgICB0eXBlb2Ygdmlld1N0YXJ0SG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGVvZiB2aWV3RW5kSG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIHZpZXdTdGFydEhvdXIgPj0gdmlld0VuZEhvdXIgLy8gQmFzaWMgc2FuaXR5IGNoZWNrXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2NhbGN1bGF0ZVRpbWVsaW5lTGF5b3V0OiBJbnZhbGlkIGlucHV0JywgeyBhcHB0LCB2aWV3U3RhcnRIb3VyLCB2aWV3RW5kSG91ciB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsVmlld0R1cmF0aW9uTWludXRlcyA9ICh2aWV3RW5kSG91ciAtIHZpZXdTdGFydEhvdXIpICogNjA7XG4gICAgaWYgKHRvdGFsVmlld0R1cmF0aW9uTWludXRlcyA8PSAwKSByZXR1cm4gbnVsbDsgLy8gTm8gdmlld2FibGUgZHVyYXRpb25cblxuICAgIC8vIFNlZ21lbnQncyBzdGFydCBhbmQgZW5kIHRpbWVzICh0aGVzZSBhcmUgYWxyZWFkeSBjbGlwcGVkIHRvIHRoZSBkYXkgYnkgZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkpXG4gICAgY29uc3Qgc2VnbWVudFN0YXJ0ID0gYXBwdC5zdGFydERhdGU7XG4gICAgY29uc3Qgc2VnbWVudEVuZCA9IGFwcHQuZW5kRGF0ZTtcblxuICAgIC8vIC0tLSBDYWxjdWxhdGUgU3RhcnQgUG9zaXRpb24gKGxlZnQpIC0tLVxuICAgIC8vIEVmZmVjdGl2ZSBzdGFydCBvZiB0aGUgc2VnbWVudCB3aXRoaW4gdGhlIHZpZXcncyBob3VycyBmb3IgVEhJUyBkYXlcbiAgICBsZXQgZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5ID0gc2VnbWVudFN0YXJ0LmdldEhvdXJzKCkgKiA2MCArIHNlZ21lbnRTdGFydC5nZXRNaW51dGVzKCk7XG5cbiAgICAvLyBDbGFtcCB0byB2aWV3U3RhcnRIb3VyIGZvciBjYWxjdWxhdGlvbiBpZiBzZWdtZW50IHN0YXJ0cyBiZWZvcmUgdmlld2FibGUgaG91cnMgKHNob3VsZG4ndCBoYXBwZW4gaWYgc2VnbWVudGVyIHdvcmtlZClcbiAgICBlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXkgPSBNYXRoLm1heChlZmZlY3RpdmVTZWdtZW50U3RhcnRNaW51dGVzSW5EYXksIHZpZXdTdGFydEhvdXIgKiA2MCk7XG4gICAgLy8gQ2xhbXAgdG8gdmlld0VuZEhvdXIgZm9yIGNhbGN1bGF0aW9uIGlmIHNlZ21lbnQgc3RhcnRzIGFmdGVyIHZpZXdhYmxlIGhvdXJzIChzaG91bGRuJ3QgaGFwcGVuKVxuICAgIGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSA9IE1hdGgubWluKGVmZmVjdGl2ZVNlZ21lbnRTdGFydE1pbnV0ZXNJbkRheSwgdmlld0VuZEhvdXIgKiA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzRnJvbVZpZXdTdGFydFRvU2VnbWVudFN0YXJ0ID0gZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5IC0gdmlld1N0YXJ0SG91ciAqIDYwO1xuXG4gICAgLy8gSWYgc2VnbWVudCBlZmZlY3RpdmVseSBzdGFydHMgYmVmb3JlIHRoZSB2aWV3YWJsZSBwYXJ0IChhZnRlciBjbGFtcGluZyksIGl0IG1lYW5zIGl0J3Mgbm90IHZpc2libGUgb3Igc3RhcnRzIGF0IDAlXG4gICAgaWYgKFxuICAgICAgbWludXRlc0Zyb21WaWV3U3RhcnRUb1NlZ21lbnRTdGFydCA8IDAgJiZcbiAgICAgIE1hdGguYWJzKG1pbnV0ZXNGcm9tVmlld1N0YXJ0VG9TZWdtZW50U3RhcnQpID4gMWUtNiAvKmVwc2lsb24gZm9yIGZsb2F0IGlzc3VlcyovXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGNhc2Ugc2hvdWxkIGlkZWFsbHkgYmUgY2F1Z2h0IGJ5IHRoZSBzZWdtZW50ZXIgb3IgaW5pdGlhbCBvdmVybGFwIGNoZWNrcy5cbiAgICAgIC8vIElmIGl0IGhhcHBlbnMsIHRyZWF0IGFzIHN0YXJ0aW5nIGF0IDAlIGJ1dCBpdCBtaWdodCBtZWFuIG5vIHZpc2libGUgcGFydC5cbiAgICB9XG5cbiAgICBjb25zdCBsZWZ0UGVyY2VudGFnZSA9IChNYXRoLm1heCgwLCBtaW51dGVzRnJvbVZpZXdTdGFydFRvU2VnbWVudFN0YXJ0KSAvIHRvdGFsVmlld0R1cmF0aW9uTWludXRlcykgKiAxMDA7XG5cbiAgICAvLyAtLS0gQ2FsY3VsYXRlIER1cmF0aW9uIGFuZCBXaWR0aCAtLS1cbiAgICAvLyBFZmZlY3RpdmUgZW5kIG9mIHRoZSBzZWdtZW50IHdpdGhpbiB0aGUgdmlldydzIGhvdXJzIGZvciBUSElTIGRheVxuICAgIGxldCBlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5ID0gc2VnbWVudEVuZC5nZXRIb3VycygpICogNjAgKyBzZWdtZW50RW5kLmdldE1pbnV0ZXMoKTtcbiAgICBpZiAoc2VnbWVudEVuZC5nZXRIb3VycygpID09PSAwICYmIHNlZ21lbnRFbmQuZ2V0TWludXRlcygpID09PSAwICYmIHNlZ21lbnRFbmQuZ2V0VGltZSgpID4gc2VnbWVudFN0YXJ0LmdldFRpbWUoKSkge1xuICAgICAgLy8gSWYgc2VnbWVudCBlbmRzIGV4YWN0bHkgYXQgbWlkbmlnaHQgKDAwOjAwIG9mIG5leHQgZGF5LCBtZWFuaW5nIGl0IGZpbGxlZCB1cCB0byAyNDowMCBvZiBjdXJyZW50IGRheSlcbiAgICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSAyNCAqIDYwO1xuICAgIH1cblxuICAgIC8vIENsYW1wIHRvIHZpZXdFbmRIb3VyIGZvciBjYWxjdWxhdGlvblxuICAgIGVmZmVjdGl2ZVNlZ21lbnRFbmRNaW51dGVzSW5EYXkgPSBNYXRoLm1pbihlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5LCB2aWV3RW5kSG91ciAqIDYwKTtcbiAgICAvLyBDbGFtcCB0byB2aWV3U3RhcnRIb3VyIGZvciBjYWxjdWxhdGlvbiAoaWYgc2VnbWVudCBlbmRzIGJlZm9yZSB2aWV3IHN0YXJ0cylcbiAgICBlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5ID0gTWF0aC5tYXgoZWZmZWN0aXZlU2VnbWVudEVuZE1pbnV0ZXNJbkRheSwgdmlld1N0YXJ0SG91ciAqIDYwKTtcblxuICAgIGNvbnN0IHNlZ21lbnREdXJhdGlvbk1pbnV0ZXNJblZpZXcgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBlZmZlY3RpdmVTZWdtZW50RW5kTWludXRlc0luRGF5IC0gZWZmZWN0aXZlU2VnbWVudFN0YXJ0TWludXRlc0luRGF5LFxuICAgICk7XG5cbiAgICBpZiAoc2VnbWVudER1cmF0aW9uTWludXRlc0luVmlldyA8PSAwKSB7XG4gICAgICAvLyBTZWdtZW50IGhhcyBubyB2aXNpYmxlIGR1cmF0aW9uIHdpdGhpbiB0aGUgdGltZWxpbmUgaG91cnNcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoUGVyY2VudGFnZSA9IChzZWdtZW50RHVyYXRpb25NaW51dGVzSW5WaWV3IC8gdG90YWxWaWV3RHVyYXRpb25NaW51dGVzKSAqIDEwMDtcblxuICAgIC8vIEVuc3VyZSBwZXJjZW50YWdlcyBhcmUgdmFsaWRcbiAgICBpZiAoXG4gICAgICBsZWZ0UGVyY2VudGFnZSA+IDEwMCB8fFxuICAgICAgbGVmdFBlcmNlbnRhZ2UgPCAwIHx8XG4gICAgICB3aWR0aFBlcmNlbnRhZ2UgPD0gMCB8fFxuICAgICAgd2lkdGhQZXJjZW50YWdlID4gMTAwIHx8XG4gICAgICBsZWZ0UGVyY2VudGFnZSArIHdpZHRoUGVyY2VudGFnZSA+IDEwMC4wMDAxIC8qYWxsb3cgZm9yIGZsb2F0IGVycm9ycyovXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIG1pZ2h0IGluZGljYXRlIGFuIGlzc3VlIHdpdGggZGF0ZSBjbGFtcGluZyBvciBsb2dpYy5cbiAgICAgIC8vIEZvciBub3csIGlmIGl0IHJlc3VsdHMgaW4gYW4gaW52YWxpZCBsYXlvdXQsIHJldHVybiBudWxsLlxuICAgICAgLy8gY29uc29sZS53YXJuKFwiVGltZWxpbmUgbGF5b3V0IGNhbGN1bGF0aW9uIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcGVyY2VudGFnZXM6XCIsXG4gICAgICAvLyAgICAgICAgICAgICAge2xlZnRQZXJjZW50YWdlLCB3aWR0aFBlcmNlbnRhZ2UsIHNlZ21lbnRTdGFydCwgc2VnbWVudEVuZCwgdmlld1N0YXJ0SG91ciwgdmlld0VuZEhvdXJ9KTtcbiAgICAgIC8vIEEgY29tbW9uIGNhc2UgZm9yIChsZWZ0ICsgd2lkdGggPiAxMDApIGlzIGlmIGFuIGV2ZW50IGVuZHMgKmV4YWN0bHkqIGF0IHZpZXdFbmRIb3VyLFxuICAgICAgLy8gYW5kIHZpZXdFbmRIb3VyIGl0c2VsZiBpcyB0aGUgYm91bmRhcnkuXG4gICAgICAvLyBMZXQncyBiZSBhIGJpdCB0b2xlcmFudCBoZXJlIGlmIHdpZHRoIGlzIHBvc2l0aXZlLlxuICAgICAgaWYgKHdpZHRoUGVyY2VudGFnZSA8PSAwKSByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogYCR7TWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBsZWZ0UGVyY2VudGFnZSkpfSVgLFxuICAgICAgd2lkdGg6IGAke01hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgd2lkdGhQZXJjZW50YWdlKSl9JWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSB2aXNpYmxlIHNlZ21lbnQgb2YgYSB0aW1lZCBhcHBvaW50bWVudCBvbiBhIHNwZWNpZmljIGRheSxcbiAgICogY29uc3RyYWluZWQgYnkgdGhlIHZpZXcncyBzdGFydCBhbmQgZW5kIGhvdXJzLlxuICAgKiBSZXR1cm5zIGEgbmV3IGFwcG9pbnRtZW50LWxpa2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VnbWVudC5cbiAgICovXG4gIGdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KFxuICAgIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCAvLyBUaGlzIGlzIHRoZSBPUklHSU5BTCBhcHBvaW50bWVudFxuICAgIGRheTogQVhEYXRlVGltZSxcbiAgICB2aWV3U3RhcnRIb3VyOiBudW1iZXIsXG4gICAgdmlld0VuZEhvdXI6IG51bWJlcixcbiAgICBpc0Z1bGxEYXlDZWxsQ29udGV4dCA9IGZhbHNlLFxuICApOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB8IG51bGwge1xuICAgIGlmICghYXBwb2ludG1lbnQgfHwgIWFwcG9pbnRtZW50LnN0YXJ0RGF0ZSB8fCAhYXBwb2ludG1lbnQuZW5kRGF0ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwb2ludG1lbnRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuc3RhcnREYXRlKTtcbiAgICBjb25zdCBhcHBvaW50bWVudEVuZERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnQuZW5kRGF0ZSk7XG5cbiAgICBpZiAoYXBwb2ludG1lbnQuYWxsRGF5KSB7XG4gICAgICBjb25zdCBkYXlTdGFydE9mID0gZGF5LmNsb25lKCkuc3RhcnRPZignZGF5Jyk7XG4gICAgICBpZiAoYXBwb2ludG1lbnRTdGFydERhdGUuc3RhcnRPZignZGF5JykuZXF1YWwoZGF5U3RhcnRPZiwgJ2RheScpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYXBwb2ludG1lbnQsXG4gICAgICAgICAgc3RhcnREYXRlOiBkYXlTdGFydE9mLmRhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogZGF5U3RhcnRPZi5jbG9uZSgpLmFkZCgnZGF5JywgMSkuc3RhcnRPZignZGF5JykuZGF0ZSxcbiAgICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICAgICAgb3JpZ2luYWxTdGFydERhdGU6IGFwcG9pbnRtZW50U3RhcnREYXRlLmRhdGUsXG4gICAgICAgICAgb3JpZ2luYWxFbmREYXRlOiBhcHBvaW50bWVudEVuZERhdGUuZGF0ZSxcbiAgICAgICAgICBpc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheTogZmFsc2UsXG4gICAgICAgICAgaXNDb250aW51YXRpb25Ub05leHREYXk6IGFwcG9pbnRtZW50RW5kRGF0ZS5zdGFydE9mKCdkYXknKS5jb21wYXJlKGRheVN0YXJ0T2YsICdkYXknKSA+IDAsXG4gICAgICAgICAgb3JpZ2luYWxBcHBvaW50bWVudFJlZjogYXBwb2ludG1lbnQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBhcHBvaW50bWVudFN0YXJ0RGF0ZS5zdGFydE9mKCdkYXknKS5jb21wYXJlKGRheVN0YXJ0T2YsICdkYXknKSA8IDAgJiZcbiAgICAgICAgYXBwb2ludG1lbnRFbmREYXRlLnN0YXJ0T2YoJ2RheScpLmNvbXBhcmUoZGF5U3RhcnRPZiwgJ2RheScpID49IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFwcG9pbnRtZW50LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogZGF5U3RhcnRPZi5kYXRlLFxuICAgICAgICAgIGVuZERhdGU6IGRheVN0YXJ0T2YuY2xvbmUoKS5hZGQoJ2RheScsIDEpLnN0YXJ0T2YoJ2RheScpLmRhdGUsXG4gICAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgICAgIG9yaWdpbmFsU3RhcnREYXRlOiBhcHBvaW50bWVudFN0YXJ0RGF0ZS5kYXRlLFxuICAgICAgICAgIG9yaWdpbmFsRW5kRGF0ZTogYXBwb2ludG1lbnRFbmREYXRlLmRhdGUsXG4gICAgICAgICAgaXNDb250aW51YXRpb25Gcm9tUHJldmlvdXNEYXk6IHRydWUsXG4gICAgICAgICAgaXNDb250aW51YXRpb25Ub05leHREYXk6IGFwcG9pbnRtZW50RW5kRGF0ZS5zdGFydE9mKCdkYXknKS5jb21wYXJlKGRheVN0YXJ0T2YsICdkYXknKSA+IDAsXG4gICAgICAgICAgb3JpZ2luYWxBcHBvaW50bWVudFJlZjogYXBwb2ludG1lbnQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXlTdGFydEJvdW5kYXJ5ID0gaXNGdWxsRGF5Q2VsbENvbnRleHRcbiAgICAgID8gZGF5LmNsb25lKCkuc3RhcnRPZignZGF5JylcbiAgICAgIDogZGF5LmNsb25lKCkuc2V0KCdob3VyJywgdmlld1N0YXJ0SG91cikuc3RhcnRPZignaG91cicpO1xuICAgIGNvbnN0IGRheUVuZEJvdW5kYXJ5ID0gaXNGdWxsRGF5Q2VsbENvbnRleHRcbiAgICAgID8gZGF5LmNsb25lKCkuYWRkKCdkYXknLCAxKS5zdGFydE9mKCdkYXknKVxuICAgICAgOiB2aWV3RW5kSG91ciA9PT0gMjQgfHwgKHZpZXdFbmRIb3VyID09PSAwICYmIHZpZXdTdGFydEhvdXIgPT09IDApXG4gICAgICAgID8gZGF5LmNsb25lKCkuYWRkKCdkYXknLCAxKS5zdGFydE9mKCdkYXknKVxuICAgICAgICA6IGRheS5jbG9uZSgpLnNldCgnaG91cicsIHZpZXdFbmRIb3VyKS5zdGFydE9mKCdob3VyJyk7XG5cbiAgICBpZiAoXG4gICAgICBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZShkYXlTdGFydEJvdW5kYXJ5LCAnc2Vjb25kJykgPD0gMCB8fFxuICAgICAgYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZShkYXlFbmRCb3VuZGFyeSwgJ3NlY29uZCcpID49IDBcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzZWdtZW50U3RhcnREYXRlID1cbiAgICAgIGFwcG9pbnRtZW50U3RhcnREYXRlLmNvbXBhcmUoZGF5U3RhcnRCb3VuZGFyeSwgJ3NlY29uZCcpID4gMCA/IGFwcG9pbnRtZW50U3RhcnREYXRlIDogZGF5U3RhcnRCb3VuZGFyeTtcbiAgICBjb25zdCBzZWdtZW50RW5kRGF0ZSA9XG4gICAgICBhcHBvaW50bWVudEVuZERhdGUuY29tcGFyZShkYXlFbmRCb3VuZGFyeSwgJ3NlY29uZCcpIDwgMCA/IGFwcG9pbnRtZW50RW5kRGF0ZSA6IGRheUVuZEJvdW5kYXJ5O1xuXG4gICAgaWYgKHNlZ21lbnRTdGFydERhdGUuY29tcGFyZShzZWdtZW50RW5kRGF0ZSwgJ3NlY29uZCcpID49IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQ29udGludWF0aW9uRnJvbVByZXZpb3VzRGF5ID0gYXBwb2ludG1lbnRTdGFydERhdGUuY29tcGFyZShzZWdtZW50U3RhcnREYXRlLCAnc2Vjb25kJykgPCAwO1xuICAgIGNvbnN0IGlzQ29udGludWF0aW9uVG9OZXh0RGF5ID0gYXBwb2ludG1lbnRFbmREYXRlLmNvbXBhcmUoc2VnbWVudEVuZERhdGUsICdzZWNvbmQnKSA+IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBhcHBvaW50bWVudFN0YXJ0RGF0ZS5kdXJhdGlvbihhcHBvaW50bWVudEVuZERhdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwcG9pbnRtZW50LFxuICAgICAgc3RhcnREYXRlOiBzZWdtZW50U3RhcnREYXRlLmRhdGUsXG4gICAgICBlbmREYXRlOiBzZWdtZW50RW5kRGF0ZS5kYXRlLFxuICAgICAgYWxsRGF5OiBhcHBvaW50bWVudC5hbGxEYXkgfHwgZHVyYXRpb24udG90YWwubWlsaXNlY29uZHMgPj0gMjQgKiA2MCAqIDYwICogMTAwMCAtIDEsXG4gICAgICBvcmlnaW5hbFN0YXJ0RGF0ZTogYXBwb2ludG1lbnRTdGFydERhdGUuZGF0ZSxcbiAgICAgIG9yaWdpbmFsRW5kRGF0ZTogYXBwb2ludG1lbnRFbmREYXRlLmRhdGUsXG4gICAgICBpc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheSxcbiAgICAgIGlzQ29udGludWF0aW9uVG9OZXh0RGF5LFxuICAgICAgb3JpZ2luYWxBcHBvaW50bWVudFJlZjogYXBwb2ludG1lbnQsXG4gICAgfTtcbiAgfVxuXG4gIGdldE9yaWdpbmFsQXBwb2ludG1lbnQoaXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCB8IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCB7XG4gICAgY29uc3Qgc2VnbWVudCA9IGl0ZW0gYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQ7XG4gICAgaWYgKHNlZ21lbnQub3JpZ2luYWxBcHBvaW50bWVudFJlZikge1xuICAgICAgcmV0dXJuIHNlZ21lbnQub3JpZ2luYWxBcHBvaW50bWVudFJlZjtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGdsb2JhbEhvbGlkYXlzID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuc29tZSgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgY29uc3QgaW50ZXJuYWxIb2xpZGF5cyA9IHRoaXMuaW50ZXJuYWxIb2xpZGF5KCkuc29tZSgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgcmV0dXJuIGdsb2JhbEhvbGlkYXlzIHx8IGludGVybmFsSG9saWRheXM7XG4gIH1cbiAgaXNXZWVrZW5kKGRhdGU6IEFYRGF0ZVRpbWUsIGNhbGVuZGFyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB3ZWVrZW5kID0gdGhpcy5jYWxlbmRhclNlcnZpY2UucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyKS53ZWVrZW5kO1xuICAgIHJldHVybiB3ZWVrZW5kLmluY2x1ZGVzKGRhdGUuZGF5T2ZXZWVrIC0gMSk7XG4gIH1cbn1cbiJdfQ==","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, ...(ngDevMode ? [{ debugName: \"daysCount\" }] : []));\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"agendaDaysLayout\" }] : []));\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 globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\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.1.3\", ngImport: i0, type: AXSchedulerAgendaViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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-scheduler-agenda-view-container {{\\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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 [axTooltipDisabled]=\\\"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{gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center;width:calc(100% - 7rem)}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:5rem;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: \"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: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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-scheduler-agenda-view-container {{\\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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 [axTooltipDisabled]=\\\"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{gap:.25rem;display:flex;align-items:center;flex-direction:column;justify-content:center;width:calc(100% - 7rem)}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:5rem;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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QWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxJQUE0QyxVQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBbktVLDhCQUE4QjtrR0FBOUIsOEJBQThCLDZ4REFGOUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLDhCQUE4QixFQUFFLENBQUMsaURDdkRwRixnOElBaUdBLHEySURyREksT0FBTyxvRkFHUCwyQkFBMkIseUxBQzNCLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUVuQixrQkFBa0IsK01BQ2xCLHdCQUF3QixpRUFQeEIsU0FBUyx5Q0FDVCxZQUFZLDBDQUlaLGdCQUFnQjs7MkZBT1AsOEJBQThCO2tCQXBCMUMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osMkJBQTJCO3dCQUMzQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsZ0NBQWdDLEVBQUUsQ0FBQzs4QkFtS3RDLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbmRhRGF5RGF0YSB7XG4gIGRhdGU6IEFYRGF0ZVRpbWU7XG4gIGFwcG9pbnRtZW50czogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLWFnZW5kYS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci1hZ2VuZGEtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyQWdlbmRhVmlld0NvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhTY2hlZHVsZXJBZ2VuZGFWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuXG4gIGRheXNDb3VudCA9IGlucHV0KDcpO1xuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHRvb2x0aXBUZW1wbGF0ZSA9IGlucHV0PHN0cmluZyB8IFRlbXBsYXRlUmVmPHVua25vd24+PigpO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0U2xvdElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGFnZW5kYURheXNMYXlvdXQgPSBjb21wdXRlZDxBZ2VuZGFEYXlEYXRhW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgYWdlbmRhU3RhcnREYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3QgbnVtYmVyT2ZEYXlzID0gdGhpcy5kYXlzQ291bnQoKTtcblxuICAgIGlmICghYWdlbmRhU3RhcnREYXRlIHx8ICFhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQWdlbmRhRGF5RGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlck9mRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5ID0gYWdlbmRhU3RhcnREYXRlLmFkZCgnZGF5JywgaSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0Q2xvbmVkQXBwb2ludG1lbnRTZWdtZW50T25EYXkoYXBwdCwgY3VycmVudERheSwgMCwgMjQsIHRydWUpO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvcnRlZFNlZ21lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IChzLmFsbERheSA/IDAgOiAxKSxcbiAgICAgICAgICAocykgPT4gcy5zdGFydERhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSxcbiAgICAgICAgXSxcbiAgICAgICAgWydhc2MnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERheSxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgaG9saWRheTogdGhpcy5pc0hvbGlkYXkoY3VycmVudERheSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnYWdlbmRhJyk7XG4gICAgaWYgKHNsb3REYXRhKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGhhbmRsZURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICdhZ2VuZGEnKTtcbiAgICBjb25zdCBkcm9wcGVkSXRlbSA9IGUuZHJvcHBlZC5kcmFnRGF0YSgpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQ7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGRyb3BwZWRJdGVtKTtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrSW50ZXJuYWwuZW1pdCh7XG4gICAgICBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNUb2RheShkYXRlOiBBWERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUobmV3IERhdGUoKSk7XG4gICAgcmV0dXJuIGRhdGUuZXF1YWwodG9kYXksICdkYXknKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNIb2xpZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiB7IHN0YXRlOiAnaG9saWRheScgfCAnd2Vla2VuZCcgfCAnbm9uZSc7IGhvbGlkYXk/OiBBWEhvbGlkYXlEYXRlIH0ge1xuICAgIGNvbnN0IGlzSG9saWRheSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc0hvbGlkYXkoZGF0ZSk7XG4gICAgaWYgKGlzSG9saWRheSkge1xuICAgICAgY29uc3QgZ2xvYmFsSG9saWRheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmhvbGlkYXlzLmZpbmQoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgICAgY29uc3QgaW50ZXJuYWxIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmludGVybmFsSG9saWRheSgpLmZpbmQoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgICAgY29uc3QgaG9saWRheSA9IGdsb2JhbEhvbGlkYXkgfHwgaW50ZXJuYWxIb2xpZGF5O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdGU6ICdob2xpZGF5JyxcbiAgICAgICAgaG9saWRheSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGlzV2Vla2VuZCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pc1dlZWtlbmQoZGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICBpZiAoaXNXZWVrZW5kKSB7XG4gICAgICByZXR1cm4geyBzdGF0ZTogJ3dlZWtlbmQnIH07XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXRlOiAnbm9uZScgfTtcbiAgfVxuXG4gIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1jb250YWluZXJcIj5cbiAgQGZvciAoZGF5RGF0YSBvZiBhZ2VuZGFEYXlzTGF5b3V0KCk7IHRyYWNrIGRheURhdGEuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXZcbiAgICAgIGF4RHJvcFpvbmVcbiAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVEcm9wKCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICBbY2xhc3MuYXgtc2NoZWR1bGVyLXNsb3QtaG92ZXJlZF09XCJ6b25lLmlzSG92ZXJlZCgpXCJcbiAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheURhdGEuZGF0ZSlcIlxuICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLXZpZXctY29udGFpbmVyIHt7XG4gICAgICAgIGRheURhdGEuaG9saWRheS5zdGF0ZSAhPT0gJ25vbmUnID8gKGRheURhdGEuaG9saWRheS5ob2xpZGF5Py5jc3NDbGFzcyA/PyAnYXgtc3RhdGUtaG9saWRheScpIDogJydcbiAgICAgIH19XCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXlEYXRhLmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1oZWFkZXItZGF0ZS1kYXlcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtaGVhZGVyLWRhdGUtZGF5LWNoYXIgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCJcbiAgICAgICAgICBbYXhUb29sdGlwXT1cImRheURhdGEuaG9saWRheT8uaG9saWRheT8udGl0bGUgPz8gJydcIlxuICAgICAgICAgIFtheFRvb2x0aXBQbGFjZW1lbnRdPVwiJ3RvcC1zdGFydCdcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ2RkZGQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICBAaWYgKGRheURhdGEuaG9saWRheS5zdGF0ZSA9PT0gJ2hvbGlkYXknICYmIGRheURhdGEuaG9saWRheS5ob2xpZGF5LnRpdGxlKSB7XG4gICAgICAgICAgICAoIHt7IGRheURhdGEuaG9saWRheS5ob2xpZGF5LnRpdGxlIH19IClcbiAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICB7eyBkYXlEYXRhLmRhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgZm9ybWF0OiAnREQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlEYXRhLmFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJnZXRTbG90SWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBUZW1wbGF0ZSgpXG4gICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgPyAnIChBbGwgRGF5KSdcbiAgICAgICAgICAgICAgICAgICAgOiAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICcpJylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmFsbC1kYXktc2VnbWVudF09XCJzZWdtZW50LmFsbERheVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICBbYXhUb29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hZ2VuZGEtYXBwb2ludG1lbnQtdGltZVwiPlxuICAgICAgICAgICAgICBAaWYgKHNlZ21lbnQuYWxsRGF5KSB7XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgJ0BhY29yZXg6ZGF0ZVRpbWUuZHVyYXRpb24uYWxsLWRheScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1zY2hlZHVsZXItYWdlbmRhLWFwcG9pbnRtZW50LXRpdGxlIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IHNlZ21lbnQudGl0bGUgfX08L2F4LXRpdGxlPlxuICAgICAgICAgICAgPCEtLSBEZXNjcmlwdGlvbiBjb3VsZCBnbyBoZXJlIGlmIG5lZWRlZCAtLT5cbiAgICAgICAgICAgIDwhLS0gQGlmIChzZWdtZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIDxheC1zdWJ0aXRsZT57eyBzZWdtZW50LmRlc2NyaXB0aW9uIH19PC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIH0gLS0+XG4gICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChkYXlEYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFnZW5kYS1uby1hcHBvaW50bWVudHNcIj5cbiAgICAgICAgICAgIHt7ICdAYWNvcmV4OmNvbW1vbi5nZW5lcmFsLm5vLXJlY29yZCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+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 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, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.endDayHour = input.required(...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input.required(...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"processedAppointmentsForLayout\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"allDayAppointments\" }] : []));\n this.singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n }, ...(ngDevMode ? [{ debugName: \"singleDayAppointments\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"hoursArray\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"appointmentLayouts\" }] : []));\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.1.3\", ngImport: i0, type: AXSchedulerDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"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: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvbGliL3ZpZXdzL2RheS9zY2hlZHVsZXItZGF5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUF1QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQU1wQyxPQUFPLEVBRUwsb0JBQW9CLEdBR3JCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBc0I3RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQXBCNUQ7O1FBcUJVLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFN0MsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUVwQixhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssb0RBQUMsQ0FBQztRQUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDLElBQUkscURBQUMsQ0FBQztRQUN4QixlQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssc0RBQUMsQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLDBEQUFDLENBQUM7UUFDMUIsYUFBUSxHQUFHLEtBQUssOERBQVUsQ0FBQztRQUMzQixTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsK0NBQWMsQ0FBQztRQUNwQyxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEscURBQVUsQ0FBQztRQUN0QyxpQkFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLHVEQUFVLENBQUM7UUFDeEMsaUJBQVksR0FBRyxLQUFLLENBQTJCLEVBQUUsd0RBQUMsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLEtBQUsscUVBQWlDLENBQUM7UUFFakQsb0JBQWUsR0FBRyxNQUFNLENBQWdCLElBQUksMkRBQUMsQ0FBQztRQUV0RCxtQ0FBOEIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9CLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxRQUFRLElBQUkscUJBQXFCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxNQUFNLGtCQUFrQixHQUFvQyxFQUFFLENBQUM7WUFDL0QsS0FBSyxNQUFNLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JHLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sa0JBQWtCLENBQUM7UUFDNUIsQ0FBQywwRUFBQyxDQUFDO1FBQ0gsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNGLE1BQU0sOEJBQThCLEdBQ2xDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sQ0FDM0MsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUM5RyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1lBQ3hELDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUUsOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMzQixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDLDhEQUFDLENBQUM7UUFDSCwwQkFBcUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BGLENBQUMsaUVBQUMsQ0FBQztRQUVILHdCQUFtQixHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUMxRCwyQkFBc0IsR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFDN0QsNkJBQXdCLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBQy9ELCtCQUEwQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUN4RSxrQ0FBNkIsR0FBRyxNQUFNLEVBQW9DLENBQUM7UUFDM0Usb0NBQStCLEdBQUcsTUFBTSxFQUFvQyxDQUFDO1FBQzdFLDBCQUFxQixHQUFHLE1BQU0sRUFBb0MsQ0FBQztRQUNuRSw4QkFBeUIsR0FBRyxNQUFNLEVBQTRCLENBQUM7UUFFOUMsbUJBQWMsR0FBRztZQUNoQyxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUNyQyxXQUFXLEVBQUUsSUFBSSxDQUFDLHdCQUF3QjthQUMzQztZQUNELFdBQVcsRUFBRTtnQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjtnQkFDdEMsUUFBUSxFQUFFLElBQUksQ0FBQyw2QkFBNkI7Z0JBQzVDLFdBQVcsRUFBRSxJQUFJLENBQUMsK0JBQStCO2FBQ2xEO1NBQ0YsQ0FBQztRQW1HRixlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUk7Z0JBQUUsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLHNEQUFDLENBQUM7UUFFSCx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF3QyxDQUFDO1lBQ2hFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFL0IsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDN0csT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQztZQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUM5RSxvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLENBQ0wsQ0FBQztZQUVGLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUNoQyxvQkFBb0IsRUFDcEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDbEcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQ2hCLENBQUM7WUFFRixNQUFNLFdBQVcsR0FBd0QsRUFBRSxDQUFDO1lBRTVFLEtBQUssTUFBTSxrQkFBa0IsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNwQixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUM7b0JBQ3hDLENBQUM7b0JBRUQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO29CQUVyQixLQUFLLE1BQU0sYUFBYSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO3dCQUM3RixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7d0JBQ3pGLElBQ0UsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7NEJBQ3RELE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQ3RELENBQUM7NEJBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQzs0QkFDaEIsTUFBTTt3QkFDUixDQUFDO29CQUNILENBQUM7b0JBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNkLFdBQVcsR0FBRyxDQUFDLENBQUM7d0JBQ2hCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQ3JELE1BQU07b0JBQ1IsQ0FBQztvQkFFRCxJQUFJLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDcEMsT0FBTyxDQUFDLElBQUksQ0FDVixrREFBa0Qsa0JBQWtCLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxFQUFFLENBQzNHLENBQUM7d0JBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDO3dCQUMzRCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUNyRCxXQUFXLEdBQUcsQ0FBQyxDQUFDO3dCQUNoQixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWxGLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO29CQUNqQyxXQUFXLEVBQUUsV0FBVztvQkFDeEIscUJBQXFCLEVBQUUsYUFBYTtpQkFDckMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsOERBQUMsQ0FBQztLQTJFSjtJQW5RQyxzQkFBc0IsQ0FBQyxVQUFzQixFQUFFLFdBQW1DO1FBQ2hGLE1BQU0sbUJBQW1CLEdBQUksV0FBNkMsQ0FBQyxpQkFBaUI7WUFDMUYsQ0FBQyxDQUFFO2dCQUNDLEdBQUcsV0FBVztnQkFDZCxTQUFTLEVBQUcsV0FBNkMsQ0FBQyxpQkFBaUI7Z0JBQzNFLE9BQU8sRUFBRyxXQUE2QyxDQUFDLGVBQWU7YUFDN0M7WUFDOUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNoQixNQUFNLGNBQWMsR0FBRztZQUNyQixHQUFHLG1CQUFtQjtZQUN0QixPQUFPLEVBQUUsbUJBQW1CLENBQUMsT0FBTztZQUNwQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsU0FBUztTQUN6QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FDL0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFDaEYsSUFBSSxDQUFDLGNBQWMsRUFDbkIsYUFBYSxDQUNkLENBQUM7SUFDSixDQUFDO0lBQ0QscUJBQXFCLENBQUMsVUFBc0IsRUFBRSxTQUFxQjtRQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRSxJQUFJLFFBQVE7WUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUMvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUNuRSxJQUFJLENBQUMsY0FBYyxFQUNuQixNQUFNLENBQ1AsQ0FBQztJQUNOLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxVQUFzQjtRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFjLEVBQUUsQ0FBQztRQUM5RCxJQUFJLFFBQVE7WUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUMvQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUNuRSxJQUFJLENBQUMsY0FBYyxFQUNuQixNQUFNLENBQ1AsQ0FBQztJQUNOLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxDQUFzQjtRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFjLEVBQUUsQ0FBQztRQUU5RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBNEIsQ0FBQztRQUNuRSxNQUFNLG1CQUFtQixHQUFJLFdBQTZDLENBQUMsaUJBQWlCO1lBQzFGLENBQUMsQ0FBRTtnQkFDQyxHQUFHLFdBQVc7Z0JBQ2QsU0FBUyxFQUFHLFdBQTZDLENBQUMsaUJBQWlCO2dCQUMzRSxPQUFPLEVBQUcsV0FBNkMsQ0FBQyxlQUFlO2FBQzdDO1lBQzlCLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEIsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDbEMsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztZQUN0QixXQUFXLEVBQUUsY0FBYztZQUMzQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNoRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsQ0FBc0IsRUFBRSxTQUFxQjtRQUMvRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBNEIsQ0FBQztRQUNuRSxNQUFNLG1CQUFtQixHQUFJLFdBQTZDLENBQUMsaUJBQWlCO1lBQzFGLENBQUMsQ0FBRTtnQkFDQyxHQUFHLFdBQVc7Z0JBQ2QsU0FBUyxFQUFHLFdBQTZDLENBQUMsaUJBQWlCO2dCQUMzRSxPQUFPLEVBQUcsV0FBNkMsQ0FBQyxlQUFlO2FBQzdDO1lBQzlCLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDaEIsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLFNBQVM7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDbEMsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztZQUN0QixXQUFXLEVBQUUsY0FBYztZQUMzQixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNoRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBaUIsRUFBRSxlQUF1QztRQUMxRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM5QixXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBMEZELG9CQUFvQixDQUFDLEdBQVE7UUFDM0IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQVE7UUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFDdkMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVixPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDcEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sUUFBUSxXQUFXLE9BQU8sV0FBVyxLQUFLLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQVE7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7WUFFdkMsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sZUFBZSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFFcEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBRW5DLE9BQU8sUUFBUSxZQUFZLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3JELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFRO1FBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWxGLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM5RyxNQUFNLGdCQUFnQixHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNyQyxPQUFPLDREQUE0RCxNQUFNLFNBQVMsQ0FBQztRQUNyRixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBUTtRQUMzQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNsRixJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyRyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxjQUFjLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxJQUFJLGVBQWUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXZDLE1BQU0sV0FBVyxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDekMsTUFBTSxlQUFlLEdBQUcsbURBQW1ELENBQUM7WUFFNUUsT0FBTyxRQUFRLGVBQWUsTUFBTSxXQUFXLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBZTtRQUN2QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUTthQUNsQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdkMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFxQixFQUFFLENBQUMsRUFBRSxZQUFZLFdBQVcsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQTRDLFVBQVU7UUFDcEQsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQzs4R0FoVlUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsdzZEQUYzQixDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxpREN0RGpGLCtxUkFrTUEsb2hKRHZKSSxPQUFPLG9GQUNQLDJCQUEyQix5TEFHM0Isa0JBQWtCLG9TQUVsQixlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsd0JBQXdCLHNFQUN4QixrQkFBa0IsME1BUGxCLFNBQVMseUNBQ1QsZ0JBQWdCLDZDQUVoQixZQUFZOzsyRkFRSCwyQkFBMkI7a0JBcEJ2QyxTQUFTOytCQUNFLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxPQUFPO3dCQUNQLDJCQUEyQjt3QkFDM0IsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyw2QkFBNkIsRUFBRSxDQUFDOzhCQWdWbkMsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yUGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnQsXG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50LFxuICBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItZGF5LXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLWRheS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYVHJhbnNsYXRvclBpcGUsXG4gICAgQVhQb3BvdmVyQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBWERyYWdEaXJlY3RpdmUsXG4gICAgQVhEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJEYXlWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlckRheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgR0FQX1BYID0gMTtcblxuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgZW5kRGF5SG91ciA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgc3RhcnREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBhcHBvaW50bWVudHMgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KFtdKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgcHJpdmF0ZSBkcmFnU3RhcnRTbG90SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEYXRlID0gdGhpcy5kYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRIID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCBlbmRIID0gdGhpcy5lbmREYXlIb3VyKCk7XG4gICAgY29uc3QgYWxsQXBwb2ludG1lbnRzSW5WaWV3ID0gdGhpcy5hcHBvaW50bWVudHMoKTtcbiAgICBpZiAoIXZpZXdEYXRlIHx8IGFsbEFwcG9pbnRtZW50c0luVmlldy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc2VnbWVudHNGb3JUaGlzRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdID0gW107XG4gICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbEFwcG9pbnRtZW50c0luVmlldykge1xuICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShhcHB0LCB2aWV3RGF0ZSwgc3RhcnRILCBlbmRIKTtcbiAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheS5wdXNoKHNlZ21lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHNGb3JUaGlzRGF5O1xuICB9KTtcbiAgYWxsRGF5QXBwb2ludG1lbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsQWxsRGF5QXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKT8uZmlsdGVyKChlKSA9PiBlICYmIGUuYWxsRGF5KSA/PyBbXTtcbiAgICBjb25zdCBtdWx0aURheUJlY29taW5nQWxsRGF5U2VnbWVudHMgPVxuICAgICAgdGhpcy5wcm9jZXNzZWRBcHBvaW50bWVudHNGb3JMYXlvdXQoKT8uZmlsdGVyKFxuICAgICAgICAoc2VnbWVudCkgPT4gc2VnbWVudCAmJiBzZWdtZW50LmFsbERheSAmJiAhdGhpcy5hcHBvaW50bWVudHMoKS5maW5kKChvcmlnKSA9PiBvcmlnLmlkID09PSBzZWdtZW50LmlkKT8uYWxsRGF5LFxuICAgICAgKSA/PyBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50PigpO1xuICAgIG9yaWdpbmFsQWxsRGF5QXBwb2ludG1lbnRzLmZvckVhY2goKGFwcHQpID0+IGNvbWJpbmVkLnNldChhcHB0LmlkLCBhcHB0KSk7XG4gICAgbXVsdGlEYXlCZWNvbWluZ0FsbERheVNlZ21lbnRzLmZvckVhY2goKGFwcHQpID0+IHtcbiAgICAgIGlmICghY29tYmluZWQuaGFzKGFwcHQuaWQpKSB7XG4gICAgICAgIGNvbWJpbmVkLnNldChhcHB0LmlkLCBhcHB0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb21iaW5lZC52YWx1ZXMoKSk7XG4gIH0pO1xuICBzaW5nbGVEYXlBcHBvaW50bWVudHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0KCk/LmZpbHRlcigoZSkgPT4gZSAmJiAhZS5hbGxEYXkpID8/IFtdO1xuICB9KTtcblxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50T3V0cHV0TWFwID0ge1xuICAgIHNsb3Q6IHtcbiAgICAgIGNsaWNrOiB0aGlzLnNsb3RDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5zbG90RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gICAgYXBwb2ludG1lbnQ6IHtcbiAgICAgIGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5hcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsLFxuICAgIH0sXG4gIH07XG4gIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmFwcG9pbnRtZW50LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGFwcG9pbnRtZW50IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoYXBwb2ludG1lbnQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBhcHBvaW50bWVudDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgJ2FwcG9pbnRtZW50JyxcbiAgICApO1xuICB9XG4gIGhhbmRsZVNpbmdsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBzdGFydERhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICdkYXknKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cbiAgaGFuZGxlQWxsRGF5U2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBlbmREYXRlID0gdGhpcy5kYXRlKCkuZW5kT2YoJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuZGF0ZSgpLnN0YXJ0T2YoJ2RheScpO1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGUsIGVuZERhdGUsIHZpZXc6ICdkYXknIGFzIGNvbnN0IH07XG4gICAgaWYgKHNsb3REYXRhKVxuICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBzbG90OiBzbG90RGF0YSwgc2VuZGVyOiB0aGlzLnNjaGVkdWxlciB9LFxuICAgICAgICB0aGlzLmV2ZW50T3V0cHV0TWFwLFxuICAgICAgICAnc2xvdCcsXG4gICAgICApO1xuICB9XG4gIGhhbmRsZUFsbERheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCkge1xuICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmRhdGUoKS5lbmRPZignZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5Jyk7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgdmlldzogJ2RheScgYXMgY29uc3QgfTtcblxuICAgIGNvbnN0IGRyb3BwZWRBcHB0ID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERyb3BwZWRBcHB0ID0gKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmRyb3BwZWRBcHB0LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoZHJvcHBlZEFwcHQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBkcm9wcGVkQXBwdDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsRHJvcHBlZEFwcHQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsRHJvcHBlZEFwcHQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVTaW5nbGVEYXlEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ2RheScpO1xuICAgIGNvbnN0IGRyb3BwZWRBcHB0ID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbERyb3BwZWRBcHB0ID0gKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZVxuICAgICAgPyAoe1xuICAgICAgICAgIC4uLmRyb3BwZWRBcHB0LFxuICAgICAgICAgIHN0YXJ0RGF0ZTogKGRyb3BwZWRBcHB0IGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50KS5vcmlnaW5hbFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiAoZHJvcHBlZEFwcHQgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQpLm9yaWdpbmFsRW5kRGF0ZSxcbiAgICAgICAgfSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50KVxuICAgICAgOiBkcm9wcGVkQXBwdDtcbiAgICBjb25zdCBhcHBvaW50bWVudFJlZiA9IHtcbiAgICAgIC4uLm9yaWdpbmFsRHJvcHBlZEFwcHQsXG4gICAgICBlbmREYXRlOiBvcmlnaW5hbERyb3BwZWRBcHB0LmVuZERhdGUsXG4gICAgICBzdGFydERhdGU6IG9yaWdpbmFsRHJvcHBlZEFwcHQuc3RhcnREYXRlLFxuICAgIH07XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IGFwcG9pbnRtZW50UmVmLFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuICBoYW5kbGVBY3Rpb25DbGljayhldmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRJdGVtOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50SXRlbSk7XG4gICAgdGhpcy5vbkFjdGlvbkNsaWNrSW50ZXJuYWwuZW1pdCh7XG4gICAgICBhcHBvaW50bWVudDogb3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgfSk7XG4gIH1cblxuICBob3Vyc0FycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCB0aW1lID0gdGhpcy5kYXRlKCk7XG4gICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgdGltZSA9IHRpbWUuc2V0KCdob3VyJywgdGhpcy5zdGFydERheUhvdXIoKSkuc3RhcnRPZignaG91cicpO1xuICAgIGNvbnN0IGhvdXJzID0gW3RpbWVdO1xuICAgIHdoaWxlICh0aW1lLmhvdXIgPCB0aGlzLmVuZERheUhvdXIoKSAtIDEpIHtcbiAgICAgIHRpbWUgPSB0aW1lLmFkZCgnaG91cicsIDEpO1xuICAgICAgaG91cnMucHVzaCh0aW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvdXJzO1xuICB9KTtcblxuICBhcHBvaW50bWVudExheW91dHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0cyA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0PigpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50c1RvTGF5b3V0ID0gdGhpcy5zaW5nbGVEYXlBcHBvaW50bWVudHMoKTtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0SCA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3QgZW5kSCA9IHRoaXMuZW5kRGF5SG91cigpO1xuXG4gICAgaWYgKGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCA9PT0gMCB8fCAhdmlld0RhdGUgfHwgdHlwZW9mIHN0YXJ0SCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIGVuZEggIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbGF5b3V0cztcbiAgICB9XG5cbiAgICBjb25zdCBjb25jdXJyZW5jeUluZm9NYXAgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlRGF5Vmlld0NvbmN1cnJlbmN5SW5mbyhcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0LFxuICAgICAgdmlld0RhdGUsXG4gICAgICBzdGFydEgsXG4gICAgICBlbmRILFxuICAgICk7XG5cbiAgICBjb25zdCBzb3J0ZWRBcHBvaW50bWVudHMgPSBvcmRlckJ5KFxuICAgICAgYXBwb2ludG1lbnRzVG9MYXlvdXQsXG4gICAgICBbKGUpID0+IGUuc3RhcnREYXRlLmdldFRpbWUoKSwgKGUpID0+IGUub3JpZ2luYWxFbmREYXRlLmdldFRpbWUoKSAtIGUub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpXSxcbiAgICAgIFsnYXNjJywgJ2Rlc2MnXSxcbiAgICApO1xuXG4gICAgY29uc3QgY29sdW1uc0RhdGE6IHsgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdIH1bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBhcHBvaW50bWVudFNlZ21lbnQgb2Ygc29ydGVkQXBwb2ludG1lbnRzKSB7XG4gICAgICBsZXQgYXNzaWduZWRDb2wgPSAtMTtcblxuICAgICAgZm9yIChsZXQgYyA9IDA7IDsgYysrKSB7XG4gICAgICAgIGlmICghY29sdW1uc0RhdGFbY10pIHtcbiAgICAgICAgICBjb2x1bW5zRGF0YVtjXSA9IHsgYXBwb2ludG1lbnRzOiBbXSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbmZsaWN0ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChjb25zdCBwbGFjZWRTZWdtZW50IG9mIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cykge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHBvaW50bWVudFNlZ21lbnQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwb2ludG1lbnRTZWdtZW50LmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhcnREYXRlLmNvbXBhcmUocGxhY2VkU2VnbWVudC5lbmREYXRlLCAnbWludXRlJykgPCAwICYmXG4gICAgICAgICAgICBlbmREYXRlLmNvbXBhcmUocGxhY2VkU2VnbWVudC5zdGFydERhdGUsICdtaW51dGUnKSA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZsaWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmxpY3QpIHtcbiAgICAgICAgICBhc3NpZ25lZENvbCA9IGM7XG4gICAgICAgICAgY29sdW1uc0RhdGFbY10uYXBwb2ludG1lbnRzLnB1c2goYXBwb2ludG1lbnRTZWdtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjID4gYXBwb2ludG1lbnRzVG9MYXlvdXQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYERheVZpZXc6IFNhZmV0eSBicmVhayBpbiBjb2x1bW4gYXNzaWdubWVudCBmb3IgJHthcHBvaW50bWVudFNlZ21lbnQudGl0bGV9LCBhc3NpZ25pbmcgdG8gbmV3IGNvbHVtbiAke2N9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghY29sdW1uc0RhdGFbY10pIGNvbHVtbnNEYXRhW2NdID0geyBhcHBvaW50bWVudHM6IFtdIH07XG4gICAgICAgICAgY29sdW1uc0RhdGFbY10uYXBwb2ludG1lbnRzLnB1c2goYXBwb2ludG1lbnRTZWdtZW50KTtcbiAgICAgICAgICBhc3NpZ25lZENvbCA9IGM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29uY3VycmVuY3lJbmZvID0gY29uY3VycmVuY3lJbmZvTWFwLmdldChhcHBvaW50bWVudFNlZ21lbnQuaWQpO1xuICAgICAgY29uc3QgZWZmZWN0aXZlQ29scyA9IGNvbmN1cnJlbmN5SW5mbyA/IGNvbmN1cnJlbmN5SW5mby5lZmZlY3RpdmVUb3RhbENvbHVtbnMgOiAxO1xuXG4gICAgICBsYXlvdXRzLnNldChhcHBvaW50bWVudFNlZ21lbnQuaWQsIHtcbiAgICAgICAgY29sdW1uSW5kZXg6IGFzc2lnbmVkQ29sLFxuICAgICAgICBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGVmZmVjdGl2ZUNvbHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dHM7XG4gIH0pO1xuXG4gIGdldEFwcG9pbnRtZW50TGF5b3V0KGtleTogYW55KTogQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXBwb2ludG1lbnRMYXlvdXRzKCkuZ2V0KGtleSk7XG4gIH1cblxuICBnZXRBcHBvaW50bWVudExlZnQoa2V5OiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxheW91dCA9IHRoaXMuZ2V0QXBwb2ludG1lbnRMYXlvdXQoa2V5KTtcbiAgICBpZiAobGF5b3V0ICYmIGxheW91dC5lZmZlY3RpdmVUb3RhbENvbHVtbnMgPiAwKSB7XG4gICAgICBjb25zdCBOID0gbGF5b3V0LmVmZmVjdGl2ZVRvdGFsQ29sdW1ucztcbiAgICAgIGNvbnN0IEMgPSBsYXlvdXQuY29sdW1uSW5kZXg7XG4gICAgICBpZiAoQyA8IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGNvbHVtbkluZGV4IDwgMCBmb3Iga2V5OicsIGtleSk7XG4gICAgICAgIHJldHVybiAnMHB4JztcbiAgICAgIH1cbiAgICAgIGlmIChDID09PSAwIHx8IE4gPD0gMSkgcmV0dXJuICcwcHgnO1xuICAgICAgY29uc3QgbGVmdFBlcmNlbnQgPSBDICogKDEwMCAvIE4pO1xuICAgICAgY29uc3QgZ2FwT2Zmc2V0UHggPSBDICogdGhpcy5HQVBfUFg7XG4gICAgICByZXR1cm4gYGNhbGMoJHtsZWZ0UGVyY2VudH0lICsgJHtnYXBPZmZzZXRQeH1weClgO1xuICAgIH1cbiAgICByZXR1cm4gJzBweCc7XG4gIH1cblxuICBnZXRBcHBvaW50bWVudFdpZHRoKGtleTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmdldEFwcG9pbnRtZW50TGF5b3V0KGtleSk7XG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMCkge1xuICAgICAgY29uc3QgTiA9IGxheW91dC5lZmZlY3RpdmVUb3RhbENvbHVtbnM7XG5cbiAgICAgIGlmIChOIDw9IDApIHJldHVybiAnMCUnO1xuICAgICAgaWYgKE4gPT09IDEpIHJldHVybiBgY2FsYygxMDAlIC0gJHt0aGlzLkdBUF9QWH1weClgO1xuXG4gICAgICBjb25zdCB3aWR0aFBlcmNlbnQgPSAoMSAvIE4pICogMTAwO1xuXG4gICAgICByZXR1cm4gYGNhbGMoJHt3aWR0aFBlcmNlbnR9JSAtICR7dGhpcy5HQVBfUFh9cHgpYDtcbiAgICB9XG4gICAgcmV0dXJuICcwJSc7XG4gIH1cblxuICBnZXRBcHBvaW50bWVudFRvcChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgYXBwb2ludG1lbnRTZWdtZW50ID0gdGhpcy5zaW5nbGVEYXlBcHBvaW50bWVudHMoKS5maW5kKChlKSA9PiBlLmlkID09PSBrZXkpO1xuXG4gICAgaWYgKGFwcG9pbnRtZW50U2VnbWVudCkge1xuICAgICAgY29uc3Qgc3RhcnRNaW51dGVzID0gYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZS5nZXRIb3VycygpICogNjAgKyBhcHBvaW50bWVudFNlZ21lbnQuc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgIGNvbnN0IHN0YXJ0QmxvY2tPZmZzZXQgPSBzdGFydE1pbnV0ZXMgLSB0aGlzLnN0YXJ0RGF5SG91cigpICogNjA7XG4gICAgICBjb25zdCB5QmxvY2sgPSBzdGFydEJsb2NrT2Zmc2V0IC8gMzA7XG4gICAgICByZXR1cm4gYGNhbGModmFyKC0tYXgtY29tcC1zY2hlZHVsZXItYmFzaWMtdmlldy1ibG9ja3MtaGVpZ2h0KSAqICR7eUJsb2NrfSArIDFweClgO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRBcHBvaW50bWVudEhlaWdodChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgYXBwb2ludG1lbnRTZWdtZW50ID0gdGhpcy5zaW5nbGVEYXlBcHBvaW50bWVudHMoKS5maW5kKChlKSA9PiBlLmlkID09PSBrZXkpO1xuICAgIGlmIChhcHBvaW50bWVudFNlZ21lbnQpIHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uTWlsbGlzID0gYXBwb2ludG1lbnRTZWdtZW50LmVuZERhdGUuZ2V0VGltZSgpIC0gYXBwb2ludG1lbnRTZWdtZW50LnN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSBNYXRoLm1heCgwLCBkdXJhdGlvbk1pbGxpcyAvICgxMDAwICogNjApKTtcbiAgICAgIGlmIChkdXJhdGlvbk1pbnV0ZXMgPD0gMCkgcmV0dXJuICcwcHgnO1xuXG4gICAgICBjb25zdCBoZWlnaHRCbG9jayA9IGR1cmF0aW9uTWludXRlcyAvIDMwO1xuICAgICAgY29uc3QgYmxvY2tIZWlnaHRFeHByID0gYHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodClgO1xuXG4gICAgICByZXR1cm4gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtoZWlnaHRCbG9ja30gLSAke3RoaXMuR0FQX1BYfXB4KWA7XG4gICAgfVxuICAgIHJldHVybiAnMHB4JztcbiAgfVxuXG4gIGdldFNsb3RJZChlOiBQb2ludGVyRXZlbnQpIHtcbiAgICBjb25zdCBkcm9wTGlzdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50XG4gICAgICAuZWxlbWVudHNGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpXG4gICAgICAuZmluZCgoZWwpOiBlbCBpcyBIVE1MRWxlbWVudCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmRhdGFzZXRbJ3Nsb3RJZCddICE9PSB1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhZ1N0YXJ0U2xvdElkLnNldChkcm9wTGlzdEVsZW1lbnQgPyBkcm9wTGlzdEVsZW1lbnQuZGF0YXNldFsnc2xvdElkJ10gOiBudWxsKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHknKSBnZXQgaXNSZWFkb25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLXRhYmxlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPGRpdj5cbiAgICAgIHt7ICdAYWNvcmV4OmRhdGVUaW1lLmR1cmF0aW9uLmFsbC1kYXknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBheERyb3Bab25lXG4gICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAob25FbGVtZW50RHJvcCk9XCJoYW5kbGVBbGxEYXlEcm9wKCRldmVudClcIlxuICAgIFtjbGFzcy5heC1zY2hlZHVsZXItc2xvdC1ob3ZlcmVkXT1cInpvbmUuaXNIb3ZlcmVkKClcIlxuICAgIChjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50KVwiXG4gICAgKGRibGNsaWNrKT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQpXCJcbiAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudClcIlxuICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXItdGFibGUtY29udGFpbmVyXCJcbiAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF0ZSgpLmZvcm1hdCgnWVlZWU1NREQnKSArICctYWxsZGF5J1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1oZWFkZXItYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGFsbERheUFwcG9pbnRtZW50cygpLmxlbmd0aCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtkcmFnRWxlbWVudENsb25lXT1cInRydWVcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgIFtkcmFnRGF0YV09XCJhbGxEYXlBcHBvaW50bWVudHMoKVswXVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhbGxEYXlBcHBvaW50bWVudHMoKVswXSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0pXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFsbERheUFwcG9pbnRtZW50cygpWzBdKVwiXG4gICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhbGxEYXlBcHBvaW50bWVudHMoKVswXS50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItaGVhZGVyLWRheS1hcHBvaW50bWVudFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICBhbGxEYXlBcHBvaW50bWVudHMoKVswXS5jc3NDbGFzcyA/P1xuICAgICAgICAgICAgYGF4LXNjaGVkdWxlci0ke2FsbERheUFwcG9pbnRtZW50cygpWzBdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F4VG9vbHRpcERpc2FibGVkXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxheC10aXRsZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFsbERheUFwcG9pbnRtZW50cygpWzBdKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAge3sgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0uc3RhcnREYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgLVxuICAgICAgICAgICAge3sgYWxsRGF5QXBwb2ludG1lbnRzKClbMF0uZW5kRGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoYWxsRGF5QXBwb2ludG1lbnRzKCkubGVuZ3RoID4gMSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgI21vcmVBcHBvaW50bWVudHNcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktaGVhZGVyLW1vcmUtdGFnXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgIGFsbERheUFwcG9pbnRtZW50cygpWzFdLmNzc0NsYXNzID8/XG4gICAgICAgICAgICBgYXgtc2NoZWR1bGVyLSR7YWxsRGF5QXBwb2ludG1lbnRzKClbMV0ucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICAnQGFjb3JleDpjb21tb24uZ2VuZXJhbC5tb3JlLWl0ZW1zJ1xuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBwYXJhbXM6IHsgbnVtYmVyOiBhbGxEYXlBcHBvaW50bWVudHMoKS5sZW5ndGggLSAxIH0gfVxuICAgICAgICAgICAgICB8IGFzeW5jXG4gICAgICAgICAgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwibW9yZUFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiIGF4RHJvcFpvbmU+XG4gICAgICAgICAgICBAZm9yIChhcHBvaW50bWVudCBvZiBhbGxEYXlBcHBvaW50bWVudHMoKTsgdHJhY2sgYXBwb2ludG1lbnQuaWQ7IGxldCBmaXJzdCA9ICRmaXJzdCkge1xuICAgICAgICAgICAgICBAaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJhcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhcHBvaW50bWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhcHBvaW50bWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7YXBwb2ludG1lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGF4LXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICB7eyBhcHBvaW50bWVudC5zdGFydERhdGUgfCBmb3JtYXQ6ICdkYXRlJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgICAge3sgYXBwb2ludG1lbnQuZW5kRGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9heC1wb3BvdmVyPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS10aW1lLWNvbnRhaW5lclwiPlxuICA8dGFibGUgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LXRpbWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbYm9yZGVyXT1cIjFcIj5cbiAgICBAZm9yICh0aW1lIG9mIGhvdXJzQXJyYXkoKTsgdHJhY2sgdGltZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdj5cbiAgICAgICAge3sgdGltZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L3RhYmxlPlxuICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS10YWJsZS1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWRheS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICAgIEBmb3IgKGFwcG9pbnRtZW50IG9mIHNpbmdsZURheUFwcG9pbnRtZW50cygpOyB0cmFjayBhcHBvaW50bWVudC5pZCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgIChwb2ludGVyZG93bik9XCJnZXRTbG90SWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhcHBvaW50bWVudC50aXRsZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF5LWFwcG9pbnRtZW50XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0QXBwb2ludG1lbnRXaWR0aChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiZ2V0QXBwb2ludG1lbnRIZWlnaHQoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtYmxvY2stc3RhcnRdPVwiZ2V0QXBwb2ludG1lbnRUb3AoYXBwb2ludG1lbnQuaWQpXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImdldEFwcG9pbnRtZW50TGVmdChhcHBvaW50bWVudC5pZClcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgIFtheFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcG9pbnRtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIHt7IGFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fSAtXG4gICAgICAgICAgICB7eyBhcHBvaW50bWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImF4LXNjaGVkdWxlci1kYXktc2xvdFwiPlxuICAgICAgQGZvciAodGltZSBvZiBob3Vyc0FycmF5KCk7IHRyYWNrIHRpbWUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgICAjem9uZT1cImF4RHJvcFpvbmVcIlxuICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZVNpbmdsZURheURyb3AoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZSlcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1zbG90LWlkXT1cInRpbWUuZm9ybWF0KCdZWVlZTU1ERC1ISG1tJylcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgI3pvbmUyPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZTIuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZVNpbmdsZURheURyb3AoJGV2ZW50LCB0aW1lLmFkZCgnbWludXRlJywgMzApKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNpbmdsZVNsb3RFdmVudCgkZXZlbnQsIHRpbWUuYWRkKCdtaW51dGUnLCAzMCkpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlU2luZ2xlU2xvdEV2ZW50KCRldmVudCwgdGltZS5hZGQoJ21pbnV0ZScsIDMwKSlcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTaW5nbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lLmFkZCgnbWludXRlJywgMzApKVwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1zbG90LWlkXT1cInRpbWUuYWRkKCdtaW51dGUnLCAzMCkuZm9ybWF0KCdZWVlZTU1ERC1ISG1tJylcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","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, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.firstDayOfWeek = input('saturday', ...(ngDevMode ? [{ debugName: \"firstDayOfWeek\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n // --- Constants ---\n this.DAYS_IN_WEEK = 7;\n this.MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"monthStartDate\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"daysArray\" }] : []));\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 let holidayCssClass = null;\n if (isHoliday) {\n const globalHoliday = this.calendarService.holidays.find((d) => currentDay.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => currentDay.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\n if (holiday) {\n holidayTitle = holiday.title;\n holidayCssClass = holiday.cssClass;\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 holidayCssClass,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n }, ...(ngDevMode ? [{ debugName: \"calendarDaysInfo\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"appointmentsGroupedByDay\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"dayCellLayouts\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"gridTemplateRowsStyle\" }] : []));\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.1.3\", ngImport: i0, type: AXSchedulerMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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 dayCell.isHoliday ? (dayCell.holidayCssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"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: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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 dayCell.isHoliday ? (dayCell.holidayCssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\n [class.ax-state-today]=\\\"dayCell.isToday\\\"\\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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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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LGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxJQUE0QyxVQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBclJVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLDJ5REFGN0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixFQUFFLENBQUMsaURDbEVuRix3NlBBc0tBLG9ySkRoSEksT0FBTyxvRkFHUCxrQkFBa0Isb1NBR2xCLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQixrQkFBa0IsK01BQ2xCLHdCQUF3QixpRUFSeEIsU0FBUyx5Q0FDVCxnQkFBZ0IsNkNBRWhCLFlBQVk7OzJGQVVILDZCQUE2QjtrQkFyQnpDLFNBQVM7K0JBQ0UseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixTQUFTO3dCQUNULGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsK0JBQStCLEVBQUUsQ0FBQzs4QkFxUnJDLFVBQVU7c0JBQXJELFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7IC8vIEFkanVzdCBwYXRoXG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRE9DVU1FTlQsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhEYXlPZldlZWtOYW1lLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50LCBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7IC8vIEFkanVzdCBwYXRoXG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJDb21wb25lbnQsXG4gIEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuc2VydmljZSc7XG5cbi8vIC0tLSBUeXBlcyBzcGVjaWZpYyB0byBNb250aCBWaWV3IExheW91dCAtLS1cbi8vIFJlcHJlc2VudHMgYSBzaW5nbGUgZGF5IGNlbGwgaW4gdGhlIG1vbnRoIGdyaWRcbmV4cG9ydCB0eXBlIEFYU2NoZWR1bGVyTW9udGhEYXlDZWxsID0ge1xuICBkYXRlOiBBWERhdGVUaW1lO1xuICBpc0N1cnJlbnRNb250aDogYm9vbGVhbjtcbiAgaXNUb2RheTogYm9vbGVhbjtcbiAgaXNIb2xpZGF5OiBib29sZWFuO1xuICBob2xpZGF5VGl0bGU/OiBzdHJpbmc7XG4gIGhvbGlkYXlDc3NDbGFzcz86IHN0cmluZztcbiAgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBbGwgYXBwb2ludG1lbnRzIGZvciB0aGlzIGRheVxuICB2aXNpYmxlQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdOyAvLyBBcHBvaW50bWVudHMgdG8gZGlzcGxheSBhcyBjaGlwc1xuICBoaWRkZW5BcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107IC8vIEFwcG9pbnRtZW50cyBoaWRkZW4gYmVoaW5kIHRoZSBiYWRnZVxuICBvdmVyZmxvd0NvdW50OiBudW1iZXI7IC8vIENvdW50IG9mIGhpZGRlbiBhcHBvaW50bWVudHMgKGxlbmd0aCBvZiBoaWRkZW5BcHBvaW50bWVudHMpXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC1zY2hlZHVsZXItbW9udGgtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItbW9udGgtdmlldy5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhGb3JtYXRQaXBlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWERyYWdEaXJlY3RpdmUsXG4gICAgQVhEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyTW9udGhWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlck1vbnRoVmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICAvLyAtLS0gSW5wdXRzIC0tLVxuICByZWFkb25seSA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIGhhc0FjdGlvbnMgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdTdGFydERlbGF5ID0gaW5wdXQoMCk7XG4gIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBkYXRlID0gaW5wdXQucmVxdWlyZWQ8QVhEYXRlVGltZT4oKTtcbiAgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIGZpcnN0RGF5T2ZXZWVrID0gaW5wdXQ8QVhEYXlPZldlZWtOYW1lPignc2F0dXJkYXknKTtcbiAgdG9vbHRpcFRlbXBsYXRlID0gaW5wdXQ8c3RyaW5nIHwgVGVtcGxhdGVSZWY8dW5rbm93bj4+KCk7XG5cbiAgLy8gLS0tIENvbnN0YW50cyAtLS1cbiAgcmVhZG9ubHkgREFZU19JTl9XRUVLID0gNztcbiAgcmVhZG9ubHkgTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkgPSAyO1xuXG4gIHByaXZhdGUgZHJhZ1N0YXJ0U2xvdElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIEludGVybmFsIG91dHB1dHMgdG8gYmUgY2F1Z2h0IGJ5IHBhcmVudCBBWFNjaGVkdWxlckNvbXBvbmVudFxuICBzbG90Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgb25BY3Rpb25DbGlja0ludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICAvLyAtLS0gRXZlbnQgSGFuZGxlcnMgLS0tXG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRPdXRwdXRNYXAgPSB7XG4gICAgc2xvdDoge1xuICAgICAgY2xpY2s6IHRoaXMuc2xvdENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLnNsb3REYmxDbGlja2VkSW50ZXJuYWwsXG4gICAgICBjb250ZXh0bWVudTogdGhpcy5zbG90UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgICBhcHBvaW50bWVudDoge1xuICAgICAgY2xpY2s6IHRoaXMuYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwsXG4gICAgICBkYmxjbGljazogdGhpcy5hcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLmFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwsXG4gICAgfSxcbiAgfTtcbiAgaGFuZGxlQXBwb2ludG1lbnRFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudFNlZ21lbnRPck9yaWdpbmFsOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50U2VnbWVudE9yT3JpZ2luYWwpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAnbW9udGgnKTsgLy8gRW5zdXJlIGl0J3Mgc3RhcnQgb2YgZGF5XG4gICAgaWYgKHNsb3REYXRhKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGhhbmRsZURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKGRhdGUuc3RhcnRPZignZGF5JyksICdtb250aCcpO1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBCYXNlIENvbXB1dGVkcyAtLS1cbiAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgbW9udGggYmFzZWQgb24gdGhlIGlucHV0IGRhdGVcbiAgbW9udGhTdGFydERhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZCA9IHRoaXMuZGF0ZSgpO1xuICAgIHJldHVybiBkID8gZC5zdGFydE9mKCdtb250aCcpIDogbnVsbDtcbiAgfSk7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIGxpc3Qgb2Ygd2Vla2RheSBuYW1lcyBiYXNlZCBvbiB0aGUgZmlyc3REYXlPZldlZWtcbiAgZGF5c0FycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRheU5hbWVzOiBBWERhdGVUaW1lW10gPSBbXTtcblxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5kYXRlKCk7IC8vIFVzZSBhIHN0YWJsZSBkYXRlIGZvciBnZW5lcmF0aW5nIHdlZWsgaGVhZGVyc1xuICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TmFtZSA9IHRoaXMuZmlyc3REYXlPZldlZWsoKTtcbiAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOdW1iZXIgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0RGF5T2ZXZWVrTnVtYmVyKGRlc2lyZWRGaXJzdERheU5hbWUpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGRheXMgdG8gc3VidHJhY3QgdG8gZ2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgd2VlayBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgbGV0IGhlYWRlclN0YXJ0RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBkYXlOYW1lcy5wdXNoKGhlYWRlclN0YXJ0RGF0ZSk7XG4gICAgICBoZWFkZXJTdGFydERhdGUgPSBoZWFkZXJTdGFydERhdGUuYWRkKCdkYXknLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRheU5hbWVzO1xuICB9KTtcblxuICAvLyAtLS0gQ2FsZW5kYXIgR3JpZCBDYWxjdWxhdGlvbiAtLS1cbiAgY2FsZW5kYXJEYXlzSW5mbyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtb250aFN0YXJ0ID0gdGhpcy5tb250aFN0YXJ0RGF0ZSgpO1xuICAgIGlmICghbW9udGhTdGFydCkgcmV0dXJuIHsgZGF5czogW10sIHdlZWtzTmVlZGVkOiAwIH07XG5cbiAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBtb250aFN0YXJ0O1xuICAgIGNvbnN0IGxhc3REYXlPZk1vbnRoID0gbW9udGhTdGFydC5lbmRPZignbW9udGgnKTtcblxuICAgIGNvbnN0IGZpcnN0RGF5R3JpZE51bSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXREYXlPZldlZWtOdW1iZXIodGhpcy5maXJzdERheU9mV2VlaygpKTtcbiAgICBjb25zdCBmaXJzdERpc3BsYXllZERheU9mV2VlayA9IGZpcnN0RGF5T2ZNb250aC5kYXlPZldlZWs7XG5cbiAgICBjb25zdCBsZWFkaW5nRGF5cyA9IChmaXJzdERpc3BsYXllZERheU9mV2VlayAtIGZpcnN0RGF5R3JpZE51bSArIHRoaXMuREFZU19JTl9XRUVLKSAlIHRoaXMuREFZU19JTl9XRUVLO1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZHcmlkID0gZmlyc3REYXlPZk1vbnRoLmFkZCgnZGF5JywgLWxlYWRpbmdEYXlzKTtcblxuICAgIC8vIERldGVybWluZSBob3cgbWFueSB0b3RhbCBkYXlzIHRvIHNob3cgdG8gZmlsbCBvdXQgdGhlIHdlZWtzXG4gICAgLy8gQSBjb21tb24gYXBwcm9hY2ggaXMgNiB3ZWVrcyB0byBlbnN1cmUgY29uc2lzdGVuY3ksIGJ1dCB5b3VyIGR5bmFtaWMgd2Vla3NOZWVkZWQgaXMgZmluZSB0b28uXG4gICAgLy8gTGV0J3Mgc3RpY2sgdG8geW91ciBkeW5hbWljIGB3ZWVrc05lZWRlZGAgYW5kIGB0b3RhbERheXNUb0dlbmVyYXRlYFxuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbGFzdERheU9mTW9udGguZGF5T2ZNb250aDtcbiAgICBjb25zdCB0b3RhbENlbGxzTWluaW11bSA9IGxlYWRpbmdEYXlzICsgZGF5c0luTW9udGg7XG4gICAgY29uc3Qgd2Vla3NOZWVkZWREeW5hbWljID0gTWF0aC5jZWlsKHRvdGFsQ2VsbHNNaW5pbXVtIC8gdGhpcy5EQVlTX0lOX1dFRUspO1xuICAgIGNvbnN0IGFjdHVhbFdlZWtzVG9TaG93ID0gTWF0aC5tYXgoNCwgTWF0aC5taW4od2Vla3NOZWVkZWREeW5hbWljLCA2KSk7IC8vIENsYW1wIHdlZWtzXG4gICAgY29uc3QgdG90YWxEYXlzVG9HZW5lcmF0ZSA9IGFjdHVhbFdlZWtzVG9TaG93ICogdGhpcy5EQVlTX0lOX1dFRUs7XG5cbiAgICBjb25zdCBkYXlzOiB7XG4gICAgICBkYXRlOiBBWERhdGVUaW1lO1xuICAgICAgaXNDdXJyZW50TW9udGg6IGJvb2xlYW47XG4gICAgICBpc1RvZGF5OiBib29sZWFuO1xuICAgICAgaXNIb2xpZGF5OiBib29sZWFuO1xuICAgICAgaG9saWRheVRpdGxlPzogc3RyaW5nO1xuICAgICAgaG9saWRheUNzc0NsYXNzPzogc3RyaW5nO1xuICAgIH1bXSA9IFtdO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIGxldCBjdXJyZW50RGF5ID0gZmlyc3REYXlPZkdyaWQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsRGF5c1RvR2VuZXJhdGU7IGkrKykge1xuICAgICAgY29uc3QgaXNIb2xpZGF5ID1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShjdXJyZW50RGF5KSB8fCB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGN1cnJlbnREYXksIHRoaXMuY2FsZW5kYXIoKSk7XG5cbiAgICAgIGxldCBob2xpZGF5VGl0bGU6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICAgICAgbGV0IGhvbGlkYXlDc3NDbGFzczogbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gICAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbEhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maW5kKChkKSA9PiBjdXJyZW50RGF5LmVxdWFsKGQuZGF0ZSwgJ2RheScpKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmludGVybmFsSG9saWRheSgpLmZpbmQoKGQpID0+IGN1cnJlbnREYXkuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgICAgICBjb25zdCBob2xpZGF5ID0gZ2xvYmFsSG9saWRheSB8fCBpbnRlcm5hbEhvbGlkYXk7XG4gICAgICAgIGlmIChob2xpZGF5KSB7XG4gICAgICAgICAgaG9saWRheVRpdGxlID0gaG9saWRheS50aXRsZTtcbiAgICAgICAgICBob2xpZGF5Q3NzQ2xhc3MgPSBob2xpZGF5LmNzc0NsYXNzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRheXMucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXksXG4gICAgICAgIGlzQ3VycmVudE1vbnRoOiBjdXJyZW50RGF5Lm1vbnRoT2ZZZWFyID09PSBtb250aFN0YXJ0Lm1vbnRoT2ZZZWFyLFxuICAgICAgICBpc1RvZGF5OiBjdXJyZW50RGF5LmVxdWFsKHRvZGF5LCAnZGF5JyksXG4gICAgICAgIGlzSG9saWRheSxcbiAgICAgICAgaG9saWRheVRpdGxlLFxuICAgICAgICBob2xpZGF5Q3NzQ2xhc3MsXG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnREYXkgPSBjdXJyZW50RGF5LmFkZCgnZGF5JywgMSk7XG4gICAgfVxuICAgIHJldHVybiB7IGRheXM6IGRheXMsIHdlZWtzTmVlZGVkOiBhY3R1YWxXZWVrc1RvU2hvdyB9O1xuICB9KTtcblxuICAvLyAtLS0gQXBwb2ludG1lbnQgR3JvdXBpbmcgLS0tXG4gIGFwcG9pbnRtZW50c0dyb3VwZWRCeURheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB7IGRheXMgfSA9IHRoaXMuY2FsZW5kYXJEYXlzSW5mbygpOyAvLyBEZXN0cnVjdHVyZSB0byBnZXQgZGF5cyBhcnJheVxuICAgIGlmIChkYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCk7XG5cbiAgICBjb25zdCB2aWV3U3RhcnREYXRlID0gZGF5c1swXS5kYXRlO1xuICAgIGNvbnN0IHZpZXdFbmREYXRlID0gZGF5c1tkYXlzLmxlbmd0aCAtIDFdLmRhdGU7XG4gICAgY29uc3QgcmVsZXZhbnRBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVyU2VydmljZS5ncm91cEFwcG9pbnRtZW50c0J5RGF5KHJlbGV2YW50QXBwb2ludG1lbnRzLCB2aWV3U3RhcnREYXRlLCB2aWV3RW5kRGF0ZSk7XG4gIH0pO1xuXG4gIC8vIC0tLSBEYXkgQ2VsbCBMYXlvdXQgQ2FsY3VsYXRpb24gLS0tXG4gIGRheUNlbGxMYXlvdXRzID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJNb250aERheUNlbGxbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHsgZGF5czogaW5pdGlhbERheXNJbmZvIH0gPSB0aGlzLmNhbGVuZGFyRGF5c0luZm8oKTtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG5cbiAgICBpZiAoaW5pdGlhbERheXNJbmZvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdOyAvLyBSZXR1cm4gZW1wdHkgYXJyYXkgaWYgbm8gZGF5cyB0byBwcm9jZXNzXG4gICAgfVxuICAgIGlmICghYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgfHwgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBJZiBubyBhcHBvaW50bWVudHMsIG1hcCBpbml0aWFsRGF5c0luZm8gdG8gdGhlIGZ1bGwgc3RydWN0dXJlIHdpdGggZW1wdHkgYXBwb2ludG1lbnQgYXJyYXlzXG4gICAgICByZXR1cm4gaW5pdGlhbERheXNJbmZvLm1hcCgoZGF5SW5mbykgPT4gKHtcbiAgICAgICAgLi4uZGF5SW5mbyxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBbXSxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogW10sXG4gICAgICAgIGhpZGRlbkFwcG9pbnRtZW50czogW10sXG4gICAgICAgIG92ZXJmbG93Q291bnQ6IDAsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXRpYWxEYXlzSW5mby5tYXAoKGRheUluZm8pID0+IHtcbiAgICAgIGNvbnN0IGRheUFzU3RhcnRPZkRheSA9IGRheUluZm8uZGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheTogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShcbiAgICAgICAgICBhcHB0LFxuICAgICAgICAgIGRheUFzU3RhcnRPZkRheSxcbiAgICAgICAgICAwLCAvLyB2aWV3U3RhcnRIb3VyIGZvciBtb250aCBjZWxsIGNvbnRleHQgKGZ1bGwgZGF5KVxuICAgICAgICAgIDI0LCAvLyB2aWV3RW5kSG91ciBmb3IgbW9udGggY2VsbCBjb250ZXh0IChmdWxsIGRheSlcbiAgICAgICAgICB0cnVlLCAvLyBpc0Z1bGxEYXlDZWxsQ29udGV4dCA9IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBzZWdtZW50c0ZvclRoaXNEYXkucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3J0ZWRTZWdtZW50cyA9IG9yZGVyQnkoXG4gICAgICAgIHNlZ21lbnRzRm9yVGhpc0RheSxcbiAgICAgICAgW1xuICAgICAgICAgIChzKSA9PiAocy5hbGxEYXkgPyAwIDogMSksIC8vIFNlZ21lbnRzIG1hcmtlZCBhcyBhbGxEYXkgZmlyc3RcbiAgICAgICAgICAocykgPT4gcy5vcmlnaW5hbFN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFRoZW4gYnkgb3JpZ2luYWwgc3RhcnQgdGltZVxuICAgICAgICAgIChzKSA9PiBzLm9yaWdpbmFsRW5kRGF0ZS5nZXRUaW1lKCkgLSBzLm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSwgLy8gVGhlbiBieSBkdXJhdGlvbiAobG9uZ2VyIGZpcnN0KVxuICAgICAgICAgIChzKSA9PiBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpID8/ICcnLCAvLyBUaGVuIGJ5IHRpdGxlXG4gICAgICAgIF0sXG4gICAgICAgIFsnYXNjJywgJ2FzYycsICdkZXNjJywgJ2FzYyddLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdmlzaWJsZUFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKDAsIHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuICAgICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gc29ydGVkU2VnbWVudHMuc2xpY2UodGhpcy5NQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSk7XG4gICAgICBjb25zdCBvdmVyZmxvd0NvdW50ID0gaGlkZGVuQXBwb2ludG1lbnRzLmxlbmd0aDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGF5SW5mbyxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBzb3J0ZWRTZWdtZW50cyxcbiAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50cyxcbiAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzLFxuICAgICAgICBvdmVyZmxvd0NvdW50LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tIER5bmFtaWMgR3JpZCBSb3dzIC0tLVxuICBncmlkVGVtcGxhdGVSb3dzU3R5bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgeyB3ZWVrc05lZWRlZCB9ID0gdGhpcy5jYWxlbmRhckRheXNJbmZvKCk7XG4gICAgaWYgKCF3ZWVrc05lZWRlZCB8fCB3ZWVrc05lZWRlZCA8PSAwKSB7XG4gICAgICByZXR1cm4gYHJlcGVhdCg2LCBtaW5tYXgoMCwgMWZyKSlgOyAvLyBGYWxsYmFjaywgZW5zdXJlcyBncmlkIGlzIGF0IGxlYXN0IHNvbWV3aGF0IHNlbnNpYmxlXG4gICAgfVxuICAgIHJldHVybiBgcmVwZWF0KCR7d2Vla3NOZWVkZWR9LCBtaW5tYXgoMCwgMWZyKSlgOyAvLyBVc2UgMWZyIGZvciBlcXVhbCBkaXN0cmlidXRpb25cbiAgfSk7XG5cbiAgZ2V0U2xvdElkKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IGRyb3BMaXN0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICAgIC5lbGVtZW50c0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSlcbiAgICAgIC5maW5kKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnc2xvdElkJ10gIT09IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kcmFnU3RhcnRTbG90SWQuc2V0KGRyb3BMaXN0RWxlbWVudCA/IGRyb3BMaXN0RWxlbWVudC5kYXRhc2V0WydzbG90SWQnXSA6IG51bGwpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5heC1zdGF0ZS1yZWFkb25seScpIGdldCBpc1JlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtY29udGFpbmVyXCI+XG4gIDwhLS0gV2Vla2RheSBIZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtd2Vla2RheXNcIj5cbiAgICBAZm9yIChkYXkgb2YgZGF5c0FycmF5KCk7IHRyYWNrIGRheS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC13ZWVrZGF5XCI+XG4gICAgICAgIHt7IGRheSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2FsZW5kYXIgR3JpZCAtLT5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1ncmlkXCIgW3N0eWxlLmdyaWRUZW1wbGF0ZVJvd3NdPVwiZ3JpZFRlbXBsYXRlUm93c1N0eWxlKClcIj5cbiAgICBAZm9yIChkYXlDZWxsIG9mIGRheUNlbGxMYXlvdXRzKCk7IHRyYWNrIGRheUNlbGwuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyb3Bab25lXG4gICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlDZWxsLmRhdGUpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheUNlbGwuZGF0ZSlcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5Q2VsbC5kYXRlKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWRheS1jZWxsIHt7XG4gICAgICAgICAgZGF5Q2VsbC5pc0hvbGlkYXkgPyAoZGF5Q2VsbC5ob2xpZGF5Q3NzQ2xhc3MgPz8gJ2F4LXN0YXRlLWhvbGlkYXknKSA6ICcnXG4gICAgICAgIH19XCJcbiAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImRheUNlbGwuaXNUb2RheVwiXG4gICAgICAgIFtjbGFzcy5heC1vdGhlci1tb250aF09XCIhZGF5Q2VsbC5pc0N1cnJlbnRNb250aFwiXG4gICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJkYXlDZWxsLmRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1kYXktaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LW51bWJlciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIiBbYXhUb29sdGlwXT1cImRheUNlbGwuaG9saWRheVRpdGxlID8/ICcnXCI+XG4gICAgICAgICAgICB7eyBkYXlDZWxsLmRhdGUuZGF5T2ZNb250aCB9fVxuXG4gICAgICAgICAgICBAaWYgKGRheUNlbGwuaG9saWRheVRpdGxlKSB7XG4gICAgICAgICAgICAgICgge3sgZGF5Q2VsbC5ob2xpZGF5VGl0bGUgfX0gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtZGF5LWFwcG9pbnRtZW50c1wiPlxuICAgICAgICAgIDwhLS0gVmlzaWJsZSBBcHBvaW50bWVudCBTZWdtZW50cyAtLT5cbiAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheUNlbGwudmlzaWJsZUFwcG9pbnRtZW50czsgdHJhY2sgc2VnbWVudC5pZCArIHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgIFtkcmFnQ3Vyc29yXT1cIidncmFiJ1wiXG4gICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJzZWdtZW50XCJcbiAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgc2VnbWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZW1wbGF0ZSgpXG4gICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICA6IHNlZ21lbnQudGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyknKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtYXBwb2ludG1lbnQtY2hpcFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3MgPz8gYGF4LXNjaGVkdWxlci0ke3NlZ21lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNvbnRpbnVhdGlvbi10by1uZXh0XT1cInNlZ21lbnQuaXNDb250aW51YXRpb25Ub05leHREYXkgJiYgIXNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNvbnRpbnVhdGlvbi1mcm9tLXByZXZdPVwic2VnbWVudC5pc0NvbnRpbnVhdGlvbkZyb21QcmV2aW91c0RheSAmJiAhc2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1hcHBvaW50bWVudC1jaGlwLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBzZWdtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKCFzZWdtZW50LmFsbERheSkge1xuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAge3sgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tIE92ZXJmbG93IEJhZGdlIGFuZCBQb3BvdmVyIC0tPlxuICAgICAgICAgIEBpZiAoZGF5Q2VsbC5vdmVyZmxvd0NvdW50ID4gMCkge1xuICAgICAgICAgICAgPGRpdiAjbW9yZUFwcG9pbnRtZW50cyBjbGFzcz1cImF4LXNjaGVkdWxlci1tb250aC1vdmVyZmxvdy1iYWRnZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgPCEtLSBTdG9wIHByb3BhZ2F0aW9uIHRvIHByZXZlbnQgc2xvdCBjbGljayAtLT5cbiAgICAgICAgICAgICAgK3t7XG4gICAgICAgICAgICAgICAgJ0BhY29yZXg6Y29tbW9uLmdlbmVyYWwubW9yZS1pdGVtcycgfCB0cmFuc2xhdGU6IHsgcGFyYW1zOiB7IG51bWJlcjogZGF5Q2VsbC5vdmVyZmxvd0NvdW50IH0gfSB8IGFzeW5jXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwibW9yZUFwcG9pbnRtZW50c1wiIHBsYWNlbWVudD1cImJvdHRvbS1zdGFydFwiIHRyaWdnZXI9XCJjbGlja1wiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgYXhEcm9wWm9uZVxuICAgICAgICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LW92ZXJsYXktcGFuZSBheC1zY2hlZHVsZXItcG9wb3ZlciBheC1zY2hlZHVsZXItbW9udGgtcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChzZWdtZW50IG9mIGRheUNlbGwuaGlkZGVuQXBwb2ludG1lbnRzOyB0cmFjayBzZWdtZW50LmlkICsgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBzZWdtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRlbXBsYXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50LmFsbERheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcgKCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKScpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VnbWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgICBbYXhUb29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1hcHBvaW50bWVudC1jaGlwLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBzZWdtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCFzZWdtZW50LmFsbERheSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vcmlnaW5hbFN0YXJ0RGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","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, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.endDayHour = input.required(...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input.required(...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"processedSegmentsForLayout\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"hoursArray\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"appointmentLayouts\" }] : []));\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.1.3\", ngImport: i0, type: AXSchedulerTimelineDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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 [axTooltipDisabled]=\\\"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: \"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: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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 [axTooltipDisabled]=\\\"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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QVksV0FBVyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsSUFBNEMsVUFBVTtRQUNwRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDOzhHQTNOVSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyxpN0RBRm5DLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLGlEQ2xEekYsdzdGQXFFQSx1aEZENUJJLE9BQU8sb0ZBQ1AsMkJBQTJCLHlMQUczQixlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsd0JBQXdCLHNFQUN4QixrQkFBa0IsME1BTGxCLFlBQVksMENBQ1osU0FBUzs7MkZBUUEsbUNBQW1DO2tCQWxCL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsbUJBR3pCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsT0FBTzt3QkFDUCwyQkFBMkI7d0JBQzNCLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixrQkFBa0I7cUJBQ25CLGFBQ1UsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxxQ0FBcUMsRUFBRSxDQUFDOzhCQTJOM0MsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENvbXBvbmVudCwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhEcmFnRGlyZWN0aXZlLCBBWERyb3Bab25lRGlyZWN0aXZlLCBBWERyb3Bab25lRHJvcEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yR2VuZXJpY0NvbXBvbmVudCwgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhDYWxlbmRhclNlcnZpY2UsIEFYRGF0ZVRpbWUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZGF0ZS10aW1lJztcbmltcG9ydCB7IEFYRm9ybWF0UGlwZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERPQ1VNRU5ULFxuICBIb3N0QmluZGluZyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbn0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLmNsYXNzJztcbmltcG9ydCB7XG4gIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50LFxuICBBWFNjaGVkdWxlckNvbXBvbmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50LFxuICAgIEFYVG9vbHRpcERpcmVjdGl2ZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCBleHRlbmRzIE5YQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgc2NoZWR1bGVyID0gaW5qZWN0KEFYU2NoZWR1bGVyQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcblxuICByZWFkb25seSBHQVBfUFggPSAxO1xuXG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICBwcml2YXRlIGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogUHJvY2Vzc2VzIG9yaWdpbmFsIGFwcG9pbnRtZW50cyB0byBnZXQgc2VnbWVudHMgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBkYXkgYW5kIGl0cyB2aWV3YWJsZSBob3Vycy5cbiAgICogRmlsdGVycyBvdXQgb3JpZ2luYWwgYWxsLWRheSBldmVudHMuXG4gICAqL1xuICBwcm9jZXNzZWRTZWdtZW50c0ZvckxheW91dCA9IGNvbXB1dGVkPEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGNvbnN0IGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzID0gdGhpcy5hcHBvaW50bWVudHMoKTtcbiAgICBjb25zdCB2aWV3Q29uZmlnU3RhcnRIb3VyID0gdGhpcy5zdGFydERheUhvdXIoKTtcbiAgICBjb25zdCB2aWV3Q29uZmlnRW5kSG91ciA9IHRoaXMuZW5kRGF5SG91cigpO1xuXG4gICAgaWYgKCF2aWV3RGF0ZSB8fCAhYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgfHwgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc2VnbWVudHNPblRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgIGlmIChhcHB0LmFsbERheSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRDbG9uZWRBcHBvaW50bWVudFNlZ21lbnRPbkRheShcbiAgICAgICAgYXBwdCxcbiAgICAgICAgdmlld0RhdGUsXG4gICAgICAgIHZpZXdDb25maWdTdGFydEhvdXIsXG4gICAgICAgIHZpZXdDb25maWdFbmRIb3VyLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIHNlZ21lbnRzT25UaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50c09uVGhpc0RheTtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3RpbWVsaW5lLWRheScpO1xuICAgIGlmIChzbG90RGF0YSlcbiAgICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5oYW5kbGVFdmVudChcbiAgICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgICAgdGhpcy5ldmVudE91dHB1dE1hcCxcbiAgICAgICAgJ3Nsb3QnLFxuICAgICAgKTtcbiAgfVxuICBoYW5kbGVEcm9wKGU6IEFYRHJvcFpvbmVEcm9wRXZlbnQsIHN0YXJ0RGF0ZTogQVhEYXRlVGltZSkge1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3RpbWVsaW5lLWRheScpO1xuICAgIGNvbnN0IGRyb3BwZWRJdGVtID0gZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoZHJvcHBlZEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwuZW1pdCh7XG4gICAgICBkcm9wRXZlbnQ6IGUsXG4gICAgICBzbG90OiBzbG90RGF0YSxcbiAgICAgIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIsXG4gICAgICBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICB9KTtcbiAgfVxuXG4gIGhvdXJzQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgbGV0IHRpbWUgPSB0aGlzLmRhdGUoKTtcbiAgICBpZiAoIXRpbWUpIHJldHVybiBbXTtcbiAgICB0aW1lID0gdGltZS5zZXQoJ2hvdXInLCB0aGlzLnN0YXJ0RGF5SG91cigpKS5zdGFydE9mKCdob3VyJyk7XG4gICAgY29uc3QgaG91cnMgPSBbdGltZV07XG4gICAgd2hpbGUgKHRpbWUuaG91ciA8IHRoaXMuZW5kRGF5SG91cigpIC0gMSkge1xuICAgICAgdGltZSA9IHRpbWUuYWRkKCdob3VyJywgMSk7XG4gICAgICBob3Vycy5wdXNoKHRpbWUpO1xuICAgIH1cbiAgICByZXR1cm4gaG91cnM7XG4gIH0pO1xuXG4gIC8vIC0tLSBBcHBvaW50bWVudCBMYXlvdXQgQ2FsY3VsYXRpb24gLS0tXG4gIGFwcG9pbnRtZW50TGF5b3V0cyA9IGNvbXB1dGVkKCgpOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0W10gPT4ge1xuICAgIGNvbnN0IGZpbmFsTGF5b3V0czogQVhTY2hlZHVsZXJBcHBvaW50bWVudExheW91dFtdID0gW107XG4gICAgY29uc3Qgdmlld0NvbmZpZ1N0YXJ0SG91ciA9IHRoaXMuc3RhcnREYXlIb3VyKCk7XG4gICAgY29uc3Qgdmlld0NvbmZpZ0VuZEhvdXIgPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICBjb25zdCBhcHBvaW50bWVudHNUb0xheW91dCA9IHRoaXMucHJvY2Vzc2VkU2VnbWVudHNGb3JMYXlvdXQoKTsgLy8gVVNFIFNFR01FTlRTXG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygdmlld0NvbmZpZ1N0YXJ0SG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGVvZiB2aWV3Q29uZmlnRW5kSG91ciAhPT0gJ251bWJlcicgfHxcbiAgICAgIGFwcG9pbnRtZW50c1RvTGF5b3V0Lmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuIGZpbmFsTGF5b3V0cztcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0ZWRBcHBvaW50bWVudHMgPSBvcmRlckJ5KFxuICAgICAgYXBwb2ludG1lbnRzVG9MYXlvdXQsXG4gICAgICBbKHNlZykgPT4gc2VnLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIChzZWcpID0+IHNlZy5vcmlnaW5hbEVuZERhdGUuZ2V0VGltZSgpXSxcbiAgICAgIFsnYXNjJywgJ2Rlc2MnXSxcbiAgICApO1xuXG4gICAgY29uc3Qgcm93RW5kVGltZXM6IEFYRGF0ZVRpbWVbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNvcnRlZEFwcG9pbnRtZW50cykge1xuICAgICAgY29uc3QgaG9yaXpMYXlvdXQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlVGltZWxpbmVMYXlvdXQoXG4gICAgICAgIHNlZ21lbnQsIC8vIFBhc3MgdGhlIHNlZ21lbnRcbiAgICAgICAgdmlld0NvbmZpZ1N0YXJ0SG91cixcbiAgICAgICAgdmlld0NvbmZpZ0VuZEhvdXIsXG4gICAgICApO1xuXG4gICAgICBpZiAoIWhvcml6TGF5b3V0KSBjb250aW51ZTsgLy8gU2VnbWVudCBpcyBvdXRzaWRlIHRoZSB2aWV3YWJsZSBob3VyIHJhbmdlIG9yIGludmFsaWRcblxuICAgICAgLy8gRm9yIG92ZXJsYXAgY2hlY2ssIHVzZSB0aGUgc2VnbWVudCdzIHN0YXJ0IGFuZCBlbmQgdGltZXNcbiAgICAgIGNvbnN0IHNlZ21lbnRTdGFydFRpbWUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnbWVudC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBzZWdtZW50RW5kVGltZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShzZWdtZW50LmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG5cbiAgICAgIGxldCBhc3NpZ25lZFJvd0luZGV4ID0gLTE7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0VuZFRpbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIElmIHRoaXMgc2VnbWVudCBzdGFydHMgQUZURVIgT1IgQVQgdGhlIHRpbWUgdGhlIHJvdyBiZWNvbWVzIGZyZWVcbiAgICAgICAgaWYgKHNlZ21lbnRTdGFydFRpbWUuY29tcGFyZShyb3dFbmRUaW1lc1tpXSwgJ21pbnV0ZScpID49IDApIHtcbiAgICAgICAgICBhc3NpZ25lZFJvd0luZGV4ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXNzaWduZWRSb3dJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgYXNzaWduZWRSb3dJbmRleCA9IHJvd0VuZFRpbWVzLmxlbmd0aDtcbiAgICAgICAgcm93RW5kVGltZXMucHVzaChzZWdtZW50RW5kVGltZSk7IC8vIEFkZCBzZWdtZW50J3MgZW5kIHRpbWUgZm9yIHRoZSBuZXcgcm93XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIGVuZCB0aW1lIGZvciB0aGUgYXNzaWduZWQgcm93IHdpdGggdGhpcyBzZWdtZW50J3MgZW5kIHRpbWVcbiAgICAgICAgcm93RW5kVGltZXNbYXNzaWduZWRSb3dJbmRleF0gPSBzZWdtZW50RW5kVGltZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF5b3V0SGVpZ2h0ID0gJ3ZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLXRpbWVsaW5lLXZpZXctYmxvY2tzLWhlaWdodCknOyAvLyBDU1MgdmFyaWFibGUgZm9yIGhlaWdodFxuICAgICAgY29uc3QgbGF5b3V0TGVmdCA9IGhvcml6TGF5b3V0LmxlZnQ7XG4gICAgICBjb25zdCBsYXlvdXRXaWR0aCA9IGBjYWxjKCR7aG9yaXpMYXlvdXQud2lkdGh9IC0gJHt0aGlzLkdBUF9QWH1weClgOyAvLyBBcHBseSBob3Jpem9udGFsIGdhcCBpZiBpdGVtcyBhcmUgc2lkZS1ieS1zaWRlIHdpdGhpbiBhIHJvdyAobm90IHR5cGljYWwgZm9yIHRoaXMgc3RhY2tpbmcpXG4gICAgICBjb25zdCBsYXlvdXRUb3AgPSBgY2FsYygke2Fzc2lnbmVkUm93SW5kZXh9ICogKCR7bGF5b3V0SGVpZ2h0fSArICR7dGhpcy5HQVBfUFh9cHgpKWA7IC8vIFZlcnRpY2FsIHN0YWNraW5nIHdpdGggZ2FwXG5cbiAgICAgIGZpbmFsTGF5b3V0cy5wdXNoKHtcbiAgICAgICAgYXBwb2ludG1lbnQ6IHNlZ21lbnQsIC8vIFN0b3JlIHRoZSBzZWdtZW50IGRhdGFcbiAgICAgICAgbGF5b3V0TGVmdCxcbiAgICAgICAgbGF5b3V0V2lkdGgsXG4gICAgICAgIGxheW91dFRvcCxcbiAgICAgICAgbGF5b3V0SGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmFsTGF5b3V0cztcbiAgfSk7XG5cbiAgZ2V0U2xvdElkKGU6IFBvaW50ZXJFdmVudCkge1xuICAgIGNvbnN0IGRyb3BMaXN0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnRcbiAgICAgIC5lbGVtZW50c0Zyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSlcbiAgICAgIC5maW5kKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50ID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuZGF0YXNldFsnc2xvdElkJ10gIT09IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kcmFnU3RhcnRTbG90SWQuc2V0KGRyb3BMaXN0RWxlbWVudCA/IGRyb3BMaXN0RWxlbWVudC5kYXRhc2V0WydzbG90SWQnXSA6IG51bGwpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5heC1zdGF0ZS1yZWFkb25seScpIGdldCBpc1JlYWRvbmx5KCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtaGVhZGVyXCI+XG4gIEBmb3IgKGhvdXIgb2YgaG91cnNBcnJheSgpOyB0cmFjayBob3VyLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1oZWFkZXItaG91cnNcIj5cbiAgICAgIDxzcGFuPnt7IGhvdXIgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWNvbnRlbnRcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICBAZm9yIChsYXlvdXQgb2YgYXBwb2ludG1lbnRMYXlvdXRzKCk7IHRyYWNrIGxheW91dC5hcHBvaW50bWVudC5pZCkge1xuICAgICAgPGRpdlxuICAgICAgICBheERyYWdcbiAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgW2RyYWdEaXNhYmxlZF09XCIhZHJhZ2dhYmxlKCkgfHwgbGF5b3V0LmFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICBbZHJhZ0RhdGFdPVwibGF5b3V0LmFwcG9pbnRtZW50XCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBsYXlvdXQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBsYXlvdXQuYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwibGF5b3V0LmxheW91dFdpZHRoXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCJsYXlvdXQubGF5b3V0SGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnRcIlxuICAgICAgICBbc3R5bGUuaW5zZXRCbG9ja1N0YXJ0XT1cImxheW91dC5sYXlvdXRUb3BcIlxuICAgICAgICBbc3R5bGUuaW5zZXRJbmxpbmVTdGFydF09XCJsYXlvdXQubGF5b3V0TGVmdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImxheW91dC5hcHBvaW50bWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7bGF5b3V0LmFwcG9pbnRtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgIFtheFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgPlxuICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBsYXlvdXQuYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgIDxheC1pY29uXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGxheW91dC5hcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgbGF5b3V0LmFwcG9pbnRtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgfX1cbiAgICAgICAgICAtXG4gICAgICAgICAge3sgbGF5b3V0LmFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICA8L2F4LXN1YnRpdGxlPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1zbG90LXJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIEBmb3IgKHRpbWUgb2YgaG91cnNBcnJheSgpOyB0cmFjayB0aW1lLmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGF4RHJvcFpvbmVcbiAgICAgICAgI3pvbmU9XCJheERyb3Bab25lXCJcbiAgICAgICAgKG9uRWxlbWVudERyb3ApPVwiaGFuZGxlRHJvcCgkZXZlbnQsIHRpbWUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLXNsb3QtY2VsbFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCB0aW1lKVwiXG4gICAgICAgIFthdHRyLmRhdGEtc2xvdC1pZF09XCJ0aW1lLmZvcm1hdCgnWVlZWU1NREQtSEhtbScpXCJcbiAgICAgID48L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+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, 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, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dragStartSlotId = signal(null, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"processedDayData\" }] : []));\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 globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\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.1.3\", ngImport: i0, type: AXSchedulerTimelineMonthViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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-state-today]=\\\"isToday(dayData.date)\\\"\\n class=\\\"ax-scheduler-month-header-date-day {{\\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"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: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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-state-today]=\\\"isToday(dayData.date)\\\"\\n class=\\\"ax-scheduler-month-header-date-day {{\\n dayData.holiday.state !== 'none' ? (dayData.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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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QUM7SUFDekIsQ0FBQzs4R0F4TFUscUNBQXFDO2tHQUFyQyxxQ0FBcUMsaXFEQUZyQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUscUNBQXFDLEVBQUUsQ0FBQyxpREM3RDNGLDJtUEE4SkEsc3JKRDVHSSxPQUFPLG9GQUNQLDJCQUEyQix5TEFJM0Isa0JBQWtCLG9TQUNsQixlQUFlLDJUQUNmLG1CQUFtQiw0SkFDbkIsa0JBQWtCLCtNQUNsQix3QkFBd0IsaUVBUHhCLFlBQVksMENBQ1osU0FBUyx5Q0FDVCxnQkFBZ0I7OzJGQVNQLHFDQUFxQztrQkFwQmpELFNBQVM7K0JBQ0Usa0NBQWtDLG1CQUczQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHdCQUF3QjtxQkFDekIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLHVDQUF1QyxFQUFFLENBQUM7OEJBd0w3QyxVQUFVO3NCQUFyRCxXQUFXO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29tcG9uZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWERyYWdEaXJlY3RpdmUsIEFYRHJvcFpvbmVEaXJlY3RpdmUsIEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LCBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wb3Zlcic7XG5pbXBvcnQgeyBBWFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgQVhIb2xpZGF5RGF0ZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0b3JQaXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBET0NVTUVOVCxcbiAgSG9zdEJpbmRpbmcsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCwgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YSB7XG4gIGRhdGU6IEFYRGF0ZVRpbWU7XG4gIC8vIFRoZXNlIHdpbGwgYmUgc2VnbWVudHMsIHByZWNpc2VseSBjbGlwcGVkIGFuZCBmbGFnZ2VkIGZvciB0aGlzIGRheVxuICB2aXNpYmxlQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xuICBoaWRkZW5BcHBvaW50bWVudHM6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W107XG4gIG1vcmVDb3VudDogbnVtYmVyO1xuICAvLyBZb3UgbWlnaHQgYWxzbyB3YW50IHRvIHN0b3JlIGFsbCBzZWdtZW50cyBmb3IgdGhlIGRheSBpZiBuZWVkZWQgZWxzZXdoZXJlXG4gIC8vIGFsbFNlZ21lbnRzRm9yRGF5OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFR5cGVbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFYRm9ybWF0UGlwZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhUcmFuc2xhdG9yUGlwZSxcbiAgICBBWFBvcG92ZXJDb21wb25lbnQsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNb250aFZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHNjaGVkdWxlciA9IGluamVjdChBWFNjaGVkdWxlckNvbXBvbmVudCk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfVklTSUJMRV9BUFBPSU5UTUVOVFNfUEVSX0RBWSA9IDM7XG5cbiAgcmVhZG9ubHkgPSBpbnB1dChmYWxzZSk7XG4gIGRyYWdnYWJsZSA9IGlucHV0KHRydWUpO1xuICBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnU3RhcnREZWxheSA9IGlucHV0KDApO1xuICBjYWxlbmRhciA9IGlucHV0PHN0cmluZz4oKTtcbiAgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICBwcml2YXRlIGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcm9jZXNzZWREYXlEYXRhID0gY29tcHV0ZWQ8VGltZWxpbmVNb250aFZpZXdEYXlEYXRhW10+KCgpID0+IHtcbiAgICBjb25zdCBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cyA9IHRoaXMuYXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgbW9udGhTdGFydERhdGUgPSB0aGlzLmRhdGUoKS5zdGFydE9mKCdtb250aCcpO1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gbW9udGhTdGFydERhdGUuZW5kT2YoJ21vbnRoJykuZGF5T2ZNb250aDtcblxuICAgIGlmICghYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCBkYXlEYXRlID0gbW9udGhTdGFydERhdGUuYWRkKCdkYXknLCBpKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGU6IGRheURhdGUsXG4gICAgICAgICAgdmlzaWJsZUFwcG9pbnRtZW50czogW10sXG4gICAgICAgICAgaGlkZGVuQXBwb2ludG1lbnRzOiBbXSxcbiAgICAgICAgICBtb3JlQ291bnQ6IDAsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRpbWVsaW5lTW9udGhWaWV3RGF5RGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRheXNJbk1vbnRoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlEYXRlID0gbW9udGhTdGFydERhdGUuYWRkKCdkYXknLCBpKS5zdGFydE9mKCdkYXknKTsgLy8gRW5zdXJlIGl0J3Mgc3RhcnQgb2YgZGF5XG4gICAgICBjb25zdCBzZWdtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhcHB0IG9mIGFsbE9yaWdpbmFsQXBwb2ludG1lbnRzKSB7XG4gICAgICAgIC8vIEZvciBUaW1lbGluZSBNb250aCBWaWV3LCBlYWNoIGRheSBpcyBhIHJvdy4gV2Ugd2FudCBzZWdtZW50cyBmb3IgdGhlIGZ1bGwgMjRoIG9mIHRoYXQgZGF5LlxuICAgICAgICAvLyBUaGUgdmlldydzIHN0YXJ0SG91ci9lbmRIb3VyIGFyZSBOT1QgdXNlZCB0byBjbGlwIHNlZ21lbnRzIGhlcmUsXG4gICAgICAgIC8vIGFzIGl0J3Mgbm90IGEgaG9yaXpvbnRhbCB0aW1lIHNjYWxlICp3aXRoaW4qIHRoZSBkYXkgcm93LlxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KGFwcHQsIGN1cnJlbnREYXlEYXRlLCAwLCAyNCwgdHJ1ZSk7XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU29ydCBzZWdtZW50czogYWxsLWRheSBmaXJzdCwgdGhlbiBieSBzZWdtZW50IHN0YXJ0IHRpbWUgKHdoaWNoIGlzIGNsaXBwZWQgdG8gdGhlIGRheSlcbiAgICAgIGNvbnN0IHNvcnRlZFNlZ21lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbXG4gICAgICAgICAgKHMpID0+IChzLmFsbERheSA/IDAgOiAxKSwgLy8gU2VnbWVudHMgbWFya2VkIGFzIGFsbERheSBmaXJzdFxuICAgICAgICAgIChzKSA9PiBzLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFNlZ21lbnQncyBzdGFydCB0aW1lIG9uIHRoaXMgZGF5XG4gICAgICAgICAgKHMpID0+IHMuZW5kRGF0ZS5nZXRUaW1lKCkgLSBzLnN0YXJ0RGF0ZS5nZXRUaW1lKCksIC8vIFNlZ21lbnQncyBkdXJhdGlvbiBvbiB0aGlzIGRheVxuICAgICAgICAgIChzKSA9PiBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxuICAgICAgICBdLFxuICAgICAgICBbJ2FzYycsICdhc2MnLCAnZGVzYycsICdhc2MnXSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHZpc2libGVBcHBvaW50bWVudHMgPSBzb3J0ZWRTZWdtZW50cy5zbGljZSgwLCB0aGlzLk1BWF9WSVNJQkxFX0FQUE9JTlRNRU5UU19QRVJfREFZKTtcbiAgICAgIGNvbnN0IGhpZGRlbkFwcG9pbnRtZW50cyA9IHNvcnRlZFNlZ21lbnRzLnNsaWNlKHRoaXMuTUFYX1ZJU0lCTEVfQVBQT0lOVE1FTlRTX1BFUl9EQVkpO1xuXG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXlEYXRlLFxuICAgICAgICB2aXNpYmxlQXBwb2ludG1lbnRzOiB2aXNpYmxlQXBwb2ludG1lbnRzLFxuICAgICAgICBoaWRkZW5BcHBvaW50bWVudHM6IGhpZGRlbkFwcG9pbnRtZW50cyxcbiAgICAgICAgbW9yZUNvdW50OiBoaWRkZW5BcHBvaW50bWVudHMubGVuZ3RoLFxuICAgICAgICBob2xpZGF5OiB0aGlzLmlzSG9saWRheShjdXJyZW50RGF5RGF0ZSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gSW50ZXJuYWwgb3V0cHV0cyB0byBiZSBjYXVnaHQgYnkgcGFyZW50IEFYU2NoZWR1bGVyQ29tcG9uZW50XG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIC8vIC0tLSBFdmVudCBIYW5kbGVycyAtLS1cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuICBoYW5kbGVBcHBvaW50bWVudEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UmVmID0ge1xuICAgICAgLi4ub3JpZ2luYWxBcHBvaW50bWVudCxcbiAgICAgIGVuZERhdGU6IG9yaWdpbmFsQXBwb2ludG1lbnQuZW5kRGF0ZSxcbiAgICAgIHN0YXJ0RGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5zdGFydERhdGUsXG4gICAgfTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICB7IG5hdGl2ZUV2ZW50OiBtb3VzZUV2ZW50LCBhcHBvaW50bWVudDogYXBwb2ludG1lbnRSZWYsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cbiAgaGFuZGxlU2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICAvLyBkYXRlIGlzIHRoZSBzcGVjaWZpYyBkYXlcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShkYXRlLnN0YXJ0T2YoJ2RheScpLCAndGltZWxpbmUtbW9udGgnKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cbiAgaGFuZGxlRHJvcChlOiBBWERyb3Bab25lRHJvcEV2ZW50LCBkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgLy8gZGF0ZSBpcyB0aGUgc3BlY2lmaWMgZGF5XG4gICAgY29uc3Qgc2xvdERhdGEgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0U2xvdERhdGEoZGF0ZS5zdGFydE9mKCdkYXknKSwgJ3RpbWVsaW5lLW1vbnRoJyk7XG4gICAgY29uc3QgZHJvcHBlZEl0ZW0gPSBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChkcm9wcGVkSXRlbSk7XG4gICAgY29uc3QgYXBwb2ludG1lbnRSZWYgPSB7XG4gICAgICAuLi5vcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgZW5kRGF0ZTogb3JpZ2luYWxBcHBvaW50bWVudC5lbmREYXRlLFxuICAgICAgc3RhcnREYXRlOiBvcmlnaW5hbEFwcG9pbnRtZW50LnN0YXJ0RGF0ZSxcbiAgICB9O1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBhcHBvaW50bWVudFJlZixcbiAgICAgIGlzU2FtZVNsb3REcm9wOiB0aGlzLmRyYWdTdGFydFNsb3RJZCgpID09PSBlLnNlbmRlci5lbGVtZW50KCkuZGF0YXNldFsnc2xvdElkJ10sXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGFwcG9pbnRtZW50SXRlbTogQVhTY2hlZHVsZXJBcHBvaW50bWVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwb2ludG1lbnQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0T3JpZ2luYWxBcHBvaW50bWVudChhcHBvaW50bWVudEl0ZW0pO1xuICAgIHRoaXMub25BY3Rpb25DbGlja0ludGVybmFsLmVtaXQoe1xuICAgICAgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKG5ldyBEYXRlKCkpO1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRvZGF5LCAnZGF5Jyk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBpc0hvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNIb2xpZGF5KGRhdGUpO1xuICAgIGlmIChpc0hvbGlkYXkpIHtcbiAgICAgIGNvbnN0IGdsb2JhbEhvbGlkYXkgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ob2xpZGF5cy5maW5kKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKTtcbiAgICAgIGNvbnN0IGludGVybmFsSG9saWRheSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5pbnRlcm5hbEhvbGlkYXkoKS5maW5kKChkKSA9PiBkYXRlLmVxdWFsKGQuZGF0ZSwgJ2RheScpKTtcbiAgICAgIGNvbnN0IGhvbGlkYXkgPSBnbG9iYWxIb2xpZGF5IHx8IGludGVybmFsSG9saWRheTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXRlOiAnaG9saWRheScsXG4gICAgICAgIGhvbGlkYXksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpc1dlZWtlbmQgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgcmV0dXJuIHsgc3RhdGU6ICd3ZWVrZW5kJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICBnZXRTbG90SWQoZTogUG9pbnRlckV2ZW50KSB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKVxuICAgICAgLmZpbmQoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5kYXRhc2V0WydzbG90SWQnXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYWdTdGFydFNsb3RJZC5zZXQoZHJvcExpc3RFbGVtZW50ID8gZHJvcExpc3RFbGVtZW50LmRhdGFzZXRbJ3Nsb3RJZCddIDogbnVsbCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JykgZ2V0IGlzUmVhZG9ubHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC1jb250YWluZXJcIj5cbiAgQGZvciAoZGF5RGF0YSBvZiBwcm9jZXNzZWREYXlEYXRhKCk7IHRyYWNrIGRheURhdGEuZGF0ZS5kYXRlLmdldFRpbWUoKSkge1xuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWhlYWRlclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImlzVG9kYXkoZGF5RGF0YS5kYXRlKVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItbW9udGgtaGVhZGVyLWRhdGUtZGF5IHt7XG4gICAgICAgICAgICBkYXlEYXRhLmhvbGlkYXkuc3RhdGUgIT09ICdub25lJyA/IChkYXlEYXRhLmhvbGlkYXkuaG9saWRheT8uY3NzQ2xhc3MgPz8gJ2F4LXN0YXRlLWhvbGlkYXknKSA6ICcnXG4gICAgICAgICAgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWhlYWRlci1kYXRlLWRheS1jaGFyIGF4LXNjaGVkdWxlci10cnVuY2F0ZVwiXG4gICAgICAgICAgICBbYXhUb29sdGlwXT1cImRheURhdGEuaG9saWRheS5ob2xpZGF5Py50aXRsZSA/PyAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZGF5RGF0YS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ2RkZGQnLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIEBpZiAoZGF5RGF0YS5ob2xpZGF5LnN0YXRlID09PSAnaG9saWRheScgJiYgZGF5RGF0YS5ob2xpZGF5LmhvbGlkYXkudGl0bGUpIHtcbiAgICAgICAgICAgICAgKCB7eyBkYXlEYXRhLmhvbGlkYXkuaG9saWRheS50aXRsZSB9fSApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICAgIHt7IGRheURhdGEuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdERCcsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBheERyb3Bab25lXG4gICAgICAgICN6b25lPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZURyb3AoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZS5pc0hvdmVyZWQoKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWNvbnRlbnRcIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2xvdEV2ZW50KCRldmVudCwgZGF5RGF0YS5kYXRlKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVTbG90RXZlbnQoJGV2ZW50LCBkYXlEYXRhLmRhdGUpXCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZVNsb3RFdmVudCgkZXZlbnQsIGRheURhdGEuZGF0ZSlcIlxuICAgICAgICBbYXR0ci5kYXRhLXNsb3QtaWRdPVwiZGF5RGF0YS5kYXRlLmZvcm1hdCgnWVlZWU1NREQnKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgQGZvciAoc2VnbWVudCBvZiBkYXlEYXRhLnZpc2libGVBcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBzZWdtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiZ2V0U2xvdElkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpXCJcbiAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcFRlbXBsYXRlKClcbiAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgIDogc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgPyBzZWdtZW50LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItdGltZWxpbmUtYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWxsLWRheS1zZWdtZW50XT1cInNlZ21lbnQuYWxsRGF5XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VnbWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7c2VnbWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2VnbWVudC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgc2VnbWVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgIDwhLS0gRGlzcGxheSBzZWdtZW50J3Mgc3RhcnQvZW5kIHRpbWVzIGlmIG5vdCBhbGxEYXkgZm9yIHRoaXMgc2VnbWVudCAtLT5cbiAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICB7eyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19IC1cbiAgICAgICAgICAgICAgICAgIHt7IHNlZ21lbnQub3JpZ2luYWxFbmREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZGF5RGF0YS5tb3JlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICA8ZGl2ICNtb3JlQXBwb2ludG1lbnRzIGNsYXNzPVwiYXgtc2NoZWR1bGVyLW1vbnRoLW92ZXJmbG93LWJhZGdlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAre3sgJ0BhY29yZXg6Y29tbW9uLmdlbmVyYWwubW9yZS1pdGVtcycgfCB0cmFuc2xhdGU6IHsgcGFyYW1zOiB7IG51bWJlcjogZGF5RGF0YS5tb3JlQ291bnQgfSB9IHwgYXN5bmMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCIgcGxhY2VtZW50PVwiYm90dG9tLXN0YXJ0XCIgdHJpZ2dlcj1cImNsaWNrXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyIGF4LXNjaGVkdWxlci1tb250aC1wb3BvdmVyLWFwcG9pbnRtZW50XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZGF5RGF0YS5oaWRkZW5BcHBvaW50bWVudHM7IHRyYWNrIHNlZ21lbnQuaWQgKyBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNlZ21lbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0VsZW1lbnRDbG9uZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBzZWdtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIHNlZ21lbnQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRlbXBsYXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC5hbGxEYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWdtZW50LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnbWVudC50aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKSdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hbGwtZGF5LXNlZ21lbnRdPVwic2VnbWVudC5hbGxEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWdtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHtzZWdtZW50LnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFwiXG4gICAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1zY2hlZHVsZXItdHJ1bmNhdGVcIj57eyBzZWdtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBzZWdtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2VnbWVudC5hbGxEYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YXgtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm9yaWdpbmFsU3RhcnREYXRlIHwgZm9ybWF0OiAndGltZScgOiB7IGZvcm1hdDogJ0hIOm1tJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vcmlnaW5hbEVuZERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9heC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19","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, ...(ngDevMode ? [{ debugName: \"daysCount\" }] : []));\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.endDayHour = input.required(...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input.required(...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"daysDataForTimelineViews\" }] : []));\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 globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\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.1.3\", ngImport: i0, type: AXSchedulerTimelineMultiDayViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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-state-today]=\\\"isToday(daySlot.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day {{\\n daySlot.holiday.state !== 'none' ? (daySlot.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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: \"directive\", type: AXTooltipDirective, selector: \"[axTooltip]\", inputs: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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-state-today]=\\\"isToday(daySlot.date)\\\"\\n class=\\\"ax-scheduler-week-header-date-day {{\\n daySlot.holiday.state !== 'none' ? (daySlot.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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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LE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7OEdBL0VVLHdDQUF3QztrR0FBeEMsd0NBQXdDLG0vREFGeEMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHdDQUF3QyxFQUFFLENBQUMsaURDdkM5RixzckVBNkNBLHdsRURQWSxtQ0FBbUMsbWRBQTJCLGtCQUFrQiwwTUFBM0MsU0FBUyx5Q0FBRSxZQUFZOzsyRkFHM0Qsd0NBQXdDO2tCQVRwRCxTQUFTOytCQUNFLHNDQUFzQyxtQkFHL0IsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1QixDQUFDLG1DQUFtQyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsYUFDaEYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVywwQ0FBMEMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJBcHBvaW50bWVudCB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jbGFzcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCxcbiAgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50LFxuICBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50LFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90IHtcbiAgZGF0ZTogQVhEYXRlVGltZTtcbiAgLy8gUGFzcyB0aGUgUkFXIG9yaWdpbmFsIGFwcG9pbnRtZW50cyB0aGF0ICpvdmVybGFwKiB3aXRoIHRoaXMgZGF5LlxuICAvLyBUaGUgY2hpbGQgdGltZWxpbmUtZGF5LXZpZXcgd2lsbCBoYW5kbGUgc2VnbWVudGF0aW9uLlxuICBvcmlnaW5hbEFwcG9pbnRtZW50c0ZvclRoaXNEYXk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXTtcbiAgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW0FYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LCBBc3luY1BpcGUsIEFYRm9ybWF0UGlwZSwgQVhUb29sdGlwRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBBWENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY2hlZHVsZXJTZXJ2aWNlID0gaW5qZWN0KEFYU2NoZWR1bGVyU2VydmljZSk7XG5cbiAgZGF5c0NvdW50ID0gaW5wdXQoNyk7XG4gIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBkcmFnZ2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgaGFzQWN0aW9ucyA9IGlucHV0KGZhbHNlKTtcbiAgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgY2FsZW5kYXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGUgPSBpbnB1dC5yZXF1aXJlZDxBWERhdGVUaW1lPigpO1xuICBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBzdGFydERheUhvdXIgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XG4gIGFwcG9pbnRtZW50cyA9IGlucHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXT4oW10pO1xuICB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICBkYXlzRGF0YUZvclRpbWVsaW5lVmlld3MgPSBjb21wdXRlZDxUaW1lbGluZU11bHRpRGF5RGF5U2xvdFtdPigoKSA9PiB7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGNvbnN0IG11bHRpVmlld1N0YXJ0RGF0ZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGNvbnN0IG51bWJlck9mRGF5cyA9IHRoaXMuZGF5c0NvdW50KCk7XG5cbiAgICBpZiAoIW11bHRpVmlld1N0YXJ0RGF0ZSB8fCAhYWxsT3JpZ2luYWxBcHBvaW50bWVudHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRpbWVsaW5lTXVsdGlEYXlEYXlTbG90W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZEYXlzOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlEYXRlID0gbXVsdGlWaWV3U3RhcnREYXRlLmFkZCgnZGF5JywgaSk7XG4gICAgICBjb25zdCBjdXJyZW50RGF5U3RhcnQgPSBjdXJyZW50RGF5RGF0ZS5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlFbmQgPSBjdXJyZW50RGF5RGF0ZS5lbmRPZignZGF5Jyk7IC8vIFVzZSBmdWxsIGRheSBmb3Igb3ZlcmxhcCBjaGVja1xuXG4gICAgICBjb25zdCBhcHBvaW50bWVudHNPdmVybGFwcGluZ1RoaXNEYXkgPSBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cy5maWx0ZXIoKGFwcHQpID0+IHtcbiAgICAgICAgaWYgKGFwcHQuYWxsRGF5KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFwcHRTdGFydCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKTtcbiAgICAgICAgY29uc3QgYXBwdEVuZCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LmVuZERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICAgIHJldHVybiBhcHB0U3RhcnQuY29tcGFyZShjdXJyZW50RGF5RW5kLCAnc2Vjb25kJykgPD0gMCAmJiBhcHB0RW5kLmNvbXBhcmUoY3VycmVudERheVN0YXJ0LCAnc2Vjb25kJykgPj0gMDtcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGRhdGU6IGN1cnJlbnREYXlEYXRlLFxuICAgICAgICBob2xpZGF5OiB0aGlzLmlzSG9saWRheShjdXJyZW50RGF5RGF0ZSksXG4gICAgICAgIG9yaWdpbmFsQXBwb2ludG1lbnRzRm9yVGhpc0RheTogYXBwb2ludG1lbnRzT3ZlcmxhcHBpbmdUaGlzRGF5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgc2xvdERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuXG4gIHByb3RlY3RlZCBpc1RvZGF5KGRhdGU6IEFYRGF0ZVRpbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKTtcbiAgICByZXR1cm4gZGF0ZS5lcXVhbCh0b2RheSwgJ2RheScpO1xuICB9XG4gIHByb3RlY3RlZCBpc0hvbGlkYXkoZGF0ZTogQVhEYXRlVGltZSk6IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB7XG4gICAgY29uc3QgaXNIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzSG9saWRheShkYXRlKTtcbiAgICBpZiAoaXNIb2xpZGF5KSB7XG4gICAgICBjb25zdCBnbG9iYWxIb2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmluZCgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgICBjb25zdCBpbnRlcm5hbEhvbGlkYXkgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaW50ZXJuYWxIb2xpZGF5KCkuZmluZCgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgICBjb25zdCBob2xpZGF5ID0gZ2xvYmFsSG9saWRheSB8fCBpbnRlcm5hbEhvbGlkYXk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0ZTogJ2hvbGlkYXknLFxuICAgICAgICBob2xpZGF5LFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaXNXZWVrZW5kID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmlzV2Vla2VuZChkYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgIGlmIChpc1dlZWtlbmQpIHtcbiAgICAgIHJldHVybiB7IHN0YXRlOiAnd2Vla2VuZCcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgc3RhdGU6ICdub25lJyB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLWRheS12aWV3LWNvbnRhaW5lclwiPlxuICBAZm9yIChkYXlTbG90IG9mIGRheXNEYXRhRm9yVGltZWxpbmVWaWV3cygpOyB0cmFjayBkYXlTbG90LmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRpbWVsaW5lLW11bHRpLWRheS1jb2x1bW5cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgW2NsYXNzLmF4LXN0YXRlLXRvZGF5XT1cImlzVG9kYXkoZGF5U2xvdC5kYXRlKVwiXG4gICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5IHt7XG4gICAgICAgICAgZGF5U2xvdC5ob2xpZGF5LnN0YXRlICE9PSAnbm9uZScgPyAoZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXk/LmNzc0NsYXNzID8/ICdheC1zdGF0ZS1ob2xpZGF5JykgOiAnJ1xuICAgICAgICB9fVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXktY2hhciBheC1zY2hlZHVsZXItdHJ1bmNhdGVcIlxuICAgICAgICAgIFtheFRvb2x0aXBdPVwiZGF5U2xvdC5ob2xpZGF5LmhvbGlkYXk/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, ...(ngDevMode ? [{ debugName: \"dragStartSlotId\" }] : []));\n // --- Constants ---\n this.GAP_PX = 1;\n this.BADGE_SPACE_REM = 2;\n // --- Component Inputs ---\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.calendar = input(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.date = input.required(...(ngDevMode ? [{ debugName: \"date\" }] : []));\n this.endDayHour = input.required(...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input.required(...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.appointments = input([], ...(ngDevMode ? [{ debugName: \"appointments\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"hoursArray\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"daysArray\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"totalBlocksPerViewDay\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"allDayAppointmentsPerDay\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"dayViewLayoutsByDay\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"visibleAppointmentsLayout\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"overflowBadgesWithData\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"processedAppointmentsForLayout\" }] : []));\n this.timedGridSegments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n }, ...(ngDevMode ? [{ debugName: \"timedGridSegments\" }] : []));\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 globalHoliday = this.calendarService.holidays.find((d) => date.equal(d.date, 'day'));\n const internalHoliday = this.schedulerService.internalHoliday().find((d) => date.equal(d.date, 'day'));\n const holiday = globalHoliday || internalHoliday;\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.1.3\", ngImport: i0, type: AXSchedulerWeekViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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 day.holiday.state !== 'none' ? (day.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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:calc(100% - var(--ax-comp-scheduler-basic-view-blocks-width));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-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot ax-popover{display:none}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: \"component\", type: AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"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: [\"axTooltipDisabled\", \"axTooltip\", \"axTooltipPlacement\", \"axTooltipOffsetX\", \"axTooltipOffsetY\", \"axTooltipOpenAfter\", \"axTooltipCloseAfter\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AXFormatPipe, name: \"format\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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 day.holiday.state !== 'none' ? (day.holiday.holiday?.cssClass ?? 'ax-state-holiday') : ''\\n }}\\\"\\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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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 [axTooltipDisabled]=\\\"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:calc(100% - var(--ax-comp-scheduler-basic-view-blocks-width));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-header .ax-scheduler-week-header-days .ax-scheduler-week-header-date .ax-scheduler-all-day-slot ax-popover{display:none}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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QWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQ2MsVUFBVTtRQUN0QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDOzhHQTdiVSw0QkFBNEI7a0dBQTVCLDRCQUE0Qix5NkRBRjVCLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLGlEQzlEbEYsd3NhQThSQSwrZ09ENU9JLE9BQU8sb0ZBQ1AsMkJBQTJCLHlMQUczQixrQkFBa0Isb1NBRWxCLGVBQWUsMlRBQ2YsbUJBQW1CLDRKQUNuQixrQkFBa0IsK01BQ2xCLHdCQUF3QixpRUFQeEIsU0FBUyx5Q0FDVCxnQkFBZ0IsNkNBRWhCLFlBQVk7OzJGQVNILDRCQUE0QjtrQkFyQnhDLFNBQVM7K0JBQ0Usd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQzVCO3dCQUNQLE9BQU87d0JBQ1AsMkJBQTJCO3dCQUMzQixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3FCQUNuQixhQUNVLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsOEJBQThCLEVBQUUsQ0FBQzs4QkE2YmxFLFVBQVU7c0JBRHZCLFdBQVc7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJhZ0RpcmVjdGl2ZSwgQVhEcm9wWm9uZURpcmVjdGl2ZSwgQVhEcm9wWm9uZURyb3BFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckdlbmVyaWNDb21wb25lbnQsIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sdGlwJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBBWEhvbGlkYXlEYXRlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2RhdGUtdGltZSc7XG5pbXBvcnQgeyBBWEZvcm1hdFBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRvclBpcGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBET0NVTUVOVCxcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBWFNjaGVkdWxlckFsbERheVNsb3REYXRhLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudCxcbiAgQVhTY2hlZHVsZXJEYXlBcHBvaW50bWVudExheW91dCxcbiAgQVhTY2hlZHVsZXJPdmVyZmxvd0JhZGdlLFxufSBmcm9tICcuLi8uLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHtcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQsXG4gIEFYU2NoZWR1bGVyQ29tcG9uZW50LFxuICBBWFNjaGVkdWxlclNsb3REcm9wRXZlbnQsXG4gIEFYU2NoZWR1bGVyU2xvdE1vdXNlRXZlbnQsXG59IGZyb20gJy4uLy4uL3NjaGVkdWxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2NoZWR1bGVyLnNlcnZpY2UnO1xuXG50eXBlIEFYU2NoZWR1bGVyR3JpZEJhZGdlSW5mbyA9IEFYU2NoZWR1bGVyT3ZlcmZsb3dCYWRnZSAmIHtcbiAgaGlkZGVuQXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyLXdlZWstdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItd2Vlay12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NjaGVkdWxlci13ZWVrLXZpZXcuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIE5nQ2xhc3MsXG4gICAgQVhEZWNvcmF0b3JHZW5lcmljQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBBWFRyYW5zbGF0b3JQaXBlLFxuICAgIEFYUG9wb3ZlckNvbXBvbmVudCxcbiAgICBBWEZvcm1hdFBpcGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJvcFpvbmVEaXJlY3RpdmUsXG4gICAgQVhUb29sdGlwRGlyZWN0aXZlLFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgICBBWFRvb2x0aXBEaXJlY3RpdmUsXG4gIF0sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNjaGVkdWxlcldlZWtWaWV3Q29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBBWFNjaGVkdWxlcldlZWtWaWV3Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICAvLyAtLS0gSW5qZWN0ZWQgU2VydmljZXMgJiBQcml2YXRlIFN0YXRlIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY2hlZHVsZXIgPSBpbmplY3QoQVhTY2hlZHVsZXJDb21wb25lbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNhbGVuZGFyU2VydmljZSA9IGluamVjdChBWENhbGVuZGFyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVyU2VydmljZSA9IGluamVjdChBWFNjaGVkdWxlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyYWdTdGFydFNsb3RJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyAtLS0gQ29uc3RhbnRzIC0tLVxuICBwcml2YXRlIHJlYWRvbmx5IEdBUF9QWCA9IDE7XG4gIHByaXZhdGUgcmVhZG9ubHkgQkFER0VfU1BBQ0VfUkVNID0gMjtcblxuICAvLyAtLS0gQ29tcG9uZW50IElucHV0cyAtLS1cbiAgcHVibGljIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIHB1YmxpYyBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgcHVibGljIGNhbGVuZGFyID0gaW5wdXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgZGF0ZSA9IGlucHV0LnJlcXVpcmVkPEFYRGF0ZVRpbWU+KCk7XG4gIHB1YmxpYyBlbmREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBwdWJsaWMgc3RhcnREYXlIb3VyID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICBwdWJsaWMgYXBwb2ludG1lbnRzID0gaW5wdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFtdPihbXSk7XG4gIHB1YmxpYyB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcblxuICAvLyAtLS0gQ29tcG9uZW50IE91dHB1dHMgKEludGVybmFsLCB0byBiZSBjYXVnaHQgYnkgdGhlIG1haW4gc2NoZWR1bGVyKSAtLS1cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNsb3RDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNsb3REYmxDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvbkFjdGlvbkNsaWNrSW50ZXJuYWwgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvbkFwcG9pbnRtZW50RHJvcEludGVybmFsID0gb3V0cHV0PEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudD4oKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vXG4gIC8vIFZJRVcgTU9ERUwgQ09NUFVUQVRJT05TIChmb3IgcmVuZGVyaW5nIHRoZSB0ZW1wbGF0ZSlcbiAgLy9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiBBWERhdGVUaW1lIG9iamVjdHMgZm9yIHRoZSBob3VycyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXcncyB0aW1lIHJ1bGVyLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgYEhIOm1tYCBsYWJlbHMgb24gdGhlIHNpZGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgaG91cnNBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgIGlmICghdGltZSkgcmV0dXJuIFtdO1xuICAgIHRpbWUgPSB0aW1lLnNldCgnaG91cicsIHRoaXMuc3RhcnREYXlIb3VyKCkpLnN0YXJ0T2YoJ2hvdXInKTtcbiAgICBjb25zdCBob3VycyA9IFt0aW1lXTtcbiAgICB3aGlsZSAodGltZS5ob3VyIDwgdGhpcy5lbmREYXlIb3VyKCkgLSAxKSB7XG4gICAgICB0aW1lID0gdGltZS5hZGQoJ2hvdXInLCAxKTtcbiAgICAgIGhvdXJzLnB1c2godGltZSk7XG4gICAgfVxuICAgIHJldHVybiBob3VycztcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogR2VuZXJhdGVzIGFuIGFycmF5IG9mIGRheSBkYXRhIG9iamVjdHMgZm9yIHRoZSA3IGRheXMgaW4gdGhlIHZpZXcsIGluY2x1ZGluZyBob2xpZGF5IGluZm8uXG4gICAqIFRoaXMgaXMgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBkYXkgaGVhZGVycyAoZS5nLiwgXCJNb25kYXkgMTBcIikuXG4gICAqL1xuICBwcm90ZWN0ZWQgZGF5c0FycmF5ID0gY29tcHV0ZWQoXG4gICAgKCk6IHsgZGF0ZTogQVhEYXRlVGltZTsgaG9saWRheT86IHsgc3RhdGU6ICdob2xpZGF5JyB8ICd3ZWVrZW5kJyB8ICdub25lJzsgaG9saWRheT86IEFYSG9saWRheURhdGUgfSB9W10gPT4ge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuZGF0ZSgpO1xuICAgICAgaWYgKCF0aW1lKSByZXR1cm4gW107XG4gICAgICBjb25zdCBkYXlzID0gW3sgZGF0ZTogdGltZSwgaG9saWRheTogdGhpcy5pc0hvbGlkYXkodGltZSkgfV07XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDw9IDY7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRpbWUuYWRkKCdkYXknLCBpbmRleCk7XG4gICAgICAgIGRheXMucHVzaCh7IGRhdGUsIGhvbGlkYXk6IHRoaXMuaXNIb2xpZGF5KGRhdGUpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRheXM7XG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgMzAtbWludXRlIGJsb2NrcyB3aXRoaW4gdGhlIHZpc2libGUgaG91cnMgb2YgYSBzaW5nbGUgZGF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvdGFsQmxvY2tzUGVyVmlld0RheSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgKGVuZEggLSBzdGFydEgpICogKDYwIC8gMzApKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogRmlsdGVycyBwcm9jZXNzZWQgc2VnbWVudHMgdG8gZ2V0IG9ubHkgdGhvc2UgZm9yIHRoZSBhbGwtZGF5IGhlYWRlci5cbiAgICovXG4gIHByb3RlY3RlZCBhbGxEYXlBcHBvaW50bWVudHNQZXJEYXkgPSBjb21wdXRlZCgoKTogQVhTY2hlZHVsZXJBbGxEYXlTbG90RGF0YVtdID0+IHtcbiAgICBjb25zdCBkYXlzSW5XZWVrID0gdGhpcy5kYXlzQXJyYXkoKS5tYXAoKGUpID0+IGUuZGF0ZSk7XG4gICAgY29uc3QgYWxsRGF5U2VnbWVudHMgPSB0aGlzLnByb2Nlc3NlZEFwcG9pbnRtZW50c0ZvckxheW91dCgpLmZpbHRlcigocykgPT4gcy5hbGxEYXkpO1xuXG4gICAgcmV0dXJuIGRheXNJbldlZWsubWFwKChkYXlEYXRlKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgY29uc3QgYXBwb2ludG1lbnRzRm9yVGhpc0RheSA9IGFsbERheVNlZ21lbnRzLmZpbHRlcigoc2VnbWVudCkgPT5cbiAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHNlZ21lbnQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpLnN0YXJ0T2YoJ2RheScpLmVxdWFsKGN1cnJlbnREYXlTdGFydCwgJ2RheScpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheTogZGF5RGF0ZSxcbiAgICAgICAgYXBwb2ludG1lbnRzOiBvcmRlckJ5KGFwcG9pbnRtZW50c0ZvclRoaXNEYXksIFsnb3JpZ2luYWxTdGFydERhdGUnLCAndGl0bGUnXSwgWydhc2MnLCAnYXNjJ10pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvL1xuICAvLyBHUklEIExBWU9VVCAmIEJBREdFIExPR0lDIChUSEUgQ09SRSBGSVgpXG4gIC8vIFRoaXMgbG9naWMgZm9sbG93cyBhIHRocmVlLXN0ZXAgcHJvY2VzczpcbiAgLy8gMS4gYGRheVZpZXdMYXlvdXRzQnlEYXlgOiBDYWxjdWxhdGUgYSBmdWxsIG11bHRpLWNvbHVtbiBsYXlvdXQgZm9yIGVhY2ggZGF5LiBUaGlzIGlzIG91ciBcInNvdXJjZSBvZiB0cnV0aFwiLlxuICAvLyAyLiBgdmlzaWJsZUFwcG9pbnRtZW50c0xheW91dGA6IFJlbmRlciBPTkxZIHRoZSBmaXJzdCBjb2x1bW4gKGBjb2x1bW5JbmRleDogMGApIGZyb20gdGhlIHNvdXJjZSBvZiB0cnV0aC5cbiAgLy8gMy4gYG92ZXJmbG93QmFkZ2VzV2l0aERhdGFgOiBSZW5kZXIgYmFkZ2VzIGZvciBhbGwgb3RoZXIgY29sdW1ucyAoYGNvbHVtbkluZGV4ID4gMGApLlxuICAvL1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFtTVEVQIDEgLSBQcml2YXRlXSBDYWxjdWxhdGUgYSBmdWxsIG11bHRpLWNvbHVtbiBsYXlvdXQgZm9yIGVhY2ggZGF5LCBhcyBpZiBpdCB3ZXJlIGEgRGF5IFZpZXcuXG4gICAqIFRoaXMgYmVjb21lcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3Igd2hhdCBvdmVybGFwcyB3aXRoIHdoYXQuXG4gICAqL1xuICBwcml2YXRlIGRheVZpZXdMYXlvdXRzQnlEYXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbGF5b3V0c0J5RGF5ID0gbmV3IE1hcDxudW1iZXIsIE1hcDxhbnksIEFYU2NoZWR1bGVyRGF5QXBwb2ludG1lbnRMYXlvdXQ+PigpO1xuICAgIGNvbnN0IGFsbFNlZ21lbnRzID0gdGhpcy50aW1lZEdyaWRTZWdtZW50cygpO1xuICAgIGNvbnN0IHZpZXdTdGFydERhdGUgPSB0aGlzLmRhdGUoKTtcbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcblxuICAgIGZvciAobGV0IGRheUluZGV4ID0gMDsgZGF5SW5kZXggPCA3OyBkYXlJbmRleCsrKSB7XG4gICAgICBjb25zdCBkYXlEYXRlID0gdmlld1N0YXJ0RGF0ZS5hZGQoJ2RheScsIGRheUluZGV4KTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzRm9yVGhpc0RheSA9IGFsbFNlZ21lbnRzLmZpbHRlcigoc2VnKSA9PlxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoc2VnLnN0YXJ0RGF0ZSwgdGhpcy5jYWxlbmRhcigpKS5zdGFydE9mKCdkYXknKS5lcXVhbChkYXlEYXRlLnN0YXJ0T2YoJ2RheScpLCAnZGF5JyksXG4gICAgICApO1xuICAgICAgaWYgKHNlZ21lbnRzRm9yVGhpc0RheS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjb25jdXJyZW5jeUluZm9NYXAgPSB0aGlzLnNjaGVkdWxlclNlcnZpY2UuY2FsY3VsYXRlRGF5Vmlld0NvbmN1cnJlbmN5SW5mbyhcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBkYXlEYXRlLFxuICAgICAgICBzdGFydEgsXG4gICAgICAgIGVuZEgsXG4gICAgICApO1xuICAgICAgY29uc3Qgc29ydGVkQXBwb2ludG1lbnRzID0gb3JkZXJCeShcbiAgICAgICAgc2VnbWVudHNGb3JUaGlzRGF5LFxuICAgICAgICBbKGUpID0+IGUuc3RhcnREYXRlLmdldFRpbWUoKSwgKGUpID0+IGUub3JpZ2luYWxFbmREYXRlLmdldFRpbWUoKSAtIGUub3JpZ2luYWxTdGFydERhdGUuZ2V0VGltZSgpXSxcbiAgICAgICAgWydhc2MnLCAnZGVzYyddLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF5TGF5b3V0cyA9IG5ldyBNYXA8YW55LCBBWFNjaGVkdWxlckRheUFwcG9pbnRtZW50TGF5b3V0PigpO1xuICAgICAgY29uc3QgY29sdW1uc0RhdGE6IHsgYXBwb2ludG1lbnRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdIH1bXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFwcG9pbnRtZW50U2VnbWVudCBvZiBzb3J0ZWRBcHBvaW50bWVudHMpIHtcbiAgICAgICAgbGV0IGFzc2lnbmVkQ29sID0gLTE7XG4gICAgICAgIGZvciAobGV0IGMgPSAwOyA7IGMrKykge1xuICAgICAgICAgIGlmICghY29sdW1uc0RhdGFbY10pIGNvbHVtbnNEYXRhW2NdID0geyBhcHBvaW50bWVudHM6IFtdIH07XG4gICAgICAgICAgbGV0IGNvbmZsaWN0ID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChjb25zdCBwbGFjZWRTZWdtZW50IG9mIGNvbHVtbnNEYXRhW2NdLmFwcG9pbnRtZW50cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2NoZWR1bGVyU2VydmljZS5kb0FwcG9pbnRtZW50c092ZXJsYXAoYXBwb2ludG1lbnRTZWdtZW50LCBwbGFjZWRTZWdtZW50KSkge1xuICAgICAgICAgICAgICBjb25mbGljdCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWNvbmZsaWN0KSB7XG4gICAgICAgICAgICBhc3NpZ25lZENvbCA9IGM7XG4gICAgICAgICAgICBjb2x1bW5zRGF0YVtjXS5hcHBvaW50bWVudHMucHVzaChhcHBvaW50bWVudFNlZ21lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmN1cnJlbmN5SW5mbyA9IGNvbmN1cnJlbmN5SW5mb01hcC5nZXQoYXBwb2ludG1lbnRTZWdtZW50LmlkKTtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlQ29scyA9IGNvbmN1cnJlbmN5SW5mbyA/IGNvbmN1cnJlbmN5SW5mby5lZmZlY3RpdmVUb3RhbENvbHVtbnMgOiAxO1xuICAgICAgICBkYXlMYXlvdXRzLnNldChhcHBvaW50bWVudFNlZ21lbnQuaWQsIHsgY29sdW1uSW5kZXg6IGFzc2lnbmVkQ29sLCBlZmZlY3RpdmVUb3RhbENvbHVtbnM6IGVmZmVjdGl2ZUNvbHMgfSk7XG4gICAgICB9XG4gICAgICBsYXlvdXRzQnlEYXkuc2V0KGRheUluZGV4LCBkYXlMYXlvdXRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dHNCeURheTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogW1NURVAgMl0gRnJvbSB0aGUgZnVsbCBsYXlvdXQsIHNlbGVjdCBPTkxZIGFwcG9pbnRtZW50cyBpbiB0aGUgZmlyc3QgY29sdW1uIChgY29sdW1uSW5kZXg6IDBgKVxuICAgKiB0byBiZSB2aXNpYmxlLiBDYWxjdWxhdGUgdGhlaXIgd2lkdGggYmFzZWQgb24gd2hldGhlciB0aGV5IGhhdmUgc2libGluZ3MgaW4gb3RoZXIgY29sdW1ucy5cbiAgICovXG4gIHByb3RlY3RlZCB2aXNpYmxlQXBwb2ludG1lbnRzTGF5b3V0ID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyQXBwb2ludG1lbnRMYXlvdXRbXSA9PiB7XG4gICAgY29uc3QgZmluYWxMYXlvdXRzOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TGF5b3V0W10gPSBbXTtcbiAgICBjb25zdCBsYXlvdXRzQnlEYXkgPSB0aGlzLmRheVZpZXdMYXlvdXRzQnlEYXkoKTtcbiAgICBjb25zdCBhbGxTZWdtZW50cyA9IHRoaXMudGltZWRHcmlkU2VnbWVudHMoKTtcbiAgICBjb25zdCBibG9ja0hlaWdodEV4cHIgPSBgdmFyKC0tYXgtY29tcC1zY2hlZHVsZXItYmFzaWMtdmlldy1ibG9ja3MtaGVpZ2h0LCAzMHB4KWA7XG4gICAgY29uc3QgTiA9IDc7XG5cbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgYWxsU2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IGFwcHRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IE1hdGguZmxvb3IoXG4gICAgICAgIChhcHB0U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmRhdGUuZ2V0VGltZSgpIC0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5JykuZGF0ZS5nZXRUaW1lKCkpIC9cbiAgICAgICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuTUlMTElTRUNPTkRTX1BFUl9EQVksXG4gICAgICApO1xuICAgICAgaWYgKGRheUluZGV4IDwgMCB8fCBkYXlJbmRleCA+PSBOKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgbGF5b3V0SW5mbyA9IGxheW91dHNCeURheS5nZXQoZGF5SW5kZXgpPy5nZXQoYXBwdC5pZCk7XG4gICAgICBpZiAoIWxheW91dEluZm8gfHwgbGF5b3V0SW5mby5jb2x1bW5JbmRleCAhPT0gMCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IHN0YXJ0TWludXRlcyA9IGFwcHRTdGFydERhdGUuaG91ciAqIDYwICsgYXBwdFN0YXJ0RGF0ZS5taW51dGU7XG4gICAgICBjb25zdCBzdGFydEJsb2NrT2Zmc2V0ID0gc3RhcnRNaW51dGVzIC0gdGhpcy5zdGFydERheUhvdXIoKSAqIDYwO1xuICAgICAgY29uc3QgbGF5b3V0VG9wID0gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtzdGFydEJsb2NrT2Zmc2V0IC8gMzB9ICsgMXB4KWA7XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5jYWxjdWxhdGVEdXJhdGlvbkluTWludXRlcyhhcHB0KTtcbiAgICAgIGNvbnN0IGxheW91dEhlaWdodCA9IGBjYWxjKCR7YmxvY2tIZWlnaHRFeHByfSAqICR7ZHVyYXRpb25NaW51dGVzIC8gMzB9IC0gJHt0aGlzLkdBUF9QWH1weClgO1xuXG4gICAgICBjb25zdCBoYXNIaWRkZW5TaWJsaW5ncyA9IGxheW91dEluZm8uZWZmZWN0aXZlVG90YWxDb2x1bW5zID4gMTtcbiAgICAgIGNvbnN0IGxheW91dFdpZHRoID0gaGFzSGlkZGVuU2libGluZ3NcbiAgICAgICAgPyBgY2FsYygxMDAlIC8gJHtOfSAtICR7dGhpcy5CQURHRV9TUEFDRV9SRU0gKyAwLjV9cmVtKWBcbiAgICAgICAgOiBgY2FsYygxMDAlIC8gJHtOfSlgO1xuXG4gICAgICBmaW5hbExheW91dHMucHVzaCh7XG4gICAgICAgIGFwcG9pbnRtZW50OiBhcHB0LFxuICAgICAgICBsYXlvdXRUb3AsXG4gICAgICAgIGxheW91dEhlaWdodCxcbiAgICAgICAgbGF5b3V0TGVmdDogYGNhbGMoJHtkYXlJbmRleCAqICgxMDAgLyBOKX0lKWAsXG4gICAgICAgIGxheW91dFdpZHRoLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmaW5hbExheW91dHM7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIFtTVEVQIDNdIENyZWF0ZSBiYWRnZXMgZm9yIGFsbCBhcHBvaW50bWVudHMgTk9UIGluIHRoZSBmaXJzdCBjb2x1bW4gKGBjb2x1bW5JbmRleCA+IDBgKS5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVyZmxvd0JhZGdlc1dpdGhEYXRhID0gY29tcHV0ZWQoKCk6IEFYU2NoZWR1bGVyR3JpZEJhZGdlSW5mb1tdID0+IHtcbiAgICBjb25zdCBiYWRnZXNJbmZvOiBBWFNjaGVkdWxlckdyaWRCYWRnZUluZm9bXSA9IFtdO1xuICAgIGNvbnN0IGxheW91dHNCeURheSA9IHRoaXMuZGF5Vmlld0xheW91dHNCeURheSgpO1xuICAgIGNvbnN0IGFsbFRpbWVkU2VnbWVudHMgPSB0aGlzLnRpbWVkR3JpZFNlZ21lbnRzKCk7XG4gICAgY29uc3QgYmxvY2tIZWlnaHRFeHByID0gYHZhcigtLWF4LWNvbXAtc2NoZWR1bGVyLWJhc2ljLXZpZXctYmxvY2tzLWhlaWdodCwgMzBweClgO1xuICAgIGNvbnN0IE4gPSA3O1xuXG4gICAgY29uc3QgaGlkZGVuQXBwb2ludG1lbnRzID0gYWxsVGltZWRTZWdtZW50cy5maWx0ZXIoKGFwcHQpID0+IHtcbiAgICAgIGNvbnN0IGFwcHRTdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXIoKSk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IE1hdGguZmxvb3IoXG4gICAgICAgIChhcHB0U3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpLmRhdGUuZ2V0VGltZSgpIC0gdGhpcy5kYXRlKCkuc3RhcnRPZignZGF5JykuZGF0ZS5nZXRUaW1lKCkpIC9cbiAgICAgICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuTUlMTElTRUNPTkRTX1BFUl9EQVksXG4gICAgICApO1xuICAgICAgY29uc3QgbGF5b3V0SW5mbyA9IGxheW91dHNCeURheS5nZXQoZGF5SW5kZXgpPy5nZXQoYXBwdC5pZCk7XG4gICAgICByZXR1cm4gbGF5b3V0SW5mbyAmJiBsYXlvdXRJbmZvLmNvbHVtbkluZGV4ID4gMDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGdyb3VwZWRIaWRkZW4gPSBuZXcgTWFwPHN0cmluZywgQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGFwcHQgb2YgaGlkZGVuQXBwb2ludG1lbnRzKSB7XG4gICAgICBjb25zdCBhcHB0U3RhcnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGFwcHQuc3RhcnREYXRlLCB0aGlzLmNhbGVuZGFyKCkpO1xuICAgICAgY29uc3Qgc3RhcnRJbmZvID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldEJsb2NrSWRlbnRpZmllcihcbiAgICAgICAgYXBwdFN0YXJ0RGF0ZSxcbiAgICAgICAgdGhpcy5kYXRlKCksXG4gICAgICAgIHRoaXMuc3RhcnREYXlIb3VyKCksXG4gICAgICAgIHRoaXMuZW5kRGF5SG91cigpLFxuICAgICAgICA3LFxuICAgICAgKTtcbiAgICAgIGlmICghc3RhcnRJbmZvKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qga2V5ID0gYCR7c3RhcnRJbmZvLmRheUluZGV4fS0ke3N0YXJ0SW5mby5ibG9ja0luZGV4fWA7XG4gICAgICBpZiAoIWdyb3VwZWRIaWRkZW4uaGFzKGtleSkpIGdyb3VwZWRIaWRkZW4uc2V0KGtleSwgW10pO1xuICAgICAgZ3JvdXBlZEhpZGRlbi5nZXQoa2V5KS5wdXNoKGFwcHQpO1xuICAgIH1cblxuICAgIGdyb3VwZWRIaWRkZW4uZm9yRWFjaCgoZ3JvdXAsIGtleSkgPT4ge1xuICAgICAgY29uc3QgW2RheUluZGV4U3RyLCBibG9ja0luZGV4U3RyXSA9IGtleS5zcGxpdCgnLScpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSBwYXJzZUludChkYXlJbmRleFN0cik7XG4gICAgICBjb25zdCBibG9ja0luZGV4ID0gcGFyc2VJbnQoYmxvY2tJbmRleFN0cik7XG5cbiAgICAgIGNvbnN0IGJhZGdlVG9wID0gYGNhbGMoJHtibG9ja0hlaWdodEV4cHJ9ICogJHtibG9ja0luZGV4fSArIDAuNzVyZW0pYDtcbiAgICAgIGNvbnN0IGJhZGdlTGVmdCA9IGBjYWxjKCR7ZGF5SW5kZXggKiAoMTAwIC8gTil9JSArICgxMDAlIC8gJHtOfSkgLSAke3RoaXMuQkFER0VfU1BBQ0VfUkVNfXJlbSlgO1xuXG4gICAgICBiYWRnZXNJbmZvLnB1c2goe1xuICAgICAgICBrZXk6IGBiYWRnZS0ke2tleX1gLFxuICAgICAgICBjb3VudDogZ3JvdXAubGVuZ3RoLFxuICAgICAgICBiYWRnZVRvcCxcbiAgICAgICAgYmFkZ2VMZWZ0LFxuICAgICAgICBoaWRkZW5BcHBvaW50bWVudHM6IGdyb3VwLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmFkZ2VzSW5mbztcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvL1xuICAvLyBFVkVOVCBIQU5ETEVSUyAmIFVUSUxJVFkgTUVUSE9EU1xuICAvL1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudE91dHB1dE1hcCA9IHtcbiAgICBzbG90OiB7XG4gICAgICBjbGljazogdGhpcy5zbG90Q2xpY2tlZEludGVybmFsLFxuICAgICAgZGJsY2xpY2s6IHRoaXMuc2xvdERibENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGNvbnRleHRtZW51OiB0aGlzLnNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICAgIGFwcG9pbnRtZW50OiB7XG4gICAgICBjbGljazogdGhpcy5hcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCxcbiAgICAgIGRibGNsaWNrOiB0aGlzLmFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsLFxuICAgICAgY29udGV4dG1lbnU6IHRoaXMuYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCxcbiAgICB9LFxuICB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrLCBkYmxjbGljaywgYW5kIGNvbnRleHRtZW51IGV2ZW50cyBvbiBhbiBhcHBvaW50bWVudCBhbmQgZW1pdHMgdGhlbSB0byB0aGUgcGFyZW50LlxuICAgKiBAcGFyYW0gbW91c2VFdmVudCBUaGUgbmF0aXZlIERPTSBldmVudC5cbiAgICogQHBhcmFtIGFwcG9pbnRtZW50U2VnbWVudCBUaGUgYXBwb2ludG1lbnQgZGF0YSBzZWdtZW50IHRoYXQgd2FzIGludGVyYWN0ZWQgd2l0aC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFwcG9pbnRtZW50RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCwgYXBwb2ludG1lbnRTZWdtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KGFwcG9pbnRtZW50U2VnbWVudCk7XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnYXBwb2ludG1lbnQnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjbGljaywgZGJsY2xpY2ssIGFuZCBjb250ZXh0bWVudSBldmVudHMgb24gYW4gZW1wdHkgdGltZSBzbG90IGFuZCBlbWl0cyB0aGVtIHRvIHRoZSBwYXJlbnQuXG4gICAqIEBwYXJhbSBtb3VzZUV2ZW50IFRoZSBuYXRpdmUgRE9NIGV2ZW50LlxuICAgKiBAcGFyYW0gaG91ciBUaGUgc3RhcnRpbmcgaG91ciBvZiB0aGUgc2xvdC5cbiAgICogQHBhcmFtIGRheSBUaGUgZGF5IG9mIHRoZSBzbG90LlxuICAgKiBAcGFyYW0gbWludXRlSW5kZXggVGhlIGhhbGYtaG91ciBpbmRleCAoMCBvciAxKS5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZVNpbmdsZVNsb3RFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LCBob3VyOiBBWERhdGVUaW1lLCBkYXk6IEFYRGF0ZVRpbWUsIG1pbnV0ZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXkuc2V0KCdob3VyJywgaG91ci5ob3VyKS5zZXQoJ21pbnV0ZScsIG1pbnV0ZUluZGV4ICogMzApO1xuICAgIGNvbnN0IHNsb3REYXRhID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldFNsb3REYXRhKHN0YXJ0RGF0ZSwgJ3dlZWsnKTtcbiAgICBpZiAoc2xvdERhdGEpXG4gICAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuaGFuZGxlRXZlbnQoXG4gICAgICAgIHsgbmF0aXZlRXZlbnQ6IG1vdXNlRXZlbnQsIHNsb3Q6IHNsb3REYXRhLCBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyIH0sXG4gICAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAgICdzbG90JyxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBpbnRlcmFjdGlvbiBldmVudHMgb24gdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHBhcmFtIG1vdXNlRXZlbnQgVGhlIG5hdGl2ZSBET00gZXZlbnQuXG4gICAqIEBwYXJhbSBkYXkgVGhlIGNvcnJlc3BvbmRpbmcgZGF5IGZvciB0aGUgYWxsLWRheSBzbG90LlxuICAgKiBAcHVibGljXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlQWxsRGF5U2xvdEV2ZW50KG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQsIGRheTogQVhEYXRlVGltZSk6IHZvaWQge1xuICAgIGNvbnN0IHNsb3REYXRhID0geyBzdGFydERhdGU6IGRheS5zdGFydE9mKCdkYXknKSwgZW5kRGF0ZTogZGF5LmVuZE9mKCdkYXknKSwgdmlldzogJ3dlZWsnIGFzIGNvbnN0IH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmhhbmRsZUV2ZW50KFxuICAgICAgeyBuYXRpdmVFdmVudDogbW91c2VFdmVudCwgc2xvdDogc2xvdERhdGEsIHNlbmRlcjogdGhpcy5zY2hlZHVsZXIgfSxcbiAgICAgIHRoaXMuZXZlbnRPdXRwdXRNYXAsXG4gICAgICAnc2xvdCcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGRyb3BwaW5nIGFuIGFwcG9pbnRtZW50IG9udG8gdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHBhcmFtIGUgVGhlIGRyb3AgZXZlbnQgZnJvbSB0aGUgQ0RLLlxuICAgKiBAcGFyYW0gZGF5IFRoZSBjb3JyZXNwb25kaW5nIGRheSBmb3IgdGhlIGFsbC1kYXkgc2xvdC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFsbERheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgZGF5OiBBWERhdGVUaW1lKTogdm9pZCB7XG4gICAgY29uc3Qgc2xvdERhdGEgPSB7IHN0YXJ0RGF0ZTogZGF5LnN0YXJ0T2YoJ2RheScpLCBlbmREYXRlOiBkYXkuZW5kT2YoJ2RheScpLCB2aWV3OiAnd2VlaycgYXMgY29uc3QgfTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoXG4gICAgICBlLmRyb3BwZWQuZHJhZ0RhdGEoKSBhcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICAgICk7XG4gICAgdGhpcy5vbkFwcG9pbnRtZW50RHJvcEludGVybmFsLmVtaXQoe1xuICAgICAgZHJvcEV2ZW50OiBlLFxuICAgICAgc2xvdDogc2xvdERhdGEsXG4gICAgICBzZW5kZXI6IHRoaXMuc2NoZWR1bGVyLFxuICAgICAgYXBwb2ludG1lbnQ6IG9yaWdpbmFsQXBwb2ludG1lbnQsXG4gICAgICBpc1NhbWVTbG90RHJvcDogdGhpcy5kcmFnU3RhcnRTbG90SWQoKSA9PT0gZS5zZW5kZXIuZWxlbWVudCgpLmRhdGFzZXRbJ3Nsb3RJZCddLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZHJvcHBpbmcgYW4gYXBwb2ludG1lbnQgb250byBhIHRpbWVkIGdyaWQgc2xvdC5cbiAgICogQHBhcmFtIGUgVGhlIGRyb3AgZXZlbnQgZnJvbSB0aGUgQ0RLLlxuICAgKiBAcGFyYW0gaG91ciBUaGUgc3RhcnRpbmcgaG91ciBvZiB0aGUgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSBkYXkgVGhlIGRheSBvZiB0aGUgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSBtaW51dGVJbmRleCBUaGUgaGFsZi1ob3VyIGluZGV4ICgwIG9yIDEpIG9mIHRoZSBkcm9wIHRhcmdldC5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZVNpbmdsZURheURyb3AoZTogQVhEcm9wWm9uZURyb3BFdmVudCwgaG91cjogQVhEYXRlVGltZSwgZGF5OiBBWERhdGVUaW1lLCBtaW51dGVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF5LnNldCgnaG91cicsIGhvdXIuaG91cikuc2V0KCdtaW51dGUnLCBtaW51dGVJbmRleCAqIDMwKTtcbiAgICBjb25zdCBzbG90RGF0YSA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRTbG90RGF0YShzdGFydERhdGUsICd3ZWVrJyk7XG4gICAgY29uc3Qgb3JpZ2luYWxBcHBvaW50bWVudCA9IHRoaXMuc2NoZWR1bGVyU2VydmljZS5nZXRPcmlnaW5hbEFwcG9pbnRtZW50KFxuICAgICAgZS5kcm9wcGVkLmRyYWdEYXRhKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudCxcbiAgICApO1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3BJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGRyb3BFdmVudDogZSxcbiAgICAgIHNsb3Q6IHNsb3REYXRhLFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgaXNTYW1lU2xvdERyb3A6IHRoaXMuZHJhZ1N0YXJ0U2xvdElkKCkgPT09IGUuc2VuZGVyLmVsZW1lbnQoKS5kYXRhc2V0WydzbG90SWQnXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrcyBvbiB0aGUgXCJtb3JlXCIgYWN0aW9uIGljb24gb24gYW4gYXBwb2ludG1lbnQuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgbmF0aXZlIG1vdXNlIGV2ZW50LlxuICAgKiBAcGFyYW0gYXBwb2ludG1lbnRJdGVtIFRoZSBhcHBvaW50bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGFjdGlvbi5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgcHVibGljIGhhbmRsZUFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBhcHBvaW50bWVudEl0ZW06IEFYU2NoZWR1bGVyQXBwb2ludG1lbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcmlnaW5hbEFwcG9pbnRtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldE9yaWdpbmFsQXBwb2ludG1lbnQoYXBwb2ludG1lbnRJdGVtKTtcbiAgICB0aGlzLm9uQWN0aW9uQ2xpY2tJbnRlcm5hbC5lbWl0KHtcbiAgICAgIGFwcG9pbnRtZW50OiBvcmlnaW5hbEFwcG9pbnRtZW50LFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgc2VuZGVyOiB0aGlzLnNjaGVkdWxlcixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGRhdGUgaXMgdGhlIGN1cnJlbnQgZGF5LlxuICAgKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBkYXRlIGlzIHRvZGF5LlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzVG9kYXkoZGF0ZTogQVhEYXRlVGltZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRlLmVxdWFsKHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShuZXcgRGF0ZSgpKSwgJ2RheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZGF0ZSBpcyBhIGhvbGlkYXkgb3Igd2Vla2VuZC5cbiAgICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSBkYXkncyBzdGF0dXMgKGhvbGlkYXksIHdlZWtlbmQsIG9yIG5vbmUpLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzSG9saWRheShkYXRlOiBBWERhdGVUaW1lKTogeyBzdGF0ZTogJ2hvbGlkYXknIHwgJ3dlZWtlbmQnIHwgJ25vbmUnOyBob2xpZGF5PzogQVhIb2xpZGF5RGF0ZSB9IHtcbiAgICBjb25zdCBnbG9iYWxIb2xpZGF5ID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuaG9saWRheXMuZmluZCgoZCkgPT4gZGF0ZS5lcXVhbChkLmRhdGUsICdkYXknKSk7XG4gICAgY29uc3QgaW50ZXJuYWxIb2xpZGF5ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmludGVybmFsSG9saWRheSgpLmZpbmQoKGQpID0+IGRhdGUuZXF1YWwoZC5kYXRlLCAnZGF5JykpO1xuICAgIGNvbnN0IGhvbGlkYXkgPSBnbG9iYWxIb2xpZGF5IHx8IGludGVybmFsSG9saWRheTtcbiAgICBpZiAoaG9saWRheSkgcmV0dXJuIHsgc3RhdGU6ICdob2xpZGF5JywgaG9saWRheSB9O1xuICAgIGlmICh0aGlzLnNjaGVkdWxlclNlcnZpY2UuaXNXZWVrZW5kKGRhdGUsIHRoaXMuY2FsZW5kYXIoKSkpIHJldHVybiB7IHN0YXRlOiAnd2Vla2VuZCcgfTtcbiAgICByZXR1cm4geyBzdGF0ZTogJ25vbmUnIH07XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBDYXB0dXJlcyB0aGUgZGF0YS1zbG90LWlkIGF0dHJpYnV0ZSB3aGVuIGEgZHJhZyBvcGVyYXRpb24gc3RhcnRzIG9uIGFuIGFwcG9pbnRtZW50LlxuICAgKiBAcGFyYW0gZSBUaGUgcG9pbnRlciBldmVudCB0aGF0IGluaXRpYXRlcyB0aGUgZHJhZy5cbiAgICovXG4gIHByb3RlY3RlZCBnZXRTbG90SWQoZTogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZHJvcExpc3RFbGVtZW50ID0gdGhpcy5kb2N1bWVudFxuICAgICAgLmVsZW1lbnRzRnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKVxuICAgICAgLmZpbmQoKGVsKTogZWwgaXMgSFRNTEVsZW1lbnQgPT4gKGVsIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0WydzbG90SWQnXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYWdTdGFydFNsb3RJZC5zZXQoZHJvcExpc3RFbGVtZW50ID8gZHJvcExpc3RFbGVtZW50LmRhdGFzZXRbJ3Nsb3RJZCddIDogbnVsbCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5JylcbiAgcHJvdGVjdGVkIGdldCBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5KCk7XG4gIH1cblxuICAvLyAtLS0gUHJpdmF0ZSBEYXRhIFByb2Nlc3NpbmcgLS0tXG4gIHByaXZhdGUgcHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0ID0gY29tcHV0ZWQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXT4oKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdEYXlzID0gdGhpcy5kYXlzQXJyYXkoKS5tYXAoKGUpID0+IGUuZGF0ZSk7XG4gICAgY29uc3QgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMgPSB0aGlzLmFwcG9pbnRtZW50cygpO1xuICAgIGlmICh2aWV3RGF5cy5sZW5ndGggPT09IDAgfHwgYWxsT3JpZ2luYWxBcHBvaW50bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBzdGFydEggPSB0aGlzLnN0YXJ0RGF5SG91cigpO1xuICAgIGNvbnN0IGVuZEggPSB0aGlzLmVuZERheUhvdXIoKTtcbiAgICBjb25zdCBhbGxTZWdtZW50c0luVmlldzogQVhTY2hlZHVsZXJBcHBvaW50bWVudFNlZ21lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXkgb2Ygdmlld0RheXMpIHtcbiAgICAgIGZvciAoY29uc3QgYXBwdCBvZiBhbGxPcmlnaW5hbEFwcG9pbnRtZW50cykge1xuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldENsb25lZEFwcG9pbnRtZW50U2VnbWVudE9uRGF5KGFwcHQsIGRheS5zdGFydE9mKCdkYXknKSwgc3RhcnRILCBlbmRIKTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIGFsbFNlZ21lbnRzSW5WaWV3LnB1c2goc2VnbWVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHVuaXF1ZVNlZ21lbnRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRTZWdtZW50PigpO1xuICAgIGFsbFNlZ21lbnRzSW5WaWV3LmZvckVhY2goKHNlZykgPT4ge1xuICAgICAgY29uc3QgbWFwS2V5ID0gYCR7c2VnLmlkfS0ke3NlZy5zdGFydERhdGUuZ2V0VGltZSgpfS0ke3NlZy5lbmREYXRlLmdldFRpbWUoKX1gO1xuICAgICAgaWYgKCF1bmlxdWVTZWdtZW50c01hcC5oYXMobWFwS2V5KSkgdW5pcXVlU2VnbWVudHNNYXAuc2V0KG1hcEtleSwgc2VnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh1bmlxdWVTZWdtZW50c01hcC52YWx1ZXMoKSk7XG4gIH0pO1xuXG4gIHByaXZhdGUgdGltZWRHcmlkU2VnbWVudHMgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50U2VnbWVudFtdPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQXBwb2ludG1lbnRzRm9yTGF5b3V0KCk/LmZpbHRlcigoc2VnbWVudCkgPT4gIXNlZ21lbnQuYWxsRGF5KSA/PyBbXTtcbiAgfSk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF5c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItdGFibGVcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgIEBmb3IgKGRheSBvZiBkYXlzQXJyYXkoKTsgdHJhY2sgZGF5LmRhdGUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtjbGFzcy5heC1zdGF0ZS10b2RheV09XCJpc1RvZGF5KGRheS5kYXRlKVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF0ZS1kYXkge3tcbiAgICAgICAgICAgIGRheS5ob2xpZGF5LnN0YXRlICE9PSAnbm9uZScgPyAoZGF5LmhvbGlkYXkuaG9saWRheT8uY3NzQ2xhc3MgPz8gJ2F4LXN0YXRlLWhvbGlkYXknKSA6ICcnXG4gICAgICAgICAgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXdlZWstaGVhZGVyLWRhdGUtZGF5LWNoYXIgYXgtc2NoZWR1bGVyLXRydW5jYXRlXCJcbiAgICAgICAgICAgIFtheFRvb2x0aXBdPVwiZGF5LmhvbGlkYXk/LmhvbGlkYXk/LnRpdGxlID8/ICcnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBkYXkuZGF0ZSB8IGZvcm1hdDogJ2RhdGUnIDogeyBmb3JtYXQ6ICdkZGRkJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgICBAaWYgKGRheS5ob2xpZGF5LnN0YXRlID09PSAnaG9saWRheScgJiYgZGF5LmhvbGlkYXkuaG9saWRheS50aXRsZSkge1xuICAgICAgICAgICAgICAoIHt7IGRheS5ob2xpZGF5LmhvbGlkYXkudGl0bGUgfX0gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlLWRheS1udW1cIj5cbiAgICAgICAgICAgIHt7IGRheS5kYXRlIHwgZm9ybWF0OiAnZGF0ZScgOiB7IGZvcm1hdDogJ0REJywgY2FsZW5kYXI6IGNhbGVuZGFyKCkgfSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItZGF5c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1oZWFkZXItdGFibGVcIj57eyAnQGFjb3JleDpkYXRlVGltZS5kdXJhdGlvbi5hbGwtZGF5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9kaXY+XG4gICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLWhlYWRlci1kYXRlXCI+XG4gICAgICBAZm9yIChzbG90RGF0YSBvZiBhbGxEYXlBcHBvaW50bWVudHNQZXJEYXkoKTsgdHJhY2sgc2xvdERhdGEuZGF5LmRhdGUuZ2V0VGltZSgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBheERyb3Bab25lXG4gICAgICAgICAgI3pvbmUyPVwiYXhEcm9wWm9uZVwiXG4gICAgICAgICAgW2NsYXNzLmF4LXNjaGVkdWxlci1zbG90LWhvdmVyZWRdPVwiem9uZTIuaXNIb3ZlcmVkKClcIlxuICAgICAgICAgIChvbkVsZW1lbnREcm9wKT1cImhhbmRsZUFsbERheURyb3AoJGV2ZW50LCBzbG90RGF0YS5kYXkpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1hbGwtZGF5LXNsb3RcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBbGxEYXlTbG90RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5kYXkpXCJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQWxsRGF5U2xvdEV2ZW50KCRldmVudCwgc2xvdERhdGEuZGF5KVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFsbERheVNsb3RFdmVudCgkZXZlbnQsIHNsb3REYXRhLmRheSlcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChzbG90RGF0YS5hcHBvaW50bWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBheERyYWdcbiAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgW2RyYWdUcmFuc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICAgICAgW2RyYWdEYXRhXT1cInNsb3REYXRhLmFwcG9pbnRtZW50c1swXVwiXG4gICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IHNsb3REYXRhLmFwcG9pbnRtZW50c1swXS5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cImdldFNsb3RJZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0udGl0bGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNjaGVkdWxlci1oZWFkZXItd2Vlay1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJzbG90RGF0YS5hcHBvaW50bWVudHMubGVuZ3RoID4gMSA/ICdjYWxjKDEwMCUgLSAycmVtKScgOiAnMTAwJSdcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgICAgICBgYXgtc2NoZWR1bGVyLSR7c2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwRGlzYWJsZWRdPVwidG9vbHRpcFRlbXBsYXRlKCkgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICBbYXhUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXRydW5jYXRlXCI+e3sgc2xvdERhdGEuYXBwb2ludG1lbnRzWzBdLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBzbG90RGF0YS5hcHBvaW50bWVudHNbMF0pXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1pY29uIGF4LWljb24tbW9yZS1ob3Jpem9udGFsIGF4LXNjaGVkdWxlci1hY3Rpb24taWNvblwiXG4gICAgICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9heC10aXRsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNsb3REYXRhLmFwcG9pbnRtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICNtb3JlQXBwb2ludG1lbnRzXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLWFwcG9pbnRtZW50LWJhZGdlXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIicxLjVyZW0nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICBzbG90RGF0YS5hcHBvaW50bWVudHNbMV0uY3NzQ2xhc3MgPz9cbiAgICAgICAgICAgICAgICBgYXgtc2NoZWR1bGVyLSR7c2xvdERhdGEuYXBwb2ludG1lbnRzWzFdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre3sgc2xvdERhdGEuYXBwb2ludG1lbnRzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJtb3JlQXBwb2ludG1lbnRzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1vdmVybGF5LXBhbmUgYXgtc2NoZWR1bGVyLXBvcG92ZXJcIiBbY2xhc3MuYXgtc3RhdGUtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiIGF4RHJvcFpvbmU+XG4gICAgICAgICAgICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2Ygc2xvdERhdGEuYXBwb2ludG1lbnRzOyB0cmFjayBhcHBvaW50bWVudC5pZDsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgYXhEcmFnXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZHJhZ0RhdGFdPVwiYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwiIWRyYWdnYWJsZSgpIHx8IGFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlQXBwb2ludG1lbnRFdmVudCgkZXZlbnQsIGFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtc2NoZWR1bGVyLXBvcG92ZXItYXBwb2ludG1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFwcG9pbnRtZW50LmNzc0NsYXNzID8/IGBheC1zY2hlZHVsZXItJHthcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcG9pbnRtZW50LnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNBY3Rpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhcHBvaW50bWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC1pY29uLW1vcmUtaG9yaXpvbnRhbCBheC1zY2hlZHVsZXItYWN0aW9uLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLXRpbWUtY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay10aW1lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgQGZvciAodGltZSBvZiBob3Vyc0FycmF5KCk7IHRyYWNrIHRpbWUuZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIHt7IHRpbWUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmMgfX1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci13ZWVrLXRhYmxlLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1hcHBvaW50bWVudC1jb250YWluZXJcIj5cbiAgICAgIEBmb3IgKGFwcHQgb2YgdmlzaWJsZUFwcG9pbnRtZW50c0xheW91dCgpOyB0cmFjayBhcHB0LmFwcG9pbnRtZW50LmlkKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBheERyYWdcbiAgICAgICAgICBbZHJhZ0N1cnNvcl09XCInZ3JhYidcIlxuICAgICAgICAgIFtkcmFnVHJhbnNpdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2RyYWdEYXRhXT1cImFwcHQuYXBwb2ludG1lbnRcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhcHB0LmFwcG9pbnRtZW50LnJlYWRvbmx5IHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgIChwb2ludGVyZG93bik9XCJnZXRTbG90SWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHB0LmFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHB0LmFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cImhhbmRsZUFwcG9pbnRtZW50RXZlbnQoJGV2ZW50LCBhcHB0LmFwcG9pbnRtZW50KVwiXG4gICAgICAgICAgW3RpdGxlXT1cInRvb2x0aXBUZW1wbGF0ZSgpID8gJycgOiBhcHB0LmFwcG9pbnRtZW50LnRpdGxlXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiYXBwdC5sYXlvdXRXaWR0aFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJhcHB0LmxheW91dEhlaWdodFwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItd2Vlay1hcHBvaW50bWVudFwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWJsb2NrLXN0YXJ0XT1cImFwcHQubGF5b3V0VG9wXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImFwcHQubGF5b3V0TGVmdFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiYXBwdC5hcHBvaW50bWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7YXBwdC5hcHBvaW50bWVudC5wcmlvcml0eSA/PyAncHJpbWFyeSd9LXBlcmlvcml0eWBcIlxuICAgICAgICAgIFtheFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgW2F4VG9vbHRpcF09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtdGl0bGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXNjaGVkdWxlci10cnVuY2F0ZVwiPnt7IGFwcHQuYXBwb2ludG1lbnQudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKGhhc0FjdGlvbnMoKSkge1xuICAgICAgICAgICAgICA8YXgtaWNvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFwcHQuYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1tb3JlLWhvcml6b250YWwgYXgtc2NoZWR1bGVyLWFjdGlvbi1pY29uXCJcbiAgICAgICAgICAgICAgPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2F4LXRpdGxlPlxuICAgICAgICAgIDxheC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIGFwcHQuYXBwb2ludG1lbnQub3JpZ2luYWxTdGFydERhdGUgfCBmb3JtYXQ6ICd0aW1lJyA6IHsgZm9ybWF0OiAnSEg6bW0nLCBjYWxlbmRhcjogY2FsZW5kYXIoKSB9IHwgYXN5bmNcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICAtXG4gICAgICAgICAgICB7eyBhcHB0LmFwcG9pbnRtZW50Lm9yaWdpbmFsRW5kRGF0ZSB8IGZvcm1hdDogJ3RpbWUnIDogeyBmb3JtYXQ6ICdISDptbScsIGNhbGVuZGFyOiBjYWxlbmRhcigpIH0gfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtc3VidGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIE92ZXJmbG93IEJhZGdlcyB3aXRoIFBvcG92ZXJzIC0tPlxuICAgICAgQGZvciAoYmFkZ2Ugb2Ygb3ZlcmZsb3dCYWRnZXNXaXRoRGF0YSgpOyB0cmFjayBiYWRnZS5rZXkpIHtcbiAgICAgICAgPCEtLSBXcmFwIGJhZGdlIGFuZCBwb3BvdmVyIGZvciB0YXJnZXRpbmcgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYmFkZ2Utd3JhcHBlclwiXG4gICAgICAgICAgW3N0eWxlLmluc2V0LWJsb2NrLXN0YXJ0XT1cImJhZGdlLmJhZGdlVG9wXCJcbiAgICAgICAgICBbc3R5bGUuaW5zZXQtaW5saW5lLXN0YXJ0XT1cImJhZGdlLmJhZGdlTGVmdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIFRoZSBCYWRnZSBpdHNlbGYgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI2FjdGlvbkJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItYXBwb2ludG1lbnQtYmFkZ2VcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgIGJhZGdlLmhpZGRlbkFwcG9pbnRtZW50c1swXS5jc3NDbGFzcyA/P1xuICAgICAgICAgICAgICBgYXgtc2NoZWR1bGVyLSR7YmFkZ2UuaGlkZGVuQXBwb2ludG1lbnRzWzBdLnByaW9yaXR5ID8/ICdwcmltYXJ5J30tcGVyaW9yaXR5YFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICAre3sgYmFkZ2UuY291bnQgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFRoZSBQb3BvdmVyIC0tPlxuICAgICAgICAgIDxheC1wb3BvdmVyIFt0YXJnZXRdPVwiYWN0aW9uQnV0dG9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lIGF4LXNjaGVkdWxlci1wb3BvdmVyXCIgYXhEcm9wWm9uZT5cbiAgICAgICAgICAgICAgQGZvciAoYXBwb2ludG1lbnQgb2YgYmFkZ2UuaGlkZGVuQXBwb2ludG1lbnRzOyB0cmFjayBhcHBvaW50bWVudC5pZCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGF4RHJhZ1xuICAgICAgICAgICAgICAgICAgW2RyYWdDdXJzb3JdPVwiJ2dyYWInXCJcbiAgICAgICAgICAgICAgICAgIFtkcmFnRGF0YV09XCJhcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ1RyYW5zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2RyYWdFbGVtZW50Q2xvbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIiFkcmFnZ2FibGUoKSB8fCBhcHBvaW50bWVudC5yZWFkb25seSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJoYW5kbGVBcHBvaW50bWVudEV2ZW50KCRldmVudCwgYXBwb2ludG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0b29sdGlwVGVtcGxhdGUoKSA/ICcnIDogYXBwb2ludG1lbnQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1zY2hlZHVsZXItcG9wb3Zlci1hcHBvaW50bWVudFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhcHBvaW50bWVudC5jc3NDbGFzcyA/PyBgYXgtc2NoZWR1bGVyLSR7YXBwb2ludG1lbnQucHJpb3JpdHkgPz8gJ3ByaW1hcnknfS1wZXJpb3JpdHlgXCJcbiAgICAgICAgICAgICAgICAgIFtheFRvb2x0aXBEaXNhYmxlZF09XCJ0b29sdGlwVGVtcGxhdGUoKSA/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, ...(ngDevMode ? [{ debugName: \"viewModeSelectbox\" }] : []));\n this.calendarPopover = viewChild('calendarPopover', ...(ngDevMode ? [{ debugName: \"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(...(ngDevMode ? [undefined, { debugName: \"calendar\" }] : []));\n this.calendarType = linkedSignal(() => this.calendar() ?? this.localeService.activeProfile().calendar.system);\n this.startingDate = input(new Date(), ...(ngDevMode ? [{ debugName: \"startingDate\" }] : []));\n this.currentDate = linkedSignal(() => this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'));\n this._appointments = signal([], ...(ngDevMode ? [{ debugName: \"_appointments\" }] : []));\n this.appointments = this._appointments.asReadonly();\n this.rtl = signal(false, ...(ngDevMode ? [{ debugName: \"rtl\" }] : []));\n this.isFullScreen = signal(false, ...(ngDevMode ? [{ debugName: \"isFullScreen\" }] : []));\n this.viewsDataSource = signal([], ...(ngDevMode ? [{ debugName: \"viewsDataSource\" }] : []));\n this.prevDate = signal(this.calendarService.create(new Date(), this.calendarType()), ...(ngDevMode ? [{ debugName: \"prevDate\" }] : []));\n this.endDayHour = input(24, ...(ngDevMode ? [{ debugName: \"endDayHour\" }] : []));\n this.startDayHour = input(8, ...(ngDevMode ? [{ debugName: \"startDayHour\" }] : []));\n this.hasHeader = input(true, ...(ngDevMode ? [{ debugName: \"hasHeader\" }] : []));\n this.readonly = input(false, ...(ngDevMode ? [{ debugName: \"readonly\" }] : []));\n this.draggable = input(true, ...(ngDevMode ? [{ debugName: \"draggable\" }] : []));\n this.hasActions = input(false, ...(ngDevMode ? [{ debugName: \"hasActions\" }] : []));\n this.dragStartDelay = input(0, ...(ngDevMode ? [{ debugName: \"dragStartDelay\" }] : []));\n this.allowFullScreen = input(true, ...(ngDevMode ? [{ debugName: \"allowFullScreen\" }] : []));\n this.multiDayViewDaysCount = input(7, ...(ngDevMode ? [{ debugName: \"multiDayViewDaysCount\" }] : []));\n this.tooltipTemplate = input(...(ngDevMode ? [undefined, { debugName: \"tooltipTemplate\" }] : []));\n this.dataSource = input([], ...(ngDevMode ? [{ debugName: \"dataSource\" }] : []));\n this.holidays = input(...(ngDevMode ? [undefined, { debugName: \"holidays\" }] : []));\n this.firstDayOfWeek = input('sunday', ...(ngDevMode ? [{ debugName: \"firstDayOfWeek\" }] : []));\n this.views = input([\n 'day',\n 'week',\n 'month',\n 'timeline-day',\n 'timeline-multi-day',\n 'timeline-month',\n 'agenda',\n ], ...(ngDevMode ? [{ debugName: \"views\" }] : []));\n this.selectedView = model(this.views()[0], ...(ngDevMode ? [{ debugName: \"selectedView\" }] : []));\n this.prevView = signal(this.selectedView(), ...(ngDevMode ? [{ debugName: \"prevView\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"#appointmentEffect\" }] : []));\n this.#holidayEffect = effect(async () => {\n const func = this.holidays();\n const range = {\n end: this.range().end,\n from: this.range().from,\n };\n this.schedulerService.internalHoliday.set(await func(range));\n }, ...(ngDevMode ? [{ debugName: \"#holidayEffect\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"currentDateText\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"calendarDepth\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"mappedAppointments\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"range\" }] : []));\n this.#rangeChangedEffect = effect(() => {\n this.onRangeChanged.emit(this.range());\n }, ...(ngDevMode ? [{ debugName: \"#rangeChangedEffect\" }] : []));\n this.#viewChangedEffect = effect(() => {\n const view = this.selectedView();\n untracked(() => {\n this.handleViewChanged(this.prevView(), view);\n });\n }, ...(ngDevMode ? [{ debugName: \"#viewChangedEffect\" }] : []));\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 }, ...(ngDevMode ? [{ debugName: \"viewAppointments\" }] : []));\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 #holidayEffect;\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.1.3\", ngImport: i0, type: AXSchedulerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", 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 }, holidays: { classPropertyName: \"holidays\", publicName: \"holidays\", 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]=\\\"'200px'\\\"\\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 [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-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\", \"isItemTruncated\", \"showItemTooltip\", \"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: [\"width\", \"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.1.3\", 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]=\\\"'200px'\\\"\\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 [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-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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2NoZWR1bGVyL3NyYy9saWIvc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQXVCLFdBQVcsRUFBMEIsTUFBTSxvQkFBb0IsQ0FBQztBQUUzRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVB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QUNyQyw4QkFBOEI7OzJGQUlyQixvQkFBb0I7a0JBeEJoQyxTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxXQUFXO3dCQUNYLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixpQkFBaUI7d0JBQ2pCLE9BQU87d0JBQ1Asa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLDJCQUEyQjt3QkFDM0IsNEJBQTRCO3dCQUM1Qiw2QkFBNkI7d0JBQzdCLG1DQUFtQzt3QkFDbkMsd0NBQXdDO3dCQUN4QyxxQ0FBcUM7d0JBQ3JDLDhCQUE4QjtxQkFDL0IsYUFDVSxDQUFDLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxzQkFBc0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDb21wb25lbnQsIEFYVmFsdWVDaGFuZ2VkRXZlbnQsIE5YQ29tcG9uZW50LCBOWEV2ZW50LCBOWE5hdGl2ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRHJvcFpvbmVEcm9wRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhCdXR0b25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY2FsZW5kYXInO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhTZWxlY3RCb3hDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2VsZWN0LWJveCc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSwgQVhEYXRlVGltZSwgQVhIb2xpZGF5RGF0ZSB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlLXRpbWUnO1xuaW1wb3J0IHsgQVhGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWExvY2FsZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvbG9jYWxlJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYSHRtbFV0aWwsIEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyLCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIGxpbmtlZFNpZ25hbCxcbiAgbW9kZWwsXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgc2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgdW50cmFja2VkLFxuICB2aWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQVhEYXlPZldlZWtOYW1lLFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50LFxuICBBWFNjaGVkdWxlckFwcG9pbnRtZW50RGF0YVNvdXJjZSxcbiAgQVhTY2hlZHVsZXJBcHBvaW50bWVudExvYWRlcixcbiAgQVhTY2hlZHVsZXJEYXRlUmFuZ2UsXG4gIEFYU2NoZWR1bGVyVmlldyxcbn0gZnJvbSAnLi9zY2hlZHVsZXIuY2xhc3MnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJTZXJ2aWNlIH0gZnJvbSAnLi9zY2hlZHVsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlckFnZW5kYVZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL2FnZW5kYS9zY2hlZHVsZXItYWdlbmRhLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvZGF5L3NjaGVkdWxlci1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJNb250aFZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL21vbnRoL3NjaGVkdWxlci1tb250aC12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWFNjaGVkdWxlclRpbWVsaW5lRGF5Vmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtZGF5L3NjaGVkdWxlci10aW1lbGluZS1kYXktdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhTY2hlZHVsZXJUaW1lbGluZU1vbnRoVmlld0NvbXBvbmVudCB9IGZyb20gJy4vdmlld3MvdGltZWxpbmUtbW9udGgvc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL3RpbWVsaW5lLW11bHRpLWRheS9zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEFYU2NoZWR1bGVyV2Vla1ZpZXdDb21wb25lbnQgfSBmcm9tICcuL3ZpZXdzL3dlZWsvc2NoZWR1bGVyLXdlZWstdmlldy5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50IGV4dGVuZHMgTlhOYXRpdmVFdmVudDxBWFNjaGVkdWxlckNvbXBvbmVudCwgTW91c2VFdmVudD4ge1xuICBhcHBvaW50bWVudDogQVhTY2hlZHVsZXJBcHBvaW50bWVudDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCBleHRlbmRzIE5YTmF0aXZlRXZlbnQ8QVhTY2hlZHVsZXJDb21wb25lbnQsIE1vdXNlRXZlbnQ+IHtcbiAgc2xvdDoge1xuICAgIGVuZERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgc3RhcnREYXRlOiBBWERhdGVUaW1lO1xuICAgIHZpZXc6IEFYU2NoZWR1bGVyVmlldztcbiAgfTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50IGV4dGVuZHMgTlhFdmVudDxBWFNjaGVkdWxlckNvbXBvbmVudD4ge1xuICBkcm9wRXZlbnQ6IEFYRHJvcFpvbmVEcm9wRXZlbnQ7XG4gIGFwcG9pbnRtZW50OiBBWFNjaGVkdWxlckFwcG9pbnRtZW50O1xuICBzbG90OiB7XG4gICAgZW5kRGF0ZTogQVhEYXRlVGltZTtcbiAgICBzdGFydERhdGU6IEFYRGF0ZVRpbWU7XG4gICAgdmlldzogQVhTY2hlZHVsZXJWaWV3O1xuICB9O1xuICBpc1NhbWVTbG90RHJvcDogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtc2NoZWR1bGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NjaGVkdWxlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIEZvcm1zTW9kdWxlLFxuICAgIEFYU2VsZWN0Qm94Q29tcG9uZW50LFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgICBBWEJ1dHRvbkNvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIEFYUG9wb3ZlckNvbXBvbmVudCxcbiAgICBBWENhbGVuZGFyQ29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyRGF5Vmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlcldlZWtWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyTW9udGhWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyVGltZWxpbmVEYXlWaWV3Q29tcG9uZW50LFxuICAgIEFYU2NoZWR1bGVyVGltZWxpbmVNdWx0aURheVZpZXdDb21wb25lbnQsXG4gICAgQVhTY2hlZHVsZXJUaW1lbGluZU1vbnRoVmlld0NvbXBvbmVudCxcbiAgICBBWFNjaGVkdWxlckFnZW5kYVZpZXdDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW0FYVW5zdWJzY3JpYmVyLCB7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhTY2hlZHVsZXJDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYU2NoZWR1bGVyQ29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlciA9IGluamVjdChBWFVuc3Vic2NyaWJlcik7XG4gIHByaXZhdGUgZm9ybWF0U2VydmljZSA9IGluamVjdChBWEZvcm1hdFNlcnZpY2UpO1xuICBwcml2YXRlIGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoQVhMb2NhbGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIHNjaGVkdWxlclNlcnZpY2UgPSBpbmplY3QoQVhTY2hlZHVsZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIHByaXZhdGUgdmlld01vZGVTZWxlY3Rib3ggPSB2aWV3Q2hpbGQoQVhTZWxlY3RCb3hDb21wb25lbnQpO1xuICBwcml2YXRlIGNhbGVuZGFyUG9wb3ZlciA9IHZpZXdDaGlsZDxBWFBvcG92ZXJDb21wb25lbnQ+KCdjYWxlbmRhclBvcG92ZXInKTtcblxuICBwcml2YXRlIGRpc3BsYXlWaWV3czogUmVjb3JkPEFYU2NoZWR1bGVyVmlldywgc3RyaW5nPiA9IHtcbiAgICBkYXk6ICdkYWlseScsXG4gICAgd2VlazogJ3dlZWtseScsXG4gICAgbW9udGg6ICdtb250aGx5JyxcbiAgICAndGltZWxpbmUtZGF5JzogJ2RhaWx5LXRpbWVsaW5lJyxcbiAgICAndGltZWxpbmUtbXVsdGktZGF5JzogJ211bHRpLWRheS10aW1lbGluZScsXG4gICAgJ3RpbWVsaW5lLW1vbnRoJzogJ21vbnRobHktdGltZWxpbmUnLFxuICAgIGFnZW5kYTogJ2FnZW5kYScsXG4gIH07XG5cbiAgcHVibGljIGNhbGVuZGFyID0gaW5wdXQ8J2dyZWdvcmlhbicgfCAnc29sYXItaGlqcmknIHwgc3RyaW5nPigpO1xuICBwcm90ZWN0ZWQgY2FsZW5kYXJUeXBlID0gbGlua2VkU2lnbmFsPCdncmVnb3JpYW4nIHwgJ3NvbGFyLWhpanJpJyB8IHN0cmluZz4oXG4gICAgKCkgPT4gdGhpcy5jYWxlbmRhcigpID8/IHRoaXMubG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCkuY2FsZW5kYXIuc3lzdGVtLFxuICApO1xuXG4gIHB1YmxpYyBzdGFydGluZ0RhdGUgPSBpbnB1dDxEYXRlPihuZXcgRGF0ZSgpKTtcbiAgcHVibGljIGN1cnJlbnREYXRlID0gbGlua2VkU2lnbmFsPEFYRGF0ZVRpbWU+KCgpID0+XG4gICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRoaXMuc3RhcnRpbmdEYXRlKCksIHRoaXMuY2FsZW5kYXJUeXBlKCkpLnN0YXJ0T2YoJ2RheScpLFxuICApO1xuXG4gIHByaXZhdGUgX2FwcG9pbnRtZW50cyA9IHNpZ25hbDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KFtdKTtcbiAgcHVibGljIGFwcG9pbnRtZW50cyA9IHRoaXMuX2FwcG9pbnRtZW50cy5hc1JlYWRvbmx5KCk7XG4gIHByb3RlY3RlZCBydGwgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNGdWxsU2NyZWVuID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHZpZXdzRGF0YVNvdXJjZSA9IHNpZ25hbDx7IGlkOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W10+KFtdKTtcbiAgcHJpdmF0ZSBwcmV2RGF0ZSA9IHNpZ25hbDxBWERhdGVUaW1lPih0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUobmV3IERhdGUoKSwgdGhpcy5jYWxlbmRhclR5cGUoKSkpO1xuXG4gIHB1YmxpYyBlbmREYXlIb3VyID0gaW5wdXQoMjQpO1xuICBwdWJsaWMgc3RhcnREYXlIb3VyID0gaW5wdXQoOCk7XG4gIHB1YmxpYyBoYXNIZWFkZXIgPSBpbnB1dCh0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5ID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgZHJhZ2dhYmxlID0gaW5wdXQodHJ1ZSk7XG4gIHB1YmxpYyBoYXNBY3Rpb25zID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgZHJhZ1N0YXJ0RGVsYXkgPSBpbnB1dCgwKTtcbiAgcHVibGljIGFsbG93RnVsbFNjcmVlbiA9IGlucHV0KHRydWUpO1xuICBwdWJsaWMgbXVsdGlEYXlWaWV3RGF5c0NvdW50ID0gaW5wdXQoNyk7XG4gIHB1YmxpYyB0b29sdGlwVGVtcGxhdGUgPSBpbnB1dDxzdHJpbmcgfCBUZW1wbGF0ZVJlZjx1bmtub3duPj4oKTtcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBpbnB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50RGF0YVNvdXJjZT4oW10pO1xuICBwdWJsaWMgaG9saWRheXMgPSBpbnB1dDwocmFuZ2U6IEFYU2NoZWR1bGVyRGF0ZVJhbmdlKSA9PiBQcm9taXNlPEFYSG9saWRheURhdGVbXT4+KCk7XG4gIHB1YmxpYyBmaXJzdERheU9mV2VlayA9IGlucHV0PEFYRGF5T2ZXZWVrTmFtZT4oJ3N1bmRheScpO1xuICBwdWJsaWMgdmlld3MgPSBpbnB1dDxBWFNjaGVkdWxlclZpZXdbXT4oW1xuICAgICdkYXknLFxuICAgICd3ZWVrJyxcbiAgICAnbW9udGgnLFxuICAgICd0aW1lbGluZS1kYXknLFxuICAgICd0aW1lbGluZS1tdWx0aS1kYXknLFxuICAgICd0aW1lbGluZS1tb250aCcsXG4gICAgJ2FnZW5kYScsXG4gIF0pO1xuXG4gIHB1YmxpYyBzZWxlY3RlZFZpZXcgPSBtb2RlbDxBWFNjaGVkdWxlclZpZXc+KHRoaXMudmlld3MoKVswXSk7XG4gIHByaXZhdGUgcHJldlZpZXcgPSBzaWduYWw8QVhTY2hlZHVsZXJWaWV3Pih0aGlzLnNlbGVjdGVkVmlldygpKTtcblxuICAvLyAtLS0gUHVibGljIE91dHB1dHMgLS0tXG4gIHB1YmxpYyBvbkRhdGFMb2FkZWQgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcHVibGljIG9uUmFuZ2VDaGFuZ2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyRGF0ZVJhbmdlPigpO1xuICBwdWJsaWMgb25TbG90Q2xpY2tlZCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25TbG90RGJsQ2xpY2tlZCA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25TbG90UmlnaHRDbGljayA9IG91dHB1dDxBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25BcHBvaW50bWVudERyb3AgPSBvdXRwdXQ8QVhTY2hlZHVsZXJTbG90RHJvcEV2ZW50PigpO1xuICBwdWJsaWMgb25BY3Rpb25DbGljayA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcbiAgcHVibGljIG9uQXBwb2ludG1lbnRDbGlja2VkID0gb3V0cHV0PEFYU2NoZWR1bGVyQXBwb2ludG1lbnRNb3VzZUV2ZW50PigpO1xuICBwdWJsaWMgb25BcHBvaW50bWVudERibENsaWNrZWQgPSBvdXRwdXQ8QVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkFwcG9pbnRtZW50UmlnaHRDbGljayA9IG91dHB1dDxBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudD4oKTtcblxuICAvLyAtLS0gSW50ZXJuYWwgSGFuZGxlcnMgZm9yIFZpZXcgT3V0cHV0cyAtLS1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3RDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCkge1xuICAgIHRoaXMub25TbG90Q2xpY2tlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJTbG90TW91c2VFdmVudCkge1xuICAgIHRoaXMub25TbG90RGJsQ2xpY2tlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlclNsb3RNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5vblNsb3RSaWdodENsaWNrLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnRDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKGV2ZW50RGF0YTogQVhTY2hlZHVsZXJBcHBvaW50bWVudE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLm9uQXBwb2ludG1lbnREYmxDbGlja2VkLmVtaXQoZXZlbnREYXRhKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoZXZlbnREYXRhOiBBWFNjaGVkdWxlckFwcG9pbnRtZW50TW91c2VFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudFJpZ2h0Q2xpY2suZW1pdChldmVudERhdGEpO1xuICB9XG4gIHByb3RlY3RlZCBoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbChldmVudERhdGE6IEFYU2NoZWR1bGVyU2xvdERyb3BFdmVudCkge1xuICAgIHRoaXMub25BcHBvaW50bWVudERyb3AuZW1pdChldmVudERhdGEpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuY2FsZW5kYXJDaGFuZ2VzJC5waXBlKHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLmN1cnJlbnREYXRlKCkuZGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICBpZiAoIWN1cnJlbnREYXRlLmVxdWFsKHRoaXMuY3VycmVudERhdGUoKSkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQoY3VycmVudERhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UubGFuZ0NoYW5nZXMkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbERhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMudmlld01vZGVTZWxlY3Rib3goKT8uc2VsZWN0SXRlbXModGhpcy52aWV3c0RhdGFTb3VyY2UoKS5maW5kKChjKSA9PiBjLmlkID09IHRoaXMuc2VsZWN0ZWRWaWV3KCkpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKHRoaXMuY3VycmVudERhdGUoKS5kYXRlLCB0aGlzLmNhbGVuZGFyVHlwZSgpKTtcbiAgICAgIGlmICghY3VycmVudERhdGUuZXF1YWwodGhpcy5jdXJyZW50RGF0ZSgpKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChjdXJyZW50RGF0ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgdGhpcy5ydGwuc2V0KEFYSHRtbFV0aWwuaXNSdGwodGhpcy5uYXRpdmVFbGVtZW50KSk7XG4gICAgdGhpcy5maWxsRGF0YVNvdXJjZSgpO1xuICB9XG5cbiAgI2FwcG9pbnRtZW50RWZmZWN0ID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVNvdXJjZSgpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudExvYWRlcjtcbiAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICBlbmQ6IHRoaXMucmFuZ2UoKS5lbmQsXG4gICAgICAgIGZyb206IHRoaXMucmFuZ2UoKS5mcm9tLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBmdW5jKHsgcmFuZ2UgfSk7XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaXN0ID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuICAgICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChsaXN0KTtcbiAgICB9XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICB9KTtcblxuICAjaG9saWRheUVmZmVjdCA9IGVmZmVjdChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZnVuYyA9IHRoaXMuaG9saWRheXMoKTtcbiAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgIGVuZDogdGhpcy5yYW5nZSgpLmVuZCxcbiAgICAgIGZyb206IHRoaXMucmFuZ2UoKS5mcm9tLFxuICAgIH07XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmludGVybmFsSG9saWRheS5zZXQoYXdhaXQgZnVuYyhyYW5nZSkpO1xuICB9KTtcblxuICBwcml2YXRlIGFzeW5jIGZpbGxEYXRhU291cmNlKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciBhd2FpdCAoY29uc3QgYyBvZiB0aGlzLnZpZXdzKCkpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhgQGFjb3JleDpkYXRlVGltZS5kdXJhdGlvbi4ke3RoaXMuZGlzcGxheVZpZXdzW2NdfWApO1xuICAgICAgcmVzdWx0LnB1c2goeyB0ZXh0LCBpZDogYyB9KTtcbiAgICB9XG4gICAgdGhpcy52aWV3c0RhdGFTb3VyY2Uuc2V0KHJlc3VsdCk7XG4gIH1cblxuICBwcml2YXRlIGdldEdyaWREYXRlUmFuZ2UoZGF0ZUluTW9udGg6IEFYRGF0ZVRpbWUpOiB7IGdyaWRTdGFydERhdGU6IEFYRGF0ZVRpbWU7IGdyaWRFbmREYXRlOiBBWERhdGVUaW1lIH0ge1xuICAgIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGRhdGVJbk1vbnRoLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgY29uc3QgZmlyc3REYXlHcmlkTnVtID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcih0aGlzLmZpcnN0RGF5T2ZXZWVrKCkpO1xuICAgIGNvbnN0IGZpcnN0RGlzcGxheWVkRGF5T2ZXZWVrID0gZmlyc3REYXlPZk1vbnRoLmRheU9mV2VlaztcbiAgICBjb25zdCBkYXlzRnJvbVByZXZNb250aCA9IChmaXJzdERpc3BsYXllZERheU9mV2VlayAtIGZpcnN0RGF5R3JpZE51bSArIDcpICUgNztcbiAgICBjb25zdCBncmlkU3RhcnREYXRlID0gZmlyc3REYXlPZk1vbnRoLmFkZCgnZGF5JywgLWRheXNGcm9tUHJldk1vbnRoKTtcbiAgICAvLyBDYWxjdWxhdGUgZW5kIGRhdGUgYmFzZWQgb24gc3RhbmRhcmQgNiB3ZWVrcyBmb3Igc2FmZXR5LCBvciBjYWxjdWxhdGUgZHluYW1pY2FsbHkgaWYgcHJlZmVycmVkXG4gICAgY29uc3QgZ3JpZEVuZERhdGUgPSBncmlkU3RhcnREYXRlLmFkZCgnZGF5JywgNiAqIDcgLSAxKTtcbiAgICByZXR1cm4geyBncmlkU3RhcnREYXRlLCBncmlkRW5kRGF0ZSB9O1xuICB9XG5cbiAgcHVibGljIGN1cnJlbnREYXRlVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3dlZWsnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCd3ZWVrJywgMSkuYWRkKCdkYXknLCAtMSksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdERCBNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0T2ZXZWVrfSAtICR7ZW5kT2ZXZWVrfWA7XG4gICAgICB9XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5Jzoge1xuICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQodGhpcy5jdXJyZW50RGF0ZSgpLCAnZGF0ZXRpbWUnLCB7XG4gICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICBjYWxlbmRhcjogdGhpcy5jYWxlbmRhclR5cGUoKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZE9mV2VlayA9IHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQoXG4gICAgICAgICAgdGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnZGF5JywgdGhpcy5tdWx0aURheVZpZXdEYXlzQ291bnQoKSAtIDEpLFxuICAgICAgICAgICdkYXRldGltZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0OiAnREQgTU1NTSB5eXl5JyxcbiAgICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgJHtzdGFydE9mV2Vla30gLSAke2VuZE9mV2Vla31gO1xuICAgICAgfVxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbW9udGgnOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlKCksICdkYXRldGltZScsIHtcbiAgICAgICAgICBmb3JtYXQ6ICdNTU1NIHl5eXknLFxuICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyVHlwZSgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHB1YmxpYyBjYWxlbmRhckRlcHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tdWx0aS1kYXknOlxuICAgICAgICByZXR1cm4gJ2RheSc7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHJldHVybiAnbW9udGgnO1xuICAgIH1cbiAgfSk7XG5cbiAgcHJpdmF0ZSBtYXBwZWRBcHBvaW50bWVudHMgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2FwcG9pbnRtZW50cygpIGFzIEFYU2NoZWR1bGVyQXBwb2ludG1lbnRbXTtcblxuICAgIHJldHVybiBpdGVtc1xuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoaXRlbS5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGl0ZW0uZW5kRGF0ZSwgdGhpcy5jYWxlbmRhclR5cGUoKSk7XG4gICAgICAgIC8vIEJhc2ljIHZhbGlkYXRpb25cbiAgICAgICAgaWYgKCFzdGFydERhdGU/LmRhdGUgfHwgIWVuZERhdGU/LmRhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1NjaGVkdWxlcjogU2tpcHBpbmcgaXRlbSBkdWUgdG8gaW52YWxpZCBkYXRlIGZpZWxkczonLCBpdGVtKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBkYXRlcyBhcmUgdmFsaWQgYWZ0ZXIgY3JlYXRpb25cbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0RGF0ZS5kYXRlLmdldFRpbWUoKSkgfHwgaXNOYU4oZW5kRGF0ZS5kYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1NjaGVkdWxlcjogU2tpcHBpbmcgaXRlbSBkdWUgdG8gaW52YWxpZCBwYXJzZWQgZGF0ZSAoTmFOKTonLCBpdGVtKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChhcHB0KTogYXBwdCBpcyBBWFNjaGVkdWxlckFwcG9pbnRtZW50ID0+IGFwcHQgIT09IG51bGwpOyAvLyBGaWx0ZXIgb3V0IG51bGxzIGZyb20gaW52YWxpZCBkYXRlc1xuICB9KTtcblxuICBwdWJsaWMgcmFuZ2UgPSBjb21wdXRlZDxBWFNjaGVkdWxlckRhdGVSYW5nZT4oKCkgPT4ge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnNlbGVjdGVkVmlldygpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnREYXRlKCkuc3RhcnRPZignZGF5Jyk7XG5cbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybiB7IGZyb206IG51bGwsIGVuZDogbnVsbCB9O1xuXG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgY2FzZSAndGltZWxpbmUtZGF5Jzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5kYXRlLCBlbmQ6IGN1cnJlbnQuZW5kT2YoJ2RheScpLmRhdGUgfTtcbiAgICAgICAgcmV0dXJuIHJhbmdlO1xuICAgICAgfVxuICAgICAgY2FzZSAnd2Vlayc6IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGN1cnJlbnQuZGF0ZSwgZW5kOiBjdXJyZW50LmFkZCgnZGF5JywgNykuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgeyBncmlkU3RhcnREYXRlLCBncmlkRW5kRGF0ZSB9ID0gdGhpcy5nZXRHcmlkRGF0ZVJhbmdlKGN1cnJlbnQpO1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogZ3JpZFN0YXJ0RGF0ZS5kYXRlLCBlbmQ6IGdyaWRFbmREYXRlLmFkZCgnZGF5JywgMSkuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGZyb206IGN1cnJlbnQuc3RhcnRPZignbW9udGgnKS5kYXRlLCBlbmQ6IGN1cnJlbnQuZW5kT2YoJ21vbnRoJykuZGF0ZSB9O1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICB9XG4gICAgICBjYXNlICdhZ2VuZGEnOlxuICAgICAgY2FzZSAndGltZWxpbmUtbXVsdGktZGF5Jzoge1xuICAgICAgICBjb25zdCByYW5nZSA9IHsgZnJvbTogY3VycmVudC5kYXRlLCBlbmQ6IGN1cnJlbnQuYWRkKCdkYXknLCB0aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpKS5kYXRlIH07XG4gICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gICNyYW5nZUNoYW5nZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMub25SYW5nZUNoYW5nZWQuZW1pdCh0aGlzLnJhbmdlKCkpO1xuICB9KTtcblxuICAjdmlld0NoYW5nZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnNlbGVjdGVkVmlldygpO1xuICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVZpZXdDaGFuZ2VkKHRoaXMucHJldlZpZXcoKSwgdmlldyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZpZXdBcHBvaW50bWVudHMgPSBjb21wdXRlZDxBWFNjaGVkdWxlckFwcG9pbnRtZW50W10+KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50RGF0ZSgpO1xuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwcGVkQXBwb2ludG1lbnRzKCk7XG4gICAgY29uc3QgcmFuZ2VTdGFydCA9IHRoaXMucmFuZ2UoKS5mcm9tO1xuICAgIGNvbnN0IHJhbmdlRW5kID0gdGhpcy5yYW5nZSgpLmVuZDtcblxuICAgIGlmICghY3VycmVudCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gbWFwcGVkLmZpbHRlcihcbiAgICAgIChhcHB0KSA9PlxuICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5jcmVhdGUoYXBwdC5zdGFydERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpLmNvbXBhcmUocmFuZ2VFbmQsICdzZWNvbmQnKSA8PSAwICYmXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZShhcHB0LmVuZERhdGUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpLmNvbXBhcmUocmFuZ2VTdGFydCwgJ3NlY29uZCcpID49IDAsXG4gICAgKTtcbiAgfSk7XG5cbiAgdmlld0NoYW5nZWQoZTogQVhWYWx1ZUNoYW5nZWRFdmVudDxBWFNjaGVkdWxlclZpZXc+KSB7XG4gICAgY29uc3QgbmV3VmlldyA9IGUudmFsdWU7XG4gICAgY29uc3Qgb2xkVmlldyA9IGUub2xkVmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZFZpZXcuc2V0KG5ld1ZpZXcpO1xuXG4gICAgdGhpcy5oYW5kbGVWaWV3Q2hhbmdlZChvbGRWaWV3LCBuZXdWaWV3KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlld0NoYW5nZWQob2xkVmlldzogQVhTY2hlZHVsZXJWaWV3LCBuZXdWaWV3OiBBWFNjaGVkdWxlclZpZXcpIHtcbiAgICBpZiAob2xkVmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICBjb25zdCBvbGREYXlPZldlZWsgPSB0aGlzLnByZXZEYXRlKCkuZGF5T2ZXZWVrICUgNztcbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCBvbGREYXlPZldlZWsgLSAxKTtcbiAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KGRhdGUpO1xuICAgIH1cblxuICAgIHRoaXMucHJldkRhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKSk7XG5cbiAgICBpZiAobmV3VmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuY3VycmVudERhdGUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOYW1lID0gdGhpcy5maXJzdERheU9mV2VlaygpO1xuICAgICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TnVtYmVyID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcihkZXNpcmVkRmlyc3REYXlOYW1lKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgICBjb25zdCBzdGFydE9mV2Vla0RhdGUgPSBjdXJyZW50RGF0ZS5hZGQoJ2RheScsIC1kYXlzVG9TdWJ0cmFjdCk7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChzdGFydE9mV2Vla0RhdGUpO1xuICAgIH1cblxuICAgIHRoaXMucHJldlZpZXcuc2V0KG5ld1ZpZXcpO1xuICB9XG5cbiAgbmV4dENsaWNrKCkge1xuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFZpZXcoKSkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIDEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCd3ZWVrJywgMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIHRoaXMubXVsdGlEYXlWaWV3RGF5c0NvdW50KCkpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW1vbnRoJzpcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXQodGhpcy5jdXJyZW50RGF0ZSgpLmFkZCgnbW9udGgnLCAxKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByZXZDbGljaygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRWaWV3KCkpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBjYXNlICd0aW1lbGluZS1kYXknOlxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldCh0aGlzLmN1cnJlbnREYXRlKCkuYWRkKCdkYXknLCAtMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ3dlZWsnLCAtMSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWdlbmRhJzpcbiAgICAgIGNhc2UgJ3RpbWVsaW5lLW11bHRpLWRheSc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ2RheScsIC10aGlzLm11bHRpRGF5Vmlld0RheXNDb3VudCgpKSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICBjYXNlICd0aW1lbGluZS1tb250aCc6XG4gICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0KHRoaXMuY3VycmVudERhdGUoKS5hZGQoJ21vbnRoJywgLTEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY2FsZW5kYXJEYXRlQ2hhbmdlZChlOiBBWFZhbHVlQ2hhbmdlZEV2ZW50PERhdGU+KSB7XG4gICAgbGV0IGN1cnJlbnREYXRlID0gdGhpcy5jYWxlbmRhclNlcnZpY2UuY3JlYXRlKGUudmFsdWUsIHRoaXMuY2FsZW5kYXJUeXBlKCkpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmlldygpID09PSAnd2VlaycpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXlPZldlZWsgPSBjdXJyZW50RGF0ZS5kYXlPZldlZWs7XG4gICAgICBjb25zdCBkZXNpcmVkRmlyc3REYXlOYW1lID0gdGhpcy5maXJzdERheU9mV2VlaygpO1xuICAgICAgY29uc3QgZGVzaXJlZEZpcnN0RGF5TnVtYmVyID0gdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmdldERheU9mV2Vla051bWJlcihkZXNpcmVkRmlyc3REYXlOYW1lKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWsgLSBkZXNpcmVkRmlyc3REYXlOdW1iZXIgKyA3KSAlIDc7XG4gICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KTtcbiAgICB9XG4gICAgaWYgKCFjdXJyZW50RGF0ZS5lcXVhbCh0aGlzLmN1cnJlbnREYXRlKCkpKSB7XG4gICAgICB0aGlzLmN1cnJlbnREYXRlLnNldChjdXJyZW50RGF0ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsZW5kYXJQb3BvdmVyKCk/LmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRnVsbFNjcmVlbigpIHtcbiAgICBpZiAoIXRoaXMuaXNGdWxsU2NyZWVuKCkpIHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdheC1mdWxsLXNjcmVlbi1jb250YWluZXInKTtcbiAgICBlbHNlIHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdheC1mdWxsLXNjcmVlbi1jb250YWluZXInKTtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbi5zZXQoIXRoaXMuaXNGdWxsU2NyZWVuKCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlZnJlc2goYXBwb2ludG1lbnRzPzogQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdKSB7XG4gICAgaWYgKGFwcG9pbnRtZW50cykge1xuICAgICAgY29uc3QgbmV3QXBwb2ludG1lbnRzID0gdGhpcy5fYXBwb2ludG1lbnRzKCkubWFwKChhcHB0KSA9PiB7XG4gICAgICAgIHJldHVybiBhcHBvaW50bWVudHMuZmluZCgoYSkgPT4gYS5pZCA9PT0gYXBwdC5pZCkgPz8gYXBwdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fYXBwb2ludG1lbnRzLnNldChuZXdBcHBvaW50bWVudHMpO1xuICAgICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVNvdXJjZSgpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBmdW5jID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudExvYWRlcjtcbiAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICBlbmQ6IHRoaXMucmFuZ2UoKS5lbmQsXG4gICAgICAgIGZyb206IHRoaXMucmFuZ2UoKS5mcm9tLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBmdW5jKHsgcmFuZ2UgfSk7XG4gICAgICB0aGlzLl9hcHBvaW50bWVudHMuc2V0KGxpc3QpO1xuICAgICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ID0gdGhpcy5kYXRhU291cmNlKCkgYXMgQVhTY2hlZHVsZXJBcHBvaW50bWVudFtdO1xuICAgIHRoaXMuX2FwcG9pbnRtZW50cy5zZXQobGlzdCk7XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtc2NoZWR1bGVyLWNvbnRhaW5lclwiPlxuICBAaWYgKGhhc0hlYWRlcigpKSB7XG4gICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zY2hlZHVsZXItZGF0ZVwiPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cInByZXZDbGljaygpXCI+XG4gICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC10ZXh0LXhsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1sZWZ0JzogIXJ0bCgpLFxuICAgICAgICAgICAgICAnYXgtaWNvbi1jaGV2cm9uLXJpZ2h0JzogcnRsKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiBbdGV4dF09XCJjdXJyZW50RGF0ZVRleHQoKVwiICNkYXRlPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cIm5leHRDbGljaygpXCI+XG4gICAgICAgICAgPGF4LWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtaWNvbiBheC10ZXh0LXhsXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1yaWdodCc6ICFydGwoKSxcbiAgICAgICAgICAgICAgJ2F4LWljb24tY2hldnJvbi1sZWZ0JzogcnRsKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LXBvcG92ZXIgW3RhcmdldF09XCJkYXRlXCIgI2NhbGVuZGFyUG9wb3Zlcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtb3ZlcmxheS1wYW5lXCI+XG4gICAgICAgICAgICA8YXgtY2FsZW5kYXJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgICAgICBbZGVwdGhdPVwiY2FsZW5kYXJEZXB0aCgpXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJjYWxlbmRhckRhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgPjwvYXgtY2FsZW5kYXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci1hY3Rpb25zXCI+XG4gICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgW2Ryb3Bkb3duV2lkdGhdPVwiJzIwMHB4J1wiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRWaWV3KClcIlxuICAgICAgICAgIFtkYXRhU291cmNlXT1cInZpZXdzRGF0YVNvdXJjZSgpXCJcbiAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidmlld0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgID48L2F4LXNlbGVjdC1ib3g+XG5cbiAgICAgICAgQGlmIChhbGxvd0Z1bGxTY3JlZW4oKSkge1xuICAgICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgKG9uQ2xpY2spPVwiaGFuZGxlRnVsbFNjcmVlbigpXCI+XG4gICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhLXNvbGlkIGZhLWV4cGFuZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZmEtY29tcHJlc3MnOiBpc0Z1bGxTY3JlZW4oKSwgJ2ZhLWV4cGFuZCc6ICFpc0Z1bGxTY3JlZW4oKSB9XCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImF4LXNjaGVkdWxlci12aWV3cy1jb250YWluZXJcIj5cbiAgICBAc3dpdGNoIChzZWxlY3RlZFZpZXcoKSkge1xuICAgICAgQGNhc2UgKCdkYXknKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItZGF5LXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2hhc0FjdGlvbnNdPVwiaGFzQWN0aW9ucygpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgICAgW3N0YXJ0RGF5SG91cl09XCJzdGFydERheUhvdXIoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtkcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheSgpXCJcbiAgICAgICAgICBbdG9vbHRpcFRlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZSgpXCJcbiAgICAgICAgICAob25BY3Rpb25DbGlja0ludGVybmFsKT1cIm9uQWN0aW9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2xvdFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uQXBwb2ludG1lbnREcm9wSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREcm9wSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnREYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnREYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudFJpZ2h0Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICA+PC9heC1zY2hlZHVsZXItZGF5LXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3dlZWsnKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItd2Vlay12aWV3XG4gICAgICAgICAgW2RhdGVdPVwiY3VycmVudERhdGUoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtkcmFnZ2FibGVdPVwiZHJhZ2dhYmxlKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFtzdGFydERheUhvdXJdPVwic3RhcnREYXlIb3VyKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYXgtc2NoZWR1bGVyLXdlZWstdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnbW9udGgnKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItbW9udGgtdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtoYXNBY3Rpb25zXT1cImhhc0FjdGlvbnMoKVwiXG4gICAgICAgICAgW2FwcG9pbnRtZW50c109XCJ2aWV3QXBwb2ludG1lbnRzKClcIlxuICAgICAgICAgIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2VlaygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPjwvYXgtc2NoZWR1bGVyLW1vbnRoLXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3RpbWVsaW5lLWRheScpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci10aW1lbGluZS1kYXktdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFtjYWxlbmRhcl09XCJjYWxlbmRhclR5cGUoKVwiXG4gICAgICAgICAgW2VuZERheUhvdXJdPVwiZW5kRGF5SG91cigpXCJcbiAgICAgICAgICBbc3RhcnREYXlIb3VyXT1cInN0YXJ0RGF5SG91cigpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgIChvbkFjdGlvbkNsaWNrSW50ZXJuYWwpPVwib25BY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC1zY2hlZHVsZXItdGltZWxpbmUtZGF5LXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3RpbWVsaW5lLW11bHRpLWRheScpIHtcbiAgICAgICAgPGF4LXNjaGVkdWxlci10aW1lbGluZS1tdWx0aS1kYXktdmlld1xuICAgICAgICAgIFtkYXRlXT1cImN1cnJlbnREYXRlKClcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZSgpXCJcbiAgICAgICAgICBbY2FsZW5kYXJdPVwiY2FsZW5kYXJUeXBlKClcIlxuICAgICAgICAgIFtlbmREYXlIb3VyXT1cImVuZERheUhvdXIoKVwiXG4gICAgICAgICAgW2hhc0FjdGlvbnNdPVwiaGFzQWN0aW9ucygpXCJcbiAgICAgICAgICBbc3RhcnREYXlIb3VyXT1cInN0YXJ0RGF5SG91cigpXCJcbiAgICAgICAgICBbYXBwb2ludG1lbnRzXT1cInZpZXdBcHBvaW50bWVudHMoKVwiXG4gICAgICAgICAgW2RyYWdTdGFydERlbGF5XT1cImRyYWdTdGFydERlbGF5KClcIlxuICAgICAgICAgIFtkYXlzQ291bnRdPVwibXVsdGlEYXlWaWV3RGF5c0NvdW50KClcIlxuICAgICAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlKClcIlxuICAgICAgICAgIChvbkFjdGlvbkNsaWNrSW50ZXJuYWwpPVwib25BY3Rpb25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChzbG90Q2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3RDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZVNsb3REYmxDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChzbG90UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAob25BcHBvaW50bWVudERyb3BJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERyb3BJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudERibENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50UmlnaHRDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlQXBwb2ludG1lbnRSaWdodENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heC1zY2hlZHVsZXItdGltZWxpbmUtbXVsdGktZGF5LXZpZXc+XG4gICAgICB9XG4gICAgICBAY2FzZSAoJ3RpbWVsaW5lLW1vbnRoJykge1xuICAgICAgICA8YXgtc2NoZWR1bGVyLXRpbWVsaW5lLW1vbnRoLXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNjaGVkdWxlci10aW1lbGluZS1tb250aC12aWV3PlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdhZ2VuZGEnKSB7XG4gICAgICAgIDxheC1zY2hlZHVsZXItYWdlbmRhLXZpZXdcbiAgICAgICAgICBbZGF0ZV09XCJjdXJyZW50RGF0ZSgpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGUoKVwiXG4gICAgICAgICAgW2NhbGVuZGFyXT1cImNhbGVuZGFyVHlwZSgpXCJcbiAgICAgICAgICBbaGFzQWN0aW9uc109XCJoYXNBY3Rpb25zKClcIlxuICAgICAgICAgIFthcHBvaW50bWVudHNdPVwidmlld0FwcG9pbnRtZW50cygpXCJcbiAgICAgICAgICBbZHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXkoKVwiXG4gICAgICAgICAgW2RheXNDb3VudF09XCJtdWx0aURheVZpZXdEYXlzQ291bnQoKVwiXG4gICAgICAgICAgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGUoKVwiXG4gICAgICAgICAgKG9uQWN0aW9uQ2xpY2tJbnRlcm5hbCk9XCJvbkFjdGlvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3REYmxDbGlja2VkSW50ZXJuYWwpPVwiaGFuZGxlU2xvdERibENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKHNsb3RSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVTbG90UmlnaHRDbGlja0ludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChvbkFwcG9pbnRtZW50RHJvcEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RHJvcEludGVybmFsKCRldmVudClcIlxuICAgICAgICAgIChhcHBvaW50bWVudENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudENsaWNrSW50ZXJuYWwoJGV2ZW50KVwiXG4gICAgICAgICAgKGFwcG9pbnRtZW50RGJsQ2xpY2tlZEludGVybmFsKT1cImhhbmRsZUFwcG9pbnRtZW50RGJsQ2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXBwb2ludG1lbnRSaWdodENsaWNrZWRJbnRlcm5hbCk9XCJoYW5kbGVBcHBvaW50bWVudFJpZ2h0Q2xpY2tJbnRlcm5hbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNjaGVkdWxlci1hZ2VuZGEtdmlldz5cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=","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.1.3\", ngImport: i0, type: AXSchedulerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.3\", 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.1.3\", ngImport: i0, type: AXSchedulerModule, imports: [COMPONENT] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", 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":";;;;;;;;;;;;;;;;;;;;AAIO,MAAM,kBAAkB,CAAC;AAChC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACpD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,aAAa,GAAG,EAAE;AAC/B,QAAQ,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAClC,QAAQ,IAAI,CAAC,sBAAsB,GAAG,EAAE;AACxC,QAAQ,IAAI,CAAC,uBAAuB,GAAG,EAAE,GAAG,IAAI;AAChD,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB;AAC7G,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnG;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,YAAY,EAAE,YAAY,EAAE;AACtD,QAAQ,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AACpH,YAAY,OAAO,KAAK;AACxB;AACA,QAAQ,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE;AACvD,QAAQ,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE;AACnD,QAAQ,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE;AACvD,QAAQ,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE;AACnD;AACA,QAAQ,OAAO,MAAM,GAAG,IAAI,IAAI,IAAI,GAAG,MAAM;AAC7C;AACA;AACA;AACA;AACA,IAAI,0BAA0B,CAAC,WAAW,EAAE;AAC5C,QAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO;AAC3D,YAAY,OAAO,CAAC;AACpB,QAAQ,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE;AAC9F,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC;AACzE;AACA;AACA;AACA;AACA,IAAI,yBAAyB,CAAC,WAAW,EAAE;AAC3C,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC;AAC5E,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC;AACvE;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO;AAClE,IAAI,aAAa,GAAG,CAAC,EAAE;AACvB,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACzG,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACpE;AACA,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC;AACtD,YAAY,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC;AACrD,YAAY,QAAQ,CAAC,IAAI,GAAG,SAAS;AACrC,YAAY,QAAQ,CAAC,IAAI,IAAI,OAAO;AACpC,UAAU;AACV,YAAY,OAAO,IAAI;AACvB;AACA;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,oBAAoB,CAAC;AACzH;AACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,aAAa,EAAE;AACvD,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM;AACtF,QAAQ,MAAM,oBAAoB,GAAG,cAAc,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB;AACvF;AACA,QAAQ,IAAI,oBAAoB,GAAG,CAAC;AACpC,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,CAAC;AACzF,QAAQ,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;AACvC;AACA;AACA;AACA;AACA;AACA,IAAI,kCAAkC,CAAC,qBAAqB,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE;AAChH,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB,QAAQ,IAAI,CAAC,aAAa,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC,EAAE;AAClH,YAAY,OAAO,MAAM;AACzB;AACA,QAAQ,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACpE;AACA,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC5H,QAAQ,qBAAqB,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK;AACvD,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;AACjF,gBAAgB;AAChB,YAAY,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;AACvF,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;AAC3F;AACA,YAAY,IAAI,cAAc,GAAG,oBAAoB,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,oBAAoB;AACvH,YAAY,IAAI,cAAc,CAAC,IAAI,GAAG,SAAS;AAC/C,gBAAgB,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACtF,YAAY,IAAI,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,kBAAkB;AAC9G,YAAY,IAAI,YAAY,CAAC,IAAI,IAAI,OAAO,EAAE;AAC9C,gBAAgB,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY;AACrH,gBAAgB,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AAC9E;AACA;AACA,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC;AACvH,YAAY,IAAI,CAAC,SAAS;AAC1B,gBAAgB,OAAO;AACvB;AACA,YAAY,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAChE,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC;AACpH;AACA;AACA,YAAY,IAAI,CAAC,OAAO;AACxB,gBAAgB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ;AACrD,iBAAiB,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE;AACxG,gBAAgB,OAAO;AACvB;AACA;AACA,YAAY,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;AAClF;AACA,gBAAgB,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,aAAa;AACrD,oBAAoB;AACpB,gBAAgB,MAAM,UAAU,GAAG,IAAI,KAAK,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC;AACzF;AACA,gBAAgB,MAAM,QAAQ,GAAG,IAAI,KAAK,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,GAAG,iBAAiB,GAAG,CAAC;AACvG,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACjC,oBAAoB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;AACrC,gBAAgB,KAAK,IAAI,IAAI,GAAG,UAAU,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,EAAE;AACtE;AACA,oBAAoB,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,iBAAiB,EAAE;AAC/D,wBAAwB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAC/C,4BAA4B,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACnD;AACA,wBAAwB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC,EAAE;AACtF,4BAA4B,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AAChE;AACA;AACA;AACA;AACA,SAAS,CAAC;AACV,QAAQ,OAAO,MAAM;AACrB;AACA;AACA;AACA;AACA,IAAI,+BAA+B,CAAC,qBAAqB;AACzD,IAAI,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE;AACvC,QAAQ,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE;AACpC,QAAQ,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC;AAC9C,YAAY,OAAO,UAAU;AAC7B,QAAQ,MAAM,qBAAqB,GAAG,IAAI,CAAC,kCAAkC,CAAC,qBAAqB,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1I,QAAQ,MAAM,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE;AACrD;AACA,QAAQ,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE;AAC3C,QAAQ,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;AACnD,YAAY,IAAI,yBAAyB,GAAG,CAAC;AAC7C,YAAY,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE;AAC7H,YAAY,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE;AACvH;AACA,YAAY,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACjH,YAAY,MAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACzJ,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,sBAAsB,CAAC;AACtG,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,sBAAsB,GAAG,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC1G,YAAY,KAAK,IAAI,QAAQ,GAAG,eAAe,EAAE,QAAQ,IAAI,cAAc,EAAE,QAAQ,EAAE,EAAE;AACzF,gBAAgB,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5D,gBAAgB,IAAI,mBAAmB,EAAE;AACzC,oBAAoB,yBAAyB,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,mBAAmB,CAAC,MAAM,CAAC;AAC/G;AACA;AACA,YAAY,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,yBAAyB,IAAI,CAAC,CAAC;AAC7E,SAAS,CAAC;AACV;AACA,QAAQ,MAAM,4BAA4B,GAAG,IAAI,GAAG,EAAE;AACtD,QAAQ,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;AACnD,YAAY,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAChG,SAAS,CAAC;AACV,QAAQ,IAAI,OAAO,GAAG,IAAI;AAC1B,QAAQ,OAAO,OAAO,EAAE;AACxB,YAAY,OAAO,GAAG,KAAK;AAC3B,YAAY,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;AACxD,gBAAgB,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;AAC5D,oBAAoB,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;AACnD,wBAAwB;AACxB,oBAAoB,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;AACxE,wBAAwB,MAAM,IAAI,GAAG,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;AACvF,wBAAwB,MAAM,IAAI,GAAG,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;AACvF,wBAAwB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3D,wBAAwB,IAAI,IAAI,KAAK,MAAM,EAAE;AAC7C,4BAA4B,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;AACjF,4BAA4B,OAAO,GAAG,IAAI;AAC1C;AACA,wBAAwB,IAAI,IAAI,KAAK,MAAM,EAAE;AAC7C,4BAA4B,4BAA4B,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;AACjF,4BAA4B,OAAO,GAAG,IAAI;AAC1C;AACA;AACA,iBAAiB,CAAC;AAClB,aAAa,CAAC;AACd;AACA;AACA,QAAQ,qBAAqB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;AACnD,YAAY,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE;AACvC,gBAAgB,cAAc,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;AACtE,gBAAgB,qBAAqB,EAAE,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;AACxF,aAAa,CAAC;AACd,SAAS,CAAC;AACV,QAAQ,OAAO,UAAU;AACzB;AACA;AACA;AACA;AACA,IAAI,yCAAyC,CAAC,qBAAqB,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE;AACxG,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB,QAAQ,qBAAqB,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK;AACvD,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS;AACtC,gBAAgB;AAChB,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/I,YAAY,IAAI,SAAS,EAAE;AAC3B,gBAAgB,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,SAAS;AAC1D,gBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AACrC,oBAAoB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE;AACzC,gBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC;AACjD,oBAAoB,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;AACrD,gBAAgB,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AAC9D;AACA,SAAS,CAAC;AACV,QAAQ,OAAO,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,YAAY,EAAE,aAAa;AACtD,IAAI,WAAW,EAAE;AACjB,QAAQ,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAE;AAC7C,QAAQ,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE;AAC1F,YAAY,OAAO,mBAAmB;AACtC;AACA;AACA,QAAQ,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9D,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK;AAC9C,YAAY,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;AACjF,gBAAgB;AAChB;AACA,YAAY,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;AACvF,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;AACnF;AACA,YAAY,IAAI,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC;AAChE,gBAAgB,gBAAgB,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AAC5E,gBAAgB;AAChB;AACA;AACA,YAAY,IAAI,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;AACjI;AACA,YAAY,IAAI,SAAS,GAAG,CAAC,CAAC;AAC9B,YAAY,OAAO,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC;AACjE,gBAAgB,UAAU,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC;AACnE,gBAAgB,SAAS,GAAG,GAAG,EAAE;AACjC,gBAAgB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AAC/G,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC1D,oBAAoB,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;AAC3D;AACA;AACA,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC,EAAE;AAC/F,oBAAoB,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AACzE;AACA,gBAAgB,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACrD,gBAAgB,SAAS,EAAE;AAC3B;AACA,YAAY,IAAI,SAAS,IAAI,GAAG,EAAE;AAClC,gBAAgB,OAAO,CAAC,IAAI,CAAC,kEAAkE,EAAE,WAAW,CAAC,EAAE,CAAC;AAChH;AACA,SAAS,CAAC;AACV,QAAQ,OAAO,mBAAmB;AAClC;AACA,IAAI,kBAAkB,CAAC,OAAO,EAAE;AAChC,QAAQ,QAAQ,OAAO;AACvB,YAAY,KAAK,QAAQ;AACzB,gBAAgB,OAAO,CAAC;AACxB,YAAY,KAAK,QAAQ;AACzB,gBAAgB,OAAO,CAAC;AACxB,YAAY,KAAK,SAAS;AAC1B,gBAAgB,OAAO,CAAC;AACxB,YAAY,KAAK,WAAW;AAC5B,gBAAgB,OAAO,CAAC;AACxB,YAAY,KAAK,UAAU;AAC3B,gBAAgB,OAAO,CAAC;AACxB,YAAY,KAAK,QAAQ;AACzB,gBAAgB,OAAO,CAAC;AACxB,YAAY,KAAK,UAAU;AAC3B,gBAAgB,OAAO,CAAC;AACxB,YAAY;AACZ,gBAAgB,OAAO,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;AACvF,gBAAgB,OAAO,CAAC;AACxB;AACA;AACA,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE;AACjC,QAAQ,IAAI,OAAO;AACnB,QAAQ,QAAQ,IAAI;AACpB,YAAY,KAAK,KAAK;AACtB,YAAY,KAAK,MAAM;AACvB,gBAAgB,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC;AAC9E,gBAAgB;AAChB,YAAY,KAAK,cAAc;AAC/B,YAAY,KAAK,oBAAoB;AACrC,gBAAgB,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;AAClF,gBAAgB;AAChB,YAAY,KAAK,OAAO;AACxB,YAAY,KAAK,QAAQ;AACzB,YAAY,KAAK,gBAAgB;AACjC,gBAAgB,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;AACpD,gBAAgB,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;AAChD,gBAAgB;AAChB;AACA,QAAQ,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;AAC3C;AACA,IAAI,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE;AAClD,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW;AAC5C,QAAQ,UAAU,CAAC,cAAc,EAAE;AACnC,QAAQ,UAAU,CAAC,eAAe,EAAE;AACpC,QAAQ,IAAI,SAAS,KAAK,aAAa,EAAE;AACzC,YAAY,MAAM,oBAAoB,GAAG,cAAc,CAAC,SAAS,CAAC;AAClE,YAAY,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC;AACjE,YAAY,IAAI,OAAO;AACvB,gBAAgB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC;AACA,QAAQ,IAAI,SAAS,KAAK,MAAM,EAAE;AAClC,YAAY,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC;AAC3D,YAAY,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1D,YAAY,IAAI,OAAO;AACvB,gBAAgB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC;AACA;AACA;AACA,IAAI,uBAAuB;AAC3B;AACA,IAAI,IAAI,EAAE,aAAa;AACvB,IAAI,WAAW,EAAE;AACjB,QAAQ,IAAI,CAAC,IAAI,EAAE,SAAS;AAC5B,YAAY,CAAC,IAAI,CAAC,OAAO;AACzB,YAAY,OAAO,aAAa,KAAK,QAAQ;AAC7C,YAAY,OAAO,WAAW,KAAK,QAAQ;AAC3C,YAAY,aAAa,IAAI,WAAW;AACxC,UAAU;AACV,YAAY,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AACxG,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,MAAM,wBAAwB,GAAG,CAAC,WAAW,GAAG,aAAa,IAAI,EAAE;AAC3E,QAAQ,IAAI,wBAAwB,IAAI,CAAC;AACzC,YAAY,OAAO,IAAI,CAAC;AACxB;AACA,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS;AAC3C,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;AACvC;AACA;AACA,QAAQ,IAAI,iCAAiC,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,UAAU,EAAE;AACxG;AACA,QAAQ,iCAAiC,GAAG,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,aAAa,GAAG,EAAE,CAAC;AAC3G;AACA,QAAQ,iCAAiC,GAAG,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,WAAW,GAAG,EAAE,CAAC;AACzG,QAAQ,MAAM,kCAAkC,GAAG,iCAAiC,GAAG,aAAa,GAAG,EAAE;AACzG;AACA,QAAQ,IAAI,kCAAkC,GAAG,CAAC;AAClD,YAAY,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,GAAG,IAAI,+BAA+B;AAC9F;AACA;AACA;AACA,QAAQ,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kCAAkC,CAAC,GAAG,wBAAwB,IAAI,GAAG;AACjH;AACA;AACA,QAAQ,IAAI,+BAA+B,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,UAAU,EAAE;AAClG,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,EAAE;AAC3H;AACA,YAAY,+BAA+B,GAAG,EAAE,GAAG,EAAE;AACrD;AACA;AACA,QAAQ,+BAA+B,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,WAAW,GAAG,EAAE,CAAC;AACrG;AACA,QAAQ,+BAA+B,GAAG,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,aAAa,GAAG,EAAE,CAAC;AACvG,QAAQ,MAAM,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,GAAG,iCAAiC,CAAC;AAC7H,QAAQ,IAAI,4BAA4B,IAAI,CAAC,EAAE;AAC/C;AACA,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,MAAM,eAAe,GAAG,CAAC,4BAA4B,GAAG,wBAAwB,IAAI,GAAG;AAC/F;AACA,QAAQ,IAAI,cAAc,GAAG,GAAG;AAChC,YAAY,cAAc,GAAG,CAAC;AAC9B,YAAY,eAAe,IAAI,CAAC;AAChC,YAAY,eAAe,GAAG,GAAG;AACjC,YAAY,cAAc,GAAG,eAAe,GAAG,QAAQ,6BAA6B;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAI,eAAe,IAAI,CAAC;AACpC,gBAAgB,OAAO,IAAI;AAC3B;AACA,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,YAAY,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gCAAgC,CAAC,WAAW;AAChD,IAAI,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,GAAG,KAAK,EAAE;AACnE,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC5E,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;AACvF,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;AACnF,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE;AAChC,YAAY,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AACzD,YAAY,IAAI,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;AAC9E,gBAAgB,OAAO;AACvB,oBAAoB,GAAG,WAAW;AAClC,oBAAoB,SAAS,EAAE,UAAU,CAAC,IAAI;AAC9C,oBAAoB,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI;AACjF,oBAAoB,MAAM,EAAE,IAAI;AAChC,oBAAoB,iBAAiB,EAAE,oBAAoB,CAAC,IAAI;AAChE,oBAAoB,eAAe,EAAE,kBAAkB,CAAC,IAAI;AAC5D,oBAAoB,6BAA6B,EAAE,KAAK;AACxD,oBAAoB,uBAAuB,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;AAC7G,oBAAoB,sBAAsB,EAAE,WAAW;AACvD,iBAAiB;AACjB;AACA,iBAAiB,IAAI,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;AACvF,gBAAgB,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AACnF,gBAAgB,OAAO;AACvB,oBAAoB,GAAG,WAAW;AAClC,oBAAoB,SAAS,EAAE,UAAU,CAAC,IAAI;AAC9C,oBAAoB,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI;AACjF,oBAAoB,MAAM,EAAE,IAAI;AAChC,oBAAoB,iBAAiB,EAAE,oBAAoB,CAAC,IAAI;AAChE,oBAAoB,eAAe,EAAE,kBAAkB,CAAC,IAAI;AAC5D,oBAAoB,6BAA6B,EAAE,IAAI;AACvD,oBAAoB,uBAAuB,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC;AAC7G,oBAAoB,sBAAsB,EAAE,WAAW;AACvD,iBAAiB;AACjB;AACA,iBAAiB;AACjB,gBAAgB,OAAO,IAAI;AAC3B;AACA;AACA,QAAQ,MAAM,gBAAgB,GAAG;AACjC,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK;AACvC,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACpE,QAAQ,MAAM,cAAc,GAAG;AAC/B,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;AACrD,cAAc,WAAW,KAAK,EAAE,KAAK,WAAW,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC;AAC7E,kBAAkB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;AACzD,kBAAkB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACtE,QAAQ,IAAI,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC;AACvE,YAAY,oBAAoB,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzE,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,oBAAoB,GAAG,gBAAgB;AACvI,QAAQ,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,kBAAkB,GAAG,cAAc;AAC7H,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;AACrE,YAAY,OAAO,IAAI;AACvB;AACA,QAAQ,MAAM,6BAA6B,GAAG,oBAAoB,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC;AAC1G,QAAQ,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC;AAChG,QAAQ,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAC1E,QAAQ,OAAO;AACf,YAAY,GAAG,WAAW;AAC1B,YAAY,SAAS,EAAE,gBAAgB,CAAC,IAAI;AAC5C,YAAY,OAAO,EAAE,cAAc,CAAC,IAAI;AACxC,YAAY,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC;AAC/F,YAAY,iBAAiB,EAAE,oBAAoB,CAAC,IAAI;AACxD,YAAY,eAAe,EAAE,kBAAkB,CAAC,IAAI;AACpD,YAAY,6BAA6B;AACzC,YAAY,uBAAuB;AACnC,YAAY,sBAAsB,EAAE,WAAW;AAC/C,SAAS;AACT;AACA,IAAI,sBAAsB,CAAC,IAAI,EAAE;AACjC,QAAQ,MAAM,OAAO,GAAG,IAAI;AAC5B,QAAQ,IAAI,OAAO,CAAC,sBAAsB,EAAE;AAC5C,YAAY,OAAO,OAAO,CAAC,sBAAsB;AACjD;AACA,QAAQ,OAAO,IAAI;AACnB;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnG,QAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9F,QAAQ,OAAO,cAAc,IAAI,gBAAgB;AACjD;AACA,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC9B,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,OAAO;AAC9E,QAAQ,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnD;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AACrL,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,CAAC;AAC5H,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AC9eN,MAAM,8BAA8B,SAAS,WAAW,CAAC;AAChE,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1D,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM;AAC/C,YAAY,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/D,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE;AAC/C,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;AACjD,YAAY,IAAI,CAAC,eAAe,IAAI,CAAC,uBAAuB,EAAE;AAC9D,gBAAgB,OAAO,EAAE;AACzB;AACA,YAAY,MAAM,MAAM,GAAG,EAAE;AAC7B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;AACnD,gBAAgB,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/E,gBAAgB,MAAM,kBAAkB,GAAG,EAAE;AAC7C,gBAAgB,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;AAC5D,oBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;AACzH,oBAAoB,IAAI,OAAO,EAAE;AACjC,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;AACxD;AACA;AACA,gBAAgB,MAAM,cAAc,GAAG,OAAO,CAAC,kBAAkB,EAAE;AACnE,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7C,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;AAChD,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE;AACtF,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC1C,gBAAgB,MAAM,CAAC,IAAI,CAAC;AAC5B,oBAAoB,IAAI,EAAE,UAAU;AACpC,oBAAoB,YAAY,EAAE,cAAc;AAChD,oBAAoB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACvD,iBAAiB,CAAC;AAClB;AACA,YAAY,OAAO,MAAM;AACzB,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrE;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,EAAE;AAChD,QAAQ,IAAI,CAAC,0BAA0B,GAAG,MAAM,EAAE;AAClD,QAAQ,IAAI,CAAC,6BAA6B,GAAG,MAAM,EAAE;AACrD,QAAQ,IAAI,CAAC,+BAA+B,GAAG,MAAM,EAAE;AACvD,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM,EAAE;AAC7C,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,EAAE;AACjD;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,IAAI,EAAE;AAClB,gBAAgB,KAAK,EAAE,IAAI,CAAC,mBAAmB;AAC/C,gBAAgB,QAAQ,EAAE,IAAI,CAAC,sBAAsB;AACrD,gBAAgB,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC1D,aAAa;AACb,YAAY,WAAW,EAAE;AACzB,gBAAgB,KAAK,EAAE,IAAI,CAAC,0BAA0B;AACtD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,6BAA6B;AAC5D,gBAAgB,WAAW,EAAE,IAAI,CAAC,+BAA+B;AACjE,aAAa;AACb,SAAS;AACT;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE;AACxD,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AAC/J;AACA,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE;AACtC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;AACzF,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AAC/I;AACA;AACA,IAAI,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE;AACxB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;AACzF,QAAQ,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;AAChD,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AAC7F,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC5C,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,YAAY,WAAW,EAAE,cAAc;AACvC,YAAY,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3F,SAAS,CAAC;AACV;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE;AAC9C,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACxC,YAAY,WAAW,EAAE,mBAAmB;AAC5C,YAAY,WAAW,EAAE,KAAK;AAC9B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,SAAS,CAAC;AACV;AACA,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7D,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;AACvC;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/D,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtG,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAClH,YAAY,MAAM,OAAO,GAAG,aAAa,IAAI,eAAe;AAC5D,YAAY,OAAO;AACnB,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,OAAO;AACvB,aAAa;AACb;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChF,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC;AACA,QAAQ,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC;AACA,IAAI,SAAS,CAAC,CAAC,EAAE;AACjB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC;AACrC,aAAa,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;AACnD,aAAa,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,WAAW,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAC1F,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAC5F;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE;AAC9B;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAClM,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,g8IAAg8I,EAAE,MAAM,EAAE,CAAC,6yIAA6yI,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5oY;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,UAAU,EAAE,CAAC;AACxI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,0BAA0B,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AAC5J,wBAAwB,OAAO;AAC/B,wBAAwB,SAAS;AACjC,wBAAwB,YAAY;AACpC,wBAAwB,2BAA2B;AACnD,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,gBAAgB;AACxC,wBAAwB,kBAAkB;AAC1C,wBAAwB,wBAAwB;AAChD,wBAAwB,kBAAkB;AAC1C,qBAAqB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC,EAAE,QAAQ,EAAE,g8IAAg8I,EAAE,MAAM,EAAE,CAAC,6yIAA6yI,CAAC,EAAE;AACh3R,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AAC3C,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,EAAE,CAAC;;AChKZ,MAAM,2BAA2B,SAAS,WAAW,CAAC;AAC7D,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1D,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,8BAA8B,GAAG,QAAQ,CAAC,MAAM;AAC7D,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;AACxC,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9C,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC1C,YAAY,MAAM,qBAAqB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC7D,YAAY,IAAI,CAAC,QAAQ,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE;AACjE,gBAAgB,OAAO,EAAE;AACzB;AACA,YAAY,MAAM,kBAAkB,GAAG,EAAE;AACzC,YAAY,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE;AACtD,gBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;AACpH,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD;AACA;AACA,YAAY,OAAO,kBAAkB;AACrC,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnF,QAAQ,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM;AACjD,YAAY,MAAM,0BAA0B,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;AACtG,YAAY,MAAM,8BAA8B,GAAG,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE;AACrN,YAAY,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;AACtC,YAAY,0BAA0B,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACrF,YAAY,8BAA8B,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAC7D,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAC5C,oBAAoB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AAC/C;AACA,aAAa,CAAC;AACd,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;AAChD,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,MAAM;AACpD,YAAY,OAAO,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;AAC7F,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1E,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,EAAE;AAChD,QAAQ,IAAI,CAAC,0BAA0B,GAAG,MAAM,EAAE;AAClD,QAAQ,IAAI,CAAC,6BAA6B,GAAG,MAAM,EAAE;AACrD,QAAQ,IAAI,CAAC,+BAA+B,GAAG,MAAM,EAAE;AACvD,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM,EAAE;AAC7C,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,EAAE;AACjD,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,IAAI,EAAE;AAClB,gBAAgB,KAAK,EAAE,IAAI,CAAC,mBAAmB;AAC/C,gBAAgB,QAAQ,EAAE,IAAI,CAAC,sBAAsB;AACrD,gBAAgB,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC1D,aAAa;AACb,YAAY,WAAW,EAAE;AACzB,gBAAgB,KAAK,EAAE,IAAI,CAAC,0BAA0B;AACtD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,6BAA6B;AAC5D,gBAAgB,WAAW,EAAE,IAAI,CAAC,+BAA+B;AACjE,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM;AACzC,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAClC,YAAY,IAAI,CAAC,IAAI;AACrB,gBAAgB,OAAO,EAAE;AACzB,YAAY,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACxE,YAAY,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC;AAChC,YAAY,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACtD,gBAAgB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC;AACA,YAAY,OAAO,KAAK;AACxB,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/D,QAAQ,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM;AACjD,YAAY,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AACrC,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACrE,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;AACxC,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9C,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC1C,YAAY,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1H,gBAAgB,OAAO,OAAO;AAC9B;AACA,YAAY,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1I,YAAY,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzL,YAAY,MAAM,WAAW,GAAG,EAAE;AAClC,YAAY,KAAK,MAAM,kBAAkB,IAAI,kBAAkB,EAAE;AACjE,gBAAgB,IAAI,WAAW,GAAG,CAAC,CAAC;AACpC,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;AACtC,oBAAoB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AACzC,wBAAwB,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE;AAC7D;AACA,oBAAoB,IAAI,QAAQ,GAAG,KAAK;AACxC,oBAAoB,KAAK,MAAM,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE;AAC7E,wBAAwB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpH,wBAAwB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChH,wBAAwB,IAAI,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC;AAClF,4BAA4B,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpF,4BAA4B,QAAQ,GAAG,IAAI;AAC3C,4BAA4B;AAC5B;AACA;AACA,oBAAoB,IAAI,CAAC,QAAQ,EAAE;AACnC,wBAAwB,WAAW,GAAG,CAAC;AACvC,wBAAwB,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5E,wBAAwB;AACxB;AACA,oBAAoB,IAAI,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE;AACzD,wBAAwB,OAAO,CAAC,IAAI,CAAC,CAAC,+CAA+C,EAAE,kBAAkB,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC,CAAC;AAChJ,wBAAwB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC3C,4BAA4B,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE;AACjE,wBAAwB,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5E,wBAAwB,WAAW,GAAG,CAAC;AACvC,wBAAwB;AACxB;AACA;AACA,gBAAgB,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;AACrF,gBAAgB,MAAM,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC,qBAAqB,GAAG,CAAC;AACjG,gBAAgB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE;AACnD,oBAAoB,WAAW,EAAE,WAAW;AAC5C,oBAAoB,qBAAqB,EAAE,aAAa;AACxD,iBAAiB,CAAC;AAClB;AACA,YAAY,OAAO,OAAO;AAC1B,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvE;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE,WAAW,EAAE;AACpD,QAAQ,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAChD,cAAc;AACd,gBAAgB,GAAG,WAAW;AAC9B,gBAAgB,SAAS,EAAE,WAAW,CAAC,iBAAiB;AACxD,gBAAgB,OAAO,EAAE,WAAW,CAAC,eAAe;AACpD;AACA,cAAc,WAAW;AACzB,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AAC/J;AACA,IAAI,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE;AACjD,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5E,QAAQ,IAAI,QAAQ;AACpB,YAAY,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AAC/I;AACA,IAAI,qBAAqB,CAAC,UAAU,EAAE;AACtC,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAChD,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AACpD,QAAQ,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;AAC5D,QAAQ,IAAI,QAAQ;AACpB,YAAY,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AAC/I;AACA,IAAI,gBAAgB,CAAC,CAAC,EAAE;AACxB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AAChD,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AACpD,QAAQ,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;AAC5D,QAAQ,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;AAChD,QAAQ,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAChD,cAAc;AACd,gBAAgB,GAAG,WAAW;AAC9B,gBAAgB,SAAS,EAAE,WAAW,CAAC,iBAAiB;AACxD,gBAAgB,OAAO,EAAE,WAAW,CAAC,eAAe;AACpD;AACA,cAAc,WAAW;AACzB,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC5C,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,YAAY,WAAW,EAAE,cAAc;AACvC,YAAY,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3F,SAAS,CAAC;AACV;AACA,IAAI,mBAAmB,CAAC,CAAC,EAAE,SAAS,EAAE;AACtC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5E,QAAQ,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;AAChD,QAAQ,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAChD,cAAc;AACd,gBAAgB,GAAG,WAAW;AAC9B,gBAAgB,SAAS,EAAE,WAAW,CAAC,iBAAiB;AACxD,gBAAgB,OAAO,EAAE,WAAW,CAAC,eAAe;AACpD;AACA,cAAc,WAAW;AACzB,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC5C,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,YAAY,WAAW,EAAE,cAAc;AACvC,YAAY,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3F,SAAS,CAAC;AACV;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE;AAC9C,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACxC,YAAY,WAAW,EAAE,mBAAmB;AAC5C,YAAY,WAAW,EAAE,KAAK;AAC9B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,SAAS,CAAC;AACV;AACA,IAAI,oBAAoB,CAAC,GAAG,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;AACjD;AACA,IAAI,kBAAkB,CAAC,GAAG,EAAE;AAC5B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AACrD,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,qBAAqB,GAAG,CAAC,EAAE;AACxD,YAAY,MAAM,CAAC,GAAG,MAAM,CAAC,qBAAqB;AAClD,YAAY,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW;AACxC,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE;AACvB,gBAAgB,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC;AACrE,gBAAgB,OAAO,KAAK;AAC5B;AACA,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,gBAAgB,OAAO,KAAK;AAC5B,YAAY,MAAM,WAAW,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAC7C,YAAY,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;AAC/C,YAAY,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC;AAC7D;AACA,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,mBAAmB,CAAC,GAAG,EAAE;AAC7B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;AACrD,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,qBAAqB,GAAG,CAAC,EAAE;AACxD,YAAY,MAAM,CAAC,GAAG,MAAM,CAAC,qBAAqB;AAClD,YAAY,IAAI,CAAC,IAAI,CAAC;AACtB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,IAAI,CAAC,KAAK,CAAC;AACvB,gBAAgB,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACtD,YAAY,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;AAC9C,YAAY,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9D;AACA,QAAQ,OAAO,IAAI;AACnB;AACA,IAAI,iBAAiB,CAAC,GAAG,EAAE;AAC3B,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC;AACzF,QAAQ,IAAI,kBAAkB,EAAE;AAChC,YAAY,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE;AACzH,YAAY,MAAM,gBAAgB,GAAG,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;AAC5E,YAAY,MAAM,MAAM,GAAG,gBAAgB,GAAG,EAAE;AAChD,YAAY,OAAO,CAAC,yDAAyD,EAAE,MAAM,CAAC,OAAO,CAAC;AAC9F;AACA,QAAQ,OAAO,EAAE;AACjB;AACA,IAAI,oBAAoB,CAAC,GAAG,EAAE;AAC9B,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC;AACzF,QAAQ,IAAI,kBAAkB,EAAE;AAChC,YAAY,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,EAAE;AAChH,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;AAC7E,YAAY,IAAI,eAAe,IAAI,CAAC;AACpC,gBAAgB,OAAO,KAAK;AAC5B,YAAY,MAAM,WAAW,GAAG,eAAe,GAAG,EAAE;AACpD,YAAY,MAAM,eAAe,GAAG,CAAC,iDAAiD,CAAC;AACvF,YAAY,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACjF;AACA,QAAQ,OAAO,KAAK;AACpB;AACA,IAAI,SAAS,CAAC,CAAC,EAAE;AACjB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC;AACrC,aAAa,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;AACnD,aAAa,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,WAAW,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAC1F,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAC5F;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE;AAC9B;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC/L,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,+qRAA+qR,EAAE,MAAM,EAAE,CAAC,49IAA49I,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACr+hB;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,UAAU,EAAE,CAAC;AACrI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,uBAAuB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AACzJ,wBAAwB,OAAO;AAC/B,wBAAwB,2BAA2B;AACnD,wBAAwB,SAAS;AACjC,wBAAwB,gBAAgB;AACxC,wBAAwB,kBAAkB;AAC1C,wBAAwB,YAAY;AACpC,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,wBAAwB;AAChD,wBAAwB,kBAAkB;AAC1C,qBAAqB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,EAAE,QAAQ,EAAE,+qRAA+qR,EAAE,MAAM,EAAE,CAAC,49IAA49I,CAAC,EAAE;AAC3wa,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AAC3C,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,EAAE,CAAC;;AChTZ,MAAM,6BAA6B,SAAS,WAAW,CAAC;AAC/D,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1D;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxG,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,CAAC;AAC7B,QAAQ,IAAI,CAAC,gCAAgC,GAAG,CAAC;AACjD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,EAAE;AAChD,QAAQ,IAAI,CAAC,0BAA0B,GAAG,MAAM,EAAE;AAClD,QAAQ,IAAI,CAAC,6BAA6B,GAAG,MAAM,EAAE;AACrD,QAAQ,IAAI,CAAC,+BAA+B,GAAG,MAAM,EAAE;AACvD,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM,EAAE;AAC7C,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,EAAE;AACjD;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,IAAI,EAAE;AAClB,gBAAgB,KAAK,EAAE,IAAI,CAAC,mBAAmB;AAC/C,gBAAgB,QAAQ,EAAE,IAAI,CAAC,sBAAsB;AACrD,gBAAgB,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC1D,aAAa;AACb,YAAY,WAAW,EAAE;AACzB,gBAAgB,KAAK,EAAE,IAAI,CAAC,0BAA0B;AACtD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,6BAA6B;AAC5D,gBAAgB,WAAW,EAAE,IAAI,CAAC,+BAA+B;AACjE,aAAa;AACb,SAAS;AACT;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM;AAC7C,YAAY,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACjC,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;AAChD,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnE;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM;AACxC,YAAY,MAAM,QAAQ,GAAG,EAAE;AAC/B,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5C,YAAY,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS;AAC1D,YAAY,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;AAC7D,YAAY,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;AACvG;AACA,YAAY,MAAM,cAAc,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,GAAG,CAAC,IAAI,CAAC;AACrF,YAAY,IAAI,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC;AACzE,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAgB,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AAC9C,gBAAgB,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/D;AACA,YAAY,OAAO,QAAQ;AAC3B,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9D;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM;AAC/C,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACpD,YAAY,IAAI,CAAC,UAAU;AAC3B,gBAAgB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;AACnD,YAAY,MAAM,eAAe,GAAG,UAAU;AAC9C,YAAY,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5D,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AACnG,YAAY,MAAM,uBAAuB,GAAG,eAAe,CAAC,SAAS;AACrE,YAAY,MAAM,WAAW,GAAG,CAAC,uBAAuB,GAAG,eAAe,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;AACnH,YAAY,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC;AAC3E;AACA;AACA;AACA,YAAY,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU;AACzD,YAAY,MAAM,iBAAiB,GAAG,WAAW,GAAG,WAAW;AAC/D,YAAY,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC;AACvF,YAAY,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC;AACnF,YAAY,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAAC,YAAY;AAC7E,YAAY,MAAM,IAAI,GAAG,EAAE;AAC3B,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AACjE,YAAY,IAAI,UAAU,GAAG,cAAc;AAC3C,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,CAAC,EAAE,EAAE;AAC1D,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7I,gBAAgB,IAAI,YAAY,GAAG,IAAI;AACvC,gBAAgB,IAAI,eAAe,GAAG,IAAI;AAC1C,gBAAgB,IAAI,SAAS,EAAE;AAC/B,oBAAoB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpH,oBAAoB,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAChI,oBAAoB,MAAM,OAAO,GAAG,aAAa,IAAI,eAAe;AACpE,oBAAoB,IAAI,OAAO,EAAE;AACjC,wBAAwB,YAAY,GAAG,OAAO,CAAC,KAAK;AACpD,wBAAwB,eAAe,GAAG,OAAO,CAAC,QAAQ;AAC1D;AACA;AACA,gBAAgB,IAAI,CAAC,IAAI,CAAC;AAC1B,oBAAoB,IAAI,EAAE,UAAU;AACpC,oBAAoB,cAAc,EAAE,UAAU,CAAC,WAAW,KAAK,UAAU,CAAC,WAAW;AACrF,oBAAoB,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;AAC3D,oBAAoB,SAAS;AAC7B,oBAAoB,YAAY;AAChC,oBAAoB,eAAe;AACnC,iBAAiB,CAAC;AAClB,gBAAgB,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACrD;AACA,YAAY,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE;AACjE,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrE;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,MAAM;AACvD,YAAY,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrD,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AACjC,gBAAgB,OAAO,IAAI,GAAG,EAAE;AAChC,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;AAC9C,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;AAC1D,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC5D,YAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,aAAa,EAAE,WAAW,CAAC;AACjH,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7E;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM;AAC7C,YAAY,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACrE,YAAY,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/D,YAAY,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9C,gBAAgB,OAAO,EAAE,CAAC;AAC1B;AACA,YAAY,IAAI,CAAC,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AAClF;AACA,gBAAgB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;AACzD,oBAAoB,GAAG,OAAO;AAC9B,oBAAoB,YAAY,EAAE,EAAE;AACpC,oBAAoB,mBAAmB,EAAE,EAAE;AAC3C,oBAAoB,kBAAkB,EAAE,EAAE;AAC1C,oBAAoB,aAAa,EAAE,CAAC;AACpC,iBAAiB,CAAC,CAAC;AACnB;AACA,YAAY,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK;AACpD,gBAAgB,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnE,gBAAgB,MAAM,kBAAkB,GAAG,EAAE;AAC7C,gBAAgB,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;AAC5D,oBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC;AACnH,oBAAoB,EAAE;AACtB,oBAAoB,IAAI,CAAC;AACzB,oBAAoB,IAAI,OAAO,EAAE;AACjC,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;AACxD;AACA;AACA,gBAAgB,MAAM,cAAc,GAAG,OAAO,CAAC,kBAAkB,EAAE;AACnE,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7C,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE;AACxD,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE;AACtF,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;AACvD,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACjD,gBAAgB,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,gCAAgC,CAAC;AAC1G,gBAAgB,MAAM,kBAAkB,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;AACtG,gBAAgB,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM;AAC/D,gBAAgB,OAAO;AACvB,oBAAoB,GAAG,OAAO;AAC9B,oBAAoB,YAAY,EAAE,cAAc;AAChD,oBAAoB,mBAAmB;AACvC,oBAAoB,kBAAkB;AACtC,oBAAoB,aAAa;AACjC,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnE;AACA,QAAQ,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,MAAM;AACpD,YAAY,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC3D,YAAY,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,CAAC,EAAE;AAClD,gBAAgB,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACnD;AACA,YAAY,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAC5D,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1E;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE,4BAA4B,EAAE;AACrE,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,4BAA4B,CAAC;AAC9G,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AAC/J;AACA,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE;AACtC,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACzF,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AAC/I;AACA;AACA,IAAI,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE;AACxB,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;AACxF,QAAQ,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;AAChD,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AAC7F,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC5C,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,YAAY,WAAW,EAAE,cAAc;AACvC,YAAY,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3F,SAAS,CAAC;AACV;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE;AAC9C,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACxC,YAAY,WAAW,EAAE,mBAAmB;AAC5C,YAAY,WAAW,EAAE,KAAK;AAC9B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,SAAS,CAAC;AACV;AACA,IAAI,SAAS,CAAC,CAAC,EAAE;AACjB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC;AACrC,aAAa,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;AACnD,aAAa,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,WAAW,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAC1F,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAC5F;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE;AAC9B;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACjM,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,6BAA6B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,w6PAAw6P,EAAE,MAAM,EAAE,CAAC,4nJAA4nJ,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACjjgB;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,UAAU,EAAE,CAAC;AACvI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,yBAAyB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AAC3J,wBAAwB,OAAO;AAC/B,wBAAwB,SAAS;AACjC,wBAAwB,gBAAgB;AACxC,wBAAwB,kBAAkB;AAC1C,wBAAwB,YAAY;AACpC,wBAAwB,SAAS;AACjC,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,kBAAkB;AAC1C,wBAAwB,wBAAwB;AAChD,wBAAwB,kBAAkB;AAC1C,qBAAqB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,EAAE,QAAQ,EAAE,w6PAAw6P,EAAE,MAAM,EAAE,CAAC,4nJAA4nJ,CAAC,EAAE;AACtqZ,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AAC3C,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,EAAE,CAAC;;AC1PZ,MAAM,mCAAmC,SAAS,WAAW,CAAC;AACrE,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1D,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,0BAA0B,GAAG,QAAQ,CAAC,MAAM;AACzD,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE;AACxC,YAAY,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/D,YAAY,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC3D,YAAY,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE;AACvD,YAAY,IAAI,CAAC,QAAQ,IAAI,CAAC,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/F,gBAAgB,OAAO,EAAE;AACzB;AACA,YAAY,MAAM,iBAAiB,GAAG,EAAE;AACxC,YAAY,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;AACxD,gBAAgB,IAAI,IAAI,CAAC,MAAM,EAAE;AACjC,oBAAoB;AACpB;AACA,gBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,CAAC;AACrJ,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;AACnD;AACA;AACA,YAAY,OAAO,iBAAiB;AACpC,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,4BAA4B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/E;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,EAAE;AAChD,QAAQ,IAAI,CAAC,0BAA0B,GAAG,MAAM,EAAE;AAClD,QAAQ,IAAI,CAAC,6BAA6B,GAAG,MAAM,EAAE;AACrD,QAAQ,IAAI,CAAC,+BAA+B,GAAG,MAAM,EAAE;AACvD,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM,EAAE;AAC7C,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,EAAE;AACjD;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,IAAI,EAAE;AAClB,gBAAgB,KAAK,EAAE,IAAI,CAAC,mBAAmB;AAC/C,gBAAgB,QAAQ,EAAE,IAAI,CAAC,sBAAsB;AACrD,gBAAgB,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC1D,aAAa;AACb,YAAY,WAAW,EAAE;AACzB,gBAAgB,KAAK,EAAE,IAAI,CAAC,0BAA0B;AACtD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,6BAA6B;AAC5D,gBAAgB,WAAW,EAAE,IAAI,CAAC,+BAA+B;AACjE,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM;AACzC,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAClC,YAAY,IAAI,CAAC,IAAI;AACrB,gBAAgB,OAAO,EAAE;AACzB,YAAY,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACxE,YAAY,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC;AAChC,YAAY,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACtD,gBAAgB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC;AACA,YAAY,OAAO,KAAK;AACxB,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/D;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM;AACjD,YAAY,MAAM,YAAY,GAAG,EAAE;AACnC,YAAY,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC3D,YAAY,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE;AACvD,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAC3E,YAAY,IAAI,OAAO,mBAAmB,KAAK,QAAQ;AACvD,gBAAgB,OAAO,iBAAiB,KAAK,QAAQ;AACrD,gBAAgB,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,gBAAgB,OAAO,YAAY;AACnC;AACA,YAAY,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjK,YAAY,MAAM,WAAW,GAAG,EAAE;AAClC,YAAY,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE;AACtD,gBAAgB,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,OAAO;AACzF,gBAAgB,mBAAmB,EAAE,iBAAiB,CAAC;AACvD,gBAAgB,IAAI,CAAC,WAAW;AAChC,oBAAoB,SAAS;AAC7B;AACA,gBAAgB,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACxG,gBAAgB,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpG,gBAAgB,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzC,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7D;AACA,oBAAoB,IAAI,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjF,wBAAwB,gBAAgB,GAAG,CAAC;AAC5C,wBAAwB;AACxB;AACA;AACA,gBAAgB,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE;AAC7C,oBAAoB,gBAAgB,GAAG,WAAW,CAAC,MAAM;AACzD,oBAAoB,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrD;AACA,qBAAqB;AACrB;AACA,oBAAoB,WAAW,CAAC,gBAAgB,CAAC,GAAG,cAAc;AAClE;AACA,gBAAgB,MAAM,YAAY,GAAG,sDAAsD,CAAC;AAC5F,gBAAgB,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI;AACnD,gBAAgB,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACpF,gBAAgB,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrG,gBAAgB,YAAY,CAAC,IAAI,CAAC;AAClC,oBAAoB,WAAW,EAAE,OAAO;AACxC,oBAAoB,UAAU;AAC9B,oBAAoB,WAAW;AAC/B,oBAAoB,SAAS;AAC7B,oBAAoB,YAAY;AAChC,iBAAiB,CAAC;AAClB;AACA,YAAY,OAAO,YAAY;AAC/B,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvE;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE;AACxD,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AAC/J;AACA,IAAI,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE;AAC3C,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC;AACrF,QAAQ,IAAI,QAAQ;AACpB,YAAY,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AAC/I;AACA,IAAI,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE;AAC7B,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC;AACrF,QAAQ,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;AAChD,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AAC7F,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC5C,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,YAAY,WAAW,EAAE,cAAc;AACvC,YAAY,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3F,SAAS,CAAC;AACV;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE;AAC9C,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACxC,YAAY,WAAW,EAAE,mBAAmB;AAC5C,YAAY,WAAW,EAAE,KAAK;AAC9B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,SAAS,CAAC;AACV;AACA,IAAI,SAAS,CAAC,CAAC,EAAE;AACjB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC;AACrC,aAAa,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;AACnD,aAAa,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,WAAW,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAC1F,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAC5F;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE;AAC9B;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACvM,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,mCAAmC,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,gCAAgC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,w7FAAw7F,EAAE,MAAM,EAAE,CAAC,+9EAA+9E,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACv5R;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mCAAmC,EAAE,UAAU,EAAE,CAAC;AAC7I,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,gCAAgC,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AAClK,wBAAwB,OAAO;AAC/B,wBAAwB,2BAA2B;AACnD,wBAAwB,YAAY;AACpC,wBAAwB,SAAS;AACjC,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,wBAAwB;AAChD,wBAAwB,kBAAkB;AAC1C,qBAAqB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC,EAAE,QAAQ,EAAE,w7FAAw7F,EAAE,MAAM,EAAE,CAAC,+9EAA+9E,CAAC,EAAE;AAC/hL,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AAC3C,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,EAAE,CAAC;;AClMZ,MAAM,qCAAqC,SAAS,WAAW,CAAC;AACvE,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1D,QAAQ,IAAI,CAAC,gCAAgC,GAAG,CAAC;AACjD,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG,QAAQ,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM;AAC/C,YAAY,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/D,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;AAC/D,YAAY,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU;AACxE,YAAY,IAAI,CAAC,uBAAuB,EAAE;AAC1C,gBAAgB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK;AACrE,oBAAoB,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAChE,oBAAoB,OAAO;AAC3B,wBAAwB,IAAI,EAAE,OAAO;AACrC,wBAAwB,mBAAmB,EAAE,EAAE;AAC/C,wBAAwB,kBAAkB,EAAE,EAAE;AAC9C,wBAAwB,SAAS,EAAE,CAAC;AACpC,qBAAqB;AACrB,iBAAiB,CAAC;AAClB;AACA,YAAY,MAAM,MAAM,GAAG,EAAE;AAC7B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AAClD,gBAAgB,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnF,gBAAgB,MAAM,kBAAkB,GAAG,EAAE;AAC7C,gBAAgB,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;AAC5D;AACA;AACA;AACA,oBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;AAC7H,oBAAoB,IAAI,OAAO,EAAE;AACjC,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;AACxD;AACA;AACA;AACA,gBAAgB,MAAM,cAAc,GAAG,OAAO,CAAC,kBAAkB,EAAE;AACnE,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7C,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;AAChD,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;AACtE,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;AACvD,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACjD,gBAAgB,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,gCAAgC,CAAC;AAC1G,gBAAgB,MAAM,kBAAkB,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC;AACtG,gBAAgB,MAAM,CAAC,IAAI,CAAC;AAC5B,oBAAoB,IAAI,EAAE,cAAc;AACxC,oBAAoB,mBAAmB,EAAE,mBAAmB;AAC5D,oBAAoB,kBAAkB,EAAE,kBAAkB;AAC1D,oBAAoB,SAAS,EAAE,kBAAkB,CAAC,MAAM;AACxD,oBAAoB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAC3D,iBAAiB,CAAC;AAClB;AACA,YAAY,OAAO,MAAM;AACzB,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrE;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,EAAE;AAChD,QAAQ,IAAI,CAAC,0BAA0B,GAAG,MAAM,EAAE;AAClD,QAAQ,IAAI,CAAC,6BAA6B,GAAG,MAAM,EAAE;AACrD,QAAQ,IAAI,CAAC,+BAA+B,GAAG,MAAM,EAAE;AACvD,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM,EAAE;AAC7C,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,EAAE;AACjD;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,IAAI,EAAE;AAClB,gBAAgB,KAAK,EAAE,IAAI,CAAC,mBAAmB;AAC/C,gBAAgB,QAAQ,EAAE,IAAI,CAAC,sBAAsB;AACrD,gBAAgB,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC1D,aAAa;AACb,YAAY,WAAW,EAAE;AACzB,gBAAgB,KAAK,EAAE,IAAI,CAAC,0BAA0B;AACtD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,6BAA6B;AAC5D,gBAAgB,WAAW,EAAE,IAAI,CAAC,+BAA+B;AACjE,aAAa;AACb,SAAS;AACT;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE;AACxD,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AAC/J;AACA,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE;AACtC;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;AACjG,QAAQ,IAAI,QAAQ;AACpB,YAAY,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AAC/I;AACA,IAAI,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE;AACxB;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;AACjG,QAAQ,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;AAChD,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,WAAW,CAAC;AAC7F,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,mBAAmB;AAClC,YAAY,OAAO,EAAE,mBAAmB,CAAC,OAAO;AAChD,YAAY,SAAS,EAAE,mBAAmB,CAAC,SAAS;AACpD,SAAS;AACT,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC5C,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,YAAY,WAAW,EAAE,cAAc;AACvC,YAAY,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3F,SAAS,CAAC;AACV;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE;AAC9C,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACxC,YAAY,WAAW,EAAE,mBAAmB;AAC5C,YAAY,WAAW,EAAE,KAAK;AAC9B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,SAAS,CAAC;AACV;AACA,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7D,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;AACvC;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/D,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtG,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAClH,YAAY,MAAM,OAAO,GAAG,aAAa,IAAI,eAAe;AAC5D,YAAY,OAAO;AACnB,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,OAAO;AACvB,aAAa;AACb;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChF,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC;AACA,QAAQ,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC;AACA,IAAI,SAAS,CAAC,CAAC,EAAE;AACjB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC;AACrC,aAAa,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;AACnD,aAAa,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,WAAW,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAC1F,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAC5F;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE;AAC9B;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,qCAAqC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACzM,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,qCAAqC,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,kCAAkC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,2mPAA2mP,EAAE,MAAM,EAAE,CAAC,8nJAA8nJ,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACh1f;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,qCAAqC,EAAE,UAAU,EAAE,CAAC;AAC/I,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,kCAAkC,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AACpK,wBAAwB,OAAO;AAC/B,wBAAwB,2BAA2B;AACnD,wBAAwB,YAAY;AACpC,wBAAwB,SAAS;AACjC,wBAAwB,gBAAgB;AACxC,wBAAwB,kBAAkB;AAC1C,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,kBAAkB;AAC1C,wBAAwB,wBAAwB;AAChD,qBAAqB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC,EAAE,QAAQ,EAAE,2mPAA2mP,EAAE,MAAM,EAAE,CAAC,8nJAA8nJ,CAAC,EAAE;AACn3Y,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AAC3C,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,EAAE,CAAC;;ACxLZ,MAAM,wCAAwC,SAAS,WAAW,CAAC;AAC1E,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1D,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrF,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,MAAM;AACvD,YAAY,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/D,YAAY,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,EAAE;AAClD,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;AACjD,YAAY,IAAI,CAAC,kBAAkB,IAAI,CAAC,uBAAuB,EAAE;AACjE,gBAAgB,OAAO,EAAE;AACzB;AACA,YAAY,MAAM,MAAM,GAAG,EAAE;AAC7B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;AACnD,gBAAgB,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACvE,gBAAgB,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC;AACrE,gBAAgB,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClE,gBAAgB,MAAM,8BAA8B,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;AAChG,oBAAoB,IAAI,IAAI,CAAC,MAAM,EAAE;AACrC,wBAAwB,OAAO,KAAK;AACpC;AACA,oBAAoB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClG,oBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9F,oBAAoB,OAAO,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC7H,iBAAiB,CAAC;AAClB,gBAAgB,MAAM,CAAC,IAAI,CAAC;AAC5B,oBAAoB,IAAI,EAAE,cAAc;AACxC,oBAAoB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAC3D,oBAAoB,8BAA8B,EAAE,8BAA8B;AAClF,iBAAiB,CAAC;AAClB;AACA,YAAY,OAAO,MAAM;AACzB,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7E,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,EAAE;AAChD,QAAQ,IAAI,CAAC,0BAA0B,GAAG,MAAM,EAAE;AAClD,QAAQ,IAAI,CAAC,6BAA6B,GAAG,MAAM,EAAE;AACrD,QAAQ,IAAI,CAAC,+BAA+B,GAAG,MAAM,EAAE;AACvD,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM,EAAE;AAC7C,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,EAAE;AACjD;AACA,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AAC7D,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;AACvC;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/D,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACtG,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAClH,YAAY,MAAM,OAAO,GAAG,aAAa,IAAI,eAAe;AAC5D,YAAY,OAAO;AACnB,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,OAAO;AACvB,aAAa;AACb;AACA,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChF,QAAQ,IAAI,SAAS,EAAE;AACvB,YAAY,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC;AACA,QAAQ,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC5M,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,wCAAwC,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,sCAAsC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,srEAAsrE,EAAE,MAAM,EAAE,CAAC,giEAAgiE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACl5O;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,UAAU,EAAE,CAAC;AAClJ,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,sCAAsC,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,mCAAmC,EAAE,SAAS,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC,EAAE,QAAQ,EAAE,srEAAsrE,EAAE,MAAM,EAAE,CAAC,giEAAgiE,CAAC,EAAE;AACxkJ,SAAS,CAAC,EAAE,CAAC;;AC3EN,MAAM,4BAA4B,SAAS,WAAW,CAAC;AAC9D,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1D,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,QAAQ,IAAI,CAAC,eAAe,GAAG,CAAC;AAChC;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjG,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5F,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,EAAE;AAC3C,QAAQ,IAAI,CAAC,sBAAsB,GAAG,MAAM,EAAE;AAC9C,QAAQ,IAAI,CAAC,wBAAwB,GAAG,MAAM,EAAE;AAChD,QAAQ,IAAI,CAAC,0BAA0B,GAAG,MAAM,EAAE;AAClD,QAAQ,IAAI,CAAC,6BAA6B,GAAG,MAAM,EAAE;AACrD,QAAQ,IAAI,CAAC,+BAA+B,GAAG,MAAM,EAAE;AACvD,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM,EAAE;AAC7C,QAAQ,IAAI,CAAC,yBAAyB,GAAG,MAAM,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM;AACzC,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAClC,YAAY,IAAI,CAAC,IAAI;AACrB,gBAAgB,OAAO,EAAE;AACzB,YAAY,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACxE,YAAY,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC;AAChC,YAAY,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACtD,gBAAgB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1C,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC;AACA,YAAY,OAAO,KAAK;AACxB,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/D;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM;AACxC,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACpC,YAAY,IAAI,CAAC,IAAI;AACrB,gBAAgB,OAAO,EAAE;AACzB,YAAY,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AACxE,YAAY,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;AACrD,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;AACnD,gBAAgB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAClE;AACA,YAAY,OAAO,IAAI;AACvB,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9D;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,MAAM;AACpD,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9C,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC1C,YAAY,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3D,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1E;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,MAAM;AACvD,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAClE,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAChG,YAAY,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK;AAC/C,gBAAgB,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AAC9D,gBAAgB,MAAM,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC/L,gBAAgB,OAAO;AACvB,oBAAoB,GAAG,EAAE,OAAO;AAChC,oBAAoB,YAAY,EAAE,OAAO,CAAC,sBAAsB,EAAE,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACjH,iBAAiB;AACjB,aAAa,CAAC;AACd,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,MAAM;AAClD,YAAY,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE;AAC1C,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxD,YAAY,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE;AAC7C,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9C,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC1C,YAAY,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE;AAC7D,gBAAgB,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;AAClE,gBAAgB,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AACvL,gBAAgB,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;AACnD,oBAAoB;AACpB,gBAAgB,MAAM,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC;AAC3I,gBAAgB,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC3L,gBAAgB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE;AAC5C,gBAAgB,MAAM,WAAW,GAAG,EAAE;AACtC,gBAAgB,KAAK,MAAM,kBAAkB,IAAI,kBAAkB,EAAE;AACrE,oBAAoB,IAAI,WAAW,GAAG,CAAC,CAAC;AACxC,oBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;AAC1C,wBAAwB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC3C,4BAA4B,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE;AACjE,wBAAwB,IAAI,QAAQ,GAAG,KAAK;AAC5C,wBAAwB,KAAK,MAAM,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE;AACjF,4BAA4B,IAAI,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,aAAa,CAAC,EAAE;AAChH,gCAAgC,QAAQ,GAAG,IAAI;AAC/C,gCAAgC;AAChC;AACA;AACA,wBAAwB,IAAI,CAAC,QAAQ,EAAE;AACvC,4BAA4B,WAAW,GAAG,CAAC;AAC3C,4BAA4B,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAChF,4BAA4B;AAC5B;AACA;AACA,oBAAoB,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;AACzF,oBAAoB,MAAM,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC,qBAAqB,GAAG,CAAC;AACrG,oBAAoB,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,CAAC;AAC7H;AACA,gBAAgB,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;AACtD;AACA,YAAY,OAAO,YAAY;AAC/B,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxE;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC,MAAM;AACxD,YAAY,MAAM,YAAY,GAAG,EAAE;AACnC,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC3D,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxD,YAAY,MAAM,eAAe,GAAG,CAAC,uDAAuD,CAAC;AAC7F,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,YAAY,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AAC5C,gBAAgB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClG,gBAAgB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;AACpI,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;AAC/D,gBAAgB,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,CAAC;AACjD,oBAAoB;AACpB,gBAAgB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3E,gBAAgB,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,KAAK,CAAC;AAC/D,oBAAoB;AACpB,gBAAgB,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,GAAG,EAAE,GAAG,aAAa,CAAC,MAAM;AACnF,gBAAgB,MAAM,gBAAgB,GAAG,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;AAChF,gBAAgB,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC;AAC7F,gBAAgB,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,IAAI,CAAC;AAC9F,gBAAgB,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC5G,gBAAgB,MAAM,iBAAiB,GAAG,UAAU,CAAC,qBAAqB,GAAG,CAAC;AAC9E,gBAAgB,MAAM,WAAW,GAAG;AACpC,sBAAsB,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI;AAC3E,sBAAsB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,gBAAgB,YAAY,CAAC,IAAI,CAAC;AAClC,oBAAoB,WAAW,EAAE,IAAI;AACrC,oBAAoB,SAAS;AAC7B,oBAAoB,YAAY;AAChC,oBAAoB,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE,oBAAoB,WAAW;AAC/B,iBAAiB,CAAC;AAClB;AACA,YAAY,OAAO,YAAY;AAC/B,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,MAAM;AACrD,YAAY,MAAM,UAAU,GAAG,EAAE;AACjC,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC3D,YAAY,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC7D,YAAY,MAAM,eAAe,GAAG,CAAC,uDAAuD,CAAC;AAC7F,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,YAAY,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;AACzE,gBAAgB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClG,gBAAgB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;AACpI,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;AAC/D,gBAAgB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3E,gBAAgB,OAAO,UAAU,IAAI,UAAU,CAAC,WAAW,GAAG,CAAC;AAC/D,aAAa,CAAC;AACd,YAAY,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE;AAC3C,YAAY,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE;AACnD,gBAAgB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClG,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACjJ,gBAAgB,IAAI,CAAC,SAAS;AAC9B,oBAAoB;AACpB,gBAAgB,MAAM,GAAG,GAAG,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;AAC3E,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3C,oBAAoB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;AAC9C,gBAAgB,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD;AACA,YAAY,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK;AAClD,gBAAgB,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AACnE,gBAAgB,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC;AACtD,gBAAgB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC;AAC1D,gBAAgB,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC;AACrF,gBAAgB,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC/G,gBAAgB,UAAU,CAAC,IAAI,CAAC;AAChC,oBAAoB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACvC,oBAAoB,KAAK,EAAE,KAAK,CAAC,MAAM;AACvC,oBAAoB,QAAQ;AAC5B,oBAAoB,SAAS;AAC7B,oBAAoB,kBAAkB,EAAE,KAAK;AAC7C,iBAAiB,CAAC;AAClB,aAAa,CAAC;AACd,YAAY,OAAO,UAAU;AAC7B,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3E;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,IAAI,EAAE;AAClB,gBAAgB,KAAK,EAAE,IAAI,CAAC,mBAAmB;AAC/C,gBAAgB,QAAQ,EAAE,IAAI,CAAC,sBAAsB;AACrD,gBAAgB,WAAW,EAAE,IAAI,CAAC,wBAAwB;AAC1D,aAAa;AACb,YAAY,WAAW,EAAE;AACzB,gBAAgB,KAAK,EAAE,IAAI,CAAC,0BAA0B;AACtD,gBAAgB,QAAQ,EAAE,IAAI,CAAC,6BAA6B;AAC5D,gBAAgB,WAAW,EAAE,IAAI,CAAC,+BAA+B;AACjE,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,8BAA8B,GAAG,QAAQ,CAAC,MAAM;AAC7D,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAChE,YAAY,MAAM,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE;AAC/D,YAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC;AAC7E,gBAAgB,OAAO,EAAE;AACzB,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9C,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC1C,YAAY,MAAM,iBAAiB,GAAG,EAAE;AACxC,YAAY,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AACxC,gBAAgB,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE;AAC5D,oBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,gCAAgC,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC;AAClI,oBAAoB,IAAI,OAAO;AAC/B,wBAAwB,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;AACvD;AACA;AACA,YAAY,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE;AAC/C,YAAY,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAC/C,gBAAgB,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9F,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;AAClD,oBAAoB,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;AACtD,aAAa,CAAC;AACd,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;AACzD,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gCAAgC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnF,QAAQ,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM;AAChD,YAAY,OAAO,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;AACpG,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE,kBAAkB,EAAE;AAC3D,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC;AACpG,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE;AAC9D,QAAQ,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC;AACpF,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC;AAC7E,QAAQ,IAAI,QAAQ;AACpB,YAAY,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,UAAU,EAAE,GAAG,EAAE;AAC3C,QAAQ,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AACnG,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE;AAC7B,QAAQ,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AACnG,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACtG,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC5C,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,YAAY,WAAW,EAAE,mBAAmB;AAC5C,YAAY,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3F,SAAS,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE;AACnD,QAAQ,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,GAAG,EAAE,CAAC;AACpF,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC;AAC7E,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACtG,QAAQ,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC5C,YAAY,SAAS,EAAE,CAAC;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,YAAY,WAAW,EAAE,mBAAmB;AAC5C,YAAY,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC3F,SAAS,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE;AAC9C,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,eAAe,CAAC;AACjG,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACxC,YAAY,WAAW,EAAE,mBAAmB;AAC5C,YAAY,WAAW,EAAE,KAAK;AAC9B,YAAY,MAAM,EAAE,IAAI,CAAC,SAAS;AAClC,SAAS,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,IAAI,EAAE;AACpB,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAClG,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC9G,QAAQ,MAAM,OAAO,GAAG,aAAa,IAAI,eAAe;AACxD,QAAQ,IAAI,OAAO;AACnB,YAAY,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE;AAChD,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClE,YAAY,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC,QAAQ,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,CAAC,EAAE;AACjB,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC;AACrC,aAAa,iBAAiB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;AACnD,aAAa,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAC7D,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAC5F;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE;AAC9B;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAChM,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,4BAA4B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,wsaAAwsa,EAAE,MAAM,EAAE,CAAC,u9NAAu9N,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5/vB;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,CAAC;AACtI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AAC1J,wBAAwB,OAAO;AAC/B,wBAAwB,2BAA2B;AACnD,wBAAwB,SAAS;AACjC,wBAAwB,gBAAgB;AACxC,wBAAwB,kBAAkB;AAC1C,wBAAwB,YAAY;AACpC,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,kBAAkB;AAC1C,wBAAwB,wBAAwB;AAChD,wBAAwB,kBAAkB;AAC1C,qBAAqB,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,EAAE,QAAQ,EAAE,wsaAAwsa,EAAE,MAAM,EAAE,CAAC,u9NAAu9N,CAAC,EAAE;AAChyoB,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AAC3C,gBAAgB,IAAI,EAAE,WAAW;AACjC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,EAAE,CAAC;;AC7ZZ,MAAM,oBAAoB,SAAS,WAAW,CAAC;AACtD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7C,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AAClD,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACpD,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACpD,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxD,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1D,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC9D,QAAQ,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,oBAAoB,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5H,QAAQ,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,iBAAiB,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrH,QAAQ,IAAI,CAAC,YAAY,GAAG;AAC5B,YAAY,GAAG,EAAE,OAAO;AACxB,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,KAAK,EAAE,SAAS;AAC5B,YAAY,cAAc,EAAE,gBAAgB;AAC5C,YAAY,oBAAoB,EAAE,oBAAoB;AACtD,YAAY,gBAAgB,EAAE,kBAAkB;AAChD,YAAY,MAAM,EAAE,QAAQ;AAC5B,SAAS;AACT,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrH,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpG,QAAQ,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACnI,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;AAC3D,QAAQ,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChG,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnG,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/I,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/F,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpG,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7G,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxF,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,SAAS,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,OAAO;AACnB,YAAY,cAAc;AAC1B,YAAY,oBAAoB;AAChC,YAAY,gBAAgB;AAC5B,YAAY,QAAQ;AACpB,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzG,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,EAAE;AACpC,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,EAAE;AACtC,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE;AACrC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE;AACxC,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE;AACxC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,EAAE;AACzC,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE;AACrC,QAAQ,IAAI,CAAC,oBAAoB,GAAG,MAAM,EAAE;AAC5C,QAAQ,IAAI,CAAC,uBAAuB,GAAG,MAAM,EAAE;AAC/C,QAAQ,IAAI,CAAC,uBAAuB,GAAG,MAAM,EAAE;AAC/C,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,YAAY;AACrD,YAAY,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU,EAAE;AACzD,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9C,gBAAgB,MAAM,KAAK,GAAG;AAC9B,oBAAoB,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG;AACzC,oBAAoB,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI;AAC3C,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;AAClD,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C;AACA,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9C,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C;AACA,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACpC,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY;AACjD,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxC,YAAY,MAAM,KAAK,GAAG;AAC1B,gBAAgB,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG;AACrC,gBAAgB,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI;AACvC,aAAa;AACb,YAAY,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;AACxE,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,MAAM;AAC9C,YAAY,QAAQ,IAAI,CAAC,YAAY,EAAE;AACvC,gBAAgB,KAAK,KAAK;AAC1B,gBAAgB,KAAK,cAAc;AACnC,oBAAoB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;AACrF,wBAAwB,MAAM,EAAE,cAAc;AAC9C,wBAAwB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AACrD,qBAAqB,CAAC;AACtB,gBAAgB,KAAK,MAAM,EAAE;AAC7B,oBAAoB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;AAClG,wBAAwB,MAAM,EAAE,cAAc;AAC9C,wBAAwB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AACrD,qBAAqB,CAAC;AACtB,oBAAoB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE;AAC9H,wBAAwB,MAAM,EAAE,cAAc;AAC9C,wBAAwB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AACrD,qBAAqB,CAAC;AACtB,oBAAoB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC1D;AACA,gBAAgB,KAAK,QAAQ;AAC7B,gBAAgB,KAAK,oBAAoB,EAAE;AAC3C,oBAAoB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;AAClG,wBAAwB,MAAM,EAAE,cAAc;AAC9C,wBAAwB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AACrD,qBAAqB,CAAC;AACtB,oBAAoB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE;AAC7I,wBAAwB,MAAM,EAAE,cAAc;AAC9C,wBAAwB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AACrD,qBAAqB,CAAC;AACtB,oBAAoB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC1D;AACA,gBAAgB,KAAK,OAAO;AAC5B,gBAAgB,KAAK,gBAAgB;AACrC,oBAAoB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;AACrF,wBAAwB,MAAM,EAAE,WAAW;AAC3C,wBAAwB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AACrD,qBAAqB,CAAC;AACtB;AACA,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM;AAC5C,YAAY,QAAQ,IAAI,CAAC,YAAY,EAAE;AACvC,gBAAgB,KAAK,KAAK;AAC1B,gBAAgB,KAAK,MAAM;AAC3B,gBAAgB,KAAK,QAAQ;AAC7B,gBAAgB,KAAK,cAAc;AACnC,gBAAgB,KAAK,oBAAoB;AACzC,oBAAoB,OAAO,KAAK;AAChC,gBAAgB,KAAK,OAAO;AAC5B,gBAAgB,KAAK,gBAAgB;AACrC,oBAAoB,OAAO,OAAO;AAClC;AACA,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClE,QAAQ,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,MAAM;AACjD,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAC9C,YAAY,OAAO;AACnB,iBAAiB,GAAG,CAAC,CAAC,IAAI,KAAK;AAC/B,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AAClG,gBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9F;AACA,gBAAgB,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AACxD,oBAAoB,OAAO,CAAC,IAAI,CAAC,sDAAsD,EAAE,IAAI,CAAC;AAC9F,oBAAoB,OAAO,IAAI;AAC/B;AACA;AACA,gBAAgB,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AACtF,oBAAoB,OAAO,CAAC,IAAI,CAAC,4DAA4D,EAAE,IAAI,CAAC;AACpG,oBAAoB,OAAO,IAAI;AAC/B;AACA,gBAAgB,OAAO,IAAI;AAC3B,aAAa;AACb,iBAAiB,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AACjD,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM;AACpC,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAC5C,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7D,YAAY,IAAI,CAAC,OAAO;AACxB,gBAAgB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AAChD,YAAY,QAAQ,IAAI;AACxB,gBAAgB,KAAK,KAAK;AAC1B,gBAAgB,KAAK,cAAc,EAAE;AACrC,oBAAoB,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACxF,oBAAoB,OAAO,KAAK;AAChC;AACA,gBAAgB,KAAK,MAAM,EAAE;AAC7B,oBAAoB,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;AACzF,oBAAoB,OAAO,KAAK;AAChC;AACA,gBAAgB,KAAK,OAAO,EAAE;AAC9B,oBAAoB,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AACzF,oBAAoB,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;AACnG,oBAAoB,OAAO,KAAK;AAChC;AACA,gBAAgB,KAAK,gBAAgB,EAAE;AACvC,oBAAoB,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;AAC3G,oBAAoB,OAAO,KAAK;AAChC;AACA,gBAAgB,KAAK,QAAQ;AAC7B,gBAAgB,KAAK,oBAAoB,EAAE;AAC3C,oBAAoB,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,EAAE;AACpH,oBAAoB,OAAO,KAAK;AAChC;AACA;AACA,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1D,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,MAAM;AAChD,YAAY,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClD,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxE,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM;AAC/C,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;AAC5C,YAAY,SAAS,CAAC,MAAM;AAC5B,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC;AAC7D,aAAa,CAAC;AACd,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvE,QAAQ,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM;AAC/C,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;AAC9C,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACpD,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI;AAChD,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG;AAC7C,YAAY,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAC/C,gBAAgB,OAAO,EAAE;AACzB,YAAY,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC5I,gBAAgB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClH,SAAS,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrE;AACA;AACA,IAAI,uBAAuB,CAAC,SAAS,EAAE;AACvC,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAC1C;AACA,IAAI,0BAA0B,CAAC,SAAS,EAAE;AAC1C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C;AACA,IAAI,4BAA4B,CAAC,SAAS,EAAE;AAC5C,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C;AACA,IAAI,8BAA8B,CAAC,SAAS,EAAE;AAC9C,QAAQ,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AACjD;AACA,IAAI,iCAAiC,CAAC,SAAS,EAAE;AACjD,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC;AACpD;AACA,IAAI,mCAAmC,CAAC,SAAS,EAAE;AACnD,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC;AACpD;AACA,IAAI,6BAA6B,CAAC,SAAS,EAAE;AAC7C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9C;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,MAAM;AACvG,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACzG,YAAY,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;AACxD,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACjD;AACA,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,YAAY;AAC5G,YAAY,MAAM,IAAI,CAAC,cAAc,EAAE;AACvC,YAAY,IAAI,CAAC,iBAAiB,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAClH,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACzG,YAAY,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;AACxD,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACjD;AACA,SAAS,CAAC;AACV,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9D,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B;AACA,IAAI,kBAAkB;AACtB,IAAI,cAAc;AAClB,IAAI,MAAM,cAAc,GAAG;AAC3B,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB,QAAQ,WAAW,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAC5C,YAAY,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,0BAA0B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1H,YAAY,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACxC;AACA,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AACxC;AACA,IAAI,gBAAgB,CAAC,WAAW,EAAE;AAClC,QAAQ,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;AAC5D,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC/F,QAAQ,MAAM,uBAAuB,GAAG,eAAe,CAAC,SAAS;AACjE,QAAQ,MAAM,iBAAiB,GAAG,CAAC,uBAAuB,GAAG,eAAe,GAAG,CAAC,IAAI,CAAC;AACrF,QAAQ,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,iBAAiB,CAAC;AAC5E;AACA,QAAQ,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/D,QAAQ,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE;AAC7C;AACA,IAAI,mBAAmB;AACvB,IAAI,kBAAkB;AACtB,IAAI,WAAW,CAAC,CAAC,EAAE;AACnB,QAAQ,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK;AAC/B,QAAQ,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ;AAClC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;AACtC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC;AAChD;AACA,IAAI,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE;AACxC,QAAQ,IAAI,OAAO,KAAK,MAAM,EAAE;AAChC,YAAY,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,GAAG,CAAC;AAC9D,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,CAAC,CAAC;AACxE,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AACtC;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAQ,IAAI,OAAO,KAAK,MAAM,EAAE;AAChC,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AAClD,YAAY,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS;AAC1D,YAAY,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;AAC7D,YAAY,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;AACvG,YAAY,MAAM,cAAc,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,GAAG,CAAC,IAAI,CAAC;AACrF,YAAY,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC;AAC3E,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC;AACjD;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAClC;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,QAAQ,IAAI,CAAC,YAAY,EAAE;AACnC,YAAY,KAAK,KAAK;AACtB,YAAY,KAAK,cAAc;AAC/B,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtE,gBAAgB;AAChB,YAAY,KAAK,MAAM;AACvB,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACvE,gBAAgB;AAChB,YAAY,KAAK,QAAQ;AACzB,YAAY,KAAK,oBAAoB;AACrC,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;AACjG,gBAAgB;AAChB,YAAY,KAAK,OAAO;AACxB,YAAY,KAAK,gBAAgB;AACjC,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACxE,gBAAgB;AAChB;AACA;AACA,IAAI,SAAS,GAAG;AAChB,QAAQ,QAAQ,IAAI,CAAC,YAAY,EAAE;AACnC,YAAY,KAAK,KAAK;AACtB,YAAY,KAAK,cAAc;AAC/B,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE,gBAAgB;AAChB,YAAY,KAAK,MAAM;AACvB,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,gBAAgB;AAChB,YAAY,KAAK,QAAQ;AACzB,YAAY,KAAK,oBAAoB;AACrC,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAClG,gBAAgB;AAChB,YAAY,KAAK,OAAO;AACxB,YAAY,KAAK,gBAAgB;AACjC,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,gBAAgB;AAChB;AACA;AACA,IAAI,mBAAmB,CAAC,CAAC,EAAE;AAC3B,QAAQ,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AACnF,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,MAAM,EAAE;AAC5C,YAAY,MAAM,gBAAgB,GAAG,WAAW,CAAC,SAAS;AAC1D,YAAY,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;AAC7D,YAAY,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;AACvG,YAAY,MAAM,cAAc,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,GAAG,CAAC,IAAI,CAAC;AACrF,YAAY,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC;AACjE;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;AACpD,YAAY,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AAC7C;AACA,QAAQ,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE;AACvC;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAChC,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACxE;AACA,YAAY,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,0BAA0B,CAAC;AAC3E,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACnD;AACA,IAAI,MAAM,OAAO,CAAC,YAAY,EAAE;AAChC,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AACvE,gBAAgB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI;AACzE,aAAa,CAAC;AACd,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC;AACnD,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACpC,YAAY;AACZ;AACA,QAAQ,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU,EAAE;AACrD,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC1C,YAAY,MAAM,KAAK,GAAG;AAC1B,gBAAgB,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG;AACrC,gBAAgB,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI;AACvC,aAAa;AACb,YAAY,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;AAC9C,YAAY,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACpC,YAAY;AACZ;AACA,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AACtC,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAChC;AACA,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACxL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,UAAU,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,eAAe,EAAE,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,EAAE,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,4+TAA4+T,EAAE,MAAM,EAAE,CAAC,2oMAA2oM,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,qDAAqD,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,qBAAqB,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,4BAA4B,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wCAAwC,EAAE,QAAQ,EAAE,sCAAsC,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qCAAqC,EAAE,QAAQ,EAAE,kCAAkC,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,2BAA2B,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACjtyB;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AAChJ,wBAAwB,WAAW;AACnC,wBAAwB,oBAAoB;AAC5C,wBAAwB,wBAAwB;AAChD,wBAAwB,iBAAiB;AACzC,wBAAwB,OAAO;AAC/B,wBAAwB,kBAAkB;AAC1C,wBAAwB,mBAAmB;AAC3C,wBAAwB,2BAA2B;AACnD,wBAAwB,4BAA4B;AACpD,wBAAwB,6BAA6B;AACrD,wBAAwB,mCAAmC;AAC3D,wBAAwB,wCAAwC;AAChE,wBAAwB,qCAAqC;AAC7D,wBAAwB,8BAA8B;AACtD,qBAAqB,EAAE,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,EAAE,QAAQ,EAAE,4+TAA4+T,EAAE,MAAM,EAAE,CAAC,2oMAA2oM,CAAC,EAAE;AAChwgB,SAAS,CAAC,EAAE,CAAC;;ACrab,MAAM,SAAS,GAAG;AAClB,IAAI,oBAAoB;AACxB,IAAI,2BAA2B;AAC/B,IAAI,4BAA4B;AAChC,IAAI,6BAA6B;AACjC,IAAI,mCAAmC;AACvC,CAAC;AACM,MAAM,iBAAiB,CAAC;AAC/B,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,oBAAoB;AAChK,YAAY,2BAA2B;AACvC,YAAY,4BAA4B;AACxC,YAAY,6BAA6B;AACzC,YAAY,mCAAmC,CAAC,EAAE,OAAO,EAAE,CAAC,oBAAoB;AAChF,YAAY,2BAA2B;AACvC,YAAY,4BAA4B;AACxC,YAAY,6BAA6B;AACzC,YAAY,mCAAmC,CAAC,EAAE,CAAC,CAAC;AACpD,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC1J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC3H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;AAC3C,oBAAoB,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC;AAC3C,oBAAoB,SAAS,EAAE,EAAE;AACjC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AClCb;AACA;AACA;;;;"}