tsichart-core 2.0.0-beta.3 → 2.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../packages/pikaday/pikaday.js"],"sourcesContent":["/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday\n */\n(function (root, factory)\n{\n 'use strict';\n\n var moment;\n if (typeof exports === 'object') {\n // CommonJS module\n // Load moment.js as an optional dependency\n try { moment = require('moment'); } catch (e) {}\n module.exports = factory(moment);\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function (req)\n {\n // Load moment.js as an optional dependency\n var id = 'moment';\n try { moment = req(id); } catch (e) {}\n return factory(moment);\n });\n } else {\n root.Pikaday = factory(root.moment);\n }\n}(this, function (moment)\n{\n 'use strict';\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === 'function',\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent('on' + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent('on' + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n },\n\n hasClass = function(el, cn)\n {\n return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent('HTMLEvents');\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent('on' + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // position of the datepicker, relative to the field (default to bottom & left)\n // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n position: 'bottom left',\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: 'YYYY-MM-DD',\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // the default flag for moment's strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: '',\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: 'left',\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : 'Previous Month',\n nextMonth : 'Next Month',\n months : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null,\n\n // Enable keyboard input\n keyboardInput: true\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push('is-selection-disabled');\n }\n\n } else {\n return '<td class=\"is-empty\"></td>';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\" aria-selected=\"' + ariaSelected + '\">' +\n '<button tabIndex=\"-1\" class=\"pika-button pika-day\" type=\"button\" ' +\n 'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n opts.day +\n '</button>' +\n '</td>';\n },\n\n renderWeek = function (d, m, y) {\n // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n var onejan = new Date(y, 0, 1),\n weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n return '<td class=\"pika-week\">' + weekNum + '</td>';\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return '<tr class=\"pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '\">' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n },\n\n renderBody = function(rows)\n {\n return '<tbody>' + rows.join('') + '</tbody>';\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push('<th></th>');\n }\n for (i = 0; i < 7; i++) {\n arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n }\n return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = '<div id=\"' + randId + '\" class=\"pika-title\">',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n (i === month ? ' selected=\"selected\"': '') +\n ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? 'disabled=\"disabled\"' : '') + '>' +\n opts.i18n.months[i] + '</option>');\n }\n\n monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select aria-label=\"select month\" class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected=\"selected\"': '') + '>' + (i) + '</option>');\n }\n }\n yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select aria-label=\"select year\" class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += '<button tabIndex=\"-1\" class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += '<button tabIndex=\"-1\" class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n }\n\n return html += '</div>';\n },\n\n renderTable = function(opts, data, randId)\n {\n return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"' + randId + '\">' + renderHead(opts) + renderBody(data) + '</table>';\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, 'is-disabled')) {\n if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect && opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, 'pika-prev')) {\n self.prevMonth();\n }\n else if (hasClass(target, 'pika-next')) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, 'pika-select')) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, 'pika-select-month')) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, 'pika-select-year')) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n // ignore if event comes from input box\n if (self.isVisible() && e.target && e.target.type !== 'text') {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n e.preventDefault();\n self.adjustDate('subtract', 1);\n break;\n case 38:\n self.adjustDate('subtract', 7);\n break;\n case 39:\n self.adjustDate('add', 1);\n break;\n case 40:\n self.adjustDate('add', 7);\n break;\n }\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n if (opts.parse) {\n date = opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n date = moment(opts.field.value, opts.format, opts.formatStrict);\n date = (date && date.isValid()) ? date.toDate() : null;\n }\n else {\n date = new Date(Date.parse(opts.field.value));\n }\n // if (isDate(date)) {\n // self.setDate(date);\n // }\n // if (!self._v) {\n // self.show();\n // }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, 'pika-single')) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners && hasClass(target, 'pika-select')) {\n if (!target.onchange) {\n target.setAttribute('onchange', 'return;');\n addEvent(target, 'change', self._onChange);\n }\n }\n do {\n if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement('div');\n self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n addEvent(self.el, 'mousedown', self._onMouseDown, true);\n addEvent(self.el, 'touchend', self._onMouseDown, true);\n addEvent(self.el, 'change', self._onChange);\n\n if (opts.keyboardInput) {\n addEvent(document, 'keydown', self._onKeyChange);\n }\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, 'change', self._onInputChange);\n\n if (!opts.defaultDate) {\n if (hasMoment && opts.field.value) {\n opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n } else {\n opts.defaultDate = new Date(Date.parse(opts.field.value));\n }\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += ' is-bound';\n addEvent(opts.trigger, 'click', self._onInputClick);\n addEvent(opts.trigger, 'focus', self._onInputFocus);\n addEvent(opts.trigger, 'blur', self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange > 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return '';\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment && moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = '';\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === 'right') {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === 'add') {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === 'subtract') {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c < this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \"2012\")\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v && !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n for (var c = 0; c < opts.numberOfMonths; c++) {\n randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== 'hidden') {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === 'function') {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute('aria-label', 'Use the arrow keys to pick a date');\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect;\n\n if (this._o.container) return;\n\n this.el.style.position = 'absolute';\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n if (typeof field.getBoundingClientRect === 'function') {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom & left\n if ((this._o.reposition && left + width > viewportWidth) ||\n (\n this._o.position.indexOf('right') > -1 &&\n left - width + field.offsetWidth > 0\n )\n ) {\n left = left - width + field.offsetWidth;\n }\n if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf('top') > -1 &&\n top - height - field.offsetHeight > 0\n )\n ) {\n top = top - height - field.offsetHeight;\n }\n\n this.el.style.left = left + 'px';\n this.el.style.top = top + 'px';\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i < cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && compareDates(opts.startRange, day),\n isEndRange = opts.endRange && compareDates(opts.endRange, day),\n isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled = (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek && isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, 'is-hidden');\n if (this._o.bound) {\n addEvent(document, 'click', this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === 'function') {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, 'click', this._onClick);\n }\n this.el.style.position = 'static'; // reset\n this.el.style.left = 'auto';\n this.el.style.top = 'auto';\n addClass(this.el, 'is-hidden');\n this._v = false;\n if (v !== undefined && typeof this._o.onClose === 'function') {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n var opts = this._o;\n\n this.hide();\n removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n removeEvent(this.el, 'touchend', this._onMouseDown, true);\n removeEvent(this.el, 'change', this._onChange);\n if (opts.keyboardInput) {\n removeEvent(document, 'keydown', this._onKeyChange);\n }\n if (opts.field) {\n removeEvent(opts.field, 'change', this._onInputChange);\n if (opts.bound) {\n removeEvent(opts.trigger, 'click', this._onInputClick);\n removeEvent(opts.trigger, 'focus', this._onInputFocus);\n removeEvent(opts.trigger, 'blur', this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n}));"],"names":["this"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/constants/Enums.ts","../src/constants/Constants.ts","../src/utils/Utils.ts","../src/models/Strings.ts","../src/models/ChartOptions.ts","../src/interfaces/Component.ts","../src/components/Legend/Legend.ts","../src/models/ChartComponentData.ts","../src/components/EllipsisMenu/EllipsisMenu.ts","../src/components/Grid/Grid.ts","../src/interfaces/ChartComponent.ts","../src/models/ChartDataOptions.ts","../src/interfaces/ChartVisualizationComponent.ts","../src/interfaces/TemporalXAxisComponent.ts","../src/models/LineChartData.ts","../src/components/ContextMenu/ContextMenu.ts","../src/components/Tooltip/Tooltip.ts","../src/interfaces/Plot.ts","../src/components/LinePlot/LinePlot.ts","../src/components/CategoricalPlot/CategoricalPlot.ts","../src/components/EventsPlot/EventsPlot.ts","../src/models/AxisState.ts","../src/components/Marker/Marker.ts","../src/components/LineChart/LineChart.ts","../packages/pikaday/pikaday.js","../src/components/TimezonePicker/TimezonePicker.ts","../src/components/DateTimePicker/DateTimePicker.ts","../src/models/AggregateExpression.ts","../src/interfaces/DateTimeButton.ts","../src/components/DateTimeButtonRange/DateTimeButtonRange.ts","../src/components/AvailabilityChart/AvailabilityChart.ts","../src/models/GroupedBarChartData.ts","../src/models/PieChartData.ts","../src/components/Slider/Slider.ts","../src/components/PieChart/PieChart.ts","../src/models/ScatterPlotData.ts","../src/components/ScatterPlot/ScatterPlot.ts","../src/components/GroupedBarChart/GroupedBarChart.ts","../src/models/HierarchyNode.ts","../src/components/Hierarchy/Hierarchy.ts","../src/models/HeatmapData.ts","../src/components/HeatmapCanvas/HeatmapCanvas.ts","../src/components/Heatmap/Heatmap.ts","../src/models/TimeSeriesEventCell.ts","../src/models/TimeSeriesEvent.ts","../src/models/EventsTableData.ts","../src/components/EventsTable/EventsTable.ts","../src/components/ModelAutocomplete/ModelAutocomplete.ts","../src/components/ModelSearch/ModelSearch.ts","../src/models/TsqExpression.ts","../src/components/HierarchyNavigation/HierarchyNavigation.ts","../src/components/SingleDateTimePicker/SingleDateTimePicker.ts","../src/components/DateTimeButtonSingle/DateTimeButtonSingle.ts","../src/models/TsqRange.ts","../src/components/HistoryPlayback/HistoryPlayback.ts","../src/components/ProcessGraphic/ProcessGraphic.ts","../src/components/PlaybackControls/PlaybackControls.ts","../src/components/ColorPicker/ColorPicker.ts","../src/components/GeoProcessGraphic/GeoProcessGraphic.ts","../src/UXClient.ts"],"sourcesContent":["export enum KeyCodes {\n Tab = 9,\n Esc = 27,\n Enter = 13,\n Up = 38,\n Down = 40\n}\n\n// search api params\nexport enum InstancesSort {DisplayName = \"DisplayName\", Rank = \"Rank\"};\nexport enum HierarchiesExpand {UntilChildren = \"UntilChildren\", OneLevel = \"OneLevel\"};\nexport enum HierarchiesSort {Name = \"Name\", CumulativeInstanceCount = \"CumulativeInstanceCount\"};\nexport enum MetadataPropertyTypes {Double = \"Double\", String = \"String\", DateTime = \"DateTime\", Long = \"Long\"}\nexport enum ShiftTypes {startAt = \"Start at\", shifted = \"shifted\"}\n\nexport enum InterpolationFunctions {\n None = '',\n CurveLinear = \"curveLinear\",\n CurveStep = \"curveStep\",\n CurveStepBefore = \"curveStepBefore\",\n CurveStepAfter = \"curveStepAfter\",\n CurveBasis = \"curveBasis\",\n CurveCardinal = \"curveCardinal\",\n CurveMonotoneX = \"curveMonotoneX\",\n CurveCatmullRom = \"curveCatmullRom\"\n}\n\nexport enum ErrorCodes {\n InvalidInput = 'InvalidInput',\n PartialSuccess = 'PartialSuccess'\n}\n\n// Linechart stack states\nexport enum YAxisStates { Stacked = \"stacked\", Shared = \"shared\", Overlap = \"overlap\" };\nexport enum DataTypes { Numeric = 'numeric', Categorical = 'categorical', Events = 'events' };\nexport enum EventElementTypes { Diamond = 'diamond', Teardrop = 'teardrop' };\nexport enum TooltipMeasureFormat { Enveloped = 'Enveloped', SingleValue = 'SingleValue', Scatter = 'Scatter' };\nexport enum valueTypes { String = 'String', Double = 'Double', Long = 'Long', Dynamic = 'Dynamic', Boolean = 'Boolean', DateTime = 'DateTime' };\n","import { InstancesSort, HierarchiesExpand, HierarchiesSort } from \"./Enums\";\n\nexport const DefaultHierarchyNavigationOptions = {\n instancesPageSize: 10,\n hierarchiesPageSize: 10,\n isInstancesRecursive: false,\n isInstancesHighlighted: false,\n instancesSort: InstancesSort.DisplayName,\n hierarchiesExpand: HierarchiesExpand.OneLevel,\n hierarchiesSort: HierarchiesSort.Name\n};\n\nexport const DefaultHierarchyContextMenuOptions = {\n isSelectionEnabled: false,\n isFilterEnabled: false\n}\n\nexport const nullTsidDisplayString = \"null\";\n\nexport const swimlaneLabelConstants = {\n leftMarginOffset: 40,\n swimLaneLabelHeightPadding: 8,\n labelLeftPadding: 28\n}\n\nexport const CharactersToEscapeForExactSearchInstance = ['\"', '`', '\\'', '!', '(', ')', '^', '[', '{', ':', ']', '}', '~', '/', '\\\\', '@', '#', '$', '%', '&', '*', ';', '=', '.', '_', '-', '<', '>', ',', '?'];\n\nexport const NONNUMERICTOPMARGIN = 8;\nexport const LINECHARTTOPPADDING = 16;\nexport const GRIDCONTAINERCLASS = 'tsi-gridContainer';\nexport const LINECHARTCHARTMARGINS = {\n top: 40,\n bottom: 40,\n left: 70,\n right: 60\n};\nexport const LINECHARTXOFFSET = 8;\nexport const MARKERVALUENUMERICHEIGHT = 20;\nexport const VALUEBARHEIGHT = 3;\nexport const SERIESLABELWIDTH = 92;\n","import * as d3 from 'd3';\nimport moment from 'moment-timezone';\nimport Grid from \"../components/Grid/Grid\";\nimport { ChartOptions } from '../models/ChartOptions';\nimport { ChartComponentData } from '../models/ChartComponentData';\nimport { CharactersToEscapeForExactSearchInstance, nullTsidDisplayString, GRIDCONTAINERCLASS, NONNUMERICTOPMARGIN } from '../constants/Constants';\nimport { YAxisStates, valueTypes } from '../constants/Enums';\n\nexport default class Utils {\n static guidForNullTSID = Utils.guid();\n\n static formatYAxisNumber(val: number) {\n if (Math.abs(val) < 1000000) {\n if (Math.abs(val) < .0000001)\n return d3.format('.2n')(val); // scientific for less than 1 billionth\n else {\n // grouped thousands with 7 significant digits, trim insginificant trailing 0s\n var formatted = d3.format(',.7r')(val);\n if (formatted.indexOf('.') != -1) {\n var lastChar = formatted[formatted.length - 1]\n while (lastChar == '0') {\n formatted = formatted.slice(0, -1);\n lastChar = formatted[formatted.length - 1]\n }\n if (lastChar == '.')\n formatted = formatted.slice(0, -1);\n }\n return formatted;\n }\n }\n else if (Math.abs(val) >= 1000000 && Math.abs(val) < 1000000000)\n return d3.format('.3s')(val); // suffix of M for millions\n else if (Math.abs(val) >= 1000000000 && Math.abs(val) < 1000000000000)\n return d3.format('.3s')(val).slice(0, -1) + 'B'; // suffix of B for billions\n return d3.format('.2n')(val); // scientific for everything else\n }\n\n static getStackStates() {\n return YAxisStates;\n }\n\n // format [0-9]+[ms|s|m|h|d], convert to millis\n static parseTimeInput(inputString: string) {\n inputString = inputString.toLowerCase();\n let getNumber = (inputString, charsFromEnd) => {\n let startAt = inputString.indexOf('pt') !== -1 ? 2 : (inputString.indexOf('p') !== -1 ? 1 : 0);\n return Number(inputString.slice(startAt, inputString.length - charsFromEnd));\n }\n if (inputString.indexOf('ms') == inputString.length - 2) {\n return getNumber(inputString, 2);\n }\n if (inputString.indexOf('s') == inputString.length - 1) {\n return getNumber(inputString, 1) * 1000;\n }\n if (inputString.indexOf('m') == inputString.length - 1) {\n return getNumber(inputString, 1) * 60 * 1000;\n }\n if (inputString.indexOf('h') == inputString.length - 1) {\n return getNumber(inputString, 1) * 60 * 60 * 1000;\n }\n if (inputString.indexOf('d') == inputString.length - 1) {\n return getNumber(inputString, 1) * 24 * 60 * 60 * 1000;\n }\n return -1;\n }\n\n static findClosestTime(prevMillis: number, timeMap: any): number {\n var minDistance = Infinity;\n var closestValue = null;\n Object.keys(timeMap).forEach((intervalCenterString) => {\n var intervalCenter = Number(intervalCenterString);\n if (Math.abs(intervalCenter - prevMillis) < minDistance) {\n minDistance = Math.abs(intervalCenter - prevMillis);\n closestValue = intervalCenter;\n }\n });\n return closestValue;\n }\n\n\n static getValueOfVisible(d: any, visibleMeasure: string) {\n if (d.measures) {\n if (d.measures[visibleMeasure] != null || d.measures[visibleMeasure] != undefined)\n return d.measures[visibleMeasure];\n }\n return null;\n }\n\n static isStartAt(startAtString: string = null, searchSpan: any = null) {\n return (startAtString !== null && searchSpan !== null && searchSpan.from !== null);\n }\n\n static parseShift(shiftString: string, startAtString: any = null, searchSpan: any = null) {\n if (this.isStartAt(startAtString, searchSpan)) {\n return (new Date(startAtString)).valueOf() - (new Date(searchSpan.from)).valueOf();\n }\n\n if (shiftString === undefined || shiftString === null || shiftString.length === 0) {\n return 0;\n }\n let millis: number;\n if (shiftString[0] === '-' || shiftString[0] === '+') {\n millis = (shiftString[0] === '-' ? -1 : 1) * this.parseTimeInput(shiftString.slice(1, shiftString.length));\n } else {\n millis = this.parseTimeInput(shiftString);\n }\n return -millis;\n }\n\n static adjustStartMillisToAbsoluteZero(fromMillis, bucketSize) {\n let epochAdjustment = 62135596800000;\n return Math.floor((fromMillis + epochAdjustment) / bucketSize) * bucketSize - epochAdjustment;\n }\n\n static bucketSizeToTsqInterval(bucketSize: string) {\n if (!bucketSize) { return null; }\n let bucketSizeInMillis = Utils.parseTimeInput(bucketSize);\n let padLeadingZeroes = (number) => {\n let numberAsString = String(number);\n if (numberAsString.length < 3)\n numberAsString = (numberAsString.length === 2 ? '0' : '00') + numberAsString;\n return numberAsString\n }\n if (bucketSizeInMillis < 1000) {\n bucketSize = (bucketSize.toLowerCase().indexOf('d') !== -1) ? 'd.' : '.' + padLeadingZeroes(bucketSizeInMillis) + \"s\";\n }\n let prefix = bucketSize.toLowerCase().indexOf('d') !== -1 ? 'P' : 'PT';\n return (prefix + bucketSize).toUpperCase();\n }\n\n static createEntityKey(aggName: string, aggIndex: number) {\n return encodeURIComponent(aggName).split(\".\").join(\"_\") + \"_\" + aggIndex;\n }\n\n static getColorForValue(chartDataOptions, value) {\n if (chartDataOptions.valueMapping && (chartDataOptions.valueMapping[value] !== undefined)) {\n return chartDataOptions.valueMapping[value].color;\n }\n return null;\n }\n\n static rollUpContiguous(data) {\n let areEquivalentBuckets = (d1, d2) => {\n if (!d1.measures || !d2.measures) {\n return false;\n }\n if (Object.keys(d1.measures).length !== Object.keys(d2.measures).length) {\n return false;\n }\n return Object.keys(d1.measures).reduce((p, c, i) => {\n return p && (d1.measures[c] === d2.measures[c]);\n }, true);\n }\n\n return data.filter((d, i) => {\n if (i !== 0) {\n return !areEquivalentBuckets(d, data[i - 1]);\n }\n return true;\n });\n }\n\n static formatOffsetMinutes(offset) {\n return (offset < 0 ? '-' : '+') +\n Math.floor(offset / 60) + ':' +\n (offset % 60 < 10 ? '0' : '') + (offset % 60) + '';\n\n }\n\n static getOffsetMinutes(offset: any, millis: number) {\n if (offset == 'Local') {\n return -moment.tz.zone(moment.tz.guess()).parse(millis);\n }\n if (typeof offset == 'string' && isNaN(offset as any)) {\n return -moment.tz.zone(offset).parse(millis);\n } else {\n return offset;\n }\n }\n\n static offsetUTC(date: Date) {\n let offsettedDate = new Date(date.valueOf() - date.getTimezoneOffset() * 60 * 1000);\n return offsettedDate;\n }\n\n // inverse of getOffsetMinutes, this is the conversion factor of an offsettedTime to UTC in minutes \n static getMinutesToUTC(offset: any, millisInOffset: number) {\n if (offset == 'Local') {\n return moment.tz.zone(moment.tz.guess()).utcOffset(millisInOffset);\n }\n if (typeof offset == 'string' && isNaN(offset as any)) {\n return moment.tz.zone(offset).utcOffset(millisInOffset);\n } else {\n return -offset;\n }\n }\n\n static addOffsetGuess(timezoneName) {\n let timezone = moment.tz(new Date(), timezoneName.split(' ').join('_'));\n let formatted = timezone.format('Z');\n return \"UTC\" + formatted;\n }\n\n static timezoneAbbreviation(timezoneName) {\n let abbr = moment.tz(new Date(), timezoneName).format('z');\n if (abbr[0] === '-' || abbr[0] === '+')\n return '';\n return abbr;\n }\n\n static createTimezoneAbbreviation(offset) {\n let timezone = Utils.parseTimezoneName(offset);\n let timezoneAbbreviation = Utils.timezoneAbbreviation(timezone);\n return (timezoneAbbreviation.length !== 0 ? timezoneAbbreviation : Utils.addOffsetGuess(timezone));\n }\n\n static parseTimezoneName(timezoneRaw: any) {\n if (!isNaN(timezoneRaw)) {\n if (timezoneRaw === 0) {\n return 'UTC';\n }\n return '';\n }\n if (timezoneRaw == 'Local') {\n return moment.tz.guess();\n }\n return timezoneRaw !== null ? timezoneRaw.split(' ').join('_') : '';\n }\n\n static convertTimezoneToLabel(timezone, locdLocal = 'Local') {\n let timezoneName = this.parseTimezoneName(timezone);\n let localPrefix = '';\n let offsetPrefix = '';\n if (timezone == 'Local') {\n localPrefix = locdLocal + ' - ';\n }\n if (timezone !== 'UTC') {\n offsetPrefix = ' (' + this.addOffsetGuess(timezoneName) + ')';\n }\n let timezoneAbbreviation = this.timezoneAbbreviation(timezoneName);\n let timezoneSuffix = (timezoneAbbreviation && timezoneAbbreviation.length !== 0 && timezoneAbbreviation !== 'UTC') ? ': ' + timezoneAbbreviation : '';\n return offsetPrefix + \" \" + localPrefix + timezoneName.replace(/_/g, ' ') + timezoneSuffix;\n }\n\n static rangeTimeFormat(rangeMillis: number) {\n var rangeText = \"\";\n var oneSecond = 1000;\n var oneMinute = 60 * 1000;\n var oneHour = oneMinute * 60;\n var oneDay = oneHour * 24;\n\n var days = Math.floor(rangeMillis / oneDay);\n var hours = Math.floor(rangeMillis / oneHour) % 24;\n var minutes = Math.floor(rangeMillis / oneMinute) % 60;\n var seconds = Math.floor(rangeMillis / oneSecond) % 60;\n var millis = Math.floor(rangeMillis % 1000);\n\n if (rangeMillis >= oneDay) {\n return days + \"d \" + (hours > 0 ? (hours + \"h\") : \"\");\n } else if (rangeMillis >= oneHour) {\n return hours + \"h \" + (minutes > 0 ? (minutes + \"m\") : \"\");\n } else if (rangeMillis >= oneMinute) {\n return minutes + \"m \" + (seconds > 0 ? (seconds + \"s\") : \"\");\n }\n else if (rangeMillis >= oneSecond) {\n return seconds + (millis != 0 ? \".\" + millis : \"\") + \"s\";\n }\n return millis + \"ms\";\n }\n\n static subDateTimeFormat(is24HourTime, usesSeconds, usesMillis) {\n return (is24HourTime ? \"HH\" : \"hh\") + \":mm\" + (usesSeconds ? (\":ss\" + (usesMillis ? \".SSS\" : \"\")) : \"\") + (is24HourTime ? \"\" : \" A\");\n };\n\n static timeFormat(usesSeconds = false, usesMillis = false, offset: any = 0, is24HourTime: boolean = true, shiftMillis: number = null, timeFormat: string = null, locale = 'en') {\n return (d) => {\n if (shiftMillis !== 0) {\n d = new Date(d.valueOf() + shiftMillis);\n }\n let stringFormat;\n if (timeFormat !== null) {\n stringFormat = timeFormat;\n } else {\n stringFormat = \"L \" + this.subDateTimeFormat(is24HourTime, usesSeconds, usesMillis);\n }\n if (typeof offset == 'string' && isNaN(offset as any)) {\n return moment.tz(d, 'UTC').tz(offset === 'Local' ? moment.tz.guess() : offset).locale(locale).format(stringFormat);\n } else {\n return moment.tz(d, \"UTC\").utcOffset(offset).locale(locale).format(stringFormat);\n }\n }\n }\n\n static splitTimeLabel(text: any) {\n\n let shouldSplit = (str) => {\n let splitLines = str.split(' ');\n return !((splitLines.length === 1) || (splitLines.length === 2 && (splitLines[1] === 'AM' || splitLines[1] === 'PM')));\n }\n\n text.each(function () {\n if (this.children == undefined || this.children.length == 0) { // don't split already split labels\n var text = d3.select(this);\n var lines = text.text().split(\" \");\n var dy = parseFloat(text.attr(\"dy\"));\n if (shouldSplit(text.text())) {\n let newFirstLine = lines[0] + (lines.length === 3 ? (' ' + lines[1]) : '');\n let newSecondLine = lines[lines.length - 1];\n text.text(null).append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", text.attr(\"y\"))\n .attr(\"dy\", dy + \"em\")\n .text(newFirstLine);\n text.append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", text.attr(\"y\"))\n .attr(\"dy\", (dy + dy * 1.4) + \"em\")\n .text(newSecondLine);\n }\n }\n });\n }\n\n static getUTCHours(d: Date, is24HourTime: boolean = true) {\n var hours = d.getUTCHours();\n if (!is24HourTime) {\n if (hours == 0)\n hours = 12;\n if (hours > 12)\n hours = hours - 12;\n }\n return hours;\n }\n\n static UTCTwelveHourFormat(d: Date) {\n var hours: string = String(this.getUTCHours(d));\n var minutes: string = (d.getUTCMinutes() < 10 ? \"0\" : \"\") + String(d.getUTCMinutes());\n var amPm: string = (d.getUTCHours() < 12) ? \"AM\" : \"PM\";\n return hours + \":\" + minutes + \" \" + amPm;\n }\n\n static getAgVisible(displayState: any, aggI: string, splitBy: string) {\n return (displayState[aggI].visible) ? displayState[aggI].splitBys[splitBy].visible : false;\n }\n static getAgVisibleMeasure(displayState: any, aggI: string, splitBy: string) {\n return displayState[aggI].splitBys[splitBy].visibleType;\n }\n\n static createSeriesTypeIcon(seriesType: string, selection: any): void {\n var g = selection.append(\"g\")\n .style(\"position\", \"absolute\");\n if (seriesType == \"event\") {\n g.attr(\"transform\", \"translate(7.5,0)\")\n .append(\"rect\")\n .attr(\"width\", 7)\n .attr(\"height\", 7)\n .attr(\"transform\", \"rotate(45)\");\n }\n else if (seriesType == \"state\") {\n g.append(\"rect\")\n .attr(\"width\", 15)\n .attr(\"height\", 10);\n }\n else { // fxn\n g.append(\"path\")\n .attr(\"d\", \"M0 5 Q 4 0, 8 5 T 16 5\")\n .attr(\"fill\", \"none\");\n }\n }\n\n static strip(text) {\n var div = document.createElement('div');\n div.innerHTML = text;\n var textContent = div.textContent || div.innerText || '';\n return textContent;\n }\n\n static stripForConcat(text) {\n var specialCharacters = ['\"', \"'\", '?', '<', '>', ';'];\n specialCharacters.forEach(c => { text = text.split(c).join('') });\n return text;\n }\n\n static setSeriesLabelSubtitleText(subtitle, isInFocus: boolean = false) {\n let subtitleDatum = subtitle.data()[0];\n if (!subtitle.select('.tsi-splitBy').empty()) {\n let textAfterSplitByExists = subtitleDatum.timeShift !== '' || subtitleDatum.variableAlias;\n let splitByString = `${subtitleDatum.splitBy}${(textAfterSplitByExists && !isInFocus) ? ', ' : ''}`;\n Utils.appendFormattedElementsFromString(subtitle.select('.tsi-splitBy'), splitByString);\n }\n if (subtitle.select('.tsi-timeShift')) {\n subtitle.select('.tsi-timeShift')\n .text(d => {\n return `${subtitleDatum.timeShift}${(subtitleDatum.variableAlias && !isInFocus) ? ', ' : ''}`;\n });\n }\n if (subtitle.select('.tsi-variableAlias')) {\n subtitle.select('.tsi-variableAlias')\n .text(d => subtitleDatum.variableAlias);\n }\n }\n\n static revertAllSubtitleText(markerValues, opacity = 1) {\n let self = this;\n markerValues.classed('tsi-isExpanded', false)\n .style('opacity', opacity)\n .each(function () {\n self.setSeriesLabelSubtitleText(d3.select(this).selectAll('.tsi-tooltipSubtitle'), false);\n });\n }\n\n static generateColors(numColors: number, includeColors: string[] = null) {\n let defaultColors = ['#008272', '#D869CB', '#FF8C00', '#8FE6D7', '#3195E3', '#F7727E', '#E0349E', '#C8E139', '#60B9AE',\n '#93CFFB', '#854CC7', '#258225', '#0078D7', '#FF2828', '#FFF100'];\n var postDefaultColors = d3.scaleSequential(d3.interpolateCubehelixDefault).domain([defaultColors.length - .5, numColors - .5]);\n var colors = [];\n let colorsIndex = 0;\n if (includeColors) {//add the colors we want to include first\n for (let i = 0; i < includeColors.length && colorsIndex < numColors; i++) {\n let color = includeColors[i];\n if (colors.indexOf(color) === -1) {\n colors.push(color);\n colorsIndex++;\n }\n }\n }\n for (let i = 0; colorsIndex < numColors; i++) {\n if (i < defaultColors.length) {\n if (colors.indexOf(defaultColors[i]) === -1) {\n colors.push(defaultColors[i]);\n colorsIndex++;\n }\n }\n else if (colors.indexOf(postDefaultColors(i)) === -1) {\n colors.push(postDefaultColors(i));\n colorsIndex++;\n }\n }\n return colors;\n }\n\n static convertFromLocal(date: Date) {\n return new Date(date.valueOf() - date.getTimezoneOffset() * 60 * 1000);\n }\n\n static adjustDateFromTimezoneOffset(date: Date) {\n let dateCopy = new Date(date.valueOf());\n dateCopy.setTime(dateCopy.getTime() + dateCopy.getTimezoneOffset() * 60 * 1000);\n return dateCopy;\n }\n\n static offsetFromUTC(date: Date, offset = 0) {\n let offsetMinutes = Utils.getOffsetMinutes(offset, date.valueOf());\n var dateCopy = new Date(date.valueOf() + offsetMinutes * 60 * 1000);\n return dateCopy;\n }\n\n static offsetToUTC(date: Date, offset = 0) {\n let offsetMinutes = Utils.getOffsetMinutes(offset, date.valueOf())\n var dateCopy = new Date(date.valueOf() - offsetMinutes * 60 * 1000);\n return dateCopy;\n }\n\n\n static parseUserInputDateTime(timeText, offset) {\n let dateTimeFormat = \"L \" + this.subDateTimeFormat(true, true, true);\n let parsedDate = moment(timeText, dateTimeFormat).toDate();\n let utcDate = this.offsetToUTC(this.convertFromLocal(parsedDate), offset);\n return utcDate.valueOf();\n }\n\n static getBrighterColor(color: string) {\n let hclColor = <any>d3.hcl(color);\n if (hclColor.l < 80) {\n return hclColor.brighter().toString();\n }\n return hclColor.toString();\n\n }\n\n static createSplitByColors(displayState: any, aggKey: string, ignoreIsOnlyAgg: boolean = false) {\n if (Object.keys(displayState[aggKey][\"splitBys\"]).length == 1)\n return [displayState[aggKey].color];\n var isOnlyAgg: boolean = Object.keys(displayState).reduce((accum, currAgg): boolean => {\n if (currAgg == aggKey)\n return accum;\n if (displayState[currAgg][\"visible\"] == false)\n return accum && true;\n return false;\n }, true);\n if (isOnlyAgg && !ignoreIsOnlyAgg) {\n return this.generateColors(Object.keys(displayState[aggKey][\"splitBys\"]).length);\n }\n var aggColor = displayState[aggKey].color;\n var interpolateColor = d3.scaleLinear().domain([0, Object.keys(displayState[aggKey][\"splitBys\"]).length])\n .range([d3.hcl(aggColor).darker().l, d3.hcl(aggColor).brighter().l]);\n var colors = [];\n for (var i = 0; i < Object.keys(displayState[aggKey][\"splitBys\"]).length; i++) {\n const newColor = d3.hcl(aggColor);\n newColor.l = interpolateColor(i);\n colors.push(newColor.formatHex());\n }\n return colors;\n }\n\n static colorSplitBy(displayState: any, splitByIndex: number, aggKey: string, ignoreIsOnlyAgg: boolean = false) {\n if (Object.keys(displayState[aggKey][\"splitBys\"]).length == 1)\n return displayState[aggKey].color;\n\n var isOnlyAgg: boolean = Object.keys(displayState).reduce((accum, currAgg): boolean => {\n if (currAgg == aggKey)\n return accum;\n if (displayState[currAgg][\"visible\"] == false)\n return accum && true;\n return false;\n }, true);\n\n if (isOnlyAgg && !ignoreIsOnlyAgg) {\n var splitByColors = this.generateColors(Object.keys(displayState[aggKey][\"splitBys\"]).length);\n return splitByColors[splitByIndex];\n }\n\n var aggColor = displayState[aggKey].color;\n var interpolateColor = d3.scaleLinear().domain([0, Object.keys(displayState[aggKey][\"splitBys\"]).length])\n .range([d3.hcl(aggColor).darker().l, d3.hcl(aggColor).brighter().l]);\n const newColor = d3.hcl(aggColor);\n newColor.l = interpolateColor(splitByIndex);\n return newColor.formatHex();\n }\n\n static getTheme(theme: any) {\n return theme ? 'tsi-' + theme : 'tsi-dark';\n }\n\n static clearSelection() {\n var sel = window.getSelection ? window.getSelection() : (<any>document).selection;\n if (sel) {\n if (sel.removeAllRanges) {\n sel.removeAllRanges();\n } else if (sel.empty) {\n sel.empty();\n }\n }\n }\n\n static mark(filter, text) {\n if (filter.length == 0)\n return text;\n var regExp = new RegExp(filter, 'gi');\n return text.replace(regExp, function (m) { return '<mark>' + m + '</mark>'; });\n }\n\n static hash(str) {\n var hash = 5381,\n i = str.length;\n\n while (i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n }\n\n\n static guid() {\n var s4 = () => {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\n s4() + '-' + s4() + s4() + s4();\n }\n\n static createValueFilter(aggregateKey, splitBy) {\n return (d: any, j: number) => {\n var currAggKey: string;\n var currSplitBy: string;\n if (d.aggregateKey) {\n currAggKey = d.aggregateKey;\n currSplitBy = d.splitBy;\n } else if (d && d.length) {\n currAggKey = d[0].aggregateKey;\n currSplitBy = d[0].splitBy\n } else\n return true;\n return (currAggKey == aggregateKey && (splitBy == null || splitBy == currSplitBy));\n }\n }\n\n static downloadCSV(csvString: string, csvName: string = \"Table\") {\n var blob = new Blob([csvString], { type: 'text/csv;charset=utf-8;' });\n var blobURL = window.URL.createObjectURL(blob);\n var link = document.createElement(\"a\");\n link.setAttribute(\"href\", blobURL);\n link.setAttribute(\"download\", csvName + \".csv\");\n link.setAttribute(\"tabindex\", \"0\");\n link.innerHTML = \"\";\n document.body.appendChild(link);\n link.click();\n }\n\n static sanitizeString(str: any, type: String) {\n if (str === null || str === undefined) {\n return \"\";\n }\n if (type !== valueTypes.Double && type !== valueTypes.Long) {\n let jsonifiedString = type === valueTypes.Dynamic ? JSON.stringify(str) : String(str);\n if (jsonifiedString.indexOf(',') !== -1 || jsonifiedString.indexOf('\"') !== -1 || jsonifiedString.indexOf('\\n') !== -1 || type === valueTypes.Dynamic) {\n let replacedString = jsonifiedString.replace(/\"/g, '\"\"');\n return '\"' + replacedString + '\"';\n }\n }\n return str;\n }\n\n static focusOnEllipsisButton(renderTarget) {\n let ellipsisContainer = d3.select(renderTarget).select(\".tsi-ellipsisContainerDiv\");\n if (!ellipsisContainer.empty()) {\n (<any>ellipsisContainer.select(\".tsi-ellipsisButton\").node()).focus();\n }\n }\n\n static createDownloadEllipsisOption(csvStringGenerator, action = () => { }, downloadLabel = \"Download as CSV\") {\n return {\n iconClass: \"download\",\n label: downloadLabel,\n action: () => {\n Utils.downloadCSV(csvStringGenerator());\n action();\n },\n description: \"\"\n };\n }\n\n\n static createControlPanel(renderTarget: any, legendWidth: number, topChartMargin: number, chartOptions: any) {\n d3.select(renderTarget).selectAll(\".tsi-chartControlsPanel\").remove();\n var controlPanelWidth = Math.max(1, (<any>d3.select(renderTarget).node()).clientWidth -\n (chartOptions.legend == \"shown\" ? legendWidth : 0));\n var chartControlsPanel = d3.select(renderTarget).append(\"div\")\n .attr(\"class\", \"tsi-chartControlsPanel\")\n .style(\"width\", controlPanelWidth + \"px\")\n .style(\"top\", Math.max((topChartMargin - 32), 0) + \"px\");\n\n return chartControlsPanel;\n }\n\n static escapeQuotesCommasAndNewlines(stringToEscape: string) {\n var escapedString = \"\";\n if (stringToEscape && (stringToEscape.indexOf(\"\\\"\") != -1 ||\n stringToEscape.indexOf(\",\") != -1 ||\n stringToEscape.indexOf(\"\\n\") != -1)) {\n stringToEscape = stringToEscape.replace(/\"/g, \"\\\"\\\"\");\n escapedString += \"\\\"\";\n escapedString += stringToEscape;\n escapedString += \"\\\"\";\n return escapedString;\n }\n else {\n return stringToEscape;\n }\n };\n\n static getNonNumericHeight(rawHeight: number) {\n return rawHeight + NONNUMERICTOPMARGIN;\n }\n\n static getControlPanelWidth(renderTarget, legendWidth, isLegendShown) {\n return Math.max(1, (<any>d3.select(renderTarget).node()).clientWidth -\n (isLegendShown ? legendWidth : 0));\n };\n\n static getValueOrDefault(chartOptionsObj, propertyName, defaultValue = null) {\n let propertyValue = chartOptionsObj[propertyName];\n if (propertyValue == undefined) {\n if (this[propertyName] == undefined)\n return defaultValue;\n return this[propertyName];\n }\n return propertyValue;\n }\n\n static safeNotNullOrUndefined(valueLambda) {\n try {\n let value = valueLambda();\n return !(value === null || value === undefined);\n }\n catch (err) {\n return false;\n }\n }\n\n static equalToEventTarget = (function (current, event) {\n return (current == event.target);\n });\n\n static getAggKeys(data) {\n let aggregateCounterMap = {};\n return data.map((aggregate) => {\n var aggName: string = Object.keys(aggregate)[0];\n let aggKey;\n if (aggregateCounterMap[aggName]) {\n aggKey = Utils.createEntityKey(aggName, aggregateCounterMap[aggName]);\n aggregateCounterMap[aggName] += 1;\n } else {\n aggKey = Utils.createEntityKey(aggName, 0);\n aggregateCounterMap[aggName] = 1;\n }\n return aggKey;\n });\n }\n\n static roundToMillis(rawTo, bucketSize) {\n return Math.ceil((rawTo + 62135596800000) / (bucketSize)) * (bucketSize) - 62135596800000;\n }\n\n static mergeSeriesForScatterPlot(chartData: any, scatterMeasures: any) {\n let xMeasure = chartData[scatterMeasures.X_MEASURE], yMeasure = chartData[scatterMeasures.Y_MEASURE], rMeasure = chartData[scatterMeasures.R_MEASURE];\n\n let measureNames = Utils.getScatterPlotMeasureNames(chartData, scatterMeasures);\n\n // Create data label\n let xLabel = xMeasure.additionalFields.Variable.substring(0, 15) + (xMeasure.additionalFields.Variable.length > 15 ? \"... vs\" : \" vs\");\n let yLabel = \" \" + yMeasure.additionalFields.Variable.substring(0, 15) + (yMeasure.additionalFields.Variable.length > 15 ? \"... \" : \"\");\n let rLabel = (rMeasure != null ? \" vs \" + rMeasure.additionalFields.Variable.substring(0, 15) + (rMeasure.additionalFields.Variable.length > 15 ? \"... \" : \"\") : \"\");\n let dataTitle = xLabel + yLabel + rLabel;\n\n // Initialize scatter plot data object\n let scatterData = {\n [dataTitle]: {\n \"\": {}\n }\n };\n\n // Create measure types\n let measureTypes = {\n X_MEASURE_TYPE: 'avg' in xMeasure.measureTypes ? xMeasure.measureTypes['avg'] : xMeasure.measureTypes[0],\n Y_MEASURE_TYPE: 'avg' in yMeasure.measureTypes ? yMeasure.measureTypes['avg'] : yMeasure.measureTypes[0],\n R_MEASURE_TYPE: null\n }\n\n // Takes query and returns normalized time data\n let normalizeTimestampKeys = (query) => {\n let newTS = {}\n Object.keys(query.data[query.alias][\"\"]).forEach((key) => {\n let oldTime = new Date(key).valueOf();\n let timeShift = query.timeShift != \"\" ? this.parseShift(query.timeShift, query.startAt, query.searchSpan) : 0;\n // Calculate real timeshift based on bucket snapping\n let bucketShiftInMillis = this.adjustStartMillisToAbsoluteZero(timeShift, this.parseShift(query.searchSpan.bucketSize));\n let normalizedTime = oldTime - bucketShiftInMillis;\n let timestamp = new Date(normalizedTime).toISOString();\n\n newTS[timestamp] = query.data[query.alias][\"\"][key];\n })\n return newTS;\n }\n\n // Normalize timestamp data\n xMeasure.data[xMeasure.alias][\"\"] = normalizeTimestampKeys(xMeasure);\n yMeasure.data[yMeasure.alias][\"\"] = normalizeTimestampKeys(yMeasure);\n if (rMeasure) {\n rMeasure.data[rMeasure.alias][\"\"] = normalizeTimestampKeys(rMeasure);\n measureTypes.R_MEASURE_TYPE = 'avg' in rMeasure.measureTypes ? rMeasure.measureTypes['avg'] : rMeasure.measureTypes[0]\n }\n\n // For each timestamp in X data mix measures of other series\n Object.keys(xMeasure.data[xMeasure.alias][\"\"]).forEach((key) => {\n if (key in yMeasure.data[yMeasure.alias][\"\"]) {\n let measures = {}\n\n measures[measureNames.X_MEASURE] = xMeasure.data[xMeasure.alias][\"\"][key][measureTypes.X_MEASURE_TYPE];\n measures[measureNames.Y_MEASURE] = yMeasure.data[yMeasure.alias][\"\"][key][measureTypes.Y_MEASURE_TYPE];\n\n // Add optional R measure\n if (rMeasure != null && key in rMeasure.data[rMeasure.alias][\"\"]) {\n measures[measureNames.R_MEASURE] = rMeasure.data[rMeasure.alias][\"\"][key][measureTypes.R_MEASURE_TYPE];\n }\n\n // Discard timestamps with null valued measures\n if (xMeasure.data[xMeasure.alias][\"\"][key][measureTypes.X_MEASURE_TYPE] && yMeasure.data[yMeasure.alias][\"\"][key][measureTypes.Y_MEASURE_TYPE]) {\n if (rMeasure != null) {\n if (key in rMeasure.data[rMeasure.alias][\"\"] && rMeasure.data[rMeasure.alias][\"\"][key][measureTypes.R_MEASURE_TYPE])\n scatterData[dataTitle][\"\"][key] = measures;\n }\n else {\n scatterData[dataTitle][\"\"][key] = measures;\n }\n }\n }\n });\n return scatterData;\n }\n\n static getScatterPlotMeasureNames(chartData: any, scatterMeasures: any) {\n let uniqueNameMap = {}\n\n let xMeasureName = chartData[scatterMeasures.X_MEASURE].alias + \" \" + chartData[scatterMeasures.X_MEASURE].additionalFields.Variable +\n (chartData[scatterMeasures.X_MEASURE].timeShift == \"\" ? \"\" : \" \" + chartData[scatterMeasures.X_MEASURE].timeShift);\n uniqueNameMap[xMeasureName] = 1;\n\n let yMeasureName = chartData[scatterMeasures.Y_MEASURE].alias + \" \" + chartData[scatterMeasures.Y_MEASURE].additionalFields.Variable +\n (chartData[scatterMeasures.Y_MEASURE].timeShift == \"\" ? \"\" : \" \" + chartData[scatterMeasures.Y_MEASURE].timeShift);\n\n if (yMeasureName in uniqueNameMap) {\n let tempName = yMeasureName;\n yMeasureName += \" (\" + uniqueNameMap[yMeasureName].toString() + \")\";\n uniqueNameMap[tempName] = uniqueNameMap[tempName] + 1;\n } else {\n uniqueNameMap[yMeasureName] = 1;\n }\n\n let rMeasureName = chartData[scatterMeasures.R_MEASURE] ? chartData[scatterMeasures.R_MEASURE].alias + \" \" + chartData[scatterMeasures.R_MEASURE].additionalFields.Variable +\n (chartData[scatterMeasures.R_MEASURE].timeShift == \"\" ? \"\" : \" \" + chartData[scatterMeasures.R_MEASURE].timeShift) : null;\n\n if (rMeasureName != null) {\n if (rMeasureName in uniqueNameMap) {\n rMeasureName += \" (\" + uniqueNameMap[rMeasureName].toString() + \")\";\n }\n }\n\n return {\n X_MEASURE: xMeasureName,\n Y_MEASURE: yMeasureName,\n R_MEASURE: rMeasureName ? rMeasureName : null\n }\n }\n\n static isKeyDownAndNotEnter = (e) => {\n if (e && e.type && e.type === 'keydown') {\n let key = e.which || e.keyCode;\n if (key !== 13) {\n return true;\n } else {\n e.preventDefault();\n }\n }\n return false;\n }\n\n static getMinWarmTime(warmStoreFrom, retentionString) {\n let minWarmTime = new Date(warmStoreFrom);\n if (retentionString !== null) {\n let retentionPeriod = Utils.parseTimeInput(retentionString);\n minWarmTime = new Date(Math.max(minWarmTime.valueOf(), (Date.now() - retentionPeriod)));\n }\n return minWarmTime;\n }\n\n static standardizeTSStrings(rawData) {\n let convertedData = [];\n rawData.forEach((dG, i) => {\n let dGName = Object.keys(dG)[0];\n let dataGroup = dG[dGName];\n let convertedDataGroup = {};\n let dataGroupKeyedObject = {};\n dataGroupKeyedObject[dGName] = convertedDataGroup;\n convertedData.push(dataGroupKeyedObject);\n if (dataGroup) {\n Object.keys(dataGroup).forEach((seriesName) => {\n convertedDataGroup[seriesName] = {};\n if (dataGroup[seriesName]) {\n Object.keys(dataGroup[seriesName]).forEach((rawTS: string) => {\n let isoString: string;\n try {\n isoString = (new Date(rawTS)).toISOString();\n convertedDataGroup[seriesName][isoString] = dataGroup[seriesName][rawTS];\n } catch (RangeError) {\n console.log(`${rawTS} is not a valid ISO time`);\n }\n });\n }\n });\n }\n });\n return convertedData;\n }\n\n // takes in an availability distribution and a min and max date, returns a tuple, where the first is the new distribution \n // excluding values out of the range, and the second is all excluded values\n static cullValuesOutOfRange(availabilityDistribution: any, minDateString: string, maxDateString: string) {\n const dateZero = '0000-01-01T00:00:00Z';\n let minDateValue = new Date(minDateString).valueOf();\n let maxDateValue = new Date(maxDateString).valueOf();\n\n if (new Date(availabilityDistribution.range.from).valueOf() < minDateValue ||\n new Date(availabilityDistribution.range.to).valueOf() > maxDateValue) {\n\n let inRangeValues = {};\n let outOfRangeValues = {};\n\n let highestNotOverMaxString = dateZero;\n let highestNotOverMaxValue = (new Date(highestNotOverMaxString)).valueOf();\n let lowestAboveMinValue = Infinity;\n\n Object.keys(availabilityDistribution.distribution).forEach((bucketKey: string) => {\n let bucketValue = (new Date(bucketKey)).valueOf();\n if (bucketValue > maxDateValue || bucketValue < minDateValue) {\n outOfRangeValues[bucketKey] = availabilityDistribution.distribution[bucketKey];\n } else {\n inRangeValues[bucketKey] = availabilityDistribution.distribution[bucketKey];\n if (bucketValue > highestNotOverMaxValue) {\n highestNotOverMaxValue = bucketValue;\n highestNotOverMaxString = bucketKey;\n }\n if (bucketValue < lowestAboveMinValue) {\n lowestAboveMinValue = bucketValue\n }\n }\n });\n\n const bucketSize = this.parseTimeInput(availabilityDistribution.intervalSize);\n\n if (highestNotOverMaxString !== dateZero) { // a value exists \n let nowMillis = new Date().valueOf();\n if (highestNotOverMaxValue < nowMillis && (highestNotOverMaxValue + bucketSize) > nowMillis) {\n // the new end value was before now, but after adding bucket size, its after now\n // so we set it to now to avoid setting it to a date in the future\n availabilityDistribution.range.to = new Date(nowMillis).toISOString();\n }\n else {\n availabilityDistribution.range.to = new Date(highestNotOverMaxValue + bucketSize).toISOString();\n }\n } else {\n let rangeToValue: number = (new Date(availabilityDistribution.range.to)).valueOf();\n if (minDateValue > rangeToValue) { // entire window is to the right of distribution range\n availabilityDistribution.range.to = maxDateString;\n } else {\n let toValue = Math.min(maxDateValue + bucketSize, (new Date(availabilityDistribution.range.to)).valueOf()); //clamped to maxDateString passed in\n availabilityDistribution.range.to = (new Date(toValue)).toISOString();\n }\n }\n\n if (lowestAboveMinValue !== Infinity) { // a value exists\n availabilityDistribution.range.from = (new Date(lowestAboveMinValue)).toISOString();\n } else {\n let rangeFromValue: number = (new Date(availabilityDistribution.range.from)).valueOf();\n if (maxDateValue < (new Date(availabilityDistribution.range.from)).valueOf()) { // entire window is to the left of distribution range\n availabilityDistribution.range.from = minDateString;\n } else {\n let fromValue = Math.max(minDateValue, rangeFromValue); // clamped to minDateString passed in\n availabilityDistribution.range.from = (new Date(fromValue)).toISOString();\n }\n }\n availabilityDistribution.distribution = inRangeValues;\n return [availabilityDistribution, outOfRangeValues];\n }\n return [availabilityDistribution, {}];\n }\n\n static mergeAvailabilities(warmAvailability, coldAvailability, retentionString = null) {\n let warmStoreRange = warmAvailability.range;\n let minWarmTime = this.getMinWarmTime(warmStoreRange.from, retentionString);\n let warmStoreToMillis = new Date(warmStoreRange.to).valueOf();\n let coldStoreToMillis = new Date(coldAvailability.range.to).valueOf();\n\n // snap warm availability to cold availability if its ahead of cold\n let maxWarmTime = new Date(Math.min(warmStoreToMillis, coldStoreToMillis));\n\n let mergedAvailability = Object.assign({}, coldAvailability);\n mergedAvailability.warmStoreRange = [minWarmTime.toISOString(), maxWarmTime.toISOString()];\n if (retentionString !== null) {\n mergedAvailability.retentionPeriod = retentionString;\n }\n return mergedAvailability;\n }\n\n static languageGuess() {\n return navigator.languages && navigator.languages[0] || // Chrome / Firefox\n navigator.language; // All browsers\n }\n\n static getInstanceKey = (instance) => { // for keying instances using timeseriesid to be used data object to render hierarchy navigation\n return Utils.instanceHasEmptyTSID(instance) ? Utils.guid() : instance.timeSeriesId.map(id => id === null ? Utils.guidForNullTSID : id).join();\n }\n\n static stripNullGuid = (str) => { // for replacing guids for null tsid in alias etc. with its display string\n return str.replace(Utils.guidForNullTSID, nullTsidDisplayString);\n }\n\n static getTimeSeriesIdString = (instance) => { // for arialabel and title \n return instance.timeSeriesId.map(id => id === null ? nullTsidDisplayString : id).join(', ');\n }\n\n static getTimeSeriesIdToDisplay = (instance, emptyDisplayString) => { // time series id to be shown in UI\n return Utils.instanceHasEmptyTSID(instance) ? emptyDisplayString : instance.timeSeriesId.map(id => id === null ? Utils.guidForNullTSID : id).join(', ');\n }\n\n static getHighlightedTimeSeriesIdToDisplay = (instance) => { // highlighted time series ids (including hits) to be shown in UI\n return instance.highlights?.timeSeriesId.map((id, idx) => instance.timeSeriesId[idx] === null ? Utils.guidForNullTSID : id).join(', ');\n }\n\n static instanceHasEmptyTSID = (instance) => {\n return !instance.timeSeriesId || instance.timeSeriesId.length === 0;\n }\n\n // appends dom elements of stripped strings including hits (for instance search results) and mono classed spans (for null tsid)\n static appendFormattedElementsFromString = (targetElem, str, options: { additionalClassName?: string, inSvg?: boolean, splitByTag?: string } = null) => {\n interface FormattedElemData {\n str: string;\n isHit?: boolean;\n isNull?: boolean;\n };\n\n let data: Array<FormattedElemData> = [];\n let splitByNullGuid = (str): Array<any> => {\n let data = [];\n let splittedByNull = str.split(Utils.guidForNullTSID);\n splittedByNull.forEach((s, i) => {\n if (i === 0) {\n if (s) {\n data.push({ str: s });\n }\n } else {\n data.push({ str: nullTsidDisplayString, isNull: true });\n if (s) {\n data.push({ str: s });\n }\n }\n });\n return data;\n }\n\n let splitByTag = options && options.splitByTag ? options.splitByTag : 'hit';\n let splittedByHit = str.split(`<${splitByTag}>`);\n splittedByHit.forEach((s, i) => {\n if (i === 0) {\n data = data.concat(splitByNullGuid(s));\n } else {\n let splittedByHitClose = s.split(`</${splitByTag}>`);\n data.push({ str: splittedByHitClose[0], isHit: true });\n data = data.concat(splitByNullGuid(splittedByHitClose[1]));\n }\n });\n\n let additionalClassName = options && options.additionalClassName ? options.additionalClassName : '';\n let children = targetElem.selectAll('.tsi-formattedChildren').data(data);\n children.enter()\n .append(d =>\n d.isHit ? document.createElement('mark')\n : options && options.inSvg ? document.createElementNS('http://www.w3.org/2000/svg', 'tspan')\n : document.createElement('span')\n )\n .classed('tsi-formattedChildren', true)\n .merge(children)\n .classed('tsi-baseMono', d => d.isNull)\n .classed(additionalClassName, options && options.additionalClassName)\n .text(d => d.str);\n children.exit().remove();\n }\n\n static escapedTsidForExactSearch = (tsid: string) => {\n let escapedTsid = tsid || '';\n if (tsid) {\n CharactersToEscapeForExactSearchInstance.forEach(c => { //escaping some special characters with + for exact instance search in quotes\n escapedTsid = escapedTsid.split(c).join('+');\n });\n }\n return escapedTsid;\n }\n\n static memorySizeOf(obj) {\n let bytes = 0;\n\n let sizeOf = (obj) => {\n if (obj !== null && obj !== undefined) {\n switch (typeof obj) {\n case 'number':\n bytes += 8;\n break;\n case 'string':\n bytes += obj.length * 2;\n break;\n case 'boolean':\n bytes += 4;\n break;\n case 'object':\n let objClass = Object.prototype.toString.call(obj).slice(8, -1);\n if (objClass === 'Object' || objClass === 'Array') {\n for (let key in obj) {\n if (!obj.hasOwnProperty(key)) { continue; }\n sizeOf(key);\n sizeOf(obj[key]);\n }\n } else {\n bytes += obj.toString().length * 2;\n }\n break;\n }\n }\n return bytes;\n };\n\n return sizeOf(obj);\n }\n}","class Strings {\n\n private stringValueDefaults = {\n \"Last 30 mins\": \"Last 30 mins\",\n \"Last Hour\": \"Last Hour\",\n \"Last 2 Hours\": \"Last 2 Hours\",\n \"Last 4 Hours\": \"Last 4 Hours\",\n \"Last 12 Hours\": \"Last 12 Hours\",\n \"Last 24 Hours\": \"Last 24 Hours\",\n \"Last 7 Days\": \"Last 7 Days\",\n \"Last 30 Days\": \"Last 30 Days\",\n \"Custom\": \"Custom\",\n \"Timeframe\": \"Timeframe\",\n \"Save\": \"Save\",\n \"timezone\": \"timezone\",\n \"start\": \"start\",\n \"end\": \"end\",\n \"Latest\": \"Latest\",\n \"Show ellipsis menu\": \"Show ellipsis menu\",\n \"Hide ellipsis menu\": \"Hide ellipsis menu\",\n \"Download as CSV\": \"Download as CSV\",\n \"Toggle all columns\": \"Toggle all columns\",\n \"All Columns\": \"All Columns\",\n \"only\": \"only\",\n \"Invalid Date\": \"Invalid Date\",\n \"Stack/Unstack Bars\": \"Stack/Unstack Bars\",\n \"Stack bars\": \"Stack bars\",\n \"Unstack bars\": \"Unstack bars\",\n \"No filter results\": \"No filter results\",\n \"All hierarchies\": \"All hierarchies\",\n \"Selected\": \"Selected\",\n \"toggle visibility for\": \"toggle visibility for\",\n \"Series type selection for\": \"Series type selection for\",\n \"shifted\": \"shifted\",\n \"Click to drop marker\": \"Click to drop marker\",\n \"drag to reposition\": \"drag to reposition\",\n \"Delete marker at\": \"Delete marker at\",\n \"set axis state to\": \"set axis state to\",\n \"Drop a Marker\": \"Drop a Marker\",\n \"Search Time Series Instances\": \"Search Time Series Instances\",\n \"No results\": \"No results\",\n \"No instances\": \"No instances found\",\n \"No search result\": \"No instances found for entered search term.\",\n \"Instance not found\": \"Instance not found under selected hierarchy.\",\n \"Show more\": \"Show more\",\n \"No description\": \"No description\",\n \"Time Series ID\": \"Time Series ID\",\n \"Currently displayed time is\": \"Currently displayed time is\",\n \"Left arrow to go back in time\": \"Left arrow to go back in time\",\n \"right arrow to go forward\": \"right arrow to go forward\",\n \"Local\": \"Local\",\n \"Display Grid\": \"Display Grid\",\n \"Previous Month\": \"Previous Month\",\n \"Next Month\": \"Next Month\",\n \"Unassigned Time Series Instances\": \"Unassigned Time Series Instances\",\n \"Search globally\": \"Search globally\",\n \"Lookup globally\": \"Lookup globally\",\n \"Show More Instances\": \"Show more instances\",\n \"Show More Hierarchies\": \"Show more hierarchies\",\n \"Add to Filter Path\": \"Add to Filter Path\",\n \"Empty\": \"Empty\",\n \"Date/Time\": \"Date/Time\",\n \"show series\": \"show series\",\n \"hide series\": \"hide series\",\n \"in group\": \"in group\",\n \"show group\": \"show group\",\n \"hide group\": \"hide group\",\n \"Use the arrow keys to navigate the values of each cell\": \"Use the arrow keys to navigate the values of each cell\",\n \"A grid of values\": \"A grid of values\",\n \"close grid\": \"close grid\",\n \"column header for date\": \"column header for date\",\n \"row header for\": \"row header for\",\n \"values for cell at\": \"values for cell at\",\n \"no values at\": \"no values at\",\n \"and\": \"and\",\n \"are\": \"are\",\n \"timezone selection\": \"timezone selection\",\n \"Start time input\": \"Start time input\",\n \"End time input\": \"End time input\",\n \"*\": \"*\",\n \"snap end time to latest\": \"snap end time to latest\",\n \"zoom in\": \"zoom in\",\n \"zoom out\": \"zoom out\",\n \"A line chart zoom in\": \"A line chart zoom in\",\n \"A line chart zoom out\": \"A line chart zoom out\",\n \"select quick time of\": \"select quick time of\",\n \"a time selection control dialog\": \"a time selection control dialog.\",\n \"a button to launch a time selection dialog current selected time is \": \"a button to launch a time selection dialog. current selected time is \",\n \"No color\": \"No color\",\n \"Change y-axis type\": \"Change y-axis type\",\n \"Show/Hide values\": \"Show/Hide values\",\n \"Line chart\": \"Line chart\",\n \"Bar chart\": \"Bar chart\",\n \"Heatmap\": \"Heatmap\",\n \"Pie chart\": \"Pie chart\",\n \"Scatter plot\": \"Scatter plot\",\n \"Select color\": \"Select color\",\n \"Search suggestion instruction\": \"When autocomplete results are available use up and down arrows to review and enter to select\",\n \"Search suggestions available\": \" results available, keyboard users, use up and down arrows to review and enter to select.\",\n \"Hierarchy list\": \"Hierarchy list\",\n \"event in series\": \"Event in series\",\n \"at time\": \"at time\",\n \"measure with key\": \"measure with key\",\n \"and value\": \"and value\",\n \"Looking for\": \"Looking for\",\n \"Hierarchy error\": \"Error occured! Refreshing hierarchy...\",\n \"Failed to get token\": \"Failed to get token\",\n \"Error in hierarchy navigation\": \"Error in hierarchy navigation\",\n \"Failed to load types for navigation\": \"Failed to load types for navigation\",\n \"Failed to load hierarchies for navigation\": \"Failed to load hierarchies for navigation\",\n \"Failed to complete search\": \"Failed to complete search\",\n \"Failed to get instance details\": \"Failed to get instance details\",\n \"Add\": \"Add\",\n \"Search\": \"Search\",\n \"Marker\": \"Marker\",\n \"Start at\": \"Start at\",\n \"Dismiss\": \"Dismiss\"\n };\n \n private stringValues: any = {};\n\n\tconstructor(){\n this.stringValues = this.stringValueDefaults;\n }\n\n public mergeStrings (stringKeyValues: any) {\n Object.keys(this.stringValues).forEach((stringKey: string) => {\n if (stringKey in stringKeyValues) {\n this.stringValues[stringKey] = stringKeyValues[stringKey];\n }\n });\n }\n\n public getString (stringKey: string) {\n if (stringKey in this.stringValues) {\n return this.stringValues[stringKey];\n }\n return stringKey;\n }\n\n public toObject () {\n return this.stringValues;\n }\n\n}\n\nexport {Strings}\n\n\n\n","import * as d3 from 'd3';\nimport Utils from '../utils';\nimport { Strings } from './Strings';\nimport { DefaultHierarchyNavigationOptions } from '../constants/Constants';\nimport { InterpolationFunctions, YAxisStates } from '../constants/Enums';\nimport { HorizontalMarker } from '../utils/Interfaces';\n\n// Interfaces\ninterface swimLaneOption {\n yAxisType: YAxisStates,\n label?: string,\n onClick?: (lane: number) => any,\n collapseEvents?: string,\n horizontalMarkers?: Array<HorizontalMarker>\n}\n\nclass ChartOptions {\n public aggTopMargin: number; // margin on top of each aggregate line(s)\n public arcWidthRatio: number; // number between 0 and 1 which determines how thic the pie chart arc is\n public autoTriggerBrushContextMenu: boolean; // whether the brush context menu gets triggered on brush mouse up\n public availabilityLeftMargin: number; // number which sets the left margin of the availability chart\n public bucketSizeMillis: number; // desired bucket size, expressed in milliseconds, that will likely be rounded down the the nearest neat bucket size\n public brushClearable: boolean; // whether to keep the brush selected region upon clear and non-selection of a new region\n public brushContextMenuActions: Array<any>; // pairs of names/actions for context menu for the brush\n public brushHandlesVisible: boolean; // whether handles on the brush are visible\n public brushMoveAction: any; // action fired when the brush moved\n public brushMoveEndAction: any; // action fired at the end of a mouse movement\n public brushRangeVisible: boolean; // whether the brush duration label is visible\n public canDownload: boolean; // whether chart's ellipsis menu contains download button\n public color: string; // color of the time selection ghost in availability chart\n public colors: Array<string>; // array of colors to select in the color picker\n public dateLocale: string; //moment locale specifying the location specific format for dates, along with translations for month and day names\n public defaultAvailabilityZoomRangeMillis: number; // default max period of time shown in the zoomed region of the availability chart\n public defaultColor: any; //default initial color for the color picker - can be null\n public dTPIsModal: boolean; //whether date time picker should behave like a modal\n public ellipsisItems: Array<any>; //objects reprenting options in the ellipsis menu \n public focusHidden: boolean; // whether focus element is hidden in chart\n public fromChart: boolean; // whether a component is a subcomponent of another one or is a standalone\n public grid: boolean; // whether the chart includes a grid and grid button\n public hideChartControlPanel: boolean; // whether to hide the panel with chart control buttons\n public includeDots: boolean; // whether the linechart uses dots for values\n public includeEnvelope: boolean; //whether to include an area showing min/max boundaries in the line chart\n public includeTimezones: boolean; //whether timezone dropdown is included in dateTimePicker\n public initialValue: any; // a value used to hydrate the initial state of the chart\n public interpolationFunction: any; //which interpolation function used for line chart lines\n public isArea: boolean; // whether lines in LineChart are also areas\n public isColorValueHidden: boolean; // switch to show/hide hex value of the color right next to the color in the color picker button \n public isCompact: boolean; // whether availability chart is in compact or expanded mode\n public isTemporal: boolean; // whether scatter plot has temporal slider\n public is24HourTime: boolean; // whether time is displayed in 24, or 12 hour time with am/pm\n public keepBrush: boolean; // whether to keep the brush selected region upon re render\n public keepSplitByColor: boolean; //whether to keep the split By colors when state is updated\n public labelSeriesWithMarker: boolean; //whether to add a marker at the right side of line chart with label for each series\n public legend: string; //state of the legend: shown, hidden, or compact\n public markers: Array<any>; // tuple of millisecond timestamps and labels per marker, listed as any to support back compatibility with when these were just timestamp millis\n public maxBuckets: number // max number of buckets in availability chart\n public minBrushWidth: number // minimum possible width of brush in linechart\n public minutesForTimeLabels: boolean; // whether time labels forced to minute granularity\n public noAnimate: boolean; // whether animations happen on state change\n public numberOfColors: number; // number of colors to show in the color picker grid\n public updateInterval: number; // frequency with which the component should trigger updates\n public offset: any; // offset for all timestamps in minutes from UTC\n public isRelative: any; // \n public currentQuickTime: any; // \n\n public onClick: (d3Event: any) => void; // for handling click, e.g. clicking on color picker\n public onInput: (searchText: string, event) => void; // for handling after input actions in ModelAutocomplete\n public onInstanceClick: (instance: any) => any; // for model search, takes an instance and returns an object of context menu actions\n public onKeydown: (d3Event: any, awesompleteObject: any) => void; // for handling keydown actions in ModelAutocomplete\n public onMarkersChange: (markers: Array<number>) => any; //triggered when a marker is either added or removed in the linechart\n public onMouseout: () => void;\n public onMouseover: (aggKey: string, splitBy: string) => void;\n public onSelect: (value: any) => void; // for handling selection action with a parameter passed in a component, e.g. to pass color value string while color selection with color picker component\n public onSticky: (aggKey: string, splitBy: string) => void;\n public onUnsticky: (aggKey: string, splitBy: string) => void;\n public preserveAvailabilityState: boolean; // whether state in availability chart is saved or blown away on render\n public persistDateTimeButtonRange: boolean; // whether the date time button range component is persisted in compact availability chart\n public scaledToCurrentTime: boolean; //whether slider base component's scale is based on current time's values (or all values)\n public spMeasures: Array<string>; // measures passed into scatter plot to plot on axis\n public scatterPlotRadius: Array<number>; // Range of values to use for radius measure range\n public spAxisLabels: Array<string>; // X and Y axis labels for scatter plot\n public singleLineXAxisLabel: boolean; // whether x axis time labels are on a single line (else split into two lines)\n public snapBrush: boolean; // whether to snap linechart brush to closest value\n public stacked: boolean; //whether bars in barchart are stacked\n public shouldSticky: boolean; // whether sticky is triggered in the linechart when stickySeries or unStickySeries is called\n public strings: any; // passed in key value pairs of strings -> strings\n public suppressResizeListener: boolean; // whether a component's resize function is ignored. Applies to components which draw an SVG\n public swimLaneOptions: { [key: number]: swimLaneOption } | null; // mapping of swim lane number to information about that swimlane, including axis type\n public theme: string; // theme for styling chart, light or dark\n public timeFrame: any; // from and to to specify range of an event or state series\n public timestamp: any; //For components with a slider, this is the selected timestamp\n public tooltip: boolean; // whether tooltip is visible\n public throttleSlider: boolean; // whether slider is throttled to only fire on mouseup vs slider move\n public warmStoreRange: Array<string>; //start and optional end timestamp representing the availability chart region within warm store. If no second value, endTime is assumed to be end of warm range\n public xAxisHidden: boolean; // whether xAxis is hidden in chart\n public xAxisTimeFormat: (d, i, isFirst, isLast) => {}; //takes in a date string, tick index, isFirst, and isLast, outputs a moment.js style date format string\n public yAxisHidden: boolean; // whether yAxis is hidden in chart\n public yAxisState: string; // state of the y axis in line chart, either: stacked, shared, overlap\n public yExtent: any; // [min, max] of range of y values in chart\n public zeroYAxis: boolean; // whether bar chart's bar's bottom (or top if negative) is zero\n public withContextMenu: boolean; // whether the hierarchy uses a context menu when you click on a parent of leaf nodes\n public hierarchyOptions: any; // hierarchy navigation related options for search api\n public onError: (titleKey, messageKey, xhr) => any;\n public timeSeriesIdProperties: Array<{ name: string, type: any }>; // time series id properties to highlight and prioritize in events table\n\n public stringsInstance: Strings = new Strings();\n\n private getInterpolationFunction(interpolationName: string) {\n if (interpolationName == InterpolationFunctions.CurveLinear)\n return d3.curveLinear;\n if (interpolationName == InterpolationFunctions.CurveStep)\n return d3.curveStep;\n if (interpolationName == InterpolationFunctions.CurveStepBefore)\n return d3.curveStepBefore;\n if (interpolationName == InterpolationFunctions.CurveStepAfter)\n return d3.curveStepAfter;\n if (interpolationName == InterpolationFunctions.CurveBasis)\n return d3.curveBasis;\n if (interpolationName == InterpolationFunctions.CurveCardinal)\n return d3.curveCardinal;\n if (interpolationName == InterpolationFunctions.CurveMonotoneX)\n return d3.curveMonotoneX;\n if (interpolationName == InterpolationFunctions.CurveCatmullRom)\n return d3.curveCatmullRom;\n // default\n return d3.curveMonotoneX;\n }\n\n setOptions(chartOptionsObj) {\n chartOptionsObj = !chartOptionsObj ? {} : chartOptionsObj\n this.grid = this.mergeValue(chartOptionsObj, 'grid', false);\n this.preserveAvailabilityState = this.mergeValue(chartOptionsObj, 'preserveAvailabilityState', false);\n this.persistDateTimeButtonRange = this.mergeValue(chartOptionsObj, 'persistDateTimeButtonRange', false);\n this.isCompact = this.mergeValue(chartOptionsObj, 'isCompact', false);\n this.keepBrush = this.mergeValue(chartOptionsObj, 'keepBrush', false);\n this.isArea = this.mergeValue(chartOptionsObj, 'isArea', false);\n this.noAnimate = this.mergeValue(chartOptionsObj, 'noAnimate', false);\n this.updateInterval = this.mergeValue(chartOptionsObj, 'updateInterval', 0);\n this.minutesForTimeLabels = this.mergeValue(chartOptionsObj, 'minutesForTimeLabels', false);\n this.aggTopMargin = this.mergeValue(chartOptionsObj, 'aggTopMargin', 12);\n this.color = this.mergeValue(chartOptionsObj, 'color', null);\n this.maxBuckets = this.mergeValue(chartOptionsObj, 'maxBuckets', 500);\n this.yAxisHidden = this.mergeValue(chartOptionsObj, 'yAxisHidden', false);\n this.focusHidden = this.mergeValue(chartOptionsObj, 'focusHidden', false);\n this.singleLineXAxisLabel = this.mergeValue(chartOptionsObj, 'singleLineXAxisLabel', false);\n this.legend = this.mergeValue(chartOptionsObj, 'legend', 'shown');\n this.tooltip = this.mergeValue(chartOptionsObj, 'tooltip', false);\n this.throttleSlider = this.mergeValue(chartOptionsObj, 'throttleSlider', false);\n this.snapBrush = this.mergeValue(chartOptionsObj, 'snapBrush', false);\n this.minBrushWidth = this.mergeValue(chartOptionsObj, 'minBrushWidth', 0);\n this.theme = this.mergeValue(chartOptionsObj, 'theme', 'dark');\n this.keepSplitByColor = this.mergeValue(chartOptionsObj, 'keepSplitByColor', false);\n this.brushContextMenuActions = this.mergeValue(chartOptionsObj, 'brushContextMenuActions', null);\n this.timeFrame = this.mergeValue(chartOptionsObj, 'timeFrame', null);\n this.fromChart = this.mergeValue(chartOptionsObj, 'fromChart', false);\n this.timestamp = this.mergeValue(chartOptionsObj, 'timestamp', null);\n this.stacked = this.mergeValue(chartOptionsObj, 'stacked', false);\n this.scaledToCurrentTime = this.mergeValue(chartOptionsObj, 'scaledToCurrentTime', false);\n this.zeroYAxis = this.mergeValue(chartOptionsObj, 'zeroYAxis', true);\n this.arcWidthRatio = this.mergeValue(chartOptionsObj, 'arcWidthRatio', 0);\n this.bucketSizeMillis = this.mergeValue(chartOptionsObj, 'bucketSizeMillis', 0);\n this.brushClearable = this.mergeValue(chartOptionsObj, 'brushClearable', true);\n this.brushMoveAction = this.mergeValue(chartOptionsObj, 'brushMoveAction', () => { });\n this.brushMoveEndAction = this.mergeValue(chartOptionsObj, 'brushMoveEndAction', () => { });\n this.yAxisState = this.mergeValue(chartOptionsObj, 'yAxisState', 'stacked');\n this.xAxisHidden = this.mergeValue(chartOptionsObj, 'xAxisHidden', false);\n this.suppressResizeListener = this.mergeValue(chartOptionsObj, 'suppressResizeListener', false);\n this.onMouseout = this.mergeValue(chartOptionsObj, 'onMouseout', () => { });\n this.onMouseover = this.mergeValue(chartOptionsObj, 'onMouseover', () => { });\n this.onSticky = this.mergeValue(chartOptionsObj, 'onSticky', () => { });\n this.onUnsticky = this.mergeValue(chartOptionsObj, 'onUnsticky', () => { });\n this.onKeydown = this.mergeValue(chartOptionsObj, 'onKeydown', () => { });\n this.onInput = this.mergeValue(chartOptionsObj, 'onInput', () => { });\n this.brushHandlesVisible = this.mergeValue(chartOptionsObj, 'brushHandlesVisible', false);\n this.hideChartControlPanel = this.mergeValue(chartOptionsObj, 'hideChartControlPanel', false);\n this.offset = this.mergeValue(chartOptionsObj, 'offset', 0);\n this.is24HourTime = this.mergeValue(chartOptionsObj, 'is24HourTime', true);\n this.includeTimezones = this.mergeValue(chartOptionsObj, 'includeTimezones', true);\n this.availabilityLeftMargin = this.mergeValue(chartOptionsObj, 'availabilityLeftMargin', 60);\n this.onInstanceClick = this.mergeValue(chartOptionsObj, 'onInstanceClick', () => { return {} });\n this.interpolationFunction = this.getInterpolationFunction(this.mergeValue(chartOptionsObj, 'interpolationFunction', InterpolationFunctions.None));\n this.includeEnvelope = this.mergeValue(chartOptionsObj, 'includeEnvelope', false);\n this.canDownload = this.mergeValue(chartOptionsObj, 'canDownload', true);\n this.withContextMenu = this.mergeValue(chartOptionsObj, 'withContextMenu', false);\n this.autoTriggerBrushContextMenu = this.mergeValue(chartOptionsObj, 'autoTriggerBrushContextMenu', false);\n this.includeDots = this.mergeValue(chartOptionsObj, 'includeDots', false);\n this.yExtent = this.mergeValue(chartOptionsObj, 'yExtent', null);\n this.ellipsisItems = this.mergeValue(chartOptionsObj, 'ellipsisItems', []);\n this.markers = Utils.getValueOrDefault(chartOptionsObj, 'markers', null); // intentionally not mergeValue\n this.onMarkersChange = this.mergeValue(chartOptionsObj, 'onMarkersChange', (markers) => { });\n this.spMeasures = this.mergeValue(chartOptionsObj, 'spMeasures', null);\n this.scatterPlotRadius = this.mergeValue(chartOptionsObj, 'scatterPlotRadius', [4, 10]);\n this.spAxisLabels = this.mergeValue(chartOptionsObj, 'spAxisLabels', null);\n this.isTemporal = this.mergeValue(chartOptionsObj, \"isTemporal\", false);\n this.xAxisTimeFormat = this.mergeValue(chartOptionsObj, 'xAxisTimeFormat', null);\n this.brushRangeVisible = this.mergeValue(chartOptionsObj, 'brushRangeVisible', true);\n this.strings = this.mergeStrings(Utils.getValueOrDefault(chartOptionsObj, 'strings', {}));\n this.dateLocale = this.mergeValue(chartOptionsObj, 'dateLocale', Utils.languageGuess());\n this.defaultAvailabilityZoomRangeMillis = this.mergeValue(chartOptionsObj, 'defaultAvailabilityZoomRangeMillis', null);\n this.warmStoreRange = this.mergeValue(chartOptionsObj, 'warmStoreRange', null);\n this.initialValue = this.mergeValue(chartOptionsObj, 'initialValue', null);\n this.dTPIsModal = this.mergeValue(chartOptionsObj, 'dTPIsModal', false);\n this.defaultColor = this.mergeValue(chartOptionsObj, 'defaultColor', null);\n this.numberOfColors = this.mergeValue(chartOptionsObj, 'numberOfColors', 15);\n this.colors = Utils.generateColors(this.numberOfColors, chartOptionsObj['colors'] ? chartOptionsObj['colors'] : null);\n this.isColorValueHidden = this.mergeValue(chartOptionsObj, 'isColorValueHidden', false);\n this.onClick = this.mergeValue(chartOptionsObj, 'onClick', () => { });\n this.onSelect = this.mergeValue(chartOptionsObj, 'onSelect', () => { });\n this.swimLaneOptions = this.mergeValue(chartOptionsObj, 'swimLaneOptions', null);\n this.hierarchyOptions = this.mergeValue(chartOptionsObj, 'hierarchyOptions', Object.assign({}, DefaultHierarchyNavigationOptions));\n this.labelSeriesWithMarker = this.mergeValue(chartOptionsObj, 'labelSeriesWithMarker', false);\n this.onError = this.mergeValue(chartOptionsObj, 'onError', (titleKey, messageKey, xhr) => { });\n this.timeSeriesIdProperties = Utils.getValueOrDefault(chartOptionsObj, 'timeSeriesIdProperties', []);\n this.shouldSticky = this.mergeValue(chartOptionsObj, 'shouldSticky', true);\n this.isRelative = this.mergeValue(chartOptionsObj, 'isRelative', false);\n this.currentQuickTime = this.mergeValue(chartOptionsObj, 'currentQuickTime', 0);\n }\n\n private mergeStrings(strings) {\n this.stringsInstance.mergeStrings(strings);\n return this.stringsInstance.toObject();\n }\n\n private mergeValue(chartOptionsObj, propertyName, defaultValue) {\n if (this[propertyName] !== undefined && chartOptionsObj[propertyName] === undefined) {\n return this[propertyName];\n }\n return Utils.getValueOrDefault(chartOptionsObj, propertyName, defaultValue);\n }\n\n public toObject() {\n return {\n grid: this.grid,\n preserveAvailabilityState: this.preserveAvailabilityState,\n persistDateTimeButtonRange: this.persistDateTimeButtonRange,\n isCompact: this.isCompact,\n keepBrush: this.keepBrush,\n isArea: this.isArea,\n noAnimate: this.noAnimate,\n minutesForTimeLabels: this.minutesForTimeLabels,\n aggTopMargin: this.aggTopMargin,\n color: this.color,\n maxBuckets: this.maxBuckets,\n yAxisHidden: this.yAxisHidden,\n focusHidden: this.focusHidden,\n singleLineXAxisLabel: this.singleLineXAxisLabel,\n legend: this.legend,\n tooltip: this.tooltip,\n throttleSlider: this.throttleSlider,\n snapBrush: this.snapBrush,\n minBrushWidth: this.minBrushWidth,\n theme: this.theme,\n keepSplitByColor: this.keepSplitByColor,\n brushContextMenuActions: this.brushContextMenuActions,\n timeFrame: this.timeFrame,\n fromChart: this.fromChart,\n timestamp: this.timestamp,\n stacked: this.stacked,\n scaledToCurrentTime: this.scaledToCurrentTime,\n zeroYAxis: this.zeroYAxis,\n arcWidthRatio: this.arcWidthRatio,\n brushClearable: this.brushClearable,\n brushMoveAction: this.brushMoveAction,\n yAxisState: this.yAxisState,\n xAxisHidden: this.xAxisHidden,\n suppressResizeListener: this.suppressResizeListener,\n brushMoveEndAction: this.brushMoveEndAction,\n onMouseout: this.onMouseout,\n onMouseover: this.onMouseover,\n onSticky: this.onSticky,\n onUnsticky: this.onUnsticky,\n onKeydown: this.onKeydown,\n onInput: this.onInput,\n brushHandlesVisible: this.brushHandlesVisible,\n hideChartControlPanel: this.hideChartControlPanel,\n offset: this.offset,\n is24HourTime: this.is24HourTime.valueOf,\n includeTimezones: this.includeTimezones,\n availabilityLeftMargin: this.availabilityLeftMargin,\n onInstanceClick: this.onInstanceClick,\n interpolationFunction: this.interpolationFunction,\n includeEnvelope: this.includeEnvelope,\n canDownload: this.canDownload,\n withContextMenu: this.withContextMenu,\n autoTriggerBrushContextMenu: this.autoTriggerBrushContextMenu,\n includeDots: this.includeDots,\n yExtent: this.yExtent,\n ellipsisItems: this.ellipsisItems,\n markers: this.markers,\n onMarkersChange: this.onMarkersChange,\n xAxisTimeFormat: this.xAxisTimeFormat,\n spMeasures: this.spMeasures,\n scatterPlotRadius: this.scatterPlotRadius,\n spAxisLabels: this.spAxisLabels,\n brushRangeVisible: this.brushRangeVisible,\n strings: this.strings.toObject(),\n dateLocale: this.dateLocale,\n defaultAvailabilityZoomRangeMillis: this.defaultAvailabilityZoomRangeMillis,\n warmStoreRange: this.warmStoreRange,\n initialValue: this.initialValue,\n bucketSizeMillis: this.bucketSizeMillis,\n updateInterval: this.updateInterval,\n dTPIsModal: this.dTPIsModal,\n numberOfColors: this.numberOfColors,\n defaultColor: this.defaultColor,\n isColorValueHidden: this.isColorValueHidden,\n onClick: this.onClick,\n onSelect: this.onSelect,\n colors: this.colors,\n swimLaneOptions: this.swimLaneOptions,\n hierarchyOptions: this.hierarchyOptions,\n onError: this.onError,\n labelSeriesWithMarker: this.labelSeriesWithMarker,\n timeSeriesIdProperties: this.timeSeriesIdProperties,\n shouldSticky: this.shouldSticky,\n isRelative: this.isRelative,\n currentQuickTime: this.currentQuickTime\n }\n }\n}\n\nexport { ChartOptions }","import Utils from \"../utils\";\nimport { TooltipMeasureFormat } from \"./../constants/Enums\";\nimport { ChartOptions } from \"../models/ChartOptions\";\n\nclass Component {\n\tpublic renderTarget;\n\tprotected currentTheme: string;\n\treadonly TRANSDURATION = (window.navigator.userAgent.indexOf(\"Edge\") > -1) ? 0 : 400;\n\n\tpublic usesSeconds: boolean = false;\n\tpublic usesMillis: boolean = false;\n\n\tprotected chartOptions: ChartOptions = new ChartOptions();\n\n\tprotected getString(str: string) {\n\t\treturn this.chartOptions.stringsInstance.getString(str);\n\t}\n\n\tconstructor(renderTarget: Element) {\n\t\tthis.renderTarget = renderTarget;\n\t}\n\n\tprotected themify(targetElement: any, theme: string) {\n\t\tvar theme = Utils.getTheme(theme);\n\t\ttargetElement?.classed(this.currentTheme, false);\n\t\ttargetElement?.classed('tsi-light', false);\n\t\ttargetElement?.classed('tsi-dark', false);\n\t\ttargetElement?.classed(theme, true);\n\t\tthis.currentTheme = theme;\n\t}\n\n\tprotected teardropD = (width, height) => {\n\t\treturn `M${width / 2} ${height / 14} \n Q${width / 1.818} ${height / 6.17} ${width / 1.2} ${height / 2.33}\n A${width / 2.35} ${width / 2.35} 0 1 1 ${width / 6} ${width / 2.33}\n Q${width / 2.22} ${height / 6.18} ${width / 2} ${height / 14}z`;\n\t}\n\n\tprotected tooltipFormat(d, text, measureFormat: TooltipMeasureFormat, xyrMeasures = null) {\n\n\t}\n\n\tprotected createTooltipSeriesInfo(d, group, cDO) {\n\t\tlet title = group.append('h2').attr('class', 'tsi-tooltipGroupName tsi-tooltipTitle');\n\t\tUtils.appendFormattedElementsFromString(title, d.aggregateName);\n\n\t\tif (d.splitBy && d.splitBy != \"\") {\n\t\t\tlet splitBy = group.append('p')\n\t\t\t\t.attr('class', 'tsi-tooltipSeriesName tsi-tooltipSubtitle');\n\t\t\tUtils.appendFormattedElementsFromString(splitBy, d.splitBy);\n\t\t}\n\n\t\tif (cDO.variableAlias && cDO.isVariableAliasShownOnTooltip) {\n\t\t\tgroup.append('p')\n\t\t\t\t.text(cDO.variableAlias)\n\t\t\t\t.attr('class', 'tsi-tooltipVariableAlias tsi-tooltipSubtitle');\n\t\t}\n\t}\n\n}\nexport { Component }\n","import * as d3 from 'd3';\nimport './Legend.scss';\nimport Utils from \"../../utils\";\nimport { DataTypes, EventElementTypes } from \"./../../constants/Enums\";\nimport { Component } from \"./../../interfaces/Component\";\nimport { ChartComponentData } from '../../models/ChartComponentData';\n\nconst NUMERICSPLITBYHEIGHT = 44;\nconst NONNUMERICSPLITBYHEIGHT = 24;\n\nclass Legend extends Component {\n public drawChart: any;\n public legendElement: any;\n public legendWidth: number;\n private legendState: string;\n private stickySeriesAction: any;\n private labelMouseover: any;\n private labelMouseout: any;\n private svgSelection: any;\n private chartComponentData: ChartComponentData;\n\n constructor(drawChart: any, renderTarget: Element, legendWidth: number) {\n super(renderTarget);\n this.drawChart = drawChart;\n this.legendWidth = legendWidth;\n this.legendElement = d3.select(renderTarget).insert(\"div\", \":first-child\")\n .attr(\"class\", \"tsi-legend\")\n .style(\"left\", \"0px\")\n .style(\"width\", (this.legendWidth) + \"px\"); // - 16 for the width of the padding\n }\n\n private labelMouseoutWrapper(labelMouseout, svgSelection, event) {\n return (svgSelection, aggKey) => {\n event?.stopPropagation();\n svgSelection.selectAll(\".tsi-valueElement\")\n .filter(function () { return !d3.select(this).classed(\"tsi-valueEnvelope\"); })\n .attr(\"stroke-opacity\", 1)\n .attr(\"fill-opacity\", 1);\n svgSelection.selectAll(\".tsi-valueEnvelope\")\n .attr(\"fill-opacity\", .2);\n labelMouseout(svgSelection, aggKey);\n }\n }\n\n private toggleSplitByVisible(aggregateKey: string, splitBy: string) {\n var newState = !this.chartComponentData.displayState[aggregateKey].splitBys[splitBy].visible;\n this.chartComponentData.displayState[aggregateKey].splitBys[splitBy].visible = newState;\n this.chartComponentData.displayState[aggregateKey].visible = Object.keys(this.chartComponentData.displayState[aggregateKey].splitBys)\n .reduce((prev: boolean, curr: string): boolean => {\n return this.chartComponentData.displayState[aggregateKey][\"splitBys\"][curr][\"visible\"] || prev;\n }, false);\n //turn off sticky if making invisible\n if (newState == false && (this.chartComponentData.stickiedKey != null &&\n this.chartComponentData.stickiedKey.aggregateKey == aggregateKey &&\n this.chartComponentData.stickiedKey.splitBy == splitBy)) {\n this.chartComponentData.stickiedKey = null;\n }\n }\n\n public triggerSplitByFocus(aggKey: string, splitBy: string) {\n if (this.chartOptions.legend == \"hidden\") {\n return;\n }\n this.legendElement.selectAll('.tsi-splitByLabel').classed(\"inFocus\", false);\n this.legendElement.selectAll('.tsi-splitByLabel').filter(function (labelData: any) {\n return (d3.select(this.parentNode).datum() == aggKey) && (labelData == splitBy);\n }).classed(\"inFocus\", true);\n\n var indexOfSplitBy = Object.keys(this.chartComponentData.displayState[aggKey].splitBys).indexOf(splitBy);\n\n if (indexOfSplitBy != -1) {\n var splitByNode = this.legendElement.selectAll('.tsi-splitByContainer').filter((d) => {\n return d == aggKey;\n }).node();\n var prospectiveScrollTop = Math.max((indexOfSplitBy - 1) * this.getHeightPerSplitBy(aggKey), 0);\n if (splitByNode.scrollTop < prospectiveScrollTop - (splitByNode.clientHeight - 40) || splitByNode.scrollTop > prospectiveScrollTop) {\n splitByNode.scrollTop = prospectiveScrollTop;\n }\n }\n }\n\n private getHeightPerSplitBy(aggKey) {\n return (this.chartComponentData.displayState[aggKey].dataType === DataTypes.Numeric ? NUMERICSPLITBYHEIGHT : NONNUMERICSPLITBYHEIGHT);\n }\n\n private createGradient(gradientKey, svg, values) {\n let gradient = svg.append('defs').append('linearGradient')\n .attr('id', gradientKey).attr('x1', '0%').attr('x2', '0%').attr('y1', '0%').attr('y2', '100%');\n let catCount = Object.keys(values).length;\n Object.keys(values).forEach((category, i) => {\n let currentStop = i / catCount * 100;\n let nextStop = (i + 1) / catCount * 100;\n let color = values[category].color;\n\n gradient.append('stop')\n .attr(\"offset\", currentStop + \"%\")\n .attr(\"stop-color\", color)\n .attr(\"stop-opacity\", 1);\n\n gradient.append('stop')\n .attr(\"offset\", nextStop + \"%\")\n .attr(\"stop-color\", color)\n .attr(\"stop-opacity\", 1);\n });\n }\n\n private isNonNumeric(aggKey) {\n let dataType = this.chartComponentData.displayState[aggKey].dataType;\n return (dataType === DataTypes.Categorical || dataType === DataTypes.Events);\n }\n\n private createNonNumericColorKey(dataType, colorKey, aggKey) {\n if (dataType === DataTypes.Categorical) {\n this.createCategoricalColorKey(colorKey, aggKey);\n }\n if (dataType === DataTypes.Events) {\n this.createEventsColorKey(colorKey, aggKey);\n }\n }\n\n private createCategoricalColorKey(colorKey, aggKey) {\n let categories = this.chartComponentData.displayState[aggKey].aggregateExpression.valueMapping;\n colorKey.classed('tsi-categoricalColorKey', true);\n colorKey.selectAll('*').remove();\n let svg = colorKey.append('svg')\n .attr('width', colorKey.style('width'))\n .attr('height', colorKey.style('height'));\n let rect = svg.append('rect')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('fill', 'black');\n let gradientKey = Utils.guid();\n this.createGradient(gradientKey, svg, categories);\n rect.attr('fill', \"url(#\" + gradientKey + \")\");\n }\n\n private createEventsColorKey(colorKey, aggKey) {\n let categories = this.chartComponentData.displayState[aggKey].aggregateExpression.valueMapping;\n let eventElementType = this.chartComponentData.displayState[aggKey].aggregateExpression.eventElementType;\n colorKey.classed('tsi-eventsColorKey', true);\n colorKey.selectAll('*').remove();\n\n let colorKeyWidth = colorKey.node().getBoundingClientRect().width;\n let colorKeyHeight = colorKey.node().getBoundingClientRect().height;\n let colorKeyUnitLength = Math.floor(colorKeyHeight / Math.sqrt(2));\n\n let svg = colorKey.append('svg')\n .attr('width', `${colorKeyWidth}px`)\n .attr('height', `${colorKeyHeight}px`);\n\n let gradientKey = Utils.guid();\n this.createGradient(gradientKey, svg, categories);\n\n if (eventElementType === EventElementTypes.Teardrop) {\n svg.append('path')\n .attr('transform', (d: any) => {\n return 'translate(' + (colorKeyWidth * .75) + ',' + (colorKeyHeight * .75) + ') rotate(180)';\n })\n .attr('d', this.teardropD(colorKeyWidth / 2, colorKeyHeight / 2))\n .attr('stroke-width', Math.min(colorKeyUnitLength / 2.25, 8))\n .style('fill', 'none')\n .style('stroke', \"url(#\" + gradientKey + \")\");\n\n } else {\n let rect = svg.append('rect')\n .attr('width', colorKeyUnitLength)\n .attr('height', colorKeyUnitLength)\n .attr('transform', `translate(${(colorKeyWidth / 2)},0)rotate(45)`)\n .attr('fill', 'black');\n rect.attr('fill', \"url(#\" + gradientKey + \")\");\n }\n }\n\n private renderSplitBys = (aggKey, aggSelection, dataType, noSplitBys) => {\n var splitByLabelData = Object.keys(this.chartComponentData.timeArrays[aggKey]);\n var firstSplitBy = this.chartComponentData.displayState[aggKey].splitBys\n [Object.keys(this.chartComponentData.displayState[aggKey].splitBys)[0]];\n var firstSplitByType = firstSplitBy ? firstSplitBy.visibleType : null;\n var isSame = Object.keys(this.chartComponentData.displayState[aggKey].splitBys).reduce((isSame: boolean, curr: string) => {\n return (firstSplitByType == this.chartComponentData.displayState[aggKey].splitBys[curr].visibleType) && isSame;\n }, true);\n let showMoreSplitBys = () => {\n const oldShownSplitBys = this.chartComponentData.displayState[aggKey].shownSplitBys;\n this.chartComponentData.displayState[aggKey].shownSplitBys = Math.min(oldShownSplitBys + 20, splitByLabelData.length);\n if (oldShownSplitBys != this.chartComponentData.displayState[aggKey].shownSplitBys) {\n this.renderSplitBys(aggKey, aggSelection, dataType, noSplitBys);\n }\n }\n\n let splitByContainer = aggSelection.selectAll(\".tsi-splitByContainer\").data([aggKey]);\n var splitByContainerEntered = splitByContainer.enter().append(\"div\")\n .merge(splitByContainer)\n .classed(\"tsi-splitByContainer\", true);\n\n var splitByLabels = splitByContainerEntered.selectAll('.tsi-splitByLabel')\n .data(splitByLabelData.slice(0, this.chartComponentData.displayState[aggKey].shownSplitBys), function (d: string): string {\n return d;\n });\n\n let self = this;\n\n var splitByLabelsEntered = splitByLabels\n .enter()\n .append(\"div\")\n .merge(splitByLabels)\n .attr('role', this.legendState === 'compact' ? 'button' : 'presentation')\n .attr('tabindex', this.legendState === 'compact' ? '0' : '-1')\n .on('keypress', (event, splitBy: string) => {\n if (this.legendState === 'compact' && (event.keyCode === 13 || event.keyCode === 32)) { //space or enter\n this.toggleSplitByVisible(aggKey, splitBy);\n this.drawChart();\n event.preventDefault();\n }\n })\n .on(\"click\", function (event: any, splitBy: string) {\n if (self.legendState == \"compact\") {\n self.toggleSplitByVisible(aggKey, splitBy);\n } else {\n self.toggleSticky(aggKey, splitBy);\n }\n self.drawChart();\n })\n .on(\"mouseover\", function (event, splitBy: string) {\n event.stopPropagation();\n self.labelMouseover(aggKey, splitBy);\n })\n .on(\"mouseout\", function (event) {\n event.stopPropagation();\n self.svgSelection.selectAll(\".tsi-valueElement\")\n .attr(\"stroke-opacity\", 1)\n .attr(\"fill-opacity\", 1);\n self.labelMouseout(self.svgSelection, aggKey);\n })\n .attr(\"class\", (splitBy, i) => {\n let compact = (dataType !== DataTypes.Numeric) ? 'tsi-splitByLabelCompact' : '';\n let shown = Utils.getAgVisible(self.chartComponentData.displayState, aggKey, splitBy) ? 'shown' : '';\n return `tsi-splitByLabel tsi-splitByLabel ${compact} ${shown}`;\n })\n .classed(\"stickied\", (splitBy, i) => {\n if (self.chartComponentData.stickiedKey != null) {\n return aggKey == self.chartComponentData.stickiedKey.aggregateKey && splitBy == self.chartComponentData.stickiedKey.splitBy;\n }\n });\n\n var colors = Utils.createSplitByColors(self.chartComponentData.displayState, aggKey, self.chartOptions.keepSplitByColor);\n\n splitByLabelsEntered.each(function (splitBy, j) {\n let color = (self.chartComponentData.isFromHeatmap) ? self.chartComponentData.displayState[aggKey].color : colors[j];\n if (dataType === DataTypes.Numeric || noSplitBys || self.legendState === 'compact') {\n let colorKey = d3.select(this).selectAll<any, unknown>('.tsi-colorKey').data([color]);\n let colorKeyEntered = colorKey.enter()\n .append(\"div\")\n .attr(\"class\", 'tsi-colorKey')\n .merge(colorKey);\n if (dataType === DataTypes.Numeric) {\n colorKeyEntered.style('background-color', (d) => {\n return d;\n });\n } else {\n self.createNonNumericColorKey(dataType, colorKeyEntered, aggKey);\n }\n d3.select(this).classed('tsi-nonCompactNonNumeric',\n (dataType === DataTypes.Categorical || dataType === DataTypes.Events) && this.legendState !== 'compact');\n colorKey.exit().remove();\n } else {\n d3.select(this).selectAll('.tsi-colorKey').remove();\n }\n\n if (d3.select(this).select('.tsi-eyeIcon').empty()) {\n d3.select(this).append(\"button\")\n .attr(\"class\", \"tsi-eyeIcon\")\n .attr('aria-label', () => {\n let showOrHide = self.chartComponentData.displayState[aggKey].splitBys[splitBy].visible ? self.getString('hide series') : self.getString('show series');\n return `${showOrHide} ${splitBy} ${self.getString('in group')} ${self.chartComponentData.displayState[aggKey].name}`;\n\n })\n .attr('title', () => self.getString('Show/Hide values'))\n .on(\"click\", function (event) {\n event.stopPropagation();\n self.toggleSplitByVisible(aggKey, splitBy);\n d3.select(this)\n .classed(\"shown\", Utils.getAgVisible(self.chartComponentData.displayState, aggKey, splitBy));\n self.drawChart();\n });\n }\n\n if (d3.select(this).select('.tsi-seriesName').empty()) {\n let seriesName = d3.select(this)\n .append('div')\n .attr('class', 'tsi-seriesName');\n Utils.appendFormattedElementsFromString(seriesName, noSplitBys ? (self.chartComponentData.displayState[aggKey].name) : splitBy);\n }\n\n if (dataType === DataTypes.Numeric) {\n if (d3.select(this).select('.tsi-seriesTypeSelection').empty()) {\n d3.select(this).append(\"select\")\n .attr('aria-label', `${self.getString(\"Series type selection for\")} ${splitBy} ${self.getString('in group')} ${self.chartComponentData.displayState[aggKey].name}`)\n .attr('class', 'tsi-seriesTypeSelection')\n .on(\"change\", function (data: any) {\n var seriesType: any = d3.select(this).property(\"value\");\n self.chartComponentData.displayState[aggKey].splitBys[splitBy].visibleType = seriesType;\n self.drawChart();\n })\n .on(\"click\", (event) => {\n event.stopPropagation();\n });\n }\n d3.select(this).select('.tsi-seriesTypeSelection')\n .each(function (d) {\n var typeLabels = d3.select(this).selectAll<HTMLOptionElement, unknown>('option')\n .data(data => self.chartComponentData.displayState[aggKey].splitBys[splitBy].types.map((type) => {\n return {\n type: type,\n aggKey: aggKey,\n splitBy: splitBy,\n visibleMeasure: Utils.getAgVisibleMeasure(self.chartComponentData.displayState, aggKey, splitBy)\n }\n }));\n\n typeLabels\n .enter()\n .append(\"option\")\n .attr(\"class\", \"seriesTypeLabel\")\n .merge(typeLabels)\n .property(\"selected\", (data: any) => {\n return ((data.type == Utils.getAgVisibleMeasure(self.chartComponentData.displayState, data.aggKey, data.splitBy)) ?\n \" selected\" : \"\");\n })\n .text((data: any) => data.type);\n typeLabels.exit().remove();\n });\n } else {\n d3.select(this).selectAll('.tsi-seriesTypeSelection').remove();\n }\n });\n splitByLabels.exit().remove();\n\n let shouldShowMore = self.chartComponentData.displayState[aggKey].shownSplitBys < splitByLabelData.length;\n splitByContainerEntered.selectAll('.tsi-legendShowMore').remove();\n if (this.legendState === 'shown' && shouldShowMore) {\n splitByContainerEntered.append('button')\n .text(this.getString('Show more'))\n .attr('class', 'tsi-legendShowMore')\n .style('display', (this.legendState === 'shown' && shouldShowMore) ? 'block' : 'none')\n .on('click', showMoreSplitBys);\n }\n\n splitByContainerEntered.on(\"scroll\", function () {\n if (self.chartOptions.legend === 'shown') {\n if ((<any>this).scrollTop + (<any>this).clientHeight + 40 > (<any>this).scrollHeight) {\n showMoreSplitBys();\n }\n }\n });\n splitByContainer.exit().remove();\n }\n\n private toggleSticky = (aggregateKey: string, splitBy: string) => {\n //don't do anything if not visible \n if (!this.chartComponentData.displayState[aggregateKey].visible ||\n !this.chartComponentData.displayState[aggregateKey].splitBys[splitBy].visible)\n return;\n if (this.chartComponentData.stickiedKey != null &&\n this.chartComponentData.stickiedKey.aggregateKey == aggregateKey &&\n this.chartComponentData.stickiedKey.splitBy == splitBy) {\n this.chartComponentData.stickiedKey = null;\n } else {\n if (this.stickySeriesAction) {\n this.stickySeriesAction(aggregateKey, splitBy);\n }\n }\n }\n\n public draw(legendState: string, chartComponentData, labelMouseover, svgSelection, options, labelMouseoutAction = null, stickySeriesAction = null, event?: any) {\n this.chartOptions.setOptions(options);\n this.chartComponentData = chartComponentData;\n this.legendState = legendState;\n this.stickySeriesAction = stickySeriesAction;\n this.labelMouseover = labelMouseover;\n this.labelMouseout = this.labelMouseoutWrapper(labelMouseoutAction, svgSelection, event);\n this.svgSelection = svgSelection;\n var legend = this.legendElement;\n var self = this;\n\n\n super.themify(this.legendElement, this.chartOptions.theme);\n\n legend.style('visibility', this.legendState != 'hidden')\n .classed('compact', this.legendState == 'compact')\n .classed('hidden', this.legendState == 'hidden');\n\n let seriesNames = Object.keys(this.chartComponentData.displayState);\n var seriesLabels: any = legend.selectAll(\".tsi-seriesLabel\")\n .data(seriesNames, d => d);\n\n var seriesLabelsEntered = seriesLabels.enter()\n .append(\"div\")\n .merge(seriesLabels)\n .attr(\"class\", (d, i) => {\n return \"tsi-seriesLabel \" + (this.chartComponentData.displayState[d][\"visible\"] ? \" shown\" : \"\");\n })\n .style(\"min-width\", () => {\n return Math.min(124, this.legendElement.node().clientWidth / seriesNames.length) + 'px';\n })\n .style(\"border-color\", function (d, i) {\n if (d3.select(this).classed(\"shown\"))\n return self.chartComponentData.displayState[d].color;\n return \"lightgray\";\n });\n\n var self = this;\n\n const heightPerNameLabel: number = 25;\n const verticalPaddingPerSeriesLabel: number = 16;\n const usableLegendHeight: number = legend.node().clientHeight;\n var prospectiveAggregateHeight = Math.ceil(Math.max(201, (usableLegendHeight / seriesLabelsEntered.size())));\n var contentHeight = 0;\n\n seriesLabelsEntered.each(function (aggKey: string, i: number) {\n let heightPerSplitBy = self.getHeightPerSplitBy(aggKey);\n var splitByLabelData = Object.keys(self.chartComponentData.timeArrays[aggKey]);\n var noSplitBys: boolean = splitByLabelData.length == 1 && splitByLabelData[0] == \"\";\n var seriesNameLabel = d3.select(this).selectAll<HTMLButtonElement, unknown>(\".tsi-seriesNameLabel\").data([aggKey]);\n d3.select(this).classed('tsi-nsb', noSplitBys);\n var enteredSeriesNameLabel = seriesNameLabel.enter().append(\"button\")\n .merge(seriesNameLabel)\n .attr(\"class\", (agg: string, i) => {\n return \"tsi-seriesNameLabel\" + (self.chartComponentData.displayState[agg].visible ? \" shown\" : \"\");\n })\n .attr(\"aria-label\", (agg: string) => {\n let showOrHide = self.chartComponentData.displayState[agg].visible ? self.getString('hide group') : self.getString('show group');\n return `${showOrHide} ${self.getString('group')} ${Utils.stripNullGuid(self.chartComponentData.displayState[agg].name)}`;\n })\n .on(\"click\", function (event, d: string) {\n var newState = !self.chartComponentData.displayState[d].visible;\n self.chartComponentData.displayState[d].visible = newState;\n\n //turn off sticky if making invisible\n if (newState == false && (self.chartComponentData.stickiedKey != null &&\n self.chartComponentData.stickiedKey.aggregateKey == d)) {\n self.chartComponentData.stickiedKey = null;\n }\n self.drawChart();\n })\n .on(\"mouseover\", (event, d) => {\n labelMouseover(d);\n })\n .on(\"mouseout\", (event, d) => {\n self.labelMouseout(svgSelection, d);\n });\n let dataType = self.chartComponentData.displayState[aggKey].dataType;\n if (dataType === DataTypes.Categorical || dataType === DataTypes.Events) {\n enteredSeriesNameLabel.classed('tsi-nonCompactNonNumeric', true);\n let colorKey = enteredSeriesNameLabel.selectAll<HTMLDivElement, unknown>('.tsi-colorKey').data(['']);\n let colorKeyEntered = colorKey.enter()\n .append(\"div\")\n .attr(\"class\", 'tsi-colorKey')\n .merge(colorKey);\n self.createNonNumericColorKey(dataType, colorKeyEntered, aggKey);\n colorKey.exit().remove();\n }\n\n var seriesNameLabelText = enteredSeriesNameLabel.selectAll<HTMLHeadingElement, unknown>(\"h4\").data([aggKey]);\n seriesNameLabelText.enter()\n .append(\"h4\")\n .merge(seriesNameLabelText)\n .attr(\"title\", (d: string) => Utils.stripNullGuid(self.chartComponentData.displayState[d].name))\n .each(function () {\n Utils.appendFormattedElementsFromString(d3.select(this), self.chartComponentData.displayState[aggKey].name);\n });\n\n\n seriesNameLabelText.exit().remove();\n seriesNameLabel.exit().remove();\n\n var splitByContainerHeight;\n if (splitByLabelData.length > (prospectiveAggregateHeight / heightPerSplitBy)) {\n splitByContainerHeight = prospectiveAggregateHeight - heightPerNameLabel;\n contentHeight += splitByContainerHeight + heightPerNameLabel;\n } else if (splitByLabelData.length > 1 || (splitByLabelData.length === 1 && splitByLabelData[0] !== \"\")) {\n splitByContainerHeight = splitByLabelData.length * heightPerSplitBy + heightPerNameLabel;\n contentHeight += splitByContainerHeight + heightPerNameLabel;\n } else {\n splitByContainerHeight = heightPerSplitBy;\n contentHeight += splitByContainerHeight;\n }\n if (self.chartOptions.legend == \"shown\") {\n d3.select(this).style(\"height\", splitByContainerHeight + \"px\");\n } else {\n d3.select(this).style(\"height\", \"unset\");\n }\n\n var splitByContainer = d3.select(this).selectAll<HTMLDivElement, unknown>(\".tsi-splitByContainer\").data([aggKey]);\n var splitByContainerEntered = splitByContainer.enter().append(\"div\")\n .merge(splitByContainer)\n .classed(\"tsi-splitByContainer\", true);\n\n let aggSelection = d3.select(this);\n\n var sBs = self.renderSplitBys(aggKey, aggSelection, dataType, noSplitBys);\n splitByContainerEntered.on(\"scroll\", function () {\n if (self.chartOptions.legend == \"shown\") {\n if ((<any>this).scrollTop + (<any>this).clientHeight + 40 > (<any>this).scrollHeight) {\n const oldShownSplitBys = self.chartComponentData.displayState[aggKey].shownSplitBys;\n self.chartComponentData.displayState[aggKey].shownSplitBys = Math.min(oldShownSplitBys + 20, splitByLabelData.length);\n if (oldShownSplitBys != self.chartComponentData.displayState[aggKey].shownSplitBys) {\n self.renderSplitBys(aggKey, aggSelection, dataType, noSplitBys);\n }\n }\n }\n });\n d3.select(this).on('scroll', function () {\n if (self.chartOptions.legend == \"compact\") {\n if ((<any>this).scrollLeft + (<any>this).clientWidth + 40 > (<any>this).scrollWidth) {\n const oldShownSplitBys = self.chartComponentData.displayState[aggKey].shownSplitBys;\n self.chartComponentData.displayState[aggKey].shownSplitBys = Math.min(oldShownSplitBys + 20, splitByLabelData.length);\n if (oldShownSplitBys != self.chartComponentData.displayState[aggKey].shownSplitBys) {\n this.renderSplitBys(dataType);\n }\n }\n }\n });\n splitByContainer.exit().remove();\n\n });\n\n if (this.chartOptions.legend == 'shown') {\n var legendHeight = legend.node().clientHeight;\n //minSplitBysForFlexGrow: the minimum number of split bys for flex-grow to be triggered \n if (contentHeight < usableLegendHeight) {\n this.legendElement.classed(\"tsi-flexLegend\", true);\n seriesLabelsEntered.each(function (d) {\n let heightPerSplitBy = self.getHeightPerSplitBy(d);\n var minSplitByForFlexGrow = (prospectiveAggregateHeight - heightPerNameLabel) / heightPerSplitBy;\n\n var splitBysCount = Object.keys(self.chartComponentData.displayState[String(d3.select(this).data()[0])].splitBys).length;\n if (splitBysCount > minSplitByForFlexGrow) {\n d3.select(this).style(\"flex-grow\", 1);\n }\n });\n } else {\n this.legendElement.classed(\"tsi-flexLegend\", false);\n }\n }\n\n seriesLabels.exit().remove();\n }\n}\n\nexport default Legend;","import Utils from \"../utils\";\nimport { ShiftTypes, DataTypes, valueTypes } from \"../constants/Enums\";\n\nclass ChartComponentData {\n public data: any = {};\n public displayState: any = {};\n public timeArrays: any = [];\n\n public visibleTSCount: number = 0;\n public visibleTAs: any = [];\n public allValues: any = [];\n public allNumericValues: any = [];\n public filteredAggregates: any;\n public usesSeconds: boolean = false;\n public usesMillis: boolean = false;\n public fromMillis: number = Infinity;\n public toMillis: number = 0;\n public stickiedKey: any = null;\n public allTimestampsArray: any;\n public isFromHeatmap: boolean = false;\n\n constructor() {\n }\n\n protected getSwimlane = (aggKey) => {\n return (this.displayState[aggKey].aggregateExpression ? this.displayState[aggKey].aggregateExpression.swimLane : null);\n }\n\n protected setAllTimestampsArray() {\n var allTimestamps = {};\n this.data.forEach(ae => {\n var aeObj = ae[Object.keys(ae)[0]];\n Object.keys(aeObj).forEach(timeseries => {\n Object.keys(aeObj[timeseries]).forEach(timestamp => {\n allTimestamps[timestamp] = true;\n })\n })\n });\n this.allTimestampsArray = Object.keys(allTimestamps).sort();\n }\n\n public getDataType(aggKey) {\n return this.displayState[aggKey] ? this.displayState[aggKey].dataType : DataTypes.Numeric;\n }\n\n //add colors if none present\n private fillColors(aggregateExpressionOptions) {\n if (aggregateExpressionOptions == null)\n aggregateExpressionOptions = [];\n // correct aEOs to add empty objects if the length doesn't match up with the data\n if (aggregateExpressionOptions.length < this.data.length) {\n for (var i = aggregateExpressionOptions.length; i < this.data.length; i++) {\n aggregateExpressionOptions.push({});\n }\n }\n var colorlessCount = aggregateExpressionOptions.reduce((colorlessCount, aEO) => {\n if (aEO.color != null)\n return colorlessCount;\n return colorlessCount + 1;\n }, 0);\n var colorI = 0;\n var colors: any = Utils.generateColors(colorlessCount);\n aggregateExpressionOptions.forEach((aEO) => {\n if (aEO.color == null) {\n aEO.color = colors[colorI];\n colorI++;\n }\n });\n return aggregateExpressionOptions;\n }\n\n private getVisibleType = (aggKey, splitBy, defaultType, measures) => {\n if (this.displayState[aggKey] && this.displayState[aggKey].splitBys[splitBy]) {\n let prospectiveVisible = this.displayState[aggKey].splitBys[splitBy].visibleType;\n if (measures.indexOf(prospectiveVisible) !== -1) {\n return prospectiveVisible;\n }\n }\n return defaultType;\n }\n\n public mergeDataToDisplayStateAndTimeArrays(data, aggregateExpressionOptions = null) {\n this.data = data;\n var newDisplayState: any = {};\n this.timeArrays = {};\n this.visibleTAs = {};\n this.allValues = [];\n this.allNumericValues = [];\n this.visibleTSCount = 0;\n this.fromMillis = Infinity;\n this.toMillis = 0;\n var aggregateCounterMap = {};\n\n this.usesSeconds = false;\n this.usesMillis = false;\n aggregateExpressionOptions = this.fillColors(aggregateExpressionOptions);\n let aggKeys = Utils.getAggKeys(this.data);\n\n this.data = this.data.map((aggregate: any, i: number) => {\n var aggName: string = Object.keys(aggregate)[0];\n let aggregateCopy = { ...aggregate };\n let aggKey = aggKeys[i];\n\n this.data[i].aggKey = aggKey;\n aggregateCopy.aggKey = aggKey;\n\n if (this.displayState[aggKey]) {\n newDisplayState[aggKey] = {\n visible: (aggregateExpressionOptions[i] && aggregateExpressionOptions[i].visibilityState) ?\n aggregateExpressionOptions[i].visibilityState[0] : this.displayState[aggKey].visible,\n name: this.displayState[aggKey].name,\n color: ((aggregateExpressionOptions[i] && aggregateExpressionOptions[i].color) ?\n aggregateExpressionOptions[i].color : this.displayState[aggKey].color),\n interpolationFunction: aggregateExpressionOptions[i].interpolationFunction,\n yExtent: aggregateExpressionOptions[i].yExtent,\n includeEnvelope: aggregateExpressionOptions[i].includeEnvelope,\n includeDots: aggregateExpressionOptions[i].includeDots,\n splitBys: {},\n dataType: aggregateExpressionOptions[i].dataType,\n visibleSplitByCap: this.displayState[aggKey].visibleSplitByCap,\n shownSplitBys: 20\n }\n } else {\n newDisplayState[aggKey] = {\n visible: (aggregateExpressionOptions[i] && aggregateExpressionOptions[i].visibilityState) ?\n aggregateExpressionOptions[i].visibilityState[0] : true,\n splitBys: {},\n name: aggName,\n color: ((aggregateExpressionOptions[i] && aggregateExpressionOptions[i].color) ?\n aggregateExpressionOptions[i].color : \"teal\"),\n interpolationFunction: aggregateExpressionOptions[i].interpolationFunction,\n yExtent: aggregateExpressionOptions[i].yExtent,\n includeEnvelope: aggregateExpressionOptions[i].includeEnvelope,\n includeDots: aggregateExpressionOptions[i].includeDots,\n dataType: aggregateExpressionOptions[i].dataType,\n visibleSplitByCap: 10,\n shownSplitBys: 20\n }\n }\n if (aggregateExpressionOptions) {\n newDisplayState[aggKey].contextMenuActions = aggregateExpressionOptions[i] ?\n aggregateExpressionOptions[i].contextMenu : [];\n newDisplayState[aggKey].aggregateExpression = aggregateExpressionOptions[i];\n // impose cap on visible splitBys if relevant\n if (aggregateExpressionOptions[i] && aggregateExpressionOptions[i].visibleSplitByCap) {\n newDisplayState[aggKey].visibleSplitByCap = aggregateExpressionOptions[i].visibleSplitByCap;\n }\n } else {\n //revert to previous context menu actions if no new ones passed in and old ones exist\n var oldContextMenuActions = (this.displayState[aggKey] && this.displayState[aggKey].contextMenuActions) ?\n this.displayState[aggKey].contextMenuActions : [];\n newDisplayState[aggKey].contextMenuActions = oldContextMenuActions;\n var oldAggregateExpression = (this.displayState[aggKey] && this.displayState[aggKey].aggregateExpression) ?\n this.displayState[aggKey].aggregateExpression : {};\n newDisplayState[aggKey].aggregateExpression = oldAggregateExpression;\n }\n if (newDisplayState[aggKey].aggregateExpression && newDisplayState[aggKey].aggregateExpression.searchSpan) {\n newDisplayState[aggKey].from = new Date(newDisplayState[aggKey].aggregateExpression.searchSpan.from);\n newDisplayState[aggKey].to = new Date(newDisplayState[aggKey].aggregateExpression.searchSpan.to);\n newDisplayState[aggKey].bucketSize = newDisplayState[aggKey].aggregateExpression.searchSpan.bucketSize ?\n Utils.parseTimeInput(newDisplayState[aggKey].aggregateExpression.searchSpan.bucketSize) :\n null;\n }\n\n var aggregateVisible = newDisplayState[aggKey].visible;\n this.timeArrays[aggKey] = [];\n this.visibleTAs[aggKey] = {};\n\n Object.keys(data[i][aggName]).forEach((splitBy: string, splitByI: number) => {\n let shiftValue = Utils.parseShift(aggregateExpressionOptions[i].timeShift,\n aggregateExpressionOptions[i].startAt,\n aggregateExpressionOptions[i].searchSpan);\n this.timeArrays[aggKey][splitBy] = this.convertAggregateToArray(data[i][aggName][splitBy], aggKey, aggName, splitBy,\n newDisplayState[aggKey].from, newDisplayState[aggKey].to,\n newDisplayState[aggKey].bucketSize, shiftValue);\n if (newDisplayState[aggKey].dataType === DataTypes.Categorical && aggregateExpressionOptions[i].rollupCategoricalValues) {\n this.timeArrays[aggKey][splitBy] = Utils.rollUpContiguous(this.timeArrays[aggKey][splitBy]);\n }\n\n let isVisible;\n\n // first priority: set from passed in visibility state\n if (aggregateExpressionOptions[i] && aggregateExpressionOptions[i].visibilityState && aggregateExpressionOptions[i].visibilityState.length === 2) {\n isVisible = aggregateExpressionOptions[i].visibilityState[1].indexOf(splitBy) != -1;\n }\n //second priority: special case where solo split by and is ''\n else if (aggregateExpressionOptions[i] && aggregateExpressionOptions[i].visibilityState && Object.keys(data[i][aggName]).length === 1 && splitBy === '') {\n isVisible = aggregateExpressionOptions[i].visibilityState[0];\n }\n // third priority: already set value\n else if (this.displayState[aggKey] && this.displayState[aggKey].splitBys[splitBy]) {\n isVisible = this.displayState[aggKey].splitBys[splitBy].visible;\n }\n // last priority: set isVisible based on visibleSplitByCap \n else {\n isVisible = (splitByI < newDisplayState[aggKey].visibleSplitByCap);\n }\n\n newDisplayState[aggKey].splitBys[splitBy] = {\n visible: isVisible,\n visibleType: newDisplayState[aggKey].splitBys[splitBy] ? newDisplayState[aggKey].splitBys[splitBy].visibleType : null,\n types: newDisplayState[aggKey].splitBys[splitBy] ? newDisplayState[aggKey].splitBys[splitBy].types : [],\n }\n if (this.timeArrays[aggKey][splitBy] && this.timeArrays[aggKey][splitBy].length &&\n newDisplayState[aggKey].aggregateExpression && newDisplayState[aggKey].aggregateExpression.measureTypes) {\n newDisplayState[aggKey].splitBys[splitBy].types = newDisplayState[aggKey].aggregateExpression.measureTypes\n } else {\n newDisplayState[aggKey].splitBys[splitBy].types = this.determineMeasureTypes(this.timeArrays[aggKey][splitBy])\n }\n if (!newDisplayState[aggKey].splitBys[splitBy].visibleType || (newDisplayState[aggKey].splitBys[splitBy].types.indexOf(newDisplayState[aggKey].splitBys[splitBy].visibleType) === -1)) {\n var visibleMeasure = newDisplayState[aggKey].splitBys[splitBy].types.indexOf(\"avg\") !== -1 ? \"avg\" :\n newDisplayState[aggKey].splitBys[splitBy].types[0];\n newDisplayState[aggKey].splitBys[splitBy].visibleType = this.getVisibleType(aggKey, splitBy, visibleMeasure, newDisplayState[aggKey].splitBys[splitBy].types);\n }\n\n //add to visible display states if splitby is visible\n if (newDisplayState[aggKey][\"splitBys\"][splitBy][\"visible\"] && aggregateVisible) {\n this.allValues = this.allValues.concat(this.timeArrays[aggKey][splitBy]);\n if (newDisplayState[aggKey].dataType === DataTypes.Numeric) {\n this.allNumericValues = this.allNumericValues.concat(this.timeArrays[aggKey][splitBy]);\n }\n this.usesSeconds = this.usesSeconds || this.doesTimeArrayUseSeconds(this.timeArrays[aggKey][splitBy]);\n this.usesMillis = this.usesMillis || this.doesTimeArrayUseMillis(this.timeArrays[aggKey][splitBy]);\n this.visibleTAs[aggKey][splitBy] = this.timeArrays[aggKey][splitBy];\n this.visibleTSCount += 1;\n }\n });\n return aggregateCopy;\n });\n\n //ensure that the stickied Key exists in the new data, otherwise revert to null\n if (this.stickiedKey) {\n var splitBy = this.stickiedKey.splitBy;\n var aggKey = this.stickiedKey.aggregateKey;\n if (!(newDisplayState[aggKey] && newDisplayState[aggKey].visible &&\n newDisplayState[aggKey].splitBys[splitBy] && newDisplayState[aggKey].splitBys[splitBy].visible)) {\n this.stickiedKey = null;\n }\n }\n\n this.displayState = newDisplayState;\n this.setAllTimestampsArray();\n }\n\n private determineMeasureTypes(timeArray) {\n var measureTypes = timeArray.reduce((measureTypes, curr) => {\n if (curr && curr.measures && Object.keys(curr.measures).length) {\n Object.keys(curr.measures).forEach((measure) => {\n measureTypes[measure] = true;\n });\n }\n return measureTypes;\n }, {});\n return Object.keys(measureTypes);\n }\n\n public getTemporalShiftStringTuple(aggKey) {\n let ae = this.displayState[aggKey].aggregateExpression;\n if (ae) {\n if (Utils.isStartAt(ae.startAt, ae.searchSpan)) {\n return [ShiftTypes.startAt, ae.startAt];\n }\n if (ae.timeShift) {\n return [ShiftTypes.shifted, ae.timeShift];\n }\n }\n return null;\n }\n\n public getTemporalShiftMillis(aggKey) {\n let ae = this.displayState[aggKey].aggregateExpression;\n if (ae) {\n return Utils.parseShift(ae.timeShift, ae.startAt, ae.searchSpan);\n }\n return 0;\n }\n\n public doesTimeArrayUseSeconds(timeArray) {\n return timeArray.reduce((prev, curr) => {\n return curr.dateTime.getSeconds() != 0 || prev;\n }, false);\n }\n\n public doesTimeArrayUseMillis(timeArray) {\n return timeArray.reduce((prev, curr) => {\n return curr.dateTime.getMilliseconds() != 0 || prev;\n }, false);\n }\n\n //returns the from and to of all values\n public setAllValuesAndVisibleTAs() {\n var toMillis = 0;\n var fromMillis = Infinity;\n this.allValues = [];\n this.allNumericValues = [];\n this.visibleTAs = [];\n this.visibleTSCount = 0;\n Object.keys(this.timeArrays).forEach((aggKey: string) => {\n if (this.getAggVisible(aggKey)) {\n this.visibleTAs[aggKey] = {};\n Object.keys(this.timeArrays[aggKey]).forEach((splitBy) => {\n if (this.getSplitByVisible(aggKey, splitBy)) {\n this.allValues = this.allValues.concat(this.timeArrays[aggKey][splitBy]);\n if (this.displayState[aggKey].dataType === DataTypes.Numeric) {\n this.allNumericValues = this.allNumericValues.concat(this.timeArrays[aggKey][splitBy]);\n }\n this.visibleTAs[aggKey][splitBy] = this.timeArrays[aggKey][splitBy];\n this.visibleTSCount += 1;\n\n this.timeArrays[aggKey][splitBy].forEach((d) => {\n var millis = d.dateTime.valueOf();\n var bucketSize = this.displayState[aggKey].bucketSize;\n if (millis < fromMillis)\n fromMillis = millis;\n var endValue = bucketSize ? millis + bucketSize : millis;\n if (endValue > toMillis)\n toMillis = endValue;\n });\n this.usesSeconds = this.usesSeconds || this.doesTimeArrayUseSeconds(this.timeArrays[aggKey][splitBy]);\n this.usesMillis = this.usesMillis || this.doesTimeArrayUseMillis(this.timeArrays[aggKey][splitBy]);\n }\n });\n }\n });\n //set this.toMillis and this.fromMillis if new values are more extreme \n this.toMillis = (toMillis > this.toMillis) ? toMillis : this.toMillis;\n this.fromMillis = (fromMillis < this.fromMillis) ? fromMillis : this.fromMillis;\n if (this.fromMillis === Infinity) {\n this.fromMillis = this.toMillis - 1;\n }\n return [new Date(this.fromMillis), new Date(this.toMillis)];\n }\n\n public findLastTimestampWithValue(aggKey, splitBy) {\n let timeArray = this.timeArrays[aggKey][splitBy];\n let i = timeArray.length - 1;\n let lastValue = null;\n while (i >= 0 && lastValue === null) {\n if (timeArray[i].measures && (timeArray[i].measures[this.getVisibleMeasure(aggKey, splitBy)] !== null)) {\n lastValue = timeArray[i];\n }\n i += -1;\n }\n return lastValue;\n }\n\n private findFirstBucket(agg, fromMillis, bucketSize) {\n if (agg == null || Object.keys(agg).length == 0)\n return null;\n\n let possibleFirstKeys = Object.keys(agg).filter((a) => {\n return ((new Date(a)).valueOf() + bucketSize) > fromMillis;\n });\n\n if (possibleFirstKeys.length === 0) {\n return null;\n }\n\n let firstPresentKey = possibleFirstKeys.sort((a, b) => {\n if ((new Date(a)).valueOf() < (new Date(b)).valueOf())\n return -1;\n if ((new Date(a)).valueOf() > (new Date(b)).valueOf())\n return 1;\n return 0;\n })[0];\n\n var firstMillis = (new Date(firstPresentKey)).valueOf();\n while (firstMillis > fromMillis) {\n firstMillis += -bucketSize;\n }\n return firstMillis;\n }\n\n private getNumberOfPaddedBuckets(from, to, bucketSize) {\n return Math.ceil((to - from) / bucketSize);\n }\n\n //aggregates object => array of objects containing timestamp and values. Pad with \n public convertAggregateToArray(agg: any, aggKey: string, aggName: string, splitBy: string,\n from: Date = null, to: Date = null, bucketSize: number = null,\n shiftValue: number): Array<any> {\n\n let aggArray: Array<any> = [];\n let isoStringAgg = {};\n Object.keys(agg).forEach((dateString: string) => {\n let shiftedDate = new Date((new Date(dateString)).valueOf() - shiftValue);\n let jsISOString = shiftedDate.toISOString();\n isoStringAgg[jsISOString] = agg[dateString];\n });\n agg = isoStringAgg;\n var createTimeValueObject = () => {\n var timeValueObject: any = {};\n timeValueObject[\"aggregateKey\"] = aggKey;\n timeValueObject[\"aggregateName\"] = aggName;\n timeValueObject[\"splitBy\"] = splitBy;\n timeValueObject[\"measures\"] = {};\n timeValueObject[\"bucketSize\"] = bucketSize;\n return timeValueObject;\n }\n\n if (from)\n this.fromMillis = Math.min(from.valueOf(), this.fromMillis);\n if (to)\n this.toMillis = Math.max(to.valueOf(), this.toMillis);\n if (from && to && bucketSize) {\n let firstBucket = this.findFirstBucket(agg, from.valueOf(), bucketSize);\n if (firstBucket !== null) {\n let firstBucketMillis = firstBucket.valueOf();\n let isExcessiveBucketCount = (this.getNumberOfPaddedBuckets(firstBucketMillis, to.valueOf(), bucketSize) > 10000);\n // pad if not an excessive number of buckets\n if (!isExcessiveBucketCount) {\n for (var currTime = new Date(firstBucketMillis); (currTime.valueOf() < to.valueOf()); currTime = new Date(currTime.valueOf() + bucketSize)) {\n var timeValueObject: any = createTimeValueObject();\n timeValueObject[\"dateTime\"] = currTime;\n var currTimeString = currTime.toISOString();\n if (agg[currTimeString]) {\n var currMeasures = agg[currTimeString];\n Object.keys(currMeasures).forEach((measure: string) => {\n timeValueObject[\"measures\"][measure] = currMeasures[measure];\n });\n } else {\n timeValueObject[\"measures\"] = null;\n }\n aggArray.push(timeValueObject);\n this.fromMillis = Math.min(from.valueOf(), currTime.valueOf());\n this.toMillis = Math.max(to.valueOf(), currTime.valueOf() + bucketSize);\n }\n } else {\n Object.keys(agg).forEach((currTimeString) => {\n var timeValueObject: any = createTimeValueObject();\n timeValueObject[\"dateTime\"] = new Date(currTimeString);\n var currMeasures = agg[currTimeString];\n Object.keys(currMeasures).forEach((measure: string) => {\n timeValueObject[\"measures\"][measure] = currMeasures[measure];\n });\n aggArray.push(timeValueObject);\n });\n }\n }\n } else {\n Object.keys(agg).sort().forEach((dateTime: string) => {\n var timeValueObject: any = createTimeValueObject();\n timeValueObject[\"dateTime\"] = new Date(dateTime);\n if (agg[dateTime]) {\n Object.keys(agg[dateTime]).forEach((measure: string) => {\n timeValueObject[\"measures\"][measure] = agg[dateTime][measure];\n });\n }\n aggArray.push(timeValueObject);\n });\n }\n\n return aggArray;\n }\n\n\n public isSplitByVisible(aggI: string, splitBy: string) {\n if (this.displayState[aggI] == undefined || !this.displayState[aggI].visible)\n return false;\n if (this.displayState[aggI].splitBys[splitBy] == undefined)\n return false;\n return this.displayState[aggI].splitBys[splitBy].visible;\n }\n\n public isPossibleEnvelope(aggKey: string, splitBy: string) {\n return (this.displayState[aggKey].splitBys[splitBy].visibleType == \"avg\") &&\n (this.displayState[aggKey].splitBys[splitBy].types.indexOf(\"min\") != -1) &&\n (this.displayState[aggKey].splitBys[splitBy].types.indexOf(\"max\") != -1);\n }\n\n public getVisibleMeasure(aggI: string, splitBy: string) {\n if (this.displayState[aggI] == undefined || this.displayState[aggI].splitBys[splitBy] == undefined)\n return null;\n return this.displayState[aggI].splitBys[splitBy].visibleType;\n }\n\n public getAggVisible(aggKey): boolean {\n return this.displayState[aggKey].visible;\n }\n\n public getSplitByVisible(aggKey, splitBy) {\n return (this.getAggVisible(aggKey) && this.displayState[aggKey].splitBys[splitBy].visible);\n }\n\n public aggHasVisibleSplitBys(aggKey) {\n if (!this.getAggVisible(aggKey))\n return false;\n var hasVisibleSplitBy = false;\n Object.keys(this.displayState[aggKey].splitBys).forEach((splitBy) => {\n if (this.isSplitByVisible(aggKey, splitBy))\n hasVisibleSplitBy = true;\n });\n return hasVisibleSplitBy;\n }\n\n public valueAtTS(aggKey, splitByName, ts) {\n var splitBy = this.displayState[aggKey].splitBys[splitByName];\n return this.data[aggKey][this.displayState[aggKey].name][splitByName][ts][splitBy.visibleType];\n }\n\n public setFilteredAggregates() {\n this.filteredAggregates = Object.keys(this.displayState).filter((aggKey) => {\n return this.displayState[aggKey].visible;\n });\n }\n\n private guessValueType(v: any) {\n if (typeof v === 'number') {\n return valueTypes.Double;\n }\n if (typeof v === 'string') {\n return valueTypes.String;\n }\n return valueTypes.Dynamic;\n }\n\n\n public generateCSVString(offset: number = 0, dateLocale: string = 'en', spMeasures = null): string {\n //replace comma at end of line with end line character\n var endLine = (s: string): string => {\n return s.slice(0, s.length - 1) + \"\\n\";\n }\n\n var csvString = \"\";\n var headerString = \"Interval, Interval (UTC),\";\n\n var rowMap = {};\n var rowOrder = [];\n this.data.forEach(aggObj => {\n var aggKey = aggObj.aggKey;\n var splitByObject = this.displayState[aggKey].aggregateExpression.splitByObject;\n Object.keys(this.timeArrays[aggKey]).forEach((splitBy) => {\n var splitByString = Utils.stripNullGuid(this.displayState[aggKey].name);\n if (splitByObject !== undefined && splitByObject !== null) {\n splitByString += \"/\" + splitByObject.property + \"/\" + splitBy;\n } else if (splitBy !== '') {\n splitByString += '/' + splitBy;\n } else if (this.displayState[aggKey].aggregateExpression.variableAlias) {\n splitByString += '/' + this.displayState[aggKey].aggregateExpression.variableAlias;\n }\n\n let types = spMeasures ? spMeasures : this.displayState[aggKey].splitBys[splitBy].types;\n types.forEach((type) => {\n var rowKey = aggKey + \"_\" + splitBy + \"_\" + type;\n rowMap[rowKey] = {};\n rowOrder.push(rowKey);\n headerString += Utils.sanitizeString(splitByString + \".\" + type, valueTypes.String) + \",\";\n });\n });\n });\n\n csvString = endLine(headerString);\n\n this.allValues.forEach((value) => {\n if (value.measures && Object.keys(value.measures).length != 0) {\n Object.keys(value.measures).forEach((type) => {\n var rowKey = value.aggregateKey + \"_\" + value.splitBy + \"_\" + type;\n if (rowKey in rowMap) {\n rowMap[rowKey][value.dateTime.valueOf()] =\n (value.measures[type] == null || value.measures[type] == undefined) ?\n \"\" : Utils.sanitizeString(value.measures[type], this.guessValueType(value.measures[type]));\n }\n });\n }\n });\n\n this.allTimestampsArray.forEach((timeString: string) => {\n var millis = (new Date(timeString)).valueOf();\n csvString += Utils.timeFormat(this.usesSeconds, this.usesMillis, offset, null, null, null, dateLocale)(new Date(millis)) + \",\";\n csvString += Utils.timeFormat(this.usesSeconds, this.usesMillis, 0, null, null, null, dateLocale)(new Date(millis)) + \",\";\n rowOrder.forEach((rowKey) => {\n csvString += (rowMap[rowKey][millis] != undefined ? rowMap[rowKey][millis] : \"\") + \",\";\n });\n csvString = endLine(csvString);\n });\n\n return csvString;\n }\n\n public getVisibilityState() {\n let visibilityStateArray = [];\n Object.keys(this.displayState).forEach((aggKey) => {\n let aggDisplayState = this.displayState[aggKey];\n let visibleSplitBys = !aggDisplayState.visible ? [] :\n Object.keys(aggDisplayState.splitBys).filter((splitByName) => {\n return aggDisplayState.splitBys[splitByName].visible\n });\n let aggName = aggDisplayState.name;\n let visibilityObject = {};\n visibilityObject[aggName] = [aggDisplayState.visible, visibleSplitBys];\n visibilityStateArray.push(visibilityObject);\n });\n return visibilityStateArray;\n }\n}\nexport { ChartComponentData }\n","import * as d3 from 'd3';\nimport './EllipsisMenu.scss';\nimport { Component } from \"./../../interfaces/Component\";\n\nclass EllipsisMenu extends Component {\n\n private containerElement: any;\n private buttonElement: any;\n private menuElement: any;\n private menuItems: Array<any>;\n private menuIsVisible: boolean;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n private createIconPath(iconName: string, theme: string): string {\n var supportedNames: Array<string> = [\"flag\", \"grid\", \"download\"];\n return (supportedNames.indexOf(iconName) != -1) ? iconName + \"Icon\" : \"\";\n }\n\n public setMenuVisibility(isVisible) {\n this.menuIsVisible = isVisible;\n this.containerElement.classed(\"tsi-ellipsisMenuShown\", this.menuIsVisible);\n }\n\n private focusOnMenuItem(itemIndex: number = 0) {\n itemIndex = (itemIndex + this.menuItems.length) % this.menuItems.length;\n let menuItem = this.menuElement.selectAll(\".tsi-ellipsisMenuItem\").filter((d, i) => {\n return (itemIndex === i);\n });\n menuItem.node().focus();\n }\n\n private menuItemKeyHandler(event, d, i) {\n switch (event.keyCode) {\n case 9: //tab\n this.focusOnMenuItem(i + 1);\n event.preventDefault();\n break;\n case 27: //escape\n this.setMenuVisibility(false);\n this.buttonElement.node().focus();\n event.preventDefault();\n break;\n case 38: // up arrow\n this.focusOnMenuItem(i - 1);\n event.preventDefault();\n break;\n case 40: // down arrow\n this.focusOnMenuItem(i + 1);\n event.preventDefault();\n break;\n }\n }\n\n public render(menuItems, options: any = {}) {\n this.menuIsVisible = false;\n this.chartOptions.setOptions(options);\n\n this.containerElement = d3.select(this.renderTarget).classed(\"tsi-ellipsisMenuContainer\", true);\n this.setMenuItems(menuItems);\n d3.select(this.renderTarget).selectAll(\"*\").remove();\n super.themify(this.containerElement, this.chartOptions.theme);\n\n let self = this;\n this.buttonElement = d3.select(this.renderTarget).insert(\"button\")\n .attr(\"class\", \"tsi-ellipsisButton\")\n .attr(\"aria-label\", this.getString(\"Show ellipsis menu\"))\n .attr(\"title\", this.getString(\"Show ellipsis menu\"))\n .attr(\"type\", \"button\")\n .on(\"click\", function () {\n d3.select(this).attr(\"aria-label\", !self.menuIsVisible ? self.getString(\"Show ellipsis menu\") : self.getString(\"Hide ellipsis menu\"))\n .attr(\"title\", !self.menuIsVisible ? self.getString(\"Show ellipsis menu\") : self.getString(\"Hide ellipsis menu\"));\n self.setMenuVisibility(!self.menuIsVisible);\n if (self.menuIsVisible) {\n self.focusOnMenuItem(0);\n }\n });\n\n this.menuElement = d3.select(this.renderTarget).insert(\"div\")\n .attr(\"class\", \"tsi-ellipsisMenu\")\n .attr(\"role\", \"menu\");\n\n const menuElementEntered = this.menuElement.selectAll(\".tsi-ellipsisMenuItem\").data(this.menuItems)\n .enter()\n .append(\"button\")\n .classed(\"tsi-ellipsisMenuItem\", true)\n .attr(\"aria-label\", d => d.label)\n .attr(\"type\", \"button\")\n .attr(\"role\", \"menuitem\")\n .on('keydown', (event, d) => {\n const e = menuElementEntered.nodes();\n const i = e.indexOf(event.currentTarget);\n this.menuItemKeyHandler(event, d, i);\n })\n .on(\"click\", (event, d: any) => {\n d.action();\n })\n .each(function () {\n d3.select(this)\n .append(\"div\")\n .attr(\"class\", (d: any) => \"tsi-ellipsisMenuIcon \" + self.createIconPath(d.iconClass, self.chartOptions.theme));\n\n d3.select(this)\n .append(\"div\")\n .classed(\"tsi-ellipsisMenuLabel\", true)\n .text((d: any) => d.label);\n\n d3.select(this)\n .append(\"div\")\n .classed(\"tsi-ellipsisMenuDescription\", true)\n .style(\"display\", \"none\");\n });\n }\n\n private setMenuItems(rawMenuItems: Array<any>) {\n this.menuItems = rawMenuItems.reduce((menuItems, currMenuItem) => {\n menuItems.push({\n iconClass: currMenuItem.iconClass,\n label: currMenuItem.label,\n action: currMenuItem.action,\n description: currMenuItem.description\n });\n return menuItems;\n }, []);\n }\n}\n\nexport default EllipsisMenu","import * as d3 from 'd3';\nimport './Grid.scss';\nimport Utils from \"../../utils\";\nimport { Component } from \"./../../interfaces/Component\";\nimport { ChartOptions } from '../../models/ChartOptions';\nimport { ChartComponentData } from '../../models/ChartComponentData';\nimport { GRIDCONTAINERCLASS } from '../../constants/Constants';\n\nclass Grid extends Component {\n private gridComponent: any;\n private rowLabelKey: string = \"__tsiLabel__\";\n private colorKey: string = \"__tsiColor__\";\n private aggIndexKey: string = '__tsiAggIndex__';\n private chartComponentData: ChartComponentData = new ChartComponentData();\n private draw;\n private closeButton = null;\n private filteredTimestamps;\n\n private table;\n private tableHeaderRow;\n private tableContentRows;\n\n public usesSeconds: boolean = false;\n public usesMillis: boolean = false;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n static hideGrid(renderTarget: any) {\n d3.select(renderTarget).selectAll(`.${GRIDCONTAINERCLASS}`).remove();\n }\n\n static showGrid(renderTarget: any, chartOptions: ChartOptions, aggregateExpressionOptions: any,\n chartComponentData: ChartComponentData) {\n chartOptions.fromChart = true;\n d3.select(renderTarget).selectAll(`.${GRIDCONTAINERCLASS}`).remove();\n let gridContainer: any = d3.select(renderTarget).append('div')\n .attr('class', GRIDCONTAINERCLASS)\n .style('width', '100%')\n .style('height', '100%');\n\n var gridComponent: Grid = new Grid(gridContainer.node());\n gridComponent.usesSeconds = chartComponentData.usesSeconds;\n gridComponent.usesMillis = chartComponentData.usesMillis;\n var grid = gridComponent.renderFromAggregates(chartComponentData.data, chartOptions, aggregateExpressionOptions, chartComponentData);\n gridComponent.focus(0, 0);\n }\n\n static createGridEllipsisOption(renderTarget: any, chartOptions: ChartOptions, aggregateExpressionOptions: any,\n chartComponentData: ChartComponentData, labelText = 'Display Grid') {\n return {\n iconClass: \"grid\",\n label: labelText,\n action: () => {\n this.showGrid(renderTarget, chartOptions, aggregateExpressionOptions, chartComponentData);\n },\n description: \"\"\n };\n }\n\n Grid() {\n }\n\n private cellClass = (ridx, cidx) => {\n return \"tsi-table-\" + ridx + '-' + cidx;\n }\n\n public focus = (rowIdx, colIdx) => {\n try {\n (<any>this.gridComponent.select('.' + this.cellClass(rowIdx, colIdx)).node())\n .focus();\n } catch (e) {\n console.log(e);\n }\n }\n\n public renderFromAggregates(data: any, options: any, aggregateExpressionOptions: any, chartComponentData) {\n this.chartOptions.setOptions(options);\n var dataAsJson = data.reduce((p, c, i) => {\n var aeName = Object.keys(c)[0];\n Object.keys(c[aeName]).forEach(sbName => {\n var row = {};\n Object.keys(c[aeName][sbName]).forEach(dt => {\n row[dt] = c[aeName][sbName][dt];\n })\n row[this.rowLabelKey] = (Object.keys(c[aeName]).length == 1 && sbName == \"\" ? aeName : sbName);\n if (aggregateExpressionOptions && aggregateExpressionOptions[i].color)\n row[this.colorKey] = aggregateExpressionOptions[i].color;\n row[this.aggIndexKey] = i;\n p.push(row);\n })\n return p;\n }, []);\n return this.render(dataAsJson, options, aggregateExpressionOptions, chartComponentData);\n }\n\n private getRowData() {\n let rowData = [];\n Object.keys(this.chartComponentData.timeArrays).forEach((aggKey) => {\n Object.keys(this.chartComponentData.timeArrays[aggKey]).forEach((sb, sbI) => {\n if (this.chartComponentData.getSplitByVisible(aggKey, sb)) {\n rowData.push([aggKey, sb]);\n }\n })\n });\n return rowData;\n }\n\n private convertSeriesToGridData(allTimeStampMap, currSeries) {\n Object.keys(allTimeStampMap).forEach(k => allTimeStampMap[k] = {});\n currSeries = currSeries.filter((d) => {\n return d.measures !== null;\n })\n currSeries.map((dataPoint) => {\n allTimeStampMap[dataPoint.dateTime.toISOString()] = dataPoint;\n });\n return Object.keys(allTimeStampMap).map((ts) => {\n return allTimeStampMap[ts];\n });\n }\n\n private getFormattedDate = (h) => {\n var hAsDate = <any>(new Date(h));\n if (hAsDate != this.getString('Invalid Date'))\n return Utils.timeFormat(this.usesSeconds, this.usesMillis, this.chartOptions.offset, null, null, null, this.chartOptions.dateLocale)(hAsDate);\n return h;\n }\n\n private setFilteredTimestamps = () => {\n if (this.chartComponentData.fromMillis === Infinity) {\n this.filteredTimestamps = this.chartComponentData.allTimestampsArray;\n } else {\n this.filteredTimestamps = this.chartComponentData.allTimestampsArray.filter((ts) => {\n let currMillis = (new Date(ts)).valueOf();\n return (currMillis >= this.chartComponentData.fromMillis && currMillis < this.chartComponentData.toMillis);\n });\n }\n }\n\n private addHeaderCells() {\n let headerCellData = this.filteredTimestamps;// this.chartComponentData.allTimestampsArray;\n let headerCells = this.tableHeaderRow.selectAll('.tsi-headerCell').data(headerCellData);\n let headerCellsEntered = headerCells.enter()\n .append('th')\n .attr(\"tabindex\", 1)\n .merge(headerCells)\n .attr(\"class\", (d, i) => this.cellClass(0, i + 1) + ' tsi-headerCell')\n .on(\"keydown\", (event, d) => {\n const e = headerCellsEntered.nodes();\n const i = e.indexOf(event.currentTarget);\n this.arrowNavigate(event, 0, i + 1)\n })\n .text(this.getFormattedDate)\n .attr('aria-label', (h) => {\n return `${this.getString('column header for date')} ${this.getFormattedDate(h)}`\n });\n headerCellsEntered.exit().remove();\n }\n\n private addValueCells() {\n let rowData = this.getRowData();\n let rows = this.table.selectAll('.tsi-gridContentRow').data(rowData);\n let self = this;\n let allTimeStampMap = this.filteredTimestamps.reduce((tsMap, ts) => {\n tsMap[ts] = {};\n return tsMap;\n }, {});\n\n let headerCellData = this.filteredTimestamps;\n\n let rowsEntered = rows.enter()\n .append('tr')\n .classed('tsi-gridContentRow', true)\n .each(function (d, i) {\n let aggKey = d[0];\n let splitBy = d[1];\n let seriesData = self.convertSeriesToGridData(allTimeStampMap, self.chartComponentData.timeArrays[aggKey][splitBy]);\n let cells = d3.select(this).selectAll<any, unknown>('.tsi-valueCell').data(seriesData);\n let measuresData = self.chartOptions.spMeasures ? self.chartOptions.spMeasures : self.chartComponentData.displayState[aggKey].splitBys[splitBy].types;\n\n //Row header with the name of the series\n let headerCell = d3.select(this).selectAll<any, unknown>('tsi-rowHeaderCell').data([d]);\n\n let getRowHeaderText = (d) => {\n return `${self.chartComponentData.displayState[aggKey].name}${(splitBy !== '' ? (': ' + splitBy) : '')}`;\n }\n\n headerCell.enter()\n .append('td')\n .attr(\"tabindex\", 1)\n .merge(headerCell)\n .attr('class', (d, col) => `tsi-rowHeaderCell ${self.cellClass(i + 1, 0)}`)\n .on(\"keydown\", (event, d) => {\n self.arrowNavigate(event, i + 1, 0)\n })\n .attr('aria-label', d => {\n return `${self.getString('row header for')} ${Utils.stripNullGuid(getRowHeaderText(d))}`;\n })\n .each(function (d) {\n d3.select(this).select('*').remove();\n let container = d3.select(this).append('div').attr('class', 'tsi-rowHeaderContainer');\n let seriesName = container.append('div')\n .attr('class', 'tsi-rowHeaderSeriesName');\n Utils.appendFormattedElementsFromString(seriesName, getRowHeaderText(d));\n let measureContainer = container.append('div')\n .attr('class', 'tsi-rowHeaderMeasures');\n\n let measureNames = measureContainer.selectAll('.tsi-measureName').data(measuresData);\n measureNames.enter()\n .append('div')\n .attr('class', 'tsi-measureName')\n .text((d: any) => d);\n })\n headerCell.exit().remove();\n\n let cellsEntered = cells.enter()\n .append('td')\n .merge(cells)\n .attr('class', (d, col) => `tsi-valueCell ${self.cellClass(i + 1, col + 1)}`)\n .on(\"keydown\", (event, d) => {\n const e = cellsEntered.nodes();\n const col = e.indexOf(event.currentTarget);\n self.arrowNavigate(event, i + 1, col + 1)\n })\n .attr(\"tabindex\", 1)\n .attr('aria-label', (d: any, i) => {\n if (!d.measures || Object.keys(d.measures).length === 0) {\n return `${self.getString('no values at')} ${getRowHeaderText(d)} and ${self.getFormattedDate(new Date(headerCellData[i]))}`;\n }\n let formattedValues = Object.keys(d.measures).map((measureName) => {\n return `${measureName}: ${d.measures[measureName]}`;\n }).join(', ');\n return `${self.getString('values for cell at')} ${getRowHeaderText(d)} ${self.getString('and')} ${self.getFormattedDate(d.dateTime)} ${self.getString('are')} ${formattedValues}`;\n })\n .each(function (d: any, i) {\n let measures = d3.select(this).selectAll('.tsi-measureValue').data(measuresData);\n measures.enter()\n .append('div')\n .attr('class', 'tsi-measureValue')\n .text((measure: string) => d.measures ? d.measures[measure] : '');\n measures.exit().remove();\n });\n cellsEntered.exit().remove();\n });\n\n rowsEntered.exit().remove();\n }\n\n public render(data: any, options: any, aggregateExpressionOptions: any, chartComponentData: ChartComponentData = null) {\n data = Utils.standardizeTSStrings(data);\n this.chartOptions.setOptions(options);\n this.gridComponent = d3.select(this.renderTarget);\n if (chartComponentData) {\n this.chartComponentData = chartComponentData;\n } else {\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(data, aggregateExpressionOptions);\n }\n\n this.setFilteredTimestamps();\n\n super.themify(this.gridComponent, this.chartOptions.theme);\n\n this.gridComponent\n .classed(\"tsi-gridComponent\", true)\n .classed(\"tsi-fromChart\", !!options.fromChart)\n var grid = this.gridComponent\n .append('div')\n .attr(\"class\", \"tsi-gridWrapper\")\n .attr(\"tabindex\", 0)\n .on(\"click\", () => {\n if (this) {\n this.focus(0, 0);\n }\n });\n\n var headers = Object.keys(data.reduce((p, c) => {\n Object.keys(c).forEach(k => {\n if (k != this.rowLabelKey && k != this.colorKey)\n p[k] = true;\n })\n return p;\n }, {})).sort();\n\n if (!this.table) {\n this.table = grid.append('table').classed('tsi-gridTable', true);\n this.tableHeaderRow = this.table.append('tr').classed('tsi-gridHeaderRow', true);\n this.tableHeaderRow.append('th')\n .attr(\"tabindex\", 0)\n .attr(\"class\", \"tsi-topLeft \" + this.cellClass(0, 0))\n .on(\"keydown\", (event) => {\n this.arrowNavigate(event, 0, 0);\n });\n }\n\n this.addHeaderCells();\n this.addValueCells();\n\n if (this.chartOptions.fromChart) {\n this.gridComponent.selectAll('.tsi-closeButton').remove();\n this.closeButton = grid.append('button')\n .attr(\"class\", \"tsi-closeButton\")\n .attr('aria-label', this.getString('close grid'))\n .html('&times')\n .on('keydown', (event) => {\n if (event.keyCode === 9) {\n this.focus(0, 0);\n event.preventDefault();\n }\n })\n .on(\"click\", () => {\n if (!!options.fromChart) {\n Utils.focusOnEllipsisButton(this.renderTarget.parentNode);\n this.gridComponent.remove();\n }\n });\n }\n }\n\n private arrowNavigate = (d3event: any, rowIdx: number, colIdx: number) => {\n if (d3event.keyCode === 9) {\n if (this.closeButton) {\n (this.closeButton.node()).focus();\n d3event.preventDefault();\n }\n return;\n }\n var codes = [37, 38, 39, 40];\n var codeIndex = codes.indexOf(d3event.keyCode);\n if (codeIndex == -1)\n return;\n switch (codeIndex) {\n case 0:\n // left\n this.focus(rowIdx, colIdx - 1);\n d3event.preventDefault();\n break;\n case 1:\n // up\n this.focus(rowIdx - 1, colIdx);\n d3event.preventDefault();\n break;\n case 2:\n // right\n this.focus(rowIdx, colIdx + 1);\n d3event.preventDefault();\n break;\n case 3:\n // down\n this.focus(rowIdx + 1, colIdx);\n d3event.preventDefault();\n break;\n default:\n break;\n }\n }\n}\n\nexport default Grid\n","import Utils from \"../utils\";\nimport { DataTypes, TooltipMeasureFormat } from \"./../constants/Enums\";\nimport { GRIDCONTAINERCLASS } from \"./../constants/Constants\";\nimport { Component } from \"./Component\";\nimport { ChartComponentData } from './../models/ChartComponentData';\nimport EllipsisMenu from \"../components/EllipsisMenu\";\nimport * as d3 from 'd3';\nimport Split from 'split.js';\nimport Legend from \"../components/Legend\";\nimport { ShiftTypes } from \"../constants/Enums\";\nimport Grid from \"../components/Grid\";\n\nclass ChartComponent extends Component {\n\treadonly MINWIDTH = 350;\n\tprotected MINHEIGHT = 150;\n\treadonly CONTROLSWIDTH = 200;\n\treadonly GUTTERWIDTH = 6;\n\tpublic data: any;\n\tpublic aggregateExpressionOptions: any;\n\tprotected chartControlsPanel = null;\n\tprotected ellipsisContainer = null;\n\tprotected ellipsisMenu: EllipsisMenu = null;\n\tprotected legendObject: Legend;\n\n\tprotected width: number;\n\tprotected chartWidth: number;\n\tprotected svgSelection = null;\n\tprotected legendWidth: number = this.CONTROLSWIDTH;\n\tpublic draw;\n\n\tpublic chartComponentData: ChartComponentData;\n\tpublic chartMargins: any;\n\n\tconstructor(renderTarget: Element) {\n\t\tsuper(renderTarget);\n\t\tthis.chartComponentData = new ChartComponentData();\n\t}\n\n\tpublic showGrid() {\n\t\tGrid.showGrid(this.renderTarget, this.chartOptions, this.aggregateExpressionOptions, this.chartComponentData);\n\t}\n\n\tpublic gatedShowGrid() {\n\t\tif (this.isGridVisible()) {\n\t\t\tthis.showGrid();\n\t\t}\n\t}\n\n\tpublic hideGrid() {\n\t\tGrid.hideGrid(this.renderTarget);\n\t}\n\n\tpublic isGridVisible() {\n\t\treturn !d3.select(this.renderTarget).selectAll(`.${GRIDCONTAINERCLASS}`).empty();\n\t}\n\n\tprotected drawEllipsisMenu(additionalEllipsisItems = []) {\n\t\tif (this.chartOptions.canDownload || this.chartOptions.grid || (this.chartOptions.ellipsisItems && this.chartOptions.ellipsisItems.length > 0) || additionalEllipsisItems.length > 0) {\n\t\t\tif (this.ellipsisContainer === null) {\n\t\t\t\tthis.ellipsisContainer = this.chartControlsPanel.append(\"div\")\n\t\t\t\t\t.attr(\"class\", \"tsi-ellipsisContainerDiv\");\n\t\t\t}\n\t\t\tif (this.ellipsisMenu === null) {\n\t\t\t\tthis.ellipsisMenu = new EllipsisMenu(this.ellipsisContainer.node());\n\t\t\t}\n\n\t\t\tvar ellipsisItems = [];\n\t\t\tif (this.chartOptions.grid) {\n\t\t\t\tellipsisItems.push(Grid.createGridEllipsisOption(this.renderTarget, this.chartOptions, this.aggregateExpressionOptions, this.chartComponentData, this.getString(\"Display Grid\")));\n\t\t\t}\n\t\t\tif (this.chartOptions.canDownload) {\n\t\t\t\tellipsisItems.push(Utils.createDownloadEllipsisOption(() => this.chartComponentData.generateCSVString(this.chartOptions.offset, this.chartOptions.dateLocale), () => Utils.focusOnEllipsisButton(this.renderTarget), this.getString(\"Download as CSV\")));\n\t\t\t}\n\n\t\t\tif (this.chartOptions.ellipsisItems) {\n\t\t\t\tellipsisItems = ellipsisItems.concat(this.chartOptions.ellipsisItems);\n\t\t\t}\n\n\t\t\tthis.ellipsisMenu.render(ellipsisItems.concat(additionalEllipsisItems), { theme: this.chartOptions.theme });\n\t\t}\n\t}\n\n\tpublic downloadAsCSV = (isScatterPlot = false) => {\n\t\tUtils.downloadCSV(this.chartComponentData.generateCSVString(this.chartOptions.offset, this.chartOptions.dateLocale, isScatterPlot ? this.chartOptions.spMeasures : null));\n\t}\n\n\tprotected removeControlPanel() {\n\t\tif (this.chartControlsPanel) {\n\t\t\tthis.chartControlsPanel.remove();\n\t\t}\n\t\tthis.chartControlsPanel = null;\n\t\tthis.ellipsisContainer = null;\n\t\tthis.ellipsisMenu = null;\n\t}\n\n\tprotected removeEllipsisMenu() {\n\t\tif (this.ellipsisContainer) {\n\t\t\tthis.ellipsisContainer.remove();\n\t\t}\n\t\tthis.ellipsisContainer = null;\n\t\tthis.ellipsisMenu = null;\n\t}\n\n\tprotected getWidth() {\n\t\treturn Math.max((<any>d3.select(this.renderTarget).node()).clientWidth, this.MINWIDTH);\n\t}\n\n\tpublic getVisibilityState() {\n\t\treturn this.chartComponentData.getVisibilityState();\n\t}\n\n\tprotected ellipsisItemsExist() {\n\t\treturn (this.chartOptions.canDownload || this.chartOptions.ellipsisItems.length > 0 || this.chartOptions.grid);\n\t}\n\n\tprotected getDataType(aggKey) {\n\t\treturn this.chartComponentData.getDataType(aggKey);\n\t}\n\n\tprotected getCDOFromAggKey(aggKey) {\n\t\tlet matches = this.aggregateExpressionOptions.filter((cDO) => {\n\t\t\treturn cDO.aggKey === aggKey;\n\t\t});\n\t\tif (matches.length === 1) {\n\t\t\treturn matches[0];\n\t\t}\n\t\treturn {};\n\t}\n\n\tprotected getFilteredMeasures(measureList, visibleMeasure, measureFormat: TooltipMeasureFormat, xyrMeasures = null) {\n\t\tlet justVisibleMeasure = [visibleMeasure];\n\t\tswitch (measureFormat) {\n\t\t\tcase TooltipMeasureFormat.SingleValue:\n\t\t\t\treturn justVisibleMeasure;\n\t\t\tcase TooltipMeasureFormat.Scatter:\n\t\t\t\treturn xyrMeasures;\n\t\t\tdefault:\n\t\t\t\tif (measureList.length !== 3) {\n\t\t\t\t\treturn justVisibleMeasure;\n\t\t\t\t}\n\t\t\t\tlet isAvgMinMax = true;\n\t\t\t\tmeasureList.forEach((measure) => {\n\t\t\t\t\tif (!(measure === 'avg' || measure === 'min' || measure === 'max')) {\n\t\t\t\t\t\tisAvgMinMax = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn isAvgMinMax ? measureList.sort(m => m === 'min' ? -1 : (m === 'avg' ? 0 : 1)) : justVisibleMeasure;\n\t\t}\n\t}\n\n\t// to get alignment for data points between other types and linechart for tooltip formatting\n\tprotected convertToTimeValueFormat(d: any) {\n\t\tlet measuresObject = {};\n\t\tlet measureType = d.measureType ? d.measureType : this.chartComponentData.displayState[d.aggKey].splitBys[d.splitBy].visibleType;\n\t\tmeasuresObject[measureType] = d.val;\n\t\treturn {\n\t\t\taggregateKey: d.aggKey,\n\t\t\tsplitBy: d.splitBy,\n\t\t\taggregateName: this.chartComponentData.displayState[d.aggKey].name,\n\t\t\tmeasures: measuresObject\n\t\t}\n\t}\n\n\tprotected formatDate(date, shiftMillis) {\n\t\treturn Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n\t\t\tthis.chartOptions.offset, this.chartOptions.is24HourTime, shiftMillis, null, this.chartOptions.dateLocale)(date);\n\t}\n\n\tprotected tooltipFormat(d, text, measureFormat: TooltipMeasureFormat, xyrMeasures = null) {\n\t\tlet dataType = this.getDataType(d.aggregateKey);\n\t\tvar title = d.aggregateName;\n\t\tlet cDO = this.getCDOFromAggKey(d.aggregateKey);\n\n\t\tlet shiftMillis = this.chartComponentData.getTemporalShiftMillis(d.aggregateKey);\n\t\tlet formatDate = (date) => this.formatDate(date, shiftMillis);\n\n\t\tlet titleGroup = text.append(\"div\")\n\t\t\t.attr(\"class\", \"tsi-tooltipTitleGroup\");\n\n\t\tthis.createTooltipSeriesInfo(d, titleGroup, cDO);\n\n\t\tif (dataType === DataTypes.Categorical) {\n\t\t\ttitleGroup.append('h4')\n\t\t\t\t.attr('class', 'tsi-tooltipSubtitle tsi-tooltipTimeStamp')\n\t\t\t\t.text(formatDate(d.dateTime) + ' - ' + formatDate(d.endDate));\n\t\t}\n\n\t\tif (dataType === DataTypes.Events) {\n\t\t\ttitleGroup.append('h4')\n\t\t\t\t.attr('class', 'tsi-tooltipSubtitle tsi-tooltipTimeStamp')\n\t\t\t\t.text(formatDate(d.dateTime));\n\t\t}\n\n\t\tlet tooltipAttrs = cDO.tooltipAttributes;\n\t\tif (shiftMillis !== 0 && tooltipAttrs) {\n\t\t\tlet shiftTuple = this.chartComponentData.getTemporalShiftStringTuple(d.aggregateKey);\n\t\t\tif (shiftTuple !== null) {\n\t\t\t\tlet keyString = this.getString(shiftTuple[0]);\n\t\t\t\tlet valueString = (keyString === ShiftTypes.startAt) ? this.formatDate(new Date(shiftTuple[1]), 0) : shiftTuple[1];\n\t\t\t\ttooltipAttrs = [...tooltipAttrs, [keyString, valueString]];\n\t\t\t}\n\t\t}\n\n\t\tif (tooltipAttrs && tooltipAttrs.length > 0) {\n\t\t\tlet attrsGroup = text.append('div')\n\t\t\t\t.attr('class', 'tsi-tooltipAttributeContainer tsi-tooltipFlexyBox');\n\t\t\ttooltipAttrs.forEach((attrTuple, i) => {\n\t\t\t\tlet timeShiftRow = attrsGroup.append('div')\n\t\t\t\t\t.attr('class', 'tsi-tooltipAttribute tsi-tooltipFlexyItem');\n\t\t\t\ttimeShiftRow.append('div')\n\t\t\t\t\t.attr('class', 'tsi-tooltipAttrTitle')\n\t\t\t\t\t.text(attrTuple[0]);\n\t\t\t\ttimeShiftRow.append('div')\n\t\t\t\t\t.attr('class', 'tsi-tooltipAttrValue')\n\t\t\t\t\t.text(attrTuple[1]);\n\t\t\t})\n\t\t}\n\n\n\t\tif (d.measures && Object.keys(d.measures).length) {\n\t\t\tlet formatValue = (dataType === DataTypes.Events ? (d) => d : Utils.formatYAxisNumber)\n\n\t\t\tif (dataType !== DataTypes.Numeric) {\n\t\t\t\tlet valueGroup = text.append('table')\n\t\t\t\t\t.attr('class', 'tsi-tooltipValues tsi-tooltipTable');\n\t\t\t\tObject.keys(d.measures).forEach((measureType, i) => {\n\t\t\t\t\tif (!(dataType === DataTypes.Categorical) || d.measures[measureType] !== 0) {\n\t\t\t\t\t\tvalueGroup.append('tr').classed('tsi-tableSpacer', true);\n\t\t\t\t\t\tlet tr = valueGroup.append('tr')\n\t\t\t\t\t\t\t.classed('tsi-visibleValue', (dataType === DataTypes.Numeric && (measureType === this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy))))\n\t\t\t\t\t\t\t.style('border-left-color', Utils.getColorForValue(cDO, measureType));\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.attr('class', 'tsi-valueLabel')\n\t\t\t\t\t\t\t.text(measureType);\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.attr('class', 'tsi-valueCell')\n\t\t\t\t\t\t\t.text(formatValue(d.measures[measureType]))\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tlet valueGroup = text.append('div')\n\t\t\t\t\t.attr('class', 'tsi-tooltipFlexyBox');\n\t\t\t\tlet filteredMeasures = this.getFilteredMeasures(Object.keys(d.measures), this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy), measureFormat, xyrMeasures);\n\t\t\t\tfilteredMeasures.forEach((measureType, i) => {\n\t\t\t\t\tlet valueItem = valueGroup.append('div')\n\t\t\t\t\t\t.attr('class', 'tsi-tooltipFlexyItem')\n\t\t\t\t\t\t.classed('tsi-visibleValue',\n\t\t\t\t\t\t\t(dataType === DataTypes.Numeric &&\n\t\t\t\t\t\t\t\t(measureType === this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)) &&\n\t\t\t\t\t\t\t\t(measureFormat !== TooltipMeasureFormat.Scatter)));\n\t\t\t\t\tlet measureTitle = valueItem.append('div')\n\t\t\t\t\t\t.attr('class', 'tsi-tooltipMeasureTitle')\n\t\t\t\t\tUtils.appendFormattedElementsFromString(measureTitle, measureType);\n\t\t\t\t\tvalueItem.append('div')\n\t\t\t\t\t\t.attr('class', 'tsi-tooltipMeasureValue')\n\t\t\t\t\t\t.text(formatValue(d.measures[measureType]))\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected getSVGWidth() {\n\t\treturn this.chartWidth + this.chartMargins.left + this.chartMargins.right;\n\t}\n\n\tprotected getChartWidth(legendWidth = this.CONTROLSWIDTH) {\n\t\tlegendWidth = this.legendWidth;// + this.GUTTERWIDTH;\n\t\treturn Math.max(1, this.width - this.chartMargins.left - this.chartMargins.right - (this.chartOptions.legend === \"shown\" ? legendWidth : 0));\n\t}\n\n\tprotected calcSVGWidth() {\n\t\treturn this.svgSelection.node().getBoundingClientRect().width;\n\t}\n\n\tprotected setControlsPanelWidth() {\n\t\tif (!this.chartOptions.hideChartControlPanel && this.chartControlsPanel !== null) {\n\t\t\t//either calculate expected or just use svg if it's in the DOM\n\t\t\tlet controlPanelWidth = this.svgSelection && this.svgSelection.node() ?\n\t\t\t\tthis.calcSVGWidth() :\n\t\t\t\tthis.getWidth() - (this.chartOptions.legend === 'shown' ? (this.legendWidth + this.GUTTERWIDTH) : 0);\n\t\t\tthis.chartControlsPanel.style(\"width\", controlPanelWidth + \"px\");\n\t\t}\n\t}\n\n\tprotected legendPostRenderProcess(legendState: string, chartElement: any, shouldSetControlsWidth: boolean, splitLegendOnDrag: any = undefined) {\n\t\tif (legendState === 'shown') {\n\t\t\tthis.splitLegendAndSVG(chartElement.node(), splitLegendOnDrag);\n\t\t\tif (shouldSetControlsWidth) {\n\t\t\t\tthis.setControlsPanelWidth();\n\t\t\t}\n\t\t} else {\n\t\t\td3.select(this.renderTarget).select('.tsi-resizeGutter').remove();\n\t\t}\n\t}\n\n\tprotected splitLegendAndSVG(chartElement, onDrag = () => { }) {\n\t\tlet svgWidth = this.getSVGWidth();\n\t\tlet legendWidth = this.width - svgWidth;\n\t\td3.select(this.renderTarget).select('.tsi-resizeGutter').remove();\n\t\tlet legend = this.legendObject.legendElement;\n\n\t\tSplit([this.legendObject.legendElement.node(), chartElement], {\n\t\t\tsizes: [legendWidth / this.width * 100, svgWidth / this.width * 100],\n\t\t\tgutterSize: 2,\n\t\t\tminSize: [200, 0],\n\t\t\tsnapOffset: 0,\n\t\t\tcursor: 'e-resize',\n\t\t\tonDragEnd: (sizes) => {\n\t\t\t\tlet legendWidth = this.width * (sizes[0] / 100);\n\t\t\t\tthis.legendWidth = legendWidth;\n\t\t\t\tthis.chartWidth = this.getChartWidth();\n\t\t\t\tthis.draw(true);\n\t\t\t\tlegend.style('width', this.legendWidth + 'px');\n\t\t\t\td3.select(this.renderTarget).select('.tsi-resizeGutter')\n\t\t\t\t\t.classed('tsi-isDragging', false);\n\t\t\t},\n\t\t\tonDragStart: () => {\n\t\t\t\td3.select(this.renderTarget).select('.tsi-resizeGutter')\n\t\t\t\t\t.classed('tsi-isDragging', true);\n\t\t\t},\n\t\t\tonDrag: () => {\n\t\t\t\tif (!this.chartOptions.hideChartControlPanel && this.chartControlsPanel !== null) {\n\t\t\t\t\tlet svgLeftOffset = this.calcSVGWidth();\n\t\t\t\t\tthis.chartControlsPanel.style(\"width\", Math.max(svgLeftOffset, this.chartMargins.left + 8) + \"px\"); //8px to account for the width of the icon\n\t\t\t\t}\n\t\t\t\tonDrag();\n\t\t\t},\n\t\t\tgutter: (index, direction) => {\n\t\t\t\tconst gutter = document.createElement('div');\n\t\t\t\tgutter.className = `gutter tsi-resizeGutter`;\n\t\t\t\treturn gutter;\n\t\t\t},\n\t\t\tdirection: 'horizontal'\n\t\t});\n\n\t\t// explicitly set the width of the legend to a pixel value\n\t\tlet calcedLegendWidth = legend.node().getBoundingClientRect().width;\n\t\tlegend.style(\"width\", calcedLegendWidth + \"px\");\n\t}\n}\nexport { ChartComponent }\n","import { InterpolationFunctions, DataTypes, EventElementTypes } from \"../constants/Enums\";\nimport Utils from \"../utils\";\nimport { HorizontalMarker } from '../utils/Interfaces'\n\nconst DEFAULT_HEIGHT = 40;\n// Represents an expression that is suitable for use as the expression options parameter in a chart component\nclass ChartDataOptions {\n\n public searchSpan: any; // from,to,bucketSize as TSX\n public color: string | Function;\n public alias: string;\n public contextMenu: any; // describes menu shown with a split by member on context menu, and actions\n public measureTypes: Array<string>; // \n public interpolationFunction: string = InterpolationFunctions.None;\n public yExtent: any = null;\n public includeEnvelope: boolean = false;\n public includeDots: boolean = false;\n public visibilityState: Array<any> = null;\n public timeShift: string;\n public startAt: string;\n public dataType: string; //numeric, categorical, events?\n public valueMapping: any; //only present for non-numeric\n public height: number; //only present for non-numeric\n public onElementClick: any;\n public eventElementType: any;\n public rollupCategoricalValues: boolean;\n public tooltipAttributes: Array<any>; // array of tuples of attribute name/value\n public positionX: number;\n public positionY: number;\n public swimLane: number;\n public variableAlias: any;\n public connectPoints: boolean = false;\n public pointConnectionMeasure: string = '';\n public positionXVariableName: string;\n public positionYVariableName: string;\n public image: string;\n public isRawData: boolean;\n public isVariableAliasShownOnTooltip: boolean;\n public horizontalMarkers: Array<HorizontalMarker>;\n\n constructor(optionsObject: Object) {\n this.searchSpan = Utils.getValueOrDefault(optionsObject, 'searchSpan');\n this.measureTypes = Utils.getValueOrDefault(optionsObject, 'measureTypes');\n this.color = Utils.getValueOrDefault(optionsObject, 'color');\n this.alias = Utils.getValueOrDefault(optionsObject, 'alias');\n this.contextMenu = Utils.getValueOrDefault(optionsObject, 'contextMenu', []);\n this.interpolationFunction = Utils.getValueOrDefault(optionsObject, 'interpolationFunction', InterpolationFunctions.None);\n this.includeEnvelope = Utils.getValueOrDefault(optionsObject, 'includeEnvelope', false);\n this.includeDots = Utils.getValueOrDefault(optionsObject, 'includeDots', false);\n this.visibilityState = Utils.getValueOrDefault(optionsObject, 'visibilityState');\n this.yExtent = Utils.getValueOrDefault(optionsObject, 'yExtent');\n this.timeShift = Utils.getValueOrDefault(optionsObject, 'timeShift', '');\n this.dataType = Utils.getValueOrDefault(optionsObject, 'dataType', DataTypes.Numeric);\n this.valueMapping = Utils.getValueOrDefault(optionsObject, 'valueMapping', {});\n this.height = Utils.getValueOrDefault(optionsObject, 'height', DEFAULT_HEIGHT);\n this.onElementClick = Utils.getValueOrDefault(optionsObject, 'onElementClick', null);\n this.eventElementType = Utils.getValueOrDefault(optionsObject, 'eventElementType', EventElementTypes.Diamond);\n this.rollupCategoricalValues = Utils.getValueOrDefault(optionsObject, 'rollupCategoricalValues', false);\n this.tooltipAttributes = Utils.getValueOrDefault(optionsObject, 'tooltipAttributes', []);\n this.positionX = Utils.getValueOrDefault(optionsObject, 'positionX', 0);\n this.positionY = Utils.getValueOrDefault(optionsObject, 'positionY', 0);\n this.swimLane = Utils.getValueOrDefault(optionsObject, 'swimLane', null);\n this.variableAlias = Utils.getValueOrDefault(optionsObject, 'variableAlias', null);\n this.connectPoints = Utils.getValueOrDefault(optionsObject, \"connectPoints\", false)\n this.pointConnectionMeasure = Utils.getValueOrDefault(optionsObject, 'pointConnectionMeasure', '')\n this.positionXVariableName = Utils.getValueOrDefault(optionsObject, 'positionXVariableName', null);\n this.positionYVariableName = Utils.getValueOrDefault(optionsObject, 'positionYVariableName', null);\n this.image = Utils.getValueOrDefault(optionsObject, 'image', null);\n this.startAt = Utils.getValueOrDefault(optionsObject, 'startAt', null);\n this.isRawData = Utils.getValueOrDefault(optionsObject, 'isRawData', false);\n this.isVariableAliasShownOnTooltip = Utils.getValueOrDefault(optionsObject, 'isVariableAliasShownOnTooltip', true);\n this.horizontalMarkers = Utils.getValueOrDefault(optionsObject, 'horizontalMarkers', []);\n }\n}\nexport { ChartDataOptions }\n","import Utils from \"../utils\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport { ChartDataOptions } from \"../models/ChartDataOptions\";\n\nclass ChartVisualizationComponent extends ChartComponent {\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n public render(data, options, aggregateExpressionOptions) {\n this.data = Utils.standardizeTSStrings(data);\n this.chartOptions.setOptions(options);\n this.aggregateExpressionOptions = data.map((d, i) =>\n Object.assign(d, aggregateExpressionOptions && i in aggregateExpressionOptions ?\n new ChartDataOptions(aggregateExpressionOptions[i]) :\n new ChartDataOptions({})));\n }\n}\nexport { ChartVisualizationComponent }\n","import * as d3 from 'd3';\nimport Utils from \"../utils\";\nimport { ChartVisualizationComponent } from './ChartVisualizationComponent';\n\nclass TemporalXAxisComponent extends ChartVisualizationComponent {\n\n protected xAxis;\n protected x;\n protected chartHeight;\n private smartTickFormat;\n private xAxisEntered;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n private createOffsetXAxis() {\n let xCopy = this.x.copy();\n let rawStart = this.chartOptions.timeFrame ? (new Date(this.chartOptions.timeFrame[0])) : xCopy.domain()[0];\n let rawEnd = this.chartOptions.timeFrame ? (new Date(this.chartOptions.timeFrame[1])) : xCopy.domain()[1];\n xCopy.domain([\n new Date(rawStart), new Date(rawEnd)\n ]);\n return xCopy;\n }\n\n private createXAxis(singleLineXAxisLabel, snapFirst = false, snapLast = false) {\n let offsetX: any = this.createOffsetXAxis();\n let ticks = offsetX.ticks(this.getXTickNumber(singleLineXAxisLabel));\n if (ticks.length <= 2) {\n ticks = this.x.domain();\n }\n\n if (snapFirst) {\n ticks[0] = this.x.domain()[0];\n }\n if (snapLast) {\n ticks[ticks.length - 1] = this.x.domain()[1];\n }\n\n this.smartTickFormat = this.createSmartTickFormat(ticks, offsetX);\n return d3.axisBottom(this.x)\n .tickValues(ticks)\n .tickFormat(Utils.timeFormat(this.labelFormatUsesSeconds(ticks), this.labelFormatUsesMillis(ticks), this.chartOptions.offset, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale));\n }\n\n private getXTickNumber(singleLineXAxisLabel) {\n return Math.max((singleLineXAxisLabel ? Math.floor(this.chartWidth / 300) : Math.floor(this.chartWidth / 160)), 1);\n }\n\n private labelFormatUsesSeconds(ticks = null) {\n let tickSpanSubMinute = ticks ? !this.isTickSpanGreaterThan(ticks, 59 * 1000) : false;\n return !this.chartOptions.minutesForTimeLabels && tickSpanSubMinute;\n }\n\n private labelFormatUsesMillis(ticks = null) {\n let tickSpanSubSecond = ticks ? !this.isTickSpanGreaterThan(ticks, 999) : false;\n return !this.chartOptions.minutesForTimeLabels && tickSpanSubSecond;\n }\n\n public updateXAxis(forceFirst = false, forceLast = false) {\n this.xAxisEntered.call(this.createXAxis(this.chartOptions.singleLineXAxisLabel, forceFirst, forceLast));\n this.updateAxisText(forceFirst, forceLast);\n }\n\n private updateAxisText(forceFirst = false, forceLast = false) {\n //update text by applying function\n if (this.chartOptions.xAxisTimeFormat) {\n let indexOfLast = this.xAxisEntered.selectAll('.tick').size() - 1;\n let self = this;\n this.xAxisEntered.selectAll('.tick').each(function (d, i) {\n d3.select(this).select('text').text((d) => {\n let momentTimeFormatString: string = String(self.chartOptions.xAxisTimeFormat(d, i, i === 0, i === indexOfLast));\n return Utils.timeFormat(self.labelFormatUsesSeconds(), self.labelFormatUsesMillis(), self.chartOptions.offset, self.chartOptions.is24HourTime, null, momentTimeFormatString, self.chartOptions.dateLocale)(d);\n });\n });\n } else {\n let indexOfLast = this.xAxisEntered.selectAll('.tick').size() - 1;\n let self = this;\n this.xAxisEntered.selectAll('.tick').each(function (d, i) {\n d3.select(this).select('text').text((d) => {\n let momentTimeFormatString: string = String(self.smartTickFormat(d, i, i === 0, i === indexOfLast));\n //harcode format of first and last to include hours/minutes if force first/last\n if ((i === 0 && forceFirst) || (i === indexOfLast && forceLast)) {\n momentTimeFormatString = 'L ' + Utils.subDateTimeFormat(self.chartOptions.is24HourTime, false, false);\n }\n return Utils.timeFormat(self.labelFormatUsesSeconds(), self.labelFormatUsesMillis(), self.chartOptions.offset, self.chartOptions.is24HourTime, null, momentTimeFormatString, self.chartOptions.dateLocale)(d);\n });\n });\n }\n\n if (!this.chartOptions.singleLineXAxisLabel)\n this.xAxisEntered.selectAll('text').call(Utils.splitTimeLabel);\n\n this.xAxisEntered.select(\".domain\").style(\"display\", \"none\");\n }\n\n protected drawXAxis(yOffset, snapFirst = false, snapLast = false) {\n this.xAxisEntered = this.xAxis.enter()\n .append(\"g\")\n .attr(\"class\", \"xAxis\")\n .merge(this.xAxis)\n .attr(\"transform\", \"translate(0,\" + yOffset + \")\")\n .call(this.createXAxis(this.chartOptions.singleLineXAxisLabel, snapFirst, snapLast));\n this.updateAxisText(snapFirst, snapLast);\n }\n\n private isSameDate(d1, d2) {\n return (d1.getYear() === d2.getYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate());\n }\n\n private isTickSpanGreaterThan(ticks, minValue) {\n return (ticks[1].valueOf() - ticks[0].valueOf() >= minValue);\n }\n\n private createSmartTickFormat(ticks, offsetX): any {\n let spansMultipleDays = !this.isSameDate(offsetX.domain()[0], offsetX.domain()[1]);\n let lessTicksThanDays = this.isTickSpanGreaterThan(ticks, 23 * 60 * 60 * 1000);\n\n let timeFormat = Utils.subDateTimeFormat(this.chartOptions.is24HourTime, this.labelFormatUsesSeconds(ticks), this.labelFormatUsesMillis(ticks));\n\n return (d, i, isFirst, isLast) => {\n let timeAndDate = this.chartOptions.singleLineXAxisLabel ? ('L ' + timeFormat) : (timeFormat + ' L');\n if (lessTicksThanDays) {\n return 'L';\n }\n if (isFirst || isLast) {\n return timeAndDate;\n }\n if (!spansMultipleDays) {\n return timeFormat;\n }\n return timeAndDate;\n }\n }\n\n}\nexport { TemporalXAxisComponent }\n","import Utils from \"../utils\";\nimport { ChartComponentData } from \"./ChartComponentData\";\n\nclass LineChartData extends ChartComponentData {\n public timeMap: any = {};\n get yExtents(): Array<any> {\n return this._yExtents;\n };\n\n private _yExtents: Array<any> = [];\n\n public setYExtents(idx: number, value: [number, number]) {\n this._yExtents[idx] = value;\n }\n\n public resetYExtents() {\n this._yExtents = [];\n for (let i = 0; i < this.data.length; i++) {\n this._yExtents.push(null);\n }\n }\n\n public setTimeMap() {\n this.timeMap = this.allValues.reduce((timeMap, currVal) => {\n var millis = currVal.dateTime.valueOf();\n if (currVal.bucketSize != undefined) {\n millis += (currVal.bucketSize / 2);\n }\n if (currVal.measures != null) {\n if (timeMap[millis] == undefined) {\n timeMap[millis] = [currVal];\n } else {\n timeMap[millis].push(currVal);\n }\n }\n return timeMap;\n }, {});\n }\n\n constructor() {\n super();\n }\n\n public mergeDataToDisplayStateAndTimeArrays(data, aggregateExpressionOptions = null) {\n super.mergeDataToDisplayStateAndTimeArrays(data, aggregateExpressionOptions);\n }\n}\nexport { LineChartData }\n","import * as d3 from 'd3';\nimport './ContextMenu.scss';\nimport { Component } from \"./../../interfaces/Component\";\n\nconst ACTIONELEMENTHEIGHT = 28;\nconst ACTIONELEMENTMAXWIDTH = 200;\nconst ACTIONELEMENTCONTAINERMAXHEIGHT = 200;\nconst VERTICALPADDING = 4;\n\nclass ContextMenu extends Component {\n public drawChart: any;\n public contextMenuElement: any;\n public actions: any;\n public contextMenuVisible: boolean = false;\n public startTime;\n public endTime;\n\n private left: number;\n private top: number;\n\n private ae: string;\n private splitBy: string;\n private onClick: any;\n\n private subMenuFromSubLevel;\n private subMenuFromActionIndex;\n\n constructor(drawChart: any, renderTarget: Element) {\n super(renderTarget);\n this.drawChart = drawChart;\n this.contextMenuElement = d3.select(renderTarget).insert(\"div\", \":first-child\")\n .attr(\"class\", \"tsi-contextMenu\")\n .style(\"left\", \"0px\")\n .style(\"top\", \"0px\");\n }\n\n private launchSubMenu(parent, subMenuActions, subLevel, top) {\n let container = this.contextMenuElement\n .selectAll(`.tsi-actionElementContainer${subLevel}`)\n .data([{ subLevel: subLevel }]);\n let enteredContainer = container.enter()\n .append('div')\n .attr(\"class\", (d) => `tsi-actionElementContainer tsi-actionElementContainer${d.subLevel}`)\n .merge(container)\n .style('max-height', `${ACTIONELEMENTCONTAINERMAXHEIGHT}px`)\n .style('display', 'block');\n this.createActionElements(enteredContainer, subMenuActions, subLevel);\n this.positionAEC(enteredContainer, subMenuActions.length, top, subLevel);\n container.exit().remove();\n }\n\n private positionAEC(container, subMenuActionsCount, top, subLevel) {\n this.verticalPositionAEC(container, top, subMenuActionsCount, subLevel);\n this.horizontalPositionAEC(container, subLevel)\n }\n\n private shouldHorizontalFlip(rawLeft) {\n let containerLeft = rawLeft + this.left;\n let totalWidth = d3.select(this.renderTarget).node().getBoundingClientRect().width;\n return ((containerLeft + ACTIONELEMENTMAXWIDTH) > totalWidth);\n }\n\n private shouldVerticalFlip(rawTop, elementCount) {\n let containerTop = rawTop + this.top;\n let totalHeight = d3.select(this.renderTarget).node().getBoundingClientRect().height;\n let heightOfElements = Math.min(elementCount * ACTIONELEMENTHEIGHT + (VERTICALPADDING * 2), ACTIONELEMENTCONTAINERMAXHEIGHT);\n return ((containerTop + heightOfElements) > totalHeight);\n }\n\n //determine position relative to the chart as a whole\n private getRelativeHorizontalPosition(node, isLeft: boolean = true) {\n return node.getBoundingClientRect().x + (isLeft ? 0 : node.getBoundingClientRect().width) - this.renderTarget.getBoundingClientRect().x;\n }\n\n private verticalPositionAEC(actionElementContainer, rawTop, elementCount, subLevel) {\n let totalHeight = this.contextMenuElement.node().getBoundingClientRect().height;\n if (this.shouldVerticalFlip(rawTop, elementCount)) {\n actionElementContainer.style('bottom', `${(totalHeight - rawTop) - (subLevel === 0 ? 0 : ACTIONELEMENTHEIGHT + VERTICALPADDING)}px`)\n .style('top', null);\n } else {\n actionElementContainer.style('top', `${rawTop - VERTICALPADDING}px`)\n .style('bottom', null);\n }\n }\n\n private horizontalPositionAEC(actionElementContainer, subLevel) {\n let leftPosition = 0;\n let rightPosition = 0;\n if (subLevel !== 0) {\n let oneLevelUp = this.contextMenuElement.selectAll(`.tsi-actionElementContainer${subLevel - 1}`);\n if (oneLevelUp.size()) {\n rightPosition = this.getRelativeHorizontalPosition(oneLevelUp.nodes()[0], false) - this.left;\n leftPosition = this.getRelativeHorizontalPosition(oneLevelUp.nodes()[0], true) - this.left;\n }\n }\n if (this.shouldHorizontalFlip(rightPosition)) {\n actionElementContainer.style('left', null)\n .style('right', `${0 - leftPosition}px`);\n } else {\n actionElementContainer.style('left', `${rightPosition}px`)\n .style('right', null);\n }\n }\n\n private getActionElementContainerTop(launchedFromActionNode: any = null) {\n if (launchedFromActionNode === null) {\n return 0;\n }\n return launchedFromActionNode.getBoundingClientRect().top -\n this.contextMenuElement.node().getBoundingClientRect().top;\n }\n\n private removeSubMenusAboveLevel(level) {\n d3.select(this.renderTarget).selectAll('.tsi-actionElementContainer').filter((subMenuD: any) => {\n return (subMenuD.subLevel > level);\n }).remove();\n }\n\n private createActionElements(container, actions, subLevel = 0) {\n let self = this;\n var actionElements = container.selectAll(`.tsi-actionElement`)\n .data(actions.map((a) => {\n a.subLevel = subLevel;\n return a;\n }));\n\n var actionElementsEntered = actionElements.enter()\n .append(\"div\")\n .attr(\"class\", `tsi-actionElement`)\n .classed('tsi-hasSubMenu', d => d.isNested)\n .merge(actionElements)\n .text(d => d.name)\n .on('mouseenter', function (event, d) {\n const e = actionElementsEntered.nodes();\n const i = e.indexOf(event.currentTarget);\n if (d.isNested) {\n self.launchSubMenu(d3.select(this), d.subActions, subLevel + 1, self.getActionElementContainerTop(this));\n self.subMenuFromActionIndex = i;\n self.subMenuFromSubLevel = d.subLevel;\n return;\n }\n if ((d.subLevel === self.subMenuFromSubLevel && i !== self.subMenuFromActionIndex) || d.subLevel < self.subMenuFromSubLevel) {\n self.removeSubMenusAboveLevel(d.subLevel);\n }\n })\n .on(\"click\", function (event, d) {\n if (d.isNested) {\n return;\n }\n if (self.endTime) { // if endTime is present, this is a brush action\n var startTime = self.startTime ? self.startTime.toISOString().slice(0, -5) + \"Z\" : null;\n var endTime = self.endTime ? self.endTime.toISOString().slice(0, -5) + \"Z\" : null;\n d.action(startTime, endTime);\n } else {\n var timestamp = self.startTime ? self.startTime.toISOString().slice(0, -5) + \"Z\" : null;\n d.action(self.ae, self.splitBy, timestamp, event);\n }\n self.hide();\n if (self.onClick)\n self.onClick();\n });\n actionElements.exit().remove();\n }\n\n public draw(chartComponentData, renderTarget, options, mousePosition, aggKey, splitBy, onClick = null, startTime = null, endTime = null, event = null) {\n this.contextMenuVisible = true;\n\n if (!endTime) {\n this.actions = chartComponentData.displayState[aggKey].contextMenuActions;\n this.ae = chartComponentData.displayState[aggKey].aggregateExpression;\n } else {\n this.actions = options.brushContextMenuActions;\n }\n this.splitBy = splitBy;\n\n this.startTime = startTime;\n this.endTime = endTime;\n this.onClick = onClick;\n\n super.themify(this.contextMenuElement, options.theme);\n\n this.left = mousePosition[0];\n this.top = mousePosition[1];\n\n this.contextMenuElement\n .style('left', this.left + 'px')\n .style('top', this.top + 'px');\n\n this.contextMenuElement.selectAll('*').remove();\n\n this.contextMenuElement.style(\"display\", \"block\")\n .on('mouseleave', () => {\n this.removeSubMenusAboveLevel(0);\n });\n\n let actionContainer = this.contextMenuElement\n .selectAll('.tsi-actionElementContainer0')\n .data([{ subLevel: 0 }]);\n let actionContainerEntered = actionContainer.enter()\n .append('div')\n .attr('class', 'tsi-actionElementContainer tsi-actionElementContainer0');\n\n this.createActionElements(actionContainerEntered, this.actions);\n this.positionAEC(actionContainerEntered, this.actions.length, 0, 0);\n\n let self = this;\n d3.select(this.renderTarget).on(\"click\", function (event) {\n if (!d3.select(event.srcElement).classed('tsi-actionElement')) {\n if (onClick) {\n onClick();\n }\n self.hide();\n }\n });\n }\n\n public hide() {\n this.contextMenuElement.style(\"display\", \"none\");\n this.contextMenuVisible = false;\n }\n}\nexport default ContextMenu;","import * as d3 from 'd3';\nimport './Tooltip.scss';\nimport { Component } from \"./../../interfaces/Component\";\nimport { ChartComponentData } from '../../models/ChartComponentData';\n\nclass Tooltip extends Component {\n\n\n private tooltipDiv;\n private tooltipDivInner;\n private tooltipText;\n public draw;\n private borderColor;\n\n constructor(renderTarget) {\n super(renderTarget);\n }\n\n public hide() {\n if (this.tooltipDiv) {\n this.tooltipDiv.style(\"display\", \"none\");\n }\n }\n\n private getSVGWidth() {\n return !this.renderTarget.select('.tsi-chartSVG').empty() ? this.renderTarget.select('.tsi-chartSVG').node().getBoundingClientRect().width : 0;\n }\n\n private getSVGHeight() {\n return !this.renderTarget.select('.tsi-chartSVG').empty() ? this.renderTarget.select('.tsi-chartSVG').node().getBoundingClientRect().height : 0;\n }\n\n private getLeftOffset(chartMargins) {\n //NOTE - this assumes that the svg's right border is the same as the render target's\n var renderTargetWidth = this.renderTarget.node().getBoundingClientRect().width;\n return (renderTargetWidth - this.getSVGWidth() + chartMargins.left);\n }\n\n private getTopOffset(chartMargins) {\n //NOTE - this assumes that the svg's bottom border is the same as the render target's\n var renderTargetHeight = this.renderTarget.node().getBoundingClientRect().height;\n return (renderTargetHeight - this.getSVGHeight() + chartMargins.top);\n }\n\n private isRightOffset(tooltipWidth, xPos, chartMarginLeft) {\n //NOTE - this assumes that the svg's right border is the same as the render target's\n var renderTargetWidth = this.renderTarget.node().getBoundingClientRect().width;\n return this.getSVGWidth() > (xPos + tooltipWidth + 20 + chartMarginLeft);\n }\n\n private isTopOffset(tooltipHeight, yPos, chartMargins) {\n //NOTE - this assumes that the svg's bottom border is the same as the render target's\n var renderTargetHeight = this.renderTarget.node().getBoundingClientRect().height;\n let tooltipYPos = yPos + tooltipHeight + 20 + chartMargins.bottom + this.getTopOffset(chartMargins);\n return renderTargetHeight > tooltipYPos;\n }\n\n public render(theme) {\n let self = this;\n let tooltip = this.renderTarget.selectAll('.tsi-tooltip').filter(function () {\n return (this.parentNode === self.renderTarget.node());\n }).data([theme]);\n\n this.tooltipDiv = tooltip.enter().append('div')\n .attr('class', 'tsi-tooltip')\n .merge(tooltip)\n .each(function (d) {\n d3.select(this).selectAll(\"*\").remove();\n self.tooltipDivInner = d3.select(this).append('div')\n .attr('class', 'tsi-tooltipInner');\n });\n tooltip.exit().remove();\n super.themify(this.tooltipDiv, theme);\n\n // Element width is an optional parameter which ensures that the tooltip doesn't interfere with the element\n // when positioning to the right\n this.draw = (d: any, chartComponentData: ChartComponentData, xPos, yPos, chartMargins, addText, elementWidth: number = null, xOffset = 20, yOffset = 20, borderColor: string = null, isFromMarker: boolean = false) => {\n this.tooltipDiv.style(\"display\", \"block\");\n this.tooltipDivInner.text(null);\n\n this.borderColor = borderColor;\n\n var leftOffset = isFromMarker ? 0 : this.getLeftOffset(chartMargins);\n var topOffset = this.getTopOffset(chartMargins);\n addText(this.tooltipDivInner);\n\n this.tooltipDiv.style(\"left\", Math.round(xPos + leftOffset) + \"px\")\n .style(\"top\", Math.round(yPos) + topOffset + \"px\");\n\n var tooltipWidth = this.tooltipDiv.node().getBoundingClientRect().width;\n var tooltipHeight = this.tooltipDiv.node().getBoundingClientRect().height;\n var translateX = this.isRightOffset(tooltipWidth, xPos, chartMargins.left) ? xOffset :\n (-Math.round(tooltipWidth) - xOffset - (elementWidth !== null ? elementWidth : 0));\n translateX = Math.max(0 - xPos, translateX);\n\n let translateY = 0;\n\n if (this.isTopOffset(tooltipHeight, yPos, chartMargins)) { // Place tooltip @ bottom of point\n translateY = yOffset;\n } else {\n if (!isFromMarker && Math.round(yPos) - yOffset + topOffset - Math.round(tooltipHeight) <= 0) { // Upper bound check to keep tooltip within chart\n translateY = -(Math.round(yPos) + topOffset);\n } else {\n translateY = (-Math.round(tooltipHeight) - yOffset); // Place tooltip @ top of point\n }\n }\n\n this.tooltipDiv.style(\"transform\", \"translate(\" + translateX + \"px,\" + translateY + \"px)\");\n if (this.borderColor) {\n this.tooltipDivInner.style('border-left-color', this.borderColor)\n .style('border-left-width', '5px');\n } else {\n this.tooltipDivInner.style('border-left-width', '0');\n }\n }\n }\n\n}\n\nexport default Tooltip;","import { Component } from \"./Component\";\nimport Utils from '../utils';\n\nclass Plot extends Component {\n protected chartHeight;\n protected x;\n protected chartDataOptions;\n protected chartComponentData;\n protected yTop;\n protected height;\n protected aggregateGroup;\n protected backdropRect = null;\n protected plotDataType: string;\n\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n protected getVisibleSeries(aggKey) {\n return Object.keys(this.chartComponentData.timeArrays[aggKey]).filter((s) => {\n return this.chartComponentData.isSplitByVisible(aggKey, s);\n });\n }\n\n protected createGradientKey(d, splitByIndex, i) {\n return d.aggregateKey.replace(/^[^a-z]+|[^\\w:.-]+/gi, \"\") + '_' + splitByIndex + '_' + i;\n }\n\n protected addGradientStops(d, gradient) {\n\n gradient.selectAll('stop').remove();\n\n let colorMap = this.chartDataOptions.valueMap;\n if (!d.measures) {\n return;\n }\n\n //behavior if numeric measures\n let allMeasuresNumeric = Object.keys(d.measures).reduce((p, currMeasure) => {\n return (typeof d.measures[currMeasure]) === 'number' && p;\n }, true);\n\n let sumOfMeasures;\n if (allMeasuresNumeric) {\n sumOfMeasures = Object.keys(d.measures).reduce((p, currMeasure) => {\n return p + d.measures[currMeasure];\n }, 0);\n if (sumOfMeasures <= 0) {\n return;\n }\n }\n\n let numMeasures = Object.keys(d.measures).length\n Object.keys(d.measures).reduce((p, currMeasure, i) => {\n let currFraction = allMeasuresNumeric ? (d.measures[currMeasure] / sumOfMeasures) : (i / numMeasures);\n gradient.append('stop')\n .attr(\"offset\", (p * 100) + \"%\")\n .attr(\"stop-color\", this.getColorForValue(currMeasure))\n .attr(\"stop-opacity\", 1);\n\n let newFraction = allMeasuresNumeric ? (p + currFraction) : ((i + 1) / numMeasures);\n\n gradient.append('stop')\n .attr(\"offset\", (newFraction * 100) + \"%\")\n .attr(\"stop-color\", this.getColorForValue(currMeasure))\n .attr(\"stop-opacity\", 1);\n return newFraction;\n }, 0);\n }\n\n\n\n protected createBackdropRect(isVisible) {\n this.backdropRect = this.aggregateGroup.selectAll('.tsi-backdropRect')\n .data([isVisible]);\n this.backdropRect.enter().append('rect')\n .attr('class', 'tsi-backdropRect')\n .attr('x', 0)\n .attr('y', 0)\n .merge(this.backdropRect)\n .attr('visibility', d => d ? 'visible' : 'hidden')\n .attr('width', this.x.range()[1])\n .attr('height', this.height);\n this.backdropRect.exit().remove();\n }\n\n\n protected getColorForValue(value) {\n return Utils.getColorForValue(this.chartDataOptions, value);\n }\n\n protected getVisibleMeasures(measures) {\n return Object.keys(measures).filter((measure) => {\n return measures[measure] !== 0;\n });\n }\n\n protected hasData(d) {\n return d.measures && (Object.keys(d.measures).length !== 0);\n }\n}\nexport { Plot }\n","import * as d3 from 'd3';\nimport { interpolatePath } from 'd3-interpolate-path';\nimport './LinePlot.scss';\nimport { Plot } from '../../interfaces/Plot';\nimport Utils from '../../utils';\nimport { DataTypes, YAxisStates } from \"../../constants/Enums\";\nimport { AxisState } from '../../models/AxisState';\n\nclass LinePlot extends Plot {\n private defs;\n private chartWidth;\n private y;\n private visibleAggCount;\n private strokeOpacity;\n private previousIncludeDots;\n private areaPath;\n private yAxisState: AxisState;\n\n constructor(svgSelection) {\n super(svgSelection);\n this.plotDataType = DataTypes.Numeric;\n }\n\n private getXPosition(d, x) {\n var bucketSize = this.chartComponentData.displayState[d.aggregateKey].bucketSize;\n if (bucketSize) {\n return (x(d.dateTime) + x((new Date(d.dateTime.valueOf() + bucketSize)))) / 2;\n }\n return x(d.dateTime);\n }\n\n private createAreaPath(y) {\n this.areaPath = d3.area()\n .curve(this.chartOptions.interpolationFunction)\n .defined((d: any) => {\n return (d.measures !== null) &&\n (d.measures[this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)] !== null);\n })\n .x((d: any) => {\n return this.getXPosition(d, this.x);\n })\n .y0((d: any) => {\n return d.measures ? y(d.measures[this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)]) : 0;\n })\n .y1(this.chartHeight);\n }\n\n // returns the next visibleAggI\n public render(chartOptions, visibleAggI, agg, aggVisible: boolean, aggregateGroup, chartComponentData, yAxisState: AxisState,\n chartHeight, visibleAggCount, colorMap, previousAggregateData, x, areaPath, strokeOpacity, y, yMap, defs, chartDataOptions,\n previousIncludeDots, yTopAndHeight, svgSelection, categoricalMouseover, categoricalMouseout, yAxisOnClick) {\n this.previousIncludeDots = previousIncludeDots;\n this.defs = defs;\n this.chartOptions = chartOptions;\n this.chartHeight = chartHeight;\n this.visibleAggCount = visibleAggCount;\n this.chartComponentData = chartComponentData;\n this.x = x;\n this.y = y;\n let aggKey = agg.aggKey;\n this.aggregateGroup = aggregateGroup;\n const yAxisHasOnClick = yAxisOnClick && typeof yAxisOnClick === \"function\";\n\n visibleAggI = yAxisState.positionInGroup;\n\n this.yTop = yTopAndHeight[0];\n this.height = yTopAndHeight[1];\n\n let aggY;\n let aggLine;\n let aggEnvelope;\n let aggGapLine;\n\n this.yAxisState = yAxisState;\n let yExtent = this.yAxisState.yExtent;\n\n aggY = d3.scaleLinear();\n aggY.range([this.height, this.chartOptions.aggTopMargin]);\n\n if (this.chartComponentData.aggHasVisibleSplitBys(aggKey)) {\n var yRange = (yExtent[1] - yExtent[0]) > 0 ? yExtent[1] - yExtent[0] : 1;\n var yOffsetPercentage = 10 / (this.chartHeight / ((this.yAxisState.axisType === YAxisStates.Overlap) ? 1 : this.visibleAggCount));\n let yDomainMin = this.chartOptions.isArea ?\n (Math.max(yExtent[0] - (yRange * yOffsetPercentage), 0)) :\n (yExtent[0] - (yRange * yOffsetPercentage));\n aggY.domain([yDomainMin, yExtent[1] + (yRange * (10 / this.chartHeight))]);\n } else {\n aggY.domain([0, 1]);\n yExtent = [0, 1];\n }\n aggLine = d3.line()\n .curve(this.chartComponentData.displayState[aggKey].interpolationFunction ? d3[this.chartComponentData.displayState[aggKey].interpolationFunction] : this.chartOptions.interpolationFunction)\n .defined((d: any) => {\n return (d.measures !== null) &&\n (d.measures[this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)] !== null);\n })\n .x((d: any) => this.getXPosition(d, this.x))\n .y((d: any) => {\n return d.measures ? aggY(d.measures[this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)]) : null;\n });\n\n aggEnvelope = d3.area()\n .curve(this.chartComponentData.displayState[aggKey].interpolationFunction ? d3[this.chartComponentData.displayState[aggKey].interpolationFunction] : this.chartOptions.interpolationFunction)\n .defined((d: any) => (d.measures !== null) && (d.measures['min'] !== null) && (d.measures['max'] !== null))\n .x((d: any) => this.getXPosition(d, this.x))\n .y0((d: any) => d.measures ? aggY(d.measures['max']) : 0)\n .y1((d: any) => d.measures ? aggY(d.measures['min']) : 0);\n\n aggGapLine = aggLine;\n\n let localY = aggY.copy();\n localY.range([this.yTop + this.height, this.yTop + this.chartOptions.aggTopMargin]);\n yMap[aggKey] = localY;\n\n var yAxis: any = this.aggregateGroup.selectAll(\".yAxis\")\n .data([aggKey]);\n var visibleYAxis = (aggVisible && (this.yAxisState.axisType !== YAxisStates.Shared || visibleAggI === 0));\n\n yAxis = yAxis.enter()\n .append(\"g\")\n .attr(\"class\", `yAxis ${yAxisHasOnClick ? `tsi-clickableYAxis tsi-swimLaneAxis-${this.chartComponentData.displayState[aggKey].aggregateExpression.swimLane}` : ''}`)\n .merge(yAxis)\n .style(\"visibility\", ((visibleYAxis && !this.chartOptions.yAxisHidden) ? \"visible\" : \"hidden\"));\n\n if (this.yAxisState.axisType === YAxisStates.Overlap) {\n yAxis.call(d3.axisLeft(aggY).tickFormat(Utils.formatYAxisNumber).tickValues(yExtent))\n .selectAll(\"text\")\n .attr(\"y\", (d, j) => { return (j == 0) ? (-visibleAggI * 16) : (visibleAggI * 16) })\n .style(\"fill\", this.chartComponentData.displayState[aggKey].color);\n }\n else {\n yAxis.call(d3.axisLeft(aggY).tickFormat(Utils.formatYAxisNumber)\n .ticks(Math.max(2, Math.ceil(this.height / (this.yAxisState.axisType === YAxisStates.Stacked ? this.visibleAggCount : 1) / 90))))\n .selectAll(\"text\").classed(\"standardYAxisText\", true)\n }\n\n // If yAxisOnClick present, attach to yAxis\n if (yAxisHasOnClick) {\n yAxis.on(\"click\", () => {\n yAxisOnClick();\n })\n let label = document.getElementsByClassName(`tsi-swimLaneLabel-${agg.swimLane}`)[0];\n if (label) {\n yAxis.on(\"mouseover\", () => {\n label.classList.add(\"tsi-axisHover\");\n yAxis.selectAll(\"text\").classed(\"tsi-boldYAxisText\", true)\n })\n yAxis.on(\"mouseout\", () => {\n label.classList.remove(\"tsi-axisHover\");\n yAxis.selectAll(\"text\").classed(\"tsi-boldYAxisText\", false)\n })\n }\n }\n\n yAxis.exit().remove();\n\n var guideLinesData = {\n x: this.x,\n y: aggY,\n visible: visibleYAxis\n };\n let splitByColors = Utils.createSplitByColors(this.chartComponentData.displayState, aggKey, this.chartOptions.keepSplitByColor);\n\n let includeDots = this.chartOptions.includeDots || this.chartComponentData.displayState[aggKey].includeDots;\n\n let self = this;\n let splitByGroups = this.aggregateGroup.selectAll(\".tsi-splitByGroup\")\n .data(Object.keys(this.chartComponentData.timeArrays[aggKey]));\n splitByGroups.enter()\n .append(\"g\")\n .attr(\"class\", \"tsi-splitByGroup \" + agg.aggKey)\n .merge(splitByGroups)\n .each(function (splitBy, j) {\n colorMap[aggKey + \"_\" + splitBy] = splitByColors[j];\n // creation of segments between each gap in the data\n var segments = [];\n var lineData = self.chartComponentData.timeArrays[aggKey][splitBy];\n var visibleMeasure = self.chartComponentData.getVisibleMeasure(aggKey, splitBy);\n for (var i = 0; i < lineData.length - 1; i++) {\n if (lineData[i].measures !== null && lineData[i].measures[visibleMeasure] !== null) {\n var scannerI: number = i + 1;\n while (scannerI < lineData.length && ((lineData[scannerI].measures == null) ||\n lineData[scannerI].measures[visibleMeasure] == null)) {\n scannerI++;\n }\n if (scannerI < lineData.length && scannerI != i + 1) {\n segments.push([lineData[i], lineData[scannerI]]);\n }\n i = scannerI - 1;\n }\n }\n\n var durationFunction = (d) => {\n let previousUndefined = previousAggregateData.get(this) === undefined;\n return (self.chartOptions.noAnimate || previousUndefined) ? 0 : self.TRANSDURATION\n }\n\n var gapPath = d3.select(this).selectAll<SVGPathElement, unknown>(\".tsi-gapLine\")\n .data(segments.map((d) => {\n d.inTransition = true;\n return d;\n }));\n gapPath.enter()\n .append(\"path\")\n .attr(\"class\", \"tsi-valueElement tsi-gapLine\")\n .merge(gapPath)\n .style(\"visibility\", (d: any) => {\n return (self.chartComponentData.isSplitByVisible(aggKey, splitBy)) ? \"visible\" : \"hidden\";\n })\n .transition()\n .duration(durationFunction)\n .ease(d3.easeExp)\n .attr(\"stroke-dasharray\", \"5,5\")\n .attr(\"stroke\", splitByColors[j])\n .attrTween('d', function (d) {\n var previous = d3.select(this).attr('d');\n var current = aggLine(d);\n return interpolatePath(previous, current);\n })\n .on('end', (d: any) => {\n d.inTransition = false;\n });\n\n var path = d3.select(this).selectAll<SVGPathElement, unknown>(\".tsi-valueLine\")\n .data([self.chartComponentData.timeArrays[aggKey][splitBy]].map(d => {\n d.inTransition = true;\n return d;\n }));\n\n path.enter()\n .append(\"path\")\n .attr(\"class\", \"tsi-valueElement tsi-valueLine\")\n .merge(path)\n .style(\"visibility\", (d: any) => {\n return (self.chartComponentData.isSplitByVisible(aggKey, splitBy)) ? \"visible\" : \"hidden\";\n })\n .transition()\n .duration(durationFunction)\n .ease(d3.easeExp)\n .attr(\"stroke\", splitByColors[j])\n .attr(\"stroke-opacity\", self.strokeOpacity)\n .attrTween('d', function (d) {\n var previous = d3.select(this).attr('d');\n var current = aggLine(d);\n return interpolatePath(previous, current);\n })\n .on('end', (d: any) => {\n d.inTransition = false;\n });\n\n if (self.chartOptions.includeDots || self.chartComponentData.displayState[aggKey].includeDots) {\n let dots = d3.select(this).selectAll<SVGCircleElement, unknown>(\".tsi-valueDot\")\n .data(self.chartComponentData.timeArrays[aggKey][splitBy].filter((d) => {\n return d && d.measures && d.measures[self.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)] !== null;\n }), (d: any, i) => {\n return d.dateTime.toString();\n });\n\n dots.enter()\n .append('circle')\n .attr('class', 'tsi-valueElement tsi-valueDot')\n .attr('r', 3)\n .merge(dots)\n .style(\"visibility\", (d: any) => {\n return (self.chartComponentData.isSplitByVisible(aggKey, splitBy) && d.measures) ? \"visible\" : \"hidden\";\n })\n .transition()\n .duration(function (d, i) {\n return (self.previousIncludeDots.get(this) === true) ? durationFunction(d) : 0;\n })\n .ease(d3.easeExp)\n .attr(\"fill\", splitByColors[j])\n .attr('cx', (d: any) => self.getXPosition(d, self.x))\n .attr('cy', (d: any) => {\n return d.measures ? aggY(d.measures[self.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)]) : null;\n })\n .each(function () {\n self.previousIncludeDots.set(this, includeDots);\n })\n\n dots.exit().remove();\n } else {\n d3.select(this).selectAll(\".tsi-valueDot\").remove();\n }\n\n let envelopeData = {};\n if ((self.chartComponentData.displayState[aggKey].includeEnvelope || self.chartOptions.includeEnvelope) && self.chartComponentData.isPossibleEnvelope(aggKey, splitBy)) {\n envelopeData = self.chartComponentData.timeArrays[aggKey][splitBy].map((d: any) => ({ ...d, isEnvelope: true }));\n }\n let envelope = d3.select(this).selectAll<SVGPathElement, unknown>(\".tsi-valueEnvelope\")\n .data([envelopeData]);\n\n envelope.enter()\n .append(\"path\")\n .attr(\"class\", \"tsi-valueElement tsi-valueEnvelope\")\n .merge(envelope)\n .style(\"visibility\", (d: any) => {\n return (self.chartComponentData.isSplitByVisible(aggKey, splitBy)) ? \"visible\" : \"hidden\";\n })\n .transition()\n .duration(durationFunction)\n .ease(d3.easeExp)\n .style(\"fill\", splitByColors[j])\n .attr(\"fill-opacity\", .2)\n .attr(\"d\", aggEnvelope);\n\n if (self.chartOptions.isArea) {\n self.createAreaPath(aggY);\n var area = d3.select(this).selectAll<SVGPathElement, unknown>(\".tsi-valueArea\")\n .data([self.chartComponentData.timeArrays[aggKey][splitBy]]);\n\n // logic for shiny gradient fill via url()\n let svgId = Utils.guid();\n let lg = self.defs.selectAll('linearGradient')\n .data([self.chartComponentData.timeArrays[aggKey][splitBy]]);\n var gradient = lg.enter()\n .append('linearGradient');\n gradient.merge(lg)\n .attr('id', svgId).attr('x1', '0%').attr('x2', '0%').attr('y1', '0%').attr('y2', '100%');\n gradient.append('stop').attr('offset', '0%').attr('style', () => { return 'stop-color:' + splitByColors[j] + ';stop-opacity:.2' });\n gradient.append('stop').attr('offset', '100%').attr('style', () => { return 'stop-color:' + splitByColors[j] + ';stop-opacity:.03' });\n lg.exit().remove();\n\n area.enter()\n .append(\"path\")\n .attr(\"class\", \"tsi-valueArea\")\n .merge(area)\n .style(\"fill\", 'url(#' + (svgId) + ')')\n .style(\"visibility\", (d: any) => {\n return (self.chartComponentData.isSplitByVisible(aggKey, splitBy)) ? \"visible\" : \"hidden\";\n })\n .transition()\n .duration(durationFunction)\n .ease(d3.easeExp)\n .attr(\"d\", self.areaPath);\n area.exit().remove();\n }\n\n gapPath.exit().remove();\n path.exit().remove();\n previousAggregateData.set(this, splitBy);\n });\n splitByGroups.exit().remove();\n }\n}\nexport default LinePlot;","import * as d3 from 'd3';\nimport { Plot } from '../../interfaces/Plot';\nimport Utils from '../../utils';\nimport { DataTypes } from \"../../constants/Enums\";\nimport { NONNUMERICTOPMARGIN, LINECHARTTOPPADDING } from \"../../constants/Constants\";\n\nconst TOPMARGIN = 4;\n\nclass CategoricalPlot extends Plot {\n private defs;\n private hoverRect;\n private chartGroup;\n private categoricalMouseover;\n private categoricalMouseout;\n private splitBysGroup;\n\n constructor(svgSelection) {\n super(svgSelection);\n this.plotDataType = DataTypes.Categorical;\n }\n\n private onMouseover(d, rectWidth) {\n let visibleMeasures = this.getVisibleMeasures(d.measures);\n\n this.hoverRect.attr('visibility', 'visible')\n .attr('x', () => {\n return this.x(new Date(d.dateTime))\n })\n .attr('width', rectWidth)\n .attr('height', Math.max(0, this.chartHeight + 1 - LINECHARTTOPPADDING))\n .attr('fill', () => {\n return visibleMeasures.length === 1 ? this.getColorForValue(visibleMeasures[0]) : 'none'\n });\n }\n\n private onMouseout() {\n this.hoverRect.attr('visibility', 'hidden');\n this.categoricalMouseout();\n }\n\n private createHoverRect() {\n if (!this.hoverRect) {\n this.hoverRect = this.chartGroup.append('rect')\n .attr('class', 'tsi-categoricalHoverRect')\n .attr('y', LINECHARTTOPPADDING)\n .attr('height', this.chartHeight + 1)\n } else {\n this.hoverRect.raise();\n }\n }\n\n private getSeriesEndDate() {\n if (this.chartDataOptions.searchSpan) {\n return new Date(this.chartDataOptions.searchSpan.to);\n }\n return new Date(this.chartComponentData.toMillis);\n }\n\n private getBucketEndDate(d, i) {\n let data = this.chartComponentData.timeArrays[d.aggregateKey][d.splitBy];\n if (i + 1 < data.length) {\n return data[i + 1].dateTime;\n } else {\n let shouldRoundEnd = Utils.safeNotNullOrUndefined(() => this.chartDataOptions.searchSpan) && Utils.safeNotNullOrUndefined(() => this.chartDataOptions.searchSpan.bucketSize);\n return shouldRoundEnd ? Utils.roundToMillis(this.getSeriesEndDate().valueOf(), Utils.parseTimeInput(this.chartDataOptions.searchSpan.bucketSize)) : this.getSeriesEndDate();\n }\n }\n\n public render(chartOptions, visibleAggI, agg, aggVisible: boolean, aggregateGroup, chartComponentData, yExtent,\n chartHeight, visibleAggCount, colorMap, previousAggregateData, x, areaPath, strokeOpacity, y, yMap, defs,\n chartDataOptions, previousIncludeDots, yTopAndHeight, chartGroup, categoricalMouseover, categoricalMouseout) {\n this.chartOptions = chartOptions;\n this.yTop = yTopAndHeight[0];\n this.height = yTopAndHeight[1];\n this.x = x;\n this.chartComponentData = chartComponentData;\n let aggKey = agg.aggKey;\n this.chartDataOptions = chartDataOptions;\n this.chartHeight = chartHeight;\n this.chartGroup = chartGroup;\n this.categoricalMouseover = categoricalMouseover;\n this.aggregateGroup = aggregateGroup;\n this.categoricalMouseout = categoricalMouseout;\n this.createBackdropRect(true);\n if (this.aggregateGroup.selectAll('defs').empty()) {\n this.defs = this.aggregateGroup.append('defs');\n }\n if (this.aggregateGroup.selectAll('.tsi-splitBysGroup').empty()) {\n this.splitBysGroup = this.aggregateGroup.append('g').classed('tsi-splitBysGroup', true);\n }\n\n let gradientData = [];\n\n var durationFunction = (d) => {\n let previousUndefined = previousAggregateData.get(this) === undefined;\n return (self.chartOptions.noAnimate || previousUndefined) ? 0 : self.TRANSDURATION\n }\n\n let self = this;\n this.createHoverRect();\n\n let series: Array<string> = this.getVisibleSeries(aggKey);\n\n let heightPerSeries = Math.max((self.chartDataOptions.height - (series.length * TOPMARGIN)) / series.length, 0);\n let splitByGroups = this.splitBysGroup.selectAll(\".tsi-splitByGroup\")\n .data(series, (d) => {\n return d.splitBy;\n });\n splitByGroups.enter()\n .append(\"g\")\n .attr(\"class\", \"tsi-splitByGroup \" + agg.aggKey)\n .merge(splitByGroups)\n .attr('transform', (d, i) => {\n return 'translate(0,' + (NONNUMERICTOPMARGIN + (i * (this.chartDataOptions.height / series.length))) + ')';\n })\n .each(function (splitBy, j) {\n let data = self.chartComponentData.timeArrays[aggKey][splitBy];\n var categoricalBuckets = d3.select(this).selectAll<SVGRectElement, unknown>(\".tsi-categoricalBucket\")\n .data(data);\n\n var getWidth = (d, i) => {\n let seriesWidth = self.x.range()[1] - self.x.range()[0];\n var xPos1 = Math.max(self.x(new Date(d.dateTime)), 0);\n var xPos2 = self.x(self.getBucketEndDate(d, i));\n return Math.max(xPos2 - xPos1, 1);\n }\n\n const categoricalBucketsEntered = categoricalBuckets.enter()\n .append(\"rect\")\n .attr(\"class\", \"tsi-valueElement tsi-categoricalBucket\")\n .merge(categoricalBuckets)\n .style(\"visibility\", (d: any) => {\n return (self.chartComponentData.isSplitByVisible(aggKey, splitBy) && self.hasData(d)) ? \"visible\" : \"hidden\";\n })\n .on('mouseover', (event, d: any) => {\n const e = categoricalBucketsEntered.nodes();\n const i = e.indexOf(event.currentTarget);\n let y = self.yTop + (j * (self.chartDataOptions.height / series.length));\n let x = self.x(new Date(d.dateTime)) + (getWidth(d, i));\n\n let shouldMouseover = self.categoricalMouseover(d, x, y + NONNUMERICTOPMARGIN, self.getBucketEndDate(d, i), getWidth(d, i));\n if (shouldMouseover) {\n self.onMouseover(d, getWidth(d, i));\n }\n })\n .on('mouseout', () => {\n self.onMouseout();\n })\n .attr('cursor', (self.chartDataOptions.onElementClick ? 'pointer' : 'inherit'))\n .on('click', (event, d: any) => {\n if (self.chartDataOptions.onElementClick) {\n self.chartDataOptions.onElementClick(d.aggregateKey, d.splitBy, d.dateTime.toISOString(), d.measures);\n }\n })\n .transition()\n .duration(durationFunction)\n .ease(d3.easeExp)\n .attr('height', heightPerSeries)\n .attr('width', getWidth)\n .attr('x', (d: any) => {\n return self.x(new Date(d.dateTime))\n })\n .each(function (d, i) {\n let gradientKey = self.createGradientKey(d, j, i);\n gradientData.push([gradientKey, d]);\n d3.select(this)\n .attr('fill', \"url(#\" + gradientKey + \")\");\n });\n categoricalBuckets.exit().remove();\n });\n splitByGroups.exit().remove();\n\n //corresponding linear gradients\n let gradients = this.defs.selectAll('linearGradient')\n .data(gradientData, (d) => {\n return d[1].splitBy;\n });\n let enteredGradients = gradients.enter()\n .append('linearGradient')\n .attr(\"x2\", \"0%\")\n .attr(\"y2\", \"100%\")\n .merge(gradients)\n .attr(\"id\", d => d[0]);\n enteredGradients\n .each(function (d) {\n self.addGradientStops(d[1], d3.select(this));\n });\n gradients.exit().remove();\n\n }\n}\nexport default CategoricalPlot;","import * as d3 from 'd3';\nimport './EventsPlot.scss';\nimport { Plot } from '../../interfaces/Plot';\nimport Utils from '../../utils';\nimport { EventElementTypes, DataTypes } from \"../../constants/Enums\";\nimport { NONNUMERICTOPMARGIN, LINECHARTTOPPADDING } from \"../../constants/Constants\";\n\nclass EventsPlot extends Plot {\n private defs;\n private hoverLine;\n private chartGroup;\n private discreteEventsMouseover;\n private discreteEventsMouseout;\n private splitBysGroup;\n private eventHeight;\n private gradientData;\n private aggKey;\n\n private gradientArray = {};\n\n constructor(svgSelection) {\n super(svgSelection);\n this.plotDataType = DataTypes.Events;\n }\n\n private onMouseover(d, seriesNumber) {\n\n let getX = () => {\n return this.x(new Date(d.dateTime));\n }\n\n let seriesWidth = Math.ceil(this.eventHeight * Math.sqrt(2))\n let seriesTop = this.yTop + NONNUMERICTOPMARGIN + (seriesWidth * seriesNumber) + (seriesWidth / 2);\n\n let shouldMouseover = this.discreteEventsMouseover(d, getX() + (seriesWidth / 2), seriesTop, seriesWidth);\n if (!shouldMouseover) {\n return;\n }\n\n let visibleMeasures = this.getVisibleMeasures(d.measures)\n\n this.hoverLine.attr('visibility', 'visible')\n .attr('x1', getX)\n .attr('x2', getX)\n .attr('y1', LINECHARTTOPPADDING)\n .attr('y2', this.chartHeight + 1)\n .attr('stroke', () => {\n return visibleMeasures.length === 1 ? this.getColorForValue(visibleMeasures[0]) : 'grey'\n });\n }\n\n private onMouseout() {\n this.hoverLine.attr('visibility', 'hidden');\n this.discreteEventsMouseout();\n }\n\n private createHoverLine() {\n if (!this.hoverLine) {\n this.hoverLine = this.chartGroup.append('line')\n .attr('class', 'tsi-discreteEventHoverLine')\n .attr('y1', LINECHARTTOPPADDING)\n .attr('y2', this.chartHeight + 1)\n .attr('pointer-events', 'none')\n .attr('visibility', 'hidden');\n } else {\n this.hoverLine.raise();\n }\n }\n\n private setEventHeight(visibleSeriesCount) {\n let useableHeight = this.height - NONNUMERICTOPMARGIN;\n this.eventHeight = Math.floor((useableHeight / visibleSeriesCount) / Math.sqrt(2));\n }\n\n private eventOnClick = (d: any) => {\n if (this.chartDataOptions.onElementClick) {\n this.chartDataOptions.onElementClick(d.aggregateKey, d.splitBy, d.dateTime.toISOString(), d.measures);\n }\n }\n\n private colorFunction = (d) => {\n if (d.measures) {\n if (Object.keys(d.measures).length === 1) {\n return this.getColorForValue(Object.keys(d.measures)[0]);\n } else {\n return 'grey';\n }\n }\n return 'none';\n }\n\n private createDateStringFunction = (shiftMillis: number) => {\n return Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, shiftMillis, null, this.chartOptions.dateLocale);\n }\n\n private createEventElements = (splitBy, g, splitByIndex) => {\n let sortEvents = () => {\n enteredEvents.sort((a, b) => {\n if (a.dateTime < b.dateTime) {\n return -1;\n } else if (a.dateTime > b.dateTime) {\n return 1;\n }\n return 0;\n });\n }\n\n let data = this.chartComponentData.timeArrays[this.aggKey][splitBy];\n var discreteEvents = g.selectAll(\".tsi-discreteEvent\")\n .data(data, (d: any) => d.dateTime);\n\n let self = this;\n let enteredEvents;\n let shiftMillis = this.chartComponentData.getTemporalShiftMillis(this.aggKey);\n let dateStringFn = this.createDateStringFunction(shiftMillis)\n\n switch (this.chartDataOptions.eventElementType) {\n case EventElementTypes.Teardrop:\n if (discreteEvents.size() && discreteEvents.classed('tsi-discreteEventDiamond')) {\n g.selectAll('.tsi-discreteEvent').remove();\n discreteEvents = g.selectAll(\".tsi-discreteEvent\")\n .data(data, (d: any) => d.dateTime);\n }\n enteredEvents = discreteEvents.enter()\n .append('path')\n .attr('class', 'tsi-discreteEvent tsi-valueElement')\n .merge(discreteEvents)\n .classed('tsi-discreteEventDiamond', false)\n .classed('tsi-discreteEventTeardrop', true)\n .attr('transform', (d: any) => {\n return 'translate(' + (this.x(new Date(d.dateTime)) + this.eventHeight / 2) + ',' + (this.eventHeight * 1.4) + ') rotate(180)';\n })\n .attr('d', this.teardropD(this.eventHeight, this.eventHeight))\n .attr('stroke-width', Math.min(this.eventHeight / 2.25, 8))\n .attr('stroke', this.colorFunction)\n .attr('fill', 'none');\n break;\n case EventElementTypes.Diamond:\n if (discreteEvents.size() && discreteEvents.classed('tsi-discreteEventTeardrop')) {\n g.selectAll('.tsi-discreteEvent').remove();\n discreteEvents = g.selectAll(\".tsi-discreteEvent\")\n .data(data, (d: any) => d.dateTime);\n }\n enteredEvents = discreteEvents.enter()\n .append('rect')\n .attr('class', 'tsi-discreteEvent tsi-valueElement')\n .merge(discreteEvents)\n .classed('tsi-discreteEventTeardrop', false)\n .classed('tsi-discreteEventDiamond', true)\n .attr('d', 'none')\n .attr('transform', (d: any) => {\n return 'translate(' + this.x(new Date(d.dateTime)) + ',0) rotate(45)';\n })\n .attr('fill', this.colorFunction)\n .attr('stroke', 'none');\n break;\n }\n enteredEvents\n .attr('y', 0)\n .attr('x', 0)\n .attr('width', this.eventHeight)\n .attr('height', this.eventHeight)\n .on('mouseover', function (event, d) {\n d3.select(this).raise();\n self.onMouseover(d, splitByIndex);\n })\n .on('mouseout', () => {\n this.onMouseout();\n })\n .on('click', (event, d) => {\n this.eventOnClick(d);\n })\n .on('touchstart', (event, d) => {\n this.eventOnClick(d);\n })\n .on('keydown', function (event, d: any) {\n if (event.keyCode === 9) {\n sortEvents();\n d3.select(this).node().focus();\n }\n if (event.keyCode === 32 || event.keyCode === 13) {\n self.eventOnClick(d);\n }\n })\n .attr('role', this.chartDataOptions.onElementClick ? 'button' : null)\n .attr('tabindex', this.chartDataOptions.onElementClick ? '0' : null)\n .attr('cursor', this.chartDataOptions.onElementClick ? 'pointer' : 'inherit')\n .attr('aria-label', (d) => {\n if (this.chartDataOptions.onElementClick) {\n let dateString = dateStringFn(d);\n let retString = `${this.getString('event in series')} ${d.aggregateName} ${this.getString('at time')} ${dateString}.`;\n Object.keys(d.measures).forEach((mKey) => {\n retString += ` ${this.getString('measure with key')} ${mKey} ${this.getString('and value')} ${d.measures[mKey]}.`\n });\n return retString;\n }\n return null;\n })\n .style('visibility', (d: any) => {\n return (self.chartComponentData.isSplitByVisible(this.aggKey, splitBy) && self.hasData(d)) ? 'visible' : 'hidden';\n })\n\n .each(function (d: any, i) {\n if (Object.keys(d.measures).length > 1) {\n let gradientKey = self.createGradientKey(d, splitByIndex, i);\n self.gradientData.push([gradientKey, d]);\n d3.select(this)\n .attr(self.chartDataOptions.eventElementType === EventElementTypes.Teardrop ? 'stroke' : 'fill', \"url(#\" + gradientKey + \")\");\n }\n });\n discreteEvents.exit().remove();\n }\n\n private shouldDrawBackdrop = () => {\n //check to see if this is the first aggregate within a collapsed swimlane. \n let lane = this.chartComponentData.getSwimlane(this.aggKey)\n if (!this.chartOptions.swimLaneOptions || !this.chartOptions.swimLaneOptions[lane] ||\n !this.chartOptions.swimLaneOptions[lane].collapseEvents) {\n return true;\n }\n let eventSeriesInLane = Object.keys(this.chartComponentData.displayState).filter((aggKey) => {\n return this.chartComponentData.getSwimlane(aggKey) === lane;\n });\n return eventSeriesInLane.indexOf(this.aggKey) === 0;\n }\n\n public render(chartOptions, visibleAggI, agg, aggVisible: boolean, aggregateGroup, chartComponentData, yExtent,\n chartHeight, visibleAggCount, colorMap, previousAggregateData, x, areaPath, strokeOpacity, y, yMap, defs,\n chartDataOptions, previousIncludeDots, yTopAndHeight, chartGroup, discreteEventsMouseover, discreteEventsMouseout) {\n this.chartOptions = chartOptions;\n this.yTop = yTopAndHeight[0];\n this.height = yTopAndHeight[1];\n this.x = x;\n this.chartComponentData = chartComponentData;\n this.aggKey = agg.aggKey;\n this.chartDataOptions = chartDataOptions;\n this.chartHeight = chartHeight;\n this.chartGroup = chartGroup;\n this.aggregateGroup = aggregateGroup;\n this.discreteEventsMouseover = discreteEventsMouseover;\n this.discreteEventsMouseout = discreteEventsMouseout;\n\n this.createBackdropRect(this.shouldDrawBackdrop());\n\n if (this.aggregateGroup.selectAll('defs').empty()) {\n this.defs = this.aggregateGroup.append('defs');\n }\n\n this.createHoverLine();\n\n let series = this.getVisibleSeries(agg.aggKey);\n this.setEventHeight(series.length);\n\n if (this.aggregateGroup.selectAll('.tsi-splitBysGroup').empty()) {\n this.splitBysGroup = this.aggregateGroup.append('g').classed('tsi-splitBysGroup', true);\n }\n\n let self = this;\n\n let splitByGroups = this.splitBysGroup.selectAll(\".tsi-splitByGroup\")\n .data(series, (d) => {\n return d.splitBy;\n });\n\n this.gradientData = [];\n\n let enteredSplitByGroups = splitByGroups.enter()\n .append(\"g\")\n .attr(\"class\", \"tsi-eventsGroup tsi-splitByGroup \" + this.aggKey)\n .merge(splitByGroups)\n .attr('transform', (d, i) => {\n return 'translate(0,' + (+ (i * (this.chartDataOptions.height / series.length))) + ')';\n })\n .each(function (splitBy, j) {\n self.createEventElements(splitBy, d3.select(this), j);\n }).each(function () {\n self.themify(d3.select(this), self.chartOptions.theme);\n })\n splitByGroups.exit().remove();\n\n let gradients = this.defs.selectAll('linearGradient')\n .data(this.gradientData, (d) => {\n return d[1].splitBy;\n });\n let enteredGradients = gradients.enter()\n .append('linearGradient')\n .attr(\"x2\", \"0%\")\n .attr(\"y2\", \"100%\")\n .merge(gradients)\n .attr(\"id\", d => d[0]);\n enteredGradients\n .each(function (d) {\n self.addGradientStops(d[1], d3.select(this));\n });\n gradients.exit().remove();\n }\n}\nexport default EventsPlot;","class AxisState{\n public axisType;\n public yExtent: [number, number];\n public positionInGroup: number;\n\n constructor (axisType, yExtent: [number, number], positionInGroup: number) {\n this.axisType = axisType;\n this.yExtent = yExtent;\n this.positionInGroup = positionInGroup \n }\n}\n\nexport { AxisState };","import * as d3 from 'd3';\nimport './Marker.scss';\nimport Utils from \"../../utils\";\nimport { MARKERVALUENUMERICHEIGHT, LINECHARTXOFFSET } from \"./../../constants/Constants\";\nimport { Component } from \"./../../interfaces/Component\";\nimport { ChartOptions } from '../../models/ChartOptions';\nimport { LineChartData } from '../../models/LineChartData';\nimport Tooltip from '../Tooltip';\nimport { KeyCodes, ShiftTypes, DataTypes, TooltipMeasureFormat } from '../../constants/Enums';\n\nconst MARKERSTRINGMAXLENGTH = 250;\nconst MARKERVALUEMAXWIDTH = 80;\n\nclass Marker extends Component {\n //DOM components\n private markerContainer: any;\n private timeLabel: any;\n private closeButton: any;\n private markerLabel: any;\n\n private x: any;\n private timestampMillis: number;\n private chartHeight: number;\n private chartMargins: any;\n private chartComponentData: LineChartData;\n private marginLeft: number;\n private colorMap: any;\n private yMap: any;\n public onChange: any;\n private tooltipMap: any = {};\n private guid: string;\n private labelText: string = '';\n private markerIsDragging: boolean = false;\n private timeFormat;\n private isSeriesLabels: boolean = false;\n\n readonly ADDITIONALRIGHTSIDEOVERHANG = 12;\n\n constructor(renderTarget) {\n super(renderTarget);\n this.guid = Utils.guid();\n }\n\n public getGuid() {\n return this.guid;\n }\n\n public setMillis(millis: number) {\n this.timestampMillis = millis;\n }\n\n public getMillis() {\n return this.timestampMillis;\n }\n\n // returns whether the string was trimmed to the max length\n public setLabelText(labelText: string): boolean {\n if (labelText.length > MARKERSTRINGMAXLENGTH) {\n this.labelText = labelText.slice(0, MARKERSTRINGMAXLENGTH);\n return true;\n }\n this.labelText = labelText;\n return false;\n }\n\n public getLabelText() {\n return this.labelText;\n }\n\n private setSeriesLabelText(d, text, isSeriesLabelInFocus) {\n text.classed('tsi-isExpanded', false);\n let title = text.append('h4')\n .attr('class', 'tsi-seriesLabelGroupName tsi-tooltipTitle');\n Utils.appendFormattedElementsFromString(title, d.aggregateName);\n let shiftTuple = this.chartComponentData.getTemporalShiftStringTuple(d.aggregateKey);\n let shiftString = '';\n if (shiftTuple !== null) {\n shiftString = shiftTuple[0] === ShiftTypes.startAt ? this.timeFormat(new Date(shiftTuple[1])) : shiftTuple[1];\n }\n\n let labelDatum = {\n splitBy: d.splitBy,\n variableAlias: this.chartComponentData.displayState[d.aggregateKey].aggregateExpression.variableAlias,\n timeShift: shiftString,\n }\n\n let subtitle = text.selectAll('.tsi-seriesLabelSeriesName').data([labelDatum]);\n let enteredSubtitle = subtitle.enter()\n .append('div')\n .attr('class', 'tsi-seriesLabelSeriesName tsi-tooltipSubtitle');\n\n if (labelDatum.splitBy && labelDatum.splitBy !== '') {\n enteredSubtitle.append('span')\n .classed('tsi-splitBy', true)\n }\n if (labelDatum.timeShift) {\n enteredSubtitle.append('span')\n .classed('tsi-timeShift', true)\n }\n if (labelDatum.variableAlias) {\n enteredSubtitle.append('span')\n .classed('tsi-variableAlias', true)\n }\n subtitle.exit().remove();\n Utils.setSeriesLabelSubtitleText(enteredSubtitle, false);\n }\n\n protected tooltipFormat(d, text, measureFormat: TooltipMeasureFormat, xyrMeasures = null, isSeriesLabelInFocus = false) {\n\n let tooltipHeight = MARKERVALUENUMERICHEIGHT;\n\n // revert to default text format if none specified\n if (!this.isSeriesLabels) {\n text.text(Utils.formatYAxisNumber(this.getValueOfVisible(d)))\n .style('height', tooltipHeight + 'px')\n .style('line-height', ((tooltipHeight - 2) + 'px')) // - 2 to account for border height\n\n } else {\n this.setSeriesLabelText(d, text, isSeriesLabelInFocus);\n }\n text.classed('tsi-markerValueTooltipInner', true)\n .style('border-color', this.colorMap[d.aggregateKey + \"_\" + d.splitBy]);\n }\n\n private getLeft(d) {\n return Math.round(this.x(d.timestamp) + this.marginLeft);\n }\n\n\n // check to see if any marker is being dragged\n private isMarkerDragOccuring() {\n return this.markerIsDragging;\n return (d3.select(this.renderTarget).selectAll('.tsi-markerContainer').filter((d: any) => {\n return d.isDragging;\n }).size() > 0);\n }\n\n private bumpMarker() {\n d3.select(this.renderTarget).selectAll('.tsi-markerContainer')\n .style('animation', 'none')\n .sort((a: any, b: any) => {\n if (a.timestamp === this.timestampMillis) {\n return 1;\n }\n if (b.timestamp === this.timestampMillis) {\n return -1;\n }\n return a.timestamp < b.timestamp ? 1 : -1;\n });\n }\n\n private renderMarker() {\n let self = this;\n let marker = d3.select(this.renderTarget).selectAll<HTMLDivElement, unknown>(`.tsi-markerContainer`)\n .filter((d: any) => d.guid === this.guid)\n .data([{ guid: this.guid, timestamp: this.timestampMillis }]);\n this.markerContainer = marker.enter()\n .append('div')\n .attr('class', 'tsi-markerContainer')\n .classed('tsi-isSeriesLabels', this.isSeriesLabels)\n .merge(marker)\n .style('top', `${this.chartMargins.top + this.chartOptions.aggTopMargin}px`)\n .style('height', `${this.chartHeight - (this.chartMargins.top + this.chartMargins.bottom + this.chartOptions.aggTopMargin)}px`)\n .style('left', (d: any) => {\n return `${this.getLeft(d)}px`;\n })\n .classed('tsi-isFlipped', (d) => {\n if (this.isSeriesLabels) {\n return false;\n }\n return (this.chartOptions.labelSeriesWithMarker && this.x(d.timestamp) > (this.x.range()[1] - MARKERVALUEMAXWIDTH));\n })\n .each(function (markerD) {\n if (self.isSeriesLabels) {\n return;\n }\n if (d3.select(this).selectAll('.tsi-markerLine').empty()) {\n d3.select(this).append('div')\n .attr('class', 'tsi-markerLine');\n self.markerLabel = d3.select(this).append('div')\n .attr('class', 'tsi-markerLabel')\n .on('mouseleave', function () {\n d3.select(this).classed('tsi-markerLabelHovered', false);\n });\n\n self.markerLabel.append('div')\n .attr('class', 'tsi-markerGrabber')\n .on('mouseenter', () => {\n self.bumpMarker();\n });\n\n self.markerLabel.append('div')\n .attr('class', 'tsi-markerLabelText')\n .attr('contenteditable', 'true')\n .text(self.labelText)\n .on('keydown', (event) => {\n if (event.keyCode === KeyCodes.Enter && !event.shiftKey) {\n event.preventDefault();\n self.closeButton.node().focus();\n }\n })\n .on('input', function () {\n let didTrim = self.setLabelText(d3.select(this).text());\n if (didTrim) {\n d3.select(this).text(self.labelText);\n }\n })\n .on('focus', function () {\n d3.select(this.parentNode).classed('tsi-markerLabelTextFocused', true);\n })\n .on('blur', function () {\n d3.select(this.parentNode).classed('tsi-markerLabelTextFocused', false);\n self.onChange(false, false, false);\n })\n .on('mousedown', (event) => {\n event.stopPropagation();\n })\n .on('mouseover', function () {\n if (!self.isMarkerDragOccuring()) {\n d3.select(d3.select(this).node().parentNode).classed('tsi-markerLabelHovered', true);\n self.bumpMarker();\n }\n });\n\n self.closeButton = self.markerLabel.append(\"button\")\n .attr(\"aria-label\", self.getString('Delete marker'))\n .classed(\"tsi-closeButton\", true)\n .on(\"click\", function () {\n self.onChange(true, false);\n d3.select((d3.select(this).node() as any).parentNode.parentNode).remove();\n });\n\n self.timeLabel = d3.select(this).append(\"div\")\n .attr('class', 'tsi-markerTimeLabel');\n }\n d3.select(this).selectAll('.tsi-markerTimeLabel,.tsi-markerLine,.tsi-markerLabel')\n .call(d3.drag()\n .on('start', function (event, d: any) {\n d.isDragging = true;\n self.markerIsDragging = true;\n self.bumpMarker();\n })\n .on('drag', function (event, d) {\n if (d3.select(event.sourceEvent.target).classed('tsi-closeButton')) {\n return;\n }\n let marker = d3.select(<any>d3.select(this).node().parentNode);\n let startPosition = self.x(new Date(self.timestampMillis));\n let newPosition = startPosition + event.x;\n\n self.timestampMillis = Utils.findClosestTime(self.x.invert(newPosition).valueOf(), self.chartComponentData.timeMap);\n self.setPositionsAndLabels(self.timestampMillis);\n })\n .on('end', function (event, d: any) {\n if (!d3.select(event.sourceEvent.target).classed('tsi-closeButton')) {\n self.onChange(false, false);\n }\n d.isDragging = false;\n self.markerIsDragging = false;\n })\n );\n });\n marker.exit().remove();\n }\n\n private getValueOfVisible(d: any) {\n return Utils.getValueOfVisible(d, this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy));\n }\n\n private getTooltipKey(d: any) {\n return d.aggregateKey + '_' + d.splitBy;\n }\n\n private findYatX(x, path) {\n let pathParent = path.parentNode;\n let length_end = path.getTotalLength();\n let length_start = 0;\n let point = path.getPointAtLength((length_end + length_start) / 2);\n let bisection_iterations_max = 100;\n let bisection_iterations = 0;\n\n let error = 0.01;\n\n while (x < point.x - error || x > point.x + error) {\n point = path.getPointAtLength((length_end + length_start) / 2)\n if (x < point.x) {\n length_end = (length_start + length_end) / 2\n } else {\n length_start = (length_start + length_end) / 2\n }\n if (bisection_iterations_max < ++bisection_iterations) {\n break;\n }\n }\n let offset = path.parentNode.parentNode.transform.baseVal[0].matrix.f; // roundabout way of getting the y transform of the agg group\n return point.y + offset;\n }\n\n private positionToValue(yPos: number, aggKey: string) {\n let yScale = this.yMap[aggKey];\n return yScale.invert(yPos);\n }\n\n private bisectionInterpolateValue(millis: number, aggKey: string, splitBy: string, path: any) {\n if (path === null) {\n return null;\n }\n let yPosition = this.findYatX(this.x(millis), path);\n let interpolatedValue = this.positionToValue(yPosition, aggKey);\n let newDatum = this.createNewDatum(aggKey, splitBy, interpolatedValue);\n newDatum.isInterpolated = true;\n return newDatum;\n }\n\n private getPath(aggKey: string, splitBy: string) {\n let selectedPaths = d3.select(this.renderTarget).selectAll('.tsi-valueLine').filter((d: any) => {\n if (d.length) {\n return d[0].aggregateKey === aggKey && d[0].splitBy === splitBy;\n }\n return false;\n });\n if (selectedPaths.size() === 0) {\n return null;\n }\n return selectedPaths.nodes()[0];\n }\n\n private createNewDatum(aggKey, splitBy, valueOfVisible) {\n let newDatum: any = {};\n newDatum.aggregateKey = aggKey;\n newDatum.splitBy = splitBy;\n newDatum.measures = {}\n newDatum.measures[this.chartComponentData.getVisibleMeasure(aggKey, splitBy)] = valueOfVisible;\n return newDatum;\n }\n\n private findGapPath(aggKey, splitBy, millis) {\n let gapPath = d3.select(this.renderTarget).selectAll('.tsi-gapLine')\n .filter((d: any) => {\n if (d.length === 2 && aggKey === d[0].aggregateKey && splitBy === d[0].splitBy) {\n return (millis > d[0].dateTime.valueOf() && millis < d[1].dateTime.valueOf());\n }\n return false;\n });\n if (gapPath.size() === 0) {\n return null;\n }\n return gapPath.nodes()[0];\n }\n\n //check if a value is within the time constrained bounds of a path\n private inBounds(path: any, millis: number) {\n let filteredData = path.data()[0].filter((d) => {\n return d.measures && this.getValueOfVisible(d) !== null;\n })\n if (filteredData.length > 0) {\n let lowerBound = filteredData[0].dateTime.valueOf();\n let upperBound = filteredData[filteredData.length - 1].dateTime.valueOf();\n return millis >= lowerBound && millis <= upperBound;\n }\n return false;\n }\n\n private getIntersectingPath(aggKey: string, splitBy: string, millis: number) {\n if (this.chartComponentData.displayState[aggKey].bucketSize) {\n millis = millis - (this.chartComponentData.displayState[aggKey].bucketSize / 2);\n }\n let gapPath = this.findGapPath(aggKey, splitBy, millis);\n if (gapPath) {\n return gapPath;\n } else {\n return this.inBounds(d3.select(this.getPath(aggKey, splitBy)), millis) ? this.getPath(aggKey, splitBy) : null;\n }\n }\n\n private interpolateValue(millis, aggKey, splitBy) {\n let path = this.getIntersectingPath(aggKey, splitBy, millis);\n if (path === null) {\n return null;\n }\n return this.bisectionInterpolateValue(millis, aggKey, splitBy, path);\n }\n\n private getValuesAtTime(closestTime) {\n let valueArray = [];\n let values = this.chartComponentData.timeMap[closestTime] != undefined ? this.chartComponentData.timeMap[closestTime] : [];\n Object.keys(this.chartComponentData.visibleTAs).forEach((aggKey) => {\n Object.keys(this.chartComponentData.visibleTAs[aggKey]).forEach((splitBy) => {\n if (this.chartComponentData.displayState[aggKey].dataType !== DataTypes.Numeric) {\n return;\n }\n let filteredValues = values.filter((v) => {\n return (v.aggregateKey === aggKey && v.splitBy === splitBy && this.getValueOfVisible(v) !== null);\n });\n if (filteredValues.length === 1 && (this.getValueOfVisible(filteredValues[0]) !== null)) {\n valueArray.push(filteredValues[0]);\n } else {\n let interpolatedValue = this.interpolateValue(closestTime, aggKey, splitBy);\n if (interpolatedValue !== null || !this.isSeriesLabels) {\n valueArray.push(interpolatedValue);\n } else {\n let lastValue = this.chartComponentData.findLastTimestampWithValue(aggKey, splitBy);\n if (lastValue !== null) {\n valueArray.push(lastValue);\n }\n }\n }\n });\n });\n return valueArray;\n }\n\n private setValueLabels(closestTime) {\n let values = this.getValuesAtTime(closestTime);\n values = values.filter((d) => {\n return d && this.chartComponentData.getDataType(d.aggregateKey) === DataTypes.Numeric;\n });\n let self = this;\n\n let valueLabels = this.markerContainer.selectAll(\".tsi-markerValue\").data(values, (d) => {\n return d.aggregateKey + \"_\" + d.splitBy;\n });\n\n valueLabels.enter()\n .append(\"div\")\n .classed(\"tsi-markerValue\", true)\n .classed('tsi-seriesLabelValue', this.isSeriesLabels)\n .merge(valueLabels)\n .classed('tsi-isInterpolated', d => {\n return d.isInterpolated;\n })\n .style('top', (d) => this.calcTopOfValueLabel(d) + 'px')\n .each(function (d: any) {\n let tooltipKey = self.getTooltipKey(d);\n let tooltip;\n\n if (self.tooltipMap[tooltipKey]) {\n tooltip = self.tooltipMap[tooltipKey];\n } else {\n tooltip = new Tooltip(d3.select(this));\n self.tooltipMap[tooltipKey] = tooltip;\n }\n tooltip.render(self.chartOptions.theme);\n let tooltipHeight = MARKERVALUENUMERICHEIGHT;\n tooltip.draw(d, self.chartComponentData, 0, MARKERVALUENUMERICHEIGHT / 2, { right: 0, left: 0, top: 0, bottom: 0 }, (tooltipTextElement) => {\n self.tooltipFormat(d, tooltipTextElement, null, null);\n }, null, 0, 0, self.colorMap[d.aggregateKey + \"_\" + d.splitBy], true);\n\n let markerValueCaret = d3.select(this).selectAll<HTMLDivElement, unknown>('.tsi-markerValueCaret')\n .data([d]);\n markerValueCaret.enter().append('div')\n .attr('class', 'tsi-markerValueCaret')\n .merge(markerValueCaret)\n .style(\"border-right-color\", () => self.colorMap[d.aggregateKey + \"_\" + d.splitBy]);\n markerValueCaret.exit().remove();\n });\n\n let valueLabelsExit = valueLabels.exit();\n valueLabelsExit.each((d) => {\n delete this.tooltipMap[this.getTooltipKey(d)];\n })\n valueLabelsExit.remove();\n }\n\n private calcTopOfValueLabel(d: any) {\n let yScale = this.yMap[d.aggregateKey];\n return Math.round(yScale(this.getValueOfVisible(d)) - this.chartOptions.aggTopMargin);\n }\n\n private getTimeFormat() {\n return Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, 0, null, this.chartOptions.dateLocale);\n }\n\n private setTimeLabel(closestTime: number) {\n if (this.isSeriesLabels) {\n return;\n }\n let values: Array<any> = this.chartComponentData.timeMap[closestTime];\n if (values == undefined || values.length == 0) {\n return;\n }\n let firstValue = values[0].dateTime;\n let secondValue = new Date(values[0].dateTime.valueOf() + (values[0].bucketSize != null ? values[0].bucketSize : 0));\n this.timeLabel.text('');\n\n this.timeLabel.append('div')\n .attr('class', 'tsi-markerTimeLine')\n .text(this.timeFormat(firstValue));\n if (values[0].bucketSize !== null) {\n this.timeLabel.append('div')\n .attr('class', 'tsi-markerTimeLine')\n .text(this.timeFormat(secondValue));\n }\n\n let markerLeft: number = Number(this.markerContainer.style(\"left\").replace(\"px\", \"\"));\n let timeLabelWidth: number = Math.round(this.timeLabel.node().getBoundingClientRect().width);\n let minLeftPosition = this.marginLeft + LINECHARTXOFFSET;\n let width = this.x.range()[1] - this.x.range()[0];\n let maxRightPosition = width + this.marginLeft + LINECHARTXOFFSET + this.ADDITIONALRIGHTSIDEOVERHANG;\n let calculatedLeftPosition = markerLeft - (timeLabelWidth / 2);\n let calculatedRightPosition = markerLeft + (timeLabelWidth / 2);\n let translate = \"translateX(calc(-50% + 1px))\";\n if (calculatedLeftPosition < minLeftPosition) {\n translate = \"translateX(-\" + Math.max(0, markerLeft - minLeftPosition) + \"px)\";\n }\n if (calculatedRightPosition > maxRightPosition) {\n translate = \"translateX(calc(-50% + \" + (maxRightPosition - calculatedRightPosition) + \"px))\";\n }\n\n this.timeLabel\n .style(\"-webkit-tranform\", translate)\n .style(\"transform\", translate);\n }\n\n public focusCloseButton() {\n if (this.closeButton) {\n this.closeButton.node().focus();\n }\n }\n\n public isMarkerInRange(millis: number = this.timestampMillis) {\n let domain = this.x.domain();\n return !(millis < domain[0].valueOf() || millis > domain[1].valueOf());\n }\n\n public destroyMarker() {\n if (this.markerContainer) {\n this.markerContainer.remove();\n }\n this.tooltipMap = {};\n this.markerContainer = null;\n }\n\n\n public render(timestampMillis: number, chartOptions: ChartOptions, chartComponentData: any, additionalMarkerFields: { chartMargins: any, x: any, marginLeft: number, colorMap: any, yMap: any, onChange: any, isDropping: boolean, chartHeight: number, labelText: string, isSeriesLabels: boolean }) {\n this.chartMargins = Object.assign({}, additionalMarkerFields.chartMargins);\n this.chartHeight = additionalMarkerFields.chartHeight;\n this.timestampMillis = timestampMillis;\n this.chartOptions = chartOptions;\n this.x = additionalMarkerFields.x;\n this.chartComponentData = chartComponentData;\n this.marginLeft = additionalMarkerFields.marginLeft;\n this.colorMap = additionalMarkerFields.colorMap;\n this.timeFormat = this.getTimeFormat();\n this.isSeriesLabels = additionalMarkerFields.isSeriesLabels;\n if (additionalMarkerFields.labelText) {\n this.labelText = additionalMarkerFields.labelText;\n }\n\n this.yMap = additionalMarkerFields.yMap;\n if (additionalMarkerFields.onChange) { // only update onChange if passed in, otherwise maintain previous\n this.onChange = additionalMarkerFields.onChange;\n }\n\n if (!this.isMarkerInRange(this.timestampMillis)) {\n this.destroyMarker();\n return;\n }\n\n this.renderMarker();\n\n let closestTime = Utils.findClosestTime(this.timestampMillis, this.chartComponentData.timeMap);\n this.setPositionsAndLabels(closestTime);\n super.themify(this.markerContainer, this.chartOptions.theme);\n }\n\n public setPositionsAndLabels(millis: number) {\n if (!this.isMarkerInRange(millis)) {\n this.destroyMarker();\n return;\n }\n this.renderMarker();\n this.setTimeLabel(millis);\n this.setValueLabels(millis);\n }\n}\n\nexport default Marker;","import * as d3 from 'd3';\nimport * as d3Voronoi from 'd3-voronoi';\nimport './LineChart.scss';\nimport Utils from \"../../utils\";\nimport { DataTypes, YAxisStates, TooltipMeasureFormat } from \"./../../constants/Enums\";\nimport { LINECHARTTOPPADDING, LINECHARTCHARTMARGINS, VALUEBARHEIGHT, SERIESLABELWIDTH } from \"./../../constants/Constants\";\nimport Legend from \"./../Legend\";\nimport { TemporalXAxisComponent } from \"./../../interfaces/TemporalXAxisComponent\";\nimport { LineChartData } from \"./../../models/LineChartData\";\nimport ContextMenu from '../ContextMenu';\nimport Tooltip from '../Tooltip';\nimport { ChartDataOptions } from '../../models/ChartDataOptions';\nimport LinePlot from '../LinePlot';\nimport CategoricalPlot from '../CategoricalPlot';\nimport EventsPlot from '../EventsPlot';\nimport { AxisState } from '../../models/AxisState';\nimport Marker from '../Marker';\nimport { swimlaneLabelConstants } from '../../constants/Constants'\nimport { HorizontalMarker } from '../../utils/Interfaces';\n\nclass LineChart extends TemporalXAxisComponent {\n private targetElement: any;\n private focus: any;\n private horizontalValueBox: any;\n private verticalValueBox: any;\n private horizontalValueBar: any;\n private contextMenu: ContextMenu;\n private brushContextMenu: ContextMenu;\n private setDisplayStateFromData: any;\n private minBrushWidth = 1;\n private strokeOpacity = 1;\n private nonFocusStrokeOpactiy = .3;\n chartComponentData = new LineChartData();\n private surpressBrushTimeSet: boolean = false;\n private hasStackedButton: boolean = false;\n private stackedButton: any = null;\n private visibleAggCount: number;\n private swimLaneLabelGroup: any;\n private horizontalLabelOffset = LINECHARTCHARTMARGINS.left + swimlaneLabelConstants.leftMarginOffset;\n\n private tooltip: Tooltip;\n private height: number;\n private xLowerBound: number;\n private xUpperBound: number;\n private y: any;\n private yMap: any;\n private line: any;\n private areaPath: any;\n private envelope: any;\n private voronoi: any;\n private possibleTimesArray: any;\n private colorMap: any;\n\n private markers = {};\n\n private seriesLabelsMarker: Marker = null;\n private markerGuidMap: any = {};\n private isDroppingMarker: boolean = false;\n private activeMarker: Marker;\n private brush: any;\n private brushElem: any;\n public brushStartTime: Date;\n public brushEndTime: Date;\n private brushStartPosition: number = null;\n private brushEndPosition: number = null;\n private hasBrush: boolean = false;\n private isClearingBrush: boolean = false;\n private previousAggregateData: any = d3.local();\n private previousIncludeDots: any = d3.local();\n private voronoiDiagram;\n private voronoiRegion;\n private mx = null;\n private my = null;\n private focusedAggKey: string = null;\n private focusedSplitby: string = null;\n\n private plotComponents = {};\n\n private isFirstMarkerDrop = true;\n private xOffset = 8;\n\n private swimlaneYExtents = {}; // mapping of swimlanes to the y extents of that swimlane\n private swimLaneContents = {};\n\n private originalSwimLanes: Array<number>;\n private originalSwimLaneOptions: any;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n this.MINHEIGHT = 26;\n this.chartMargins = Object.assign({}, LINECHARTCHARTMARGINS);\n }\n\n LineChart() {\n }\n\n\n //get the left and right positions of the brush\n public getBrushPositions() {\n var leftPos = null;\n var rightPos = null;\n if (this.brushStartTime) {\n var rawLeft = this.x(this.brushStartTime);\n if (rawLeft >= 0 && rawLeft <= this.chartWidth)\n leftPos = Math.round(rawLeft + this.chartMargins.left);\n }\n if (this.brushEndTime) {\n var rawRight = this.x(this.brushEndTime);\n if (rawRight >= 0 && rawRight <= this.chartWidth)\n rightPos = Math.round(rawRight + this.chartMargins.left);\n }\n return {\n leftPos: leftPos,\n rightPos: rightPos\n };\n }\n\n private resetValueElementsFocus = () => {\n this.svgSelection.selectAll(\".tsi-valueElement\")\n .attr(\"stroke-opacity\", this.strokeOpacity)\n .filter(function () {\n return !d3.select(this).classed(\"tsi-valueEnvelope\");\n })\n .attr(\"fill-opacity\", 1);\n\n this.svgSelection.selectAll(\".tsi-valueEnvelope\")\n .attr(\"fill-opacity\", .2);\n\n Utils.revertAllSubtitleText(d3.select(this.renderTarget).selectAll('.tsi-markerValue'));\n\n this.focusedAggKey = null;\n this.focusedSplitby = null;\n }\n\n private hideFocusElements() {\n this.focus.style('display', 'none');\n this.verticalValueBox.style('display', 'none');\n this.horizontalValueBox.style('display', 'none');\n }\n\n private voronoiMouseout(event, d: any) {\n //supress if the context menu is visible\n if (this.contextMenu && this.contextMenu.contextMenuVisible)\n return;\n\n this.hideFocusElements();\n this.tooltip.hide();\n (<any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel')).classed(\"inFocus\", false);\n if (event && event.type != 'end') {\n event.stopPropagation();\n }\n\n this.resetValueElementsFocus();\n\n /** Update y Axis */\n if (this.chartOptions.yAxisState == YAxisStates.Overlap) {\n this.svgSelection.selectAll(\".yAxis\")\n .selectAll(\"text\")\n .style(\"fill-opacity\", 1)\n .classed(\"standardYAxisText\", false)\n .style(\"font-weight\", \"normal\");\n }\n }\n\n private createMarkerInstructions() {\n this.targetElement.selectAll(\".tsi-markerInstructions\").remove();\n this.targetElement.append(\"div\")\n .classed(\"tsi-markerInstructions\", true)\n .attr('role', 'alert')\n .attr('aria-live', 'assertive')\n .text(this.getString(\"Click to drop marker\") + \",\" + this.getString(\"drag to reposition\") + \".\");\n }\n\n private destroyMarkerInstructions() {\n this.targetElement.selectAll(\".tsi-markerInstructions\").remove();\n }\n\n public triggerLineFocus = (aggKey: string, splitBy: string) => {\n this.focusedAggKey = null;\n this.focusedSplitby = null;\n this.focusOnlyHoveredSeries(aggKey, splitBy, true);\n }\n\n private getMouseoverFunction(chartType = DataTypes.Numeric) {\n switch (chartType) {\n case DataTypes.Categorical:\n return this.categoricalMouseover;\n case DataTypes.Events:\n return this.discreteEventsMouseover;\n default:\n return () => { }\n }\n }\n\n private getMouseoutFunction(chartType = DataTypes.Numeric) {\n switch (chartType) {\n case DataTypes.Categorical:\n return this.categoricalMouseout;\n case DataTypes.Events:\n return this.discreteEventsMouseout;\n default:\n return () => { }\n }\n }\n\n private focusOnlyHoveredSeries = (aggKey, splitBy, shouldSetFocusedValues: boolean) => {\n if (aggKey !== this.focusedAggKey || splitBy !== this.focusedSplitby) {\n let selectedFilter = Utils.createValueFilter(aggKey, splitBy);\n\n this.focusMarkerLabel(selectedFilter, aggKey, splitBy);\n\n this.svgSelection.selectAll(\".tsi-valueElement\")\n .attr(\"stroke-opacity\", this.nonFocusStrokeOpactiy)\n .attr(\"fill-opacity\", .3);\n this.svgSelection.selectAll(\".tsi-valueEnvelope\")\n .attr(\"fill-opacity\", .1);\n\n this.svgSelection.selectAll(\".tsi-valueElement\")\n .filter(selectedFilter)\n .attr(\"stroke-opacity\", this.strokeOpacity)\n .attr(\"fill-opacity\", 1);\n this.svgSelection.selectAll(\".tsi-valueEnvelope\")\n .filter(selectedFilter)\n .attr(\"fill-opacity\", .3);\n\n if (shouldSetFocusedValues) {\n this.focusedAggKey = aggKey;\n this.focusedSplitby = splitBy;\n }\n }\n }\n\n private discreteEventsMouseover = (d, x, y, width) => {\n if (this.isDroppingMarker) {\n return false;\n }\n this.legendObject.triggerSplitByFocus(d.aggregateKey, d.splitBy);\n this.focusOnlyHoveredSeries(d.aggregateKey, d.splitBy, true);\n\n let xPos = x;\n let yPos = y + this.chartMargins.top;\n\n let yValue = this.getValueOfVisible(d);\n\n if (this.chartOptions.tooltip) {\n this.tooltip.render(this.chartOptions.theme);\n this.tooltip.draw(d, this.chartComponentData, xPos, y, this.chartMargins, (text) => {\n this.tooltipFormat(d, text, TooltipMeasureFormat.SingleValue);\n }, width, 0, 0);\n }\n else\n this.tooltip.hide();\n return true;\n }\n\n private discreteEventsMouseout = () => {\n (<any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel')).classed(\"inFocus\", false);\n this.resetValueElementsFocus();\n this.tooltip.hide();\n }\n private mismatchingChartType(aggKey) {\n if (!this.plotComponents[aggKey]) {\n return false;\n }\n let typeOfPlot = this.plotComponents[aggKey].plotDataType;\n return typeOfPlot !== this.getDataType(aggKey);\n }\n\n //returns false if supressed via isDroppingMarker, true otherwise\n private categoricalMouseover = (d, x, y, endDate, width) => {\n if (this.isDroppingMarker) {\n return false;\n }\n this.legendObject.triggerSplitByFocus(d.aggregateKey, d.splitBy);\n this.focusOnlyHoveredSeries(d.aggregateKey, d.splitBy, true);\n\n let xPos = x;\n let yPos = y + this.chartMargins.top;\n\n let yValue = this.getValueOfVisible(d);\n\n if (this.chartOptions.tooltip) {\n this.tooltip.render(this.chartOptions.theme);\n this.tooltip.draw(d, this.chartComponentData, xPos, y, this.chartMargins, (text) => {\n d.endDate = endDate;\n this.tooltipFormat(d, text, TooltipMeasureFormat.SingleValue);\n }, width, 0, 0);\n }\n else\n this.tooltip.hide();\n return true;\n }\n\n private categoricalMouseout = () => {\n (<any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel')).classed(\"inFocus\", false);\n this.resetValueElementsFocus();\n this.tooltip.hide();\n }\n\n private setHorizontalValuePosAndText(d: any, xPos: number, xValue: any, shiftMillis: number) {\n var bucketSize = this.chartComponentData.displayState[d.aggregateKey].bucketSize;\n var endValue = bucketSize ? (new Date(xValue.valueOf() + bucketSize)) : null;\n\n this.horizontalValueBox.text('')\n .style('left', `${xPos}px`)\n .style('top', `${(this.chartMargins.top + this.chartHeight + VALUEBARHEIGHT)}px`)\n .style('display', 'block');\n this.horizontalValueBox.append('div')\n .attr('class', 'tsi-valueBoxText')\n .text(Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, shiftMillis, null, this.chartOptions.dateLocale)(xValue))\n if (endValue !== null) {\n this.horizontalValueBox.append('div')\n .attr('class', 'tsi-valueBoxText')\n .text(Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, shiftMillis, null, this.chartOptions.dateLocale)(endValue))\n }\n\n\n }\n\n private setVerticalValueAndPosition(yValue: number, yPos) {\n this.verticalValueBox.style('top', `${yPos}px`)\n .style('right', `${(this.chartMargins.right + this.chartWidth)}px`)\n .style('display', 'block')\n .text(Utils.formatYAxisNumber(yValue));\n }\n\n private voronoiMouseover = (d: any) => {\n //supress if the context menu is visible\n if (this.contextMenu && this.contextMenu.contextMenuVisible)\n return;\n\n let shiftMillis = this.chartComponentData.getTemporalShiftMillis(d.aggregateKey);\n var yScale = this.yMap[d.aggregateKey];\n var xValue = d.dateTime;\n var xPos = this.getXPosition(d, this.x);\n var yValue = this.getValueOfVisible(d);\n var yPos = yScale(yValue);\n\n this.focus.style(\"display\", \"block\");\n this.focus.attr(\"transform\", \"translate(\" + xPos + \",\" + yPos + \")\");\n this.focus.select('.tsi-hLine').attr(\"transform\", \"translate(\" + (-xPos) + \",0)\");\n this.focus.select('.tsi-vLine').attr(\"transform\", \"translate(0,\" + (-yPos) + \")\");\n\n this.setHorizontalValuePosAndText(d, xPos + this.getSVGLeftOffset() + this.chartMargins.left, xValue, shiftMillis);\n this.setVerticalValueAndPosition(yValue, yPos + this.chartMargins.top);\n\n var bucketSize = this.chartComponentData.displayState[d.aggregateKey].bucketSize;\n var endValue = bucketSize ? (new Date(xValue.valueOf() + bucketSize)) : null;\n\n if (endValue) {\n let barWidth = this.x(endValue) - this.x(xValue);\n this.horizontalValueBar\n .style('display', 'block')\n .attr(\"x1\", (-barWidth / 2))\n .attr(\"x2\", (barWidth / 2))\n .attr('y1', this.chartHeight - yPos + 2)\n .attr('y2', this.chartHeight - yPos + 2)\n } else {\n this.horizontalValueBar.style('display', 'none');\n }\n if (this.chartOptions.tooltip) {\n this.tooltip.render(this.chartOptions.theme);\n this.tooltip.draw(d, this.chartComponentData, xPos, yPos, this.chartMargins, (text) => {\n this.tooltipFormat(d, text, TooltipMeasureFormat.Enveloped);\n }, null, 20, 20, this.colorMap[d.aggregateKey + \"_\" + d.splitBy]);\n }\n else\n this.tooltip.hide();\n\n (<any>this.focus.node()).parentNode.appendChild(this.focus.node());\n this.legendObject.triggerSplitByFocus(d.aggregateKey, d.splitBy);\n\n /** update the y axis for in focus aggregate */\n if (this.chartOptions.yAxisState === YAxisStates.Overlap) {\n this.svgSelection.selectAll(\".yAxis\")\n .selectAll(\"text\")\n .style(\"fill-opacity\", .5)\n .classed(\"standardYAxisText\", true);\n this.svgSelection.selectAll(\".yAxis\")\n .filter((yAxisAggKey) => {\n return yAxisAggKey == d.aggregateKey;\n })\n .selectAll(\"text\")\n .style(\"fill-opacity\", 1)\n .classed(\"standardYAxisText\", false)\n .style(\"font-weight\", \"bold\");\n }\n\n if (this.chartOptions.yAxisHidden) {\n this.svgSelection.selectAll(\".yAxis\").style(\"display\", \"hidden\");\n }\n if (this.chartOptions.xAxisHidden) {\n this.svgSelection.selectAll(\".xAxis\").style(\"display\", \"none\");\n }\n\n this.chartOptions.onMouseover(d.aggregateKey, d.splitBy);\n }\n\n //get the extent of an array of timeValues\n private getYExtent(aggValues, isEnvelope, aggKey = null) {\n let extent;\n if (aggKey !== null && (this.chartComponentData.displayState[aggKey].yExtent !== null)) {\n return this.chartComponentData.displayState[aggKey].yExtent;\n }\n if (this.chartOptions.yExtent !== null) {\n return this.chartOptions.yExtent;\n }\n if (isEnvelope) {\n var filteredValues = this.getFilteredValues(aggValues);\n var flatValuesList = [];\n filteredValues.forEach((d: any) => {\n if (this.chartComponentData.isPossibleEnvelope(d.aggregateKey, d.splitBy)) {\n if (d.measures['min'] != undefined && d.measures['min'] != null) {\n flatValuesList.push(d.measures['min']);\n }\n if (d.measures['avg'] != undefined && d.measures['avg'] != null) {\n flatValuesList.push(d.measures['avg']);\n }\n if (d.measures['max'] != undefined && d.measures['max'] != null) {\n flatValuesList.push(d.measures['max']);\n }\n } else {\n var visibleMeasure = this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy);\n if (d.measures[visibleMeasure] != undefined && d.measures[visibleMeasure] != null) {\n flatValuesList.push(d.measures[visibleMeasure]);\n }\n }\n });\n extent = d3.extent(flatValuesList);\n } else {\n extent = d3.extent(this.getFilteredValues(aggValues), (d: any) => {\n var visibleMeasure = this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy);\n if (d.measures[visibleMeasure] != undefined && d.measures[visibleMeasure] != null) {\n return d.measures[visibleMeasure];\n }\n return null;\n });\n }\n if (extent[0] == undefined || extent[1] == undefined)\n return [0, 1]\n return extent;\n }\n\n private getFilteredValues(aggValues) {\n return aggValues.filter((d: any) => {\n return (d.measures && this.getValueOfVisible(d) !== null);\n });\n }\n\n private getFilteredAndSticky(aggValues) { //getFilteredValues, then filter by sticky\n var filteredValues = this.getFilteredValues(aggValues);\n let numericFiltered = filteredValues.filter((d: any) => {\n return (this.getDataType(d.aggregateKey) === DataTypes.Numeric)\n })\n if (this.chartComponentData.stickiedKey == null)\n return numericFiltered;\n return numericFiltered.filter((d: any) => {\n return d.aggregateKey == this.chartComponentData.stickiedKey.aggregateKey &&\n ((this.chartComponentData.stickiedKey.splitBy == null) ? true :\n d.splitBy == this.chartComponentData.stickiedKey.splitBy);\n });\n }\n\n public stickyOrUnstickySeries = (aggKey, splitBy) => {\n if (this.chartComponentData.stickiedKey && this.chartComponentData.stickiedKey.aggregateKey === aggKey &&\n this.chartComponentData.stickiedKey.splitBy === splitBy) {\n this.unstickySeries(aggKey, splitBy);\n } else {\n this.stickySeries(aggKey, splitBy);\n }\n }\n\n public unstickySeries = (aggKey, splitby = null) => {\n if (this.getDataType(aggKey) !== DataTypes.Numeric || !this.chartOptions.shouldSticky) {\n return;\n }\n this.chartComponentData.stickiedKey = null;\n (<any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel')).classed(\"stickied\", false);\n // recompute voronoi with no sticky\n this.voronoiDiagram = this.voronoi(this.getFilteredAndSticky(this.chartComponentData.allValues));\n this.chartOptions.onUnsticky(aggKey, splitby);\n }\n\n private stickySeries = (aggregateKey: string, splitBy: string = null) => {\n if (this.getDataType(aggregateKey) !== DataTypes.Numeric || !this.chartOptions.shouldSticky) {\n return;\n }\n var filteredValues = this.getFilteredAndSticky(this.chartComponentData.allValues);\n if (filteredValues == null || filteredValues.length == 0)\n return;\n this.focusedAggKey = null;\n this.focusedSplitby = null;\n\n this.chartComponentData.stickiedKey = {\n aggregateKey: aggregateKey,\n splitBy: (splitBy == null ? null : splitBy)\n };\n\n (<any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel').filter(function (filteredSplitBy: any) {\n return (d3.select(this.parentNode).datum() == aggregateKey) && (filteredSplitBy == splitBy);\n })).classed(\"stickied\", true);\n\n this.voronoiDiagram = this.voronoi(this.getFilteredAndSticky(this.chartComponentData.allValues));\n this.chartOptions.onSticky(aggregateKey, splitBy);\n }\n\n private getHandleHeight(): number {\n return Math.min(Math.max(this.chartHeight / 2, 24), this.chartHeight + 8);\n }\n\n private getXPosition(d, x) {\n var bucketSize = this.chartComponentData.displayState[d.aggregateKey].bucketSize;\n if (bucketSize)\n return (x(d.dateTime) + x((new Date(d.dateTime.valueOf() + bucketSize)))) / 2\n return x(d.dateTime);\n }\n\n public setBrushStartTime(startTime) {\n this.brushStartTime = startTime;\n }\n\n public setBrushEndTime(endTime) {\n this.brushEndTime = endTime;\n }\n\n public setBrush() {\n if (this.brushStartTime && this.brushEndTime && this.brushElem && this.brush) {\n var rawLeftSide = this.x(this.brushStartTime);\n var rawRightSide = this.x(this.brushEndTime);\n\n //if selection is out of range of brush. clear brush\n this.brushElem.call(this.brush.move, null);\n if ((rawRightSide < this.xOffset) || (rawLeftSide > (this.chartWidth - (2 * this.xOffset)))) {\n this.isClearingBrush = true;\n this.brushElem.call(this.brush.move, null);\n return;\n }\n\n let leftSide = Math.min(this.chartWidth - (2 * this.xOffset), Math.max(this.xOffset, this.x(this.brushStartTime)));\n let rightSide = Math.min(this.chartWidth - (2 * this.xOffset), Math.max(this.xOffset, this.x(this.brushEndTime)));\n\n this.surpressBrushTimeSet = true;\n this.brushStartPosition = leftSide;\n this.brushEndPosition = rightSide;\n //small adjusetment so that width is always at least 1 pixel\n if (rightSide - leftSide < 1) {\n if (rightSide + 1 > this.chartWidth - (2 * this.xOffset)) {\n leftSide += -1;\n } else {\n rightSide += 1;\n }\n }\n this.brushElem.call(this.brush.move, [leftSide, rightSide]);\n }\n }\n\n private findClosestValidTime(rawMillis: number) {\n var minDiff = Infinity;\n return Object.keys(this.chartComponentData.timeMap).reduce((closestValue: number, currValue: any) => {\n var diff = Math.abs(Number(currValue) - rawMillis);\n if (diff < minDiff) {\n minDiff = diff;\n return Number(currValue);\n }\n return closestValue;\n }, Infinity);\n }\n\n private getMarkerMarginLeft() {\n var legendWidth = this.legendObject.legendElement.node().getBoundingClientRect().width;\n return this.chartMargins.left + (this.chartOptions.legend === \"shown\" || this.chartOptions.legend === \"hidden\" ? legendWidth : 0) +\n (this.chartOptions.legend === \"shown\" ? this.GUTTERWIDTH : 0);\n }\n\n public exportMarkers() {\n this.chartOptions.markers = Object.keys(this.markerGuidMap)\n .filter((markerGuid) => !this.activeMarker || this.activeMarker.getGuid() !== markerGuid)\n .map((markerGuid) => { return [this.markerGuidMap[markerGuid].getMillis(), this.markerGuidMap[markerGuid].getLabelText()] });\n this.chartOptions.onMarkersChange(this.chartOptions.markers);\n }\n\n private createOnMarkerChange(markerGuid: string, marker: any) {\n return (isDeleting, droppedMarker, shouldSort: boolean = true) => {\n if (droppedMarker) {\n this.markerGuidMap[markerGuid] = marker;\n }\n else if (isDeleting) {\n delete this.markerGuidMap[markerGuid];\n\n //set focus to first marker if markers exist on delete\n let visibleMarkers: any = Object.values(this.markerGuidMap).filter((marker: Marker) => {\n return marker.isMarkerInRange();\n });\n if (visibleMarkers.length !== 0) {\n visibleMarkers[0].focusCloseButton();\n } else {\n this.focusOnEllipsis();\n }\n }\n this.exportMarkers();\n if (shouldSort)\n this.sortMarkers();\n }\n }\n\n private renderMarker(marker: Marker, millis: number, onChange: any = null, labelText: string = null, isSeriesLabels: boolean = false) {\n marker.render(millis, this.chartOptions, this.chartComponentData, {\n chartMargins: this.chartMargins,\n x: this.x,\n marginLeft: this.getMarkerMarginLeft() + (isSeriesLabels ? this.getAdditionalOffsetFromHorizontalMargin() : 0),\n colorMap: this.colorMap,\n yMap: this.yMap,\n onChange: onChange,\n chartHeight: this.height,\n isDropping: false,\n labelText: labelText,\n isSeriesLabels: isSeriesLabels\n });\n }\n\n private sortMarkers() {\n d3.select(this.renderTarget).selectAll(\".tsi-markerContainer\").sort((a: any, b: any) => {\n return (a.timestamp < b.timestamp) ? 1 : -1;\n });\n }\n\n private getAllLinesTransitionsComplete() {\n return new Promise((resolve, reject) => {\n let checkAllLines = (numberOfAttempts: number = 0) => {\n if (numberOfAttempts < 5) {\n setTimeout(() => {\n let allOutOfTransition = true;\n d3.select(this.renderTarget).selectAll('.tsi-gapLine').data().forEach((d: any) => {\n allOutOfTransition = allOutOfTransition && !d.inTransition;\n });\n d3.select(this.renderTarget).selectAll('.tsi-valueLine').data().forEach((d: any) => {\n allOutOfTransition = allOutOfTransition && !d.inTransition;\n });\n if (allOutOfTransition) {\n resolve(null);\n } else {\n checkAllLines(numberOfAttempts + 1);\n }\n }, Math.max(this.TRANSDURATION, 250));\n } else {\n reject();\n }\n }\n checkAllLines(0);\n });\n }\n\n private importMarkers() {\n if (this.chartOptions.markers && this.chartOptions.markers.length > 0) {\n // delete all the old markers\n if (Object.keys(this.markerGuidMap).length) {\n Object.keys(this.markerGuidMap).forEach((guid) => {\n this.markerGuidMap[guid].destroyMarker();\n delete this.markerGuidMap[guid];\n });\n }\n this.markerGuidMap = {};\n this.chartOptions.markers.forEach((markerValueTuples, markerIndex) => {\n if (markerValueTuples === null || markerValueTuples === undefined) {\n return;\n }\n let marker = new Marker(this.renderTarget);\n let markerUID = Utils.guid();\n\n let markerMillis;\n if (typeof markerValueTuples === 'number') {\n markerMillis = markerValueTuples;\n marker.setLabelText(`${this.getString('Marker')} ${markerIndex + 1}`);\n } else {\n marker.setLabelText(markerValueTuples[1]);\n markerMillis = markerValueTuples[0];\n }\n marker.setMillis(markerMillis);\n this.markerGuidMap[markerUID] = marker;\n });\n this.renderAllMarkers();\n this.sortMarkers();\n }\n }\n\n\n private createSeriesLabelsMarker() {\n this.seriesLabelsMarker = new Marker(this.renderTarget);\n }\n\n private renderSeriesLabelsMarker() {\n if (this.chartOptions.labelSeriesWithMarker) {\n this.renderMarker(this.seriesLabelsMarker, this.x.domain()[1], () => { }, null, true);\n }\n }\n\n private renderAllMarkers() {\n this.getAllLinesTransitionsComplete().then(() => {\n Object.keys(this.markerGuidMap).forEach((guid) => {\n let marker = this.markerGuidMap[guid];\n let onChange = this.createOnMarkerChange(guid, marker);\n this.renderMarker(marker, marker.getMillis(), onChange)\n });\n if (this.seriesLabelsMarker) {\n this.renderSeriesLabelsMarker();\n }\n });\n }\n\n private focusOnEllipsis() {\n if (this.ellipsisContainer !== null) {\n this.ellipsisContainer.select(\".tsi-ellipsisButton\").node().focus();\n }\n }\n\n private filteredValueExist = () => {\n var filteredValues = this.getFilteredAndSticky(this.chartComponentData.allValues);\n return !(filteredValues == null || filteredValues.length == 0)\n }\n\n public addMarker = () => {\n if (this.isFirstMarkerDrop) {\n this.isFirstMarkerDrop = false;\n this.createMarkerInstructions();\n }\n this.isDroppingMarker = !this.isDroppingMarker;\n if (!this.isDroppingMarker) {\n this.destroyMarkerInstructions();\n return;\n }\n\n Utils.focusOnEllipsisButton(this.renderTarget);\n\n let marker = new Marker(this.renderTarget);\n let markerUID = Utils.guid();\n let onChange = this.createOnMarkerChange(markerUID, marker);\n this.activeMarker = marker;\n this.markerGuidMap[markerUID] = marker;\n this.renderMarker(marker, Infinity, onChange, `${this.getString('Marker')} ${Object.keys(this.markerGuidMap).length}`);\n }\n\n private voronoiExists(): boolean {\n return (this.getVisibleNumerics() !== 0);\n }\n\n private voronoiMousemove(mouseEvent) {\n if (!this.filteredValueExist() || !this.voronoiExists()) return;\n this.mx = mouseEvent[0];\n this.my = mouseEvent[1];\n const [mx, my] = mouseEvent;\n var site: any = this.voronoiDiagram.find(this.mx, this.my);\n if (!this.isDroppingMarker) {\n this.voronoiMouseover(site.data);\n } else {\n let rawTime = this.x.invert(mx);\n let closestTime = Utils.findClosestTime(rawTime.valueOf(), this.chartComponentData.timeMap);\n this.renderMarker(this.activeMarker, closestTime);\n return;\n }\n\n if (site.data.aggregateKey !== this.focusedAggKey || site.data.splitBy !== this.focusedSplitby) {\n let selectedFilter = Utils.createValueFilter(site.data.aggregateKey, site.data.splitBy);\n this.focusMarkerLabel(selectedFilter, site.data.aggregateKey, site.data.splitBy);\n this.focusOnlyHoveredSeries(site.data.aggregateKey, site.data.splitBy, true);\n }\n }\n\n private voronoiContextMenu(d3Event, mouseEvent) {\n if (!this.filteredValueExist() || !this.voronoiExists()) return;\n const [mx, my] = d3.pointer(d3Event, mouseEvent);\n const site: any = this.voronoiDiagram.find(mx, my);\n if (this.chartComponentData.displayState[site.data.aggregateKey].contextMenuActions &&\n this.chartComponentData.displayState[site.data.aggregateKey].contextMenuActions.length) {\n var mousePosition = d3.pointer(d3Event, <any>this.targetElement.node());\n\n let sitePageCoords;\n if (this.hasBrush) {\n sitePageCoords = this.brushElem.node().getBoundingClientRect();\n } else {\n sitePageCoords = this.voronoiRegion.node().getBoundingClientRect();\n }\n\n let eventSite = { pageX: sitePageCoords.left + site[0], pageY: sitePageCoords.top + site[1] - 12 }\n\n d3Event.preventDefault();\n this.contextMenu.draw(this.chartComponentData, this.renderTarget, this.chartOptions,\n mousePosition, site.data.aggregateKey, site.data.splitBy, null,\n site.data.dateTime, null, eventSite);\n if (this.brushContextMenu) {\n this.brushContextMenu.hide();\n }\n this.voronoiMouseover(site.data);\n }\n }\n\n private voronoiClick(d3Event, mouseEvent) {\n //supress if the context menu is visible\n if (this.contextMenu && this.contextMenu.contextMenuVisible)\n return;\n\n if (!this.filteredValueExist() || !this.voronoiExists()) return;\n if (this.brushElem && !this.isDroppingMarker) return;\n const [mx, my] = d3.pointer(d3Event, mouseEvent);\n var site: any = this.voronoiDiagram.find(mx, my);\n let cDO = this.getCDOFromAggKey(site.data.aggregateKey);\n if (!this.isDroppingMarker) {\n if (site.data && cDO.onElementClick !== null) {\n cDO.onElementClick(site.data.aggregateKey, site.data.splitBy, site.data.dateTime.toISOString(), site.data.measures);\n } else {\n if (this.chartComponentData.stickiedKey !== null) {\n site = this.voronoiDiagram.find(mx, my);\n this.voronoiMousemove(site.data);\n this.unstickySeries(site.data.aggregateKey, site.data.splitBy);\n return;\n }\n this.stickySeries(site.data.aggregateKey, site.data.splitBy);\n }\n } else {\n if (!this.hasBrush) {\n this.isDroppingMarker = false;\n }\n }\n\n this.destroyMarkerInstructions();\n if (Utils.safeNotNullOrUndefined(() => this.activeMarker)) {\n this.activeMarker.onChange(false, true);\n this.exportMarkers();\n this.activeMarker = null;\n }\n }\n\n private getValueOfVisible(d) {\n return Utils.getValueOfVisible(d, this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy));\n }\n\n private brushBrush(event) {\n var handleHeight = this.getHandleHeight();\n this.brushElem.selectAll('.handle')\n .attr('height', handleHeight)\n .attr('y', (this.chartHeight - handleHeight) / 2);\n\n if (!event.sourceEvent) {\n return;\n }\n if (event.sourceEvent && event.sourceEvent.type === 'mousemove') {\n this.brushElem.select(\".selection\").attr(\"visibility\", \"visible\");\n //check boundary conditions for width of the brush\n if (event.selection[1] - event.selection[0] < this.minBrushWidth) {\n return;\n } else {\n this.brushElem.selectAll(\".handle\").attr(\"visibility\", \"visible\");\n }\n }\n if (this.surpressBrushTimeSet == true) {\n this.surpressBrushTimeSet = false;\n return;\n }\n if (!event.selection) return;\n\n if (this.contextMenu)\n this.contextMenu.hide();\n if (this.brushContextMenu)\n this.brushContextMenu.hide();\n\n var newBrushStartPosition = event.selection[0];\n var newBrushEndPosition = event.selection[1];\n if (newBrushStartPosition != this.brushStartPosition) {\n this.brushStartTime = this.x.invert(event.selection[0]);\n this.brushStartPosition = newBrushStartPosition;\n }\n if (newBrushEndPosition != this.brushEndPosition) {\n this.brushEndTime = this.x.invert(event.selection[1]);\n this.brushEndPosition = newBrushEndPosition;\n }\n\n if (this.chartOptions.brushMoveAction) {\n this.chartOptions.brushMoveAction(this.brushStartTime, this.brushEndTime);\n }\n }\n\n private brushEnd(d3Event, mouseEvent) {\n if (this.isClearingBrush) {\n this.isClearingBrush = false;\n if (this.brushContextMenu) {\n this.brushContextMenu.hide();\n }\n return;\n }\n if (d3Event && d3Event.selection == null && d3Event.sourceEvent && d3Event.sourceEvent.type == \"mouseup\" && this.chartOptions.minBrushWidth == 0) {\n if (this.brushContextMenu) {\n this.brushContextMenu.hide();\n }\n const [mx, my] = d3.pointer(d3Event, mouseEvent);\n var site: any = this.voronoiDiagram.find(mx, my);\n let isClearingBrush = (this.brushStartPosition !== null) && (this.brushEndPosition !== null);\n if (this.chartComponentData.stickiedKey !== null && !this.isDroppingMarker && !isClearingBrush) {\n this.chartComponentData.stickiedKey = null;\n (<any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel')).classed(\"stickied\", false);\n // recompute voronoi with no sticky\n this.voronoiDiagram = this.voronoi(this.getFilteredAndSticky(this.chartComponentData.allValues));\n site = this.voronoiDiagram.find(mx, my);\n this.voronoiMousemove(site.data);\n this.chartOptions.onUnsticky(site.data.aggregateKey, site.data.splitBy);\n return;\n }\n\n this.brushStartTime = null;\n this.brushEndTime = null;\n this.brushStartPosition = null;\n this.brushEndPosition = null;\n\n if (!this.isDroppingMarker && !isClearingBrush && !(this.contextMenu && this.contextMenu.contextMenuVisible)) {\n this.stickySeries(site.data.aggregateKey, site.data.splitBy);\n } else {\n this.isDroppingMarker = false;\n }\n return;\n }\n\n if (d3Event.selection == null) {\n if (!this.chartOptions.brushClearable) {\n d3.select(mouseEvent).transition().call(d3Event.target.move, [this.x(this.brushStartTime), this.x(this.brushEndTime)]);\n }\n return;\n }\n var transformCall = null; //if the brush needs to be transformed due to snap brush or it being too small, this is envoked\n var isZeroWidth = false; //clear the brush context menu if the brush has 0 width\n if (this.chartOptions.snapBrush) {\n //find the closest possible value and set to that\n if (this.possibleTimesArray.length > 0) {\n var findClosestTime = (rawXValue): Date => {\n var closestDate = null;\n this.possibleTimesArray.reduce((prev, curr) => {\n var prospectiveDiff = Math.abs(rawXValue - this.x(curr));\n var currBestDiff = Math.abs(rawXValue - prev);\n if (prospectiveDiff < currBestDiff) {\n closestDate = curr;\n return this.x(curr)\n }\n return prev;\n }, Infinity);\n return closestDate;\n }\n var newBrushStartTime = findClosestTime(d3Event.selection[0]);\n var newBrushEndTime = findClosestTime(d3Event.selection[1]);\n if (newBrushStartTime != this.brushStartTime || newBrushEndTime != this.brushEndTime) {\n this.brushStartTime = newBrushStartTime;\n this.brushEndTime = newBrushEndTime;\n this.brushStartPosition = this.x(this.brushStartTime);\n this.brushEndPosition = this.x(this.brushEndTime);\n transformCall = () => d3.select(mouseEvent).transition().call(d3Event.target.move, [this.x(this.brushStartTime), this.x(this.brushEndTime)]);\n isZeroWidth = this.x(this.brushStartTime) == this.x(this.brushEndTime);\n }\n }\n }\n if (d3Event.selection[1] - d3Event.selection[0] < this.minBrushWidth) {\n let rightSide = Math.min(d3Event.selection[0] + this.minBrushWidth, this.x.range()[1]);\n transformCall = () => d3.select(mouseEvent).transition().call(d3Event.target.move, [rightSide - this.minBrushWidth, rightSide]);\n isZeroWidth = (rightSide - this.minBrushWidth == rightSide);\n }\n if (this.chartOptions.brushMoveEndAction && (d3Event.sourceEvent && d3Event.sourceEvent.type == 'mouseup')) {\n this.chartOptions.brushMoveEndAction(this.brushStartTime, this.brushEndTime);\n }\n if (this.chartOptions.brushContextMenuActions && this.chartOptions.autoTriggerBrushContextMenu &&\n (d3Event.sourceEvent && d3Event.sourceEvent.type == 'mouseup')) {\n if (!this.chartOptions.brushContextMenuActions || this.chartOptions.brushContextMenuActions.length == 0)\n return;\n var mousePosition = d3.pointer(d3Event, <any>this.targetElement.node());\n //constrain the mouse position to the renderTarget\n var boundingCRect = this.targetElement.node().getBoundingClientRect();\n var correctedMousePositionX = Math.min(boundingCRect.width, Math.max(mousePosition[0], 0));\n var correctedMousePositionY = Math.min(boundingCRect.height, Math.max(mousePosition[1], 0));\n var correctedMousePosition = [correctedMousePositionX, correctedMousePositionY];\n\n this.brushContextMenu.draw(this.chartComponentData, this.renderTarget, this.chartOptions,\n correctedMousePosition, null, null, null, this.brushStartTime, this.brushEndTime);\n }\n if (transformCall) {\n transformCall();\n if (this.brushContextMenu && isZeroWidth) {\n this.brushContextMenu.hide();\n }\n }\n }\n\n private focusMarkerLabel(filterFunction, aggKey, splitBy) {\n Utils.revertAllSubtitleText(d3.select(this.renderTarget).selectAll(\".tsi-markerValue\"), .2);\n\n\n d3.select(this.renderTarget).selectAll(\".tsi-markerValue\")\n .filter(filterFunction)\n .style(\"opacity\", 1)\n .classed('tsi-isExpanded', true)\n .each(function () {\n Utils.setSeriesLabelSubtitleText(d3.select(this).selectAll('.tsi-tooltipSubtitle'), true);\n });\n\n d3.select(this.renderTarget).selectAll(\".tsi-markerContainer\").each(function () {\n d3.select(this).selectAll(\".tsi-markerValue\").sort(function (a: any, b: any) {\n return (a.aggregateKey == aggKey && (splitBy == null || splitBy == a.splitBy)) ? 1 : -1;\n });\n });\n }\n\n public labelMouseout = () => {\n if (this.svgSelection) {\n Utils.revertAllSubtitleText(d3.select(this.renderTarget).selectAll('.tsi-markerValue'));\n this.svgSelection.selectAll(\".tsi-valueElement\")\n .filter(function () { return !d3.select(this).classed(\"tsi-valueEnvelope\"); })\n .attr(\"stroke-opacity\", 1)\n .attr(\"fill-opacity\", 1);\n this.svgSelection.selectAll(\".tsi-valueEnvelope\")\n .attr(\"fill-opacity\", .3);\n }\n }\n\n public labelMouseover = (aggregateKey: string, splitBy: string = null) => {\n this.focusOnlyHoveredSeries(aggregateKey, splitBy, false);\n }\n\n private drawBrushRange() {\n if (this.chartOptions.brushRangeVisible) {\n if (this.targetElement.select('.tsi-rangeTextContainer').empty() && (this.brushStartTime || this.brushEndTime)) {\n var rangeTextContainer = this.targetElement.append(\"div\")\n .attr(\"class\", \"tsi-rangeTextContainer\");\n }\n this.updateBrushRange();\n }\n }\n\n private getSVGLeftOffset() {\n return this.chartOptions.legend === 'shown' ? (this.width - this.svgSelection.node().getBoundingClientRect().width) : 0;\n }\n\n public updateBrushRange() {\n let svgLeftOffset = this.getSVGLeftOffset();\n if (!(this.brushStartTime || this.brushEndTime)) {\n this.deleteBrushRange();\n return;\n }\n\n let rangeText = Utils.rangeTimeFormat(this.brushEndTime.valueOf() - this.brushStartTime.valueOf());\n let rangeTextContainer = this.targetElement.select('.tsi-rangeTextContainer');\n\n let leftPos = this.chartMargins.left +\n Math.min(Math.max(0, this.x(this.brushStartTime)), this.x.range()[1]) + svgLeftOffset;\n\n let rightPos = this.chartMargins.left +\n Math.min(Math.max(0, this.x(this.brushEndTime)), this.x.range()[1]) + svgLeftOffset;\n\n rangeTextContainer\n .text(rangeText)\n .style(\"left\", Math.max(8, Math.round((leftPos + rightPos) / 2)) + \"px\")\n .style(\"top\", (this.chartMargins.top + this.chartOptions.aggTopMargin) + 'px')\n\n if (this.chartOptions.color) {\n rangeTextContainer\n .style('background-color', this.chartOptions.color)\n .style('color', 'white');\n }\n\n let calcedWidth = rangeTextContainer.node().getBoundingClientRect().width;\n if (this.chartOptions.isCompact && (rightPos - leftPos) < calcedWidth) {\n rangeTextContainer.style('visibility', 'hidden');\n } else {\n rangeTextContainer.style('visibility', 'visible');\n }\n }\n\n public deleteBrushRange() {\n this.targetElement.select('.tsi-rangeTextContainer').remove();\n }\n\n public getYExtents() {\n return this.chartComponentData.yExtents;\n }\n\n private nextStackedState = () => {\n if (this.chartOptions.yAxisState === YAxisStates.Stacked)\n return \"shared\";\n else if (this.chartOptions.yAxisState === YAxisStates.Shared)\n return \"overlap\";\n else\n return \"stacked\";\n };\n\n private clearBrush() {\n this.svgSelection.select('.svgGroup').select(\".brushElem\").call(this.brush.move, null);\n this.deleteBrushRange();\n if (this.brushContextMenu) {\n this.brushContextMenu.hide();\n }\n }\n\n private getVisibleNumerics() {\n let visibleGroups = this.data.filter((agg) => this.chartComponentData.displayState[agg.aggKey][\"visible\"]);\n let visibleCDOs = this.aggregateExpressionOptions.filter((cDO) => this.chartComponentData.displayState[cDO.aggKey][\"visible\"]);\n return visibleGroups.filter((aggKey, i) => {\n return visibleCDOs[i].dataType === DataTypes.Numeric;\n }).length;\n }\n\n private getSwimlaneOffsets(linechartTopPadding: number, visibleGroups: Array<ChartDataOptions>, visibleCDOs: Array<ChartDataOptions>, heightPerNumeric: number, swimLaneSet: any) {\n let cumulativeOffset = LINECHARTTOPPADDING;\n //initialize to null and set while going through swimLanes\n let visibleGroupEndValues = visibleGroups.map(() => null);\n\n Object.keys(swimLaneSet).sort((a, b) => (Number(a) <= Number(b) ? -1 : 1)).forEach((swimLaneStr) => {\n // find all numerics and set to cumulative offset/height per non numeric\n let swimlane = Number(swimLaneStr);\n let hasNumeric = false;\n visibleCDOs.forEach((aggGroup, i) => {\n if (aggGroup.swimLane === swimlane && aggGroup.dataType === DataTypes.Numeric) {\n hasNumeric = true;\n visibleGroupEndValues[i] = [cumulativeOffset, heightPerNumeric];\n }\n });\n\n // find all non-numerics and set their offset/heights\n let swimLaneOffset = hasNumeric ? heightPerNumeric : 0;\n\n let currGroupsHeight = 0;\n if (this.chartOptions.swimLaneOptions && this.chartOptions.swimLaneOptions[swimlane] && this.chartOptions.swimLaneOptions[swimlane].collapseEvents) {\n swimLaneOffset += this.getEventsCollapsedSwimlaneHeight(visibleCDOs, swimlane);\n visibleCDOs.forEach((aggGroup, i) => {\n if (aggGroup.swimLane === swimlane) {\n visibleGroupEndValues[i] = [cumulativeOffset, this.getEventsCollapsedSwimlaneHeight(visibleCDOs, swimlane)]\n }\n });\n } else {\n visibleCDOs.forEach((aggGroup, i) => {\n if (aggGroup.swimLane === swimlane && aggGroup.dataType !== DataTypes.Numeric) {\n let currGroupsHeight = Utils.getNonNumericHeight(aggGroup.height);\n visibleGroupEndValues[i] = [swimLaneOffset + cumulativeOffset, currGroupsHeight]\n swimLaneOffset += currGroupsHeight;\n }\n });\n }\n cumulativeOffset += swimLaneOffset;\n });\n return visibleGroupEndValues;\n }\n\n private setSwimLaneYExtents(visibleGroups, visibleCDOs, swimLanes, swimLaneOptions) {\n let extents = {};\n swimLanes.forEach((lane) => {\n let extent = [];\n\n // Check if swim lane options sets y-axis extents for this lane. If so use that\n // value for yExtents.\n if (swimLaneOptions && swimLaneOptions[lane] && swimLaneOptions[lane].yExtent) {\n extents[lane] = swimLaneOptions[lane].yExtent;\n return;\n }\n\n visibleGroups.forEach((aggGroup, i) => {\n let cDO = visibleCDOs[i];\n if (cDO.dataType !== DataTypes.Numeric) {\n return;\n }\n let aggValues = [];\n if (cDO.swimLane === lane) {\n let aggKey = cDO.aggKey;\n Object.keys(this.chartComponentData.visibleTAs[aggKey]).forEach((splitBy) => {\n aggValues = aggValues.concat(this.chartComponentData.visibleTAs[aggKey][splitBy]);\n });\n let yExtent = this.getYExtent(aggValues,\n this.chartComponentData.displayState[aggKey].includeEnvelope ?\n this.chartComponentData.displayState[aggKey].includeEnvelope :\n this.chartOptions.includeEnvelope, aggKey);\n extent = d3.extent(yExtent.concat(extent));\n extents[lane] = extent;\n }\n });\n });\n\n this.swimlaneYExtents = extents;\n }\n\n private getEventsCollapsedSwimlaneHeight(visibleCDOs, swimlane) {\n // if a swimlane has collapsed events, the events height impact is the largest height of a visible events group in the swimlane\n let rawHeight = visibleCDOs.reduce((tallest, currGroup) => {\n if (currGroup.dataType === DataTypes.Events && currGroup.swimLane === swimlane) {\n return Math.max(tallest, currGroup.height);\n }\n return tallest;\n }, 0);\n return rawHeight !== 0 ? Utils.getNonNumericHeight(rawHeight) : 0;\n }\n\n //returns an array of tuples of y offset and height for each visible aggregate group \n private createYOffsets() {\n let visibleGroups = this.data.filter((agg) => this.chartComponentData.displayState[agg.aggKey][\"visible\"]);\n let visibleCDOs = this.aggregateExpressionOptions.filter((cDO) => this.chartComponentData.displayState[cDO.aggKey][\"visible\"]);\n\n let visibleNumericCount;\n let swimLaneSet = {};\n\n visibleCDOs.forEach((aEO, i) => {\n if (aEO.swimLane === null) {\n aEO.swimLane = i + 1;\n }\n });\n\n visibleCDOs.forEach((cDO) => {\n swimLaneSet[cDO.swimLane] = swimLaneSet[cDO.swimLane] || (cDO.dataType === DataTypes.Numeric);\n });\n visibleNumericCount = Object.keys(swimLaneSet).reduce((visibleCount, swimLane) => {\n return visibleCount + (swimLaneSet[swimLane] ? 1 : 0);\n }, 0);\n\n let countNumericLanes = visibleNumericCount;\n\n let linechartTopPadding = this.chartOptions.isArea ? 0 : LINECHARTTOPPADDING;\n let useableHeight = this.chartHeight - linechartTopPadding;\n\n let fixedEventsHeight = 0;\n if (this.chartOptions.swimLaneOptions) {\n Object.keys(this.chartOptions.swimLaneOptions).forEach((swimlaneKey) => {\n let swimlane = Number(swimlaneKey)\n let sLO = this.chartOptions.swimLaneOptions[swimlane];\n if (sLO.collapseEvents) {\n let swimlaneHeight = this.getEventsCollapsedSwimlaneHeight(visibleCDOs, swimlane);\n fixedEventsHeight += swimlaneHeight;\n }\n });\n }\n let heightNonNumeric = visibleCDOs.reduce((sumPrevious, currGroup, i) => {\n if (currGroup.dataType === DataTypes.Events && this.chartOptions.swimLaneOptions && this.chartOptions.swimLaneOptions[currGroup.swimLane] && this.chartOptions.swimLaneOptions[currGroup.swimLane].collapseEvents) {\n return sumPrevious;\n }\n return sumPrevious + (currGroup.dataType !== DataTypes.Numeric ? Utils.getNonNumericHeight(currGroup.height) : 0);\n }, 0);\n heightNonNumeric += fixedEventsHeight;\n\n let heightPerNumeric = (useableHeight - heightNonNumeric) / countNumericLanes;\n\n this.setSwimLaneYExtents(\n visibleGroups,\n visibleCDOs,\n Object.keys(swimLaneSet)\n .filter((lane) => swimLaneSet[lane])\n .map((stringLane) => Number(stringLane)),\n this.chartOptions.swimLaneOptions\n );\n return this.getSwimlaneOffsets(linechartTopPadding, visibleGroups, visibleCDOs, heightPerNumeric, swimLaneSet);\n }\n\n private heightNonNumeric() {\n let visibleCDOs = this.aggregateExpressionOptions.filter((agg) => this.chartComponentData.displayState[agg.aggKey][\"visible\"]);\n return visibleCDOs.reduce((sumPrevious, currGroup) => {\n return sumPrevious + (currGroup.dataType !== DataTypes.Numeric ? Utils.getNonNumericHeight(currGroup.height) : 0);\n }, 0);\n }\n\n private getGroupYExtent(aggKey, aggVisible, aggValues, yExtent) {\n if ((this.chartOptions.yAxisState === YAxisStates.Shared) || (Object.keys(this.chartComponentData.timeArrays)).length < 2 || !aggVisible) {\n yExtent = this.getYExtent(this.chartComponentData.allNumericValues, this.chartComponentData.displayState[aggKey].includeEnvelope ?\n this.chartComponentData.displayState[aggKey].includeEnvelope :\n this.chartOptions.includeEnvelope, null);\n } else if (this.chartComponentData.aggHasVisibleSplitBys(aggKey)) {\n yExtent = this.getYExtent(aggValues, this.chartComponentData.displayState[aggKey].includeEnvelope ?\n this.chartComponentData.displayState[aggKey].includeEnvelope :\n this.chartOptions.includeEnvelope, aggKey);\n } else {\n yExtent = [0, 1];\n }\n return yExtent;\n }\n\n private getAggAxisType(agg) {\n if (this.chartOptions.yAxisState === YAxisStates.Stacked) {\n if (this.chartOptions.swimLaneOptions && this.chartOptions.swimLaneOptions[agg.swimLane] && this.chartOptions.swimLaneOptions[agg.swimLane].yAxisType) {\n return this.chartOptions.swimLaneOptions[agg.swimLane].yAxisType;\n } else {\n return YAxisStates.Shared;\n }\n }\n return this.chartOptions.yAxisState;\n }\n\n private adjustSwimLanes() {\n if (this.chartOptions.yAxisState === YAxisStates.Shared || this.chartOptions.yAxisState === YAxisStates.Overlap) {\n this.aggregateExpressionOptions.forEach((aEO) => {\n aEO.swimLane = 0;\n });\n // consolidate horizontal markers\n if (this.chartOptions.swimLaneOptions) {\n const horizontalMarkers = [];\n Object.values(this.chartOptions.swimLaneOptions).forEach((lane) => {\n horizontalMarkers.push(...lane.horizontalMarkers);\n });\n this.chartOptions.swimLaneOptions = { 0: { yAxisType: this.chartOptions.yAxisState, horizontalMarkers: horizontalMarkers } };\n }\n } else {\n let minimumPresentSwimLane = this.aggregateExpressionOptions.reduce((currMin, aEO) => {\n return Math.max(aEO.swimLane, currMin);\n }, 0);\n this.aggregateExpressionOptions.forEach((aEO) => {\n if (aEO.swimLane === null) {\n aEO.swimLane = ++minimumPresentSwimLane;\n }\n });\n }\n }\n\n private overwriteSwimLanes() {\n this.aggregateExpressionOptions.forEach((aEO, i) => {\n this.aggregateExpressionOptions[i].swimLane = this.originalSwimLanes[i];\n });\n this.chartOptions.swimLaneOptions = this.originalSwimLaneOptions;\n }\n\n private getHorizontalMarkersWithYScales() {\n let visibleCDOs = this.aggregateExpressionOptions.filter((cDO) => this.chartComponentData.displayState[cDO.aggKey][\"visible\"]);\n const markerList = [];\n const pushMarker = (cDO, marker, markerList) => {\n if (this.chartOptions.yAxisState === YAxisStates.Overlap) {\n return;\n }\n const domain = this.chartOptions.yAxisState === YAxisStates.Stacked ?\n this.swimlaneYExtents[cDO.swimLane] :\n this.swimlaneYExtents[0];\n // filter out markers not in the y range of that lane and in lanes that have overlap axis\n if (domain &&\n this.chartOptions.swimLaneOptions?.[cDO.swimLane]?.yAxisType !== YAxisStates.Overlap &&\n marker.value >= domain[0] &&\n marker.value <= domain[1]) {\n markerList.push({ yScale: this.yMap[cDO.aggKey], ...marker });\n }\n }\n visibleCDOs.forEach((cDO) => {\n cDO.horizontalMarkers.forEach((horizontalMarkerParams: HorizontalMarker) => {\n pushMarker(cDO, horizontalMarkerParams, markerList);\n });\n });\n\n // find a visible CDO for a swimlane \n const findFirstVisibleCDO = (swimlaneNumber) => {\n return visibleCDOs.find((cDO) => {\n return (cDO.swimLane === swimlaneNumber);\n });\n }\n\n if (this.chartOptions.yAxisState !== YAxisStates.Overlap && this.chartOptions.swimLaneOptions) {\n Object.keys(this.chartOptions.swimLaneOptions).forEach((swimlaneNumber) => {\n const swimlaneOptions = this.chartOptions.swimLaneOptions[swimlaneNumber];\n swimlaneOptions.horizontalMarkers?.forEach((horizontalMarkerParams: HorizontalMarker) => {\n const firstVisibleCDO = findFirstVisibleCDO(Number(swimlaneNumber));\n if (firstVisibleCDO) {\n pushMarker(firstVisibleCDO, horizontalMarkerParams, markerList);\n }\n });\n });\n }\n return markerList;\n }\n\n // having horizontal markers present should add additional right hand margin to allow space for series labels \n private getAdditionalOffsetFromHorizontalMargin() {\n return this.getHorizontalMarkersWithYScales().length ? 16 : 0;\n }\n\n private drawHorizontalMarkers() {\n const markerList = this.getHorizontalMarkersWithYScales();\n const self = this;\n\n const markerContainers = this.svgSelection.select('.svgGroup').selectAll('.tsi-horizontalMarker')\n .data(markerList);\n markerContainers\n .enter()\n .append('g')\n .merge(markerContainers)\n .attr('class', 'tsi-horizontalMarker')\n .attr(\"transform\", (marker) => {\n return \"translate(\" + 0 + \",\" + marker.yScale(marker.value) + \")\";\n })\n .each(function (marker) {\n const valueText = d3.select(this)\n .selectAll<SVGTextElement, unknown>('.tsi-horizontalMarkerText')\n .data([marker.value]);\n valueText\n .enter()\n .append('text')\n .merge(valueText)\n .attr('class', 'tsi-horizontalMarkerText')\n .attr('x', self.chartWidth)\n .attr('y', -4)\n .text((value) => value);\n valueText.exit().remove();\n\n const valueLine = d3.select(this)\n .selectAll<SVGLineElement, unknown>('.tsi-horizontalMarkerLine')\n .data([marker]);\n valueLine\n .enter()\n .append('line')\n .merge(valueLine)\n .attr('class', 'tsi-horizontalMarkerLine')\n .attr('stroke', marker => marker.color)\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', self.chartWidth)\n .attr('y2', 0);\n valueLine.exit().remove();\n });\n markerContainers.exit().remove();\n }\n\n private createSwimlaneLabels(offsetsAndHeights, visibleCDOs) {\n\n // swimLaneLabels object contains data needed to render each lane label\n let swimLaneLabels: {\n [key: number]: {\n offset: number,\n height: number,\n label: string | null,\n onClick: () => any;\n }\n } | {} = {};\n\n /* \n The logic below constructs swimlane labels. The first aggregate found in each\n lane is used to position that lanes label. Numeric aggs are prioritized first,\n as they share a y-Axis, meaning only the first numeric in each lane needs to be\n considered. Next, non-numerics are checked, if they are the first agg found in \n their lane, their position data is used, otherwise, their height is added to the \n current height of the lane. \n */\n\n const useAggForLaneLabel = (aggGroup) => {\n let swimLane = aggGroup.swimLane;\n let aggIndex = visibleCDOs.findIndex(el => el.aggKey === aggGroup.aggKey);\n let onClick = null;\n if (typeof this.chartOptions?.swimLaneOptions?.[swimLane]?.onClick === 'function') {\n onClick = () => this.chartOptions?.swimLaneOptions?.[swimLane]?.onClick?.(swimLane)\n }\n swimLaneLabels[swimLane] = {\n offset: offsetsAndHeights[aggIndex][0],\n height: offsetsAndHeights[aggIndex][1],\n label: this.chartOptions?.swimLaneOptions?.[swimLane]?.label,\n onClick\n }\n }\n\n // First add numeric dataTypes (share Y-Axis) to label map\n visibleCDOs.filter(aggGroup => aggGroup.dataType === DataTypes.Numeric).forEach(aggGroup => {\n if (!(aggGroup.swimLane in swimLaneLabels)) { // Only add swimlanes once to swimLaneLabels map\n useAggForLaneLabel(aggGroup);\n }\n })\n\n // Then, map over any non-numeric dataType and increment heights if they're sharing a lane\n visibleCDOs.filter(aggGroup => aggGroup.dataType !== DataTypes.Numeric).forEach(aggGroup => {\n let aggIndex = visibleCDOs.findIndex(el => el.aggKey === aggGroup.aggKey);\n if (!(aggGroup.swimLane in swimLaneLabels)) { // Only add swimlanes once to swimLaneLabels map\n useAggForLaneLabel(aggGroup);\n } else { // if lane contains non-numeric data and is being added to another lane\n if (!this.chartOptions?.swimLaneOptions?.[aggGroup.swimLane]?.collapseEvents) { // Only increment event heights if collapseEvents === false\n swimLaneLabels[aggGroup.swimLane].height += offsetsAndHeights[aggIndex][1]; // add heights (non-numerics don't share Y axis)\n }\n }\n });\n\n // Clear prior labels\n this.swimLaneLabelGroup.selectAll('*').remove();\n\n // Function to trim labels to max height\n const truncateLabel = (labelRef: HTMLElement, data) => {\n const maxHeight = data.height - swimlaneLabelConstants.swimLaneLabelHeightPadding; // padding on actual lane height\n if (data.label) {\n let labelClientRect = labelRef.getBoundingClientRect();\n let labelText = labelRef.textContent;\n\n while (labelClientRect.height > maxHeight && labelText.length > 0) {\n labelText = labelText.slice(0, -1);\n labelRef.textContent = labelText + '...';\n labelClientRect = labelRef.getBoundingClientRect();\n }\n }\n }\n\n const boldYAxisText = (enabled: boolean, lane: string) => {\n this.svgSelection.select('.svgGroup')\n .selectAll(`.tsi-swimLaneAxis-${lane}`)\n .selectAll('text')\n .classed('tsi-boldYAxisText', enabled)\n }\n\n const onClickPresentAndValid = (dp) => dp.onClick && typeof dp.onClick === 'function';\n\n // Map over swimLanes and create labels\n Object.keys(swimLaneLabels).forEach(lane => {\n let labelData = [swimLaneLabels[lane]];\n let label = this.swimLaneLabelGroup.selectAll(`tsi-swimLaneLabel-${lane}`).data(labelData);\n\n label.enter()\n .append(\"text\")\n .attr(\"class\", (d) => `tsi-swimLaneLabel-${lane} tsi-swimLaneLabel ${onClickPresentAndValid(d) ? 'tsi-boldOnHover' : ''}`)\n .merge(label)\n .style(\"text-anchor\", \"middle\")\n .attr(\"transform\", d => `translate(${(-this.horizontalLabelOffset + swimlaneLabelConstants.labelLeftPadding)},${(d.offset + d.height / 2)}) rotate(-90)`)\n .text(d => d.label)\n .each(function (d) { truncateLabel(this, d) })\n .on(\"click\", (event, d) => {\n if (onClickPresentAndValid(d)) {\n d.onClick()\n }\n })\n .on(\"mouseover\", (event, d) => {\n if (onClickPresentAndValid(d)) {\n boldYAxisText(true, lane);\n }\n })\n .on(\"mouseout\", () => {\n boldYAxisText(false, lane);\n })\n .append(\"svg:title\")\n .text(d => d.label);\n\n label.exit().remove();\n })\n }\n\n public render(data: any, options: any, aggregateExpressionOptions: any) {\n console.log('LineChart render called a');\n super.render(data, options, aggregateExpressionOptions);\n\n this.originalSwimLanes = this.aggregateExpressionOptions.map((aEO) => {\n return aEO.swimLane;\n });\n this.originalSwimLaneOptions = options.swimLaneOptions;\n\n this.hasBrush = options && (options.brushMoveAction || options.brushMoveEndAction || options.brushContextMenuActions);\n this.chartOptions.setOptions(options);\n this.chartMargins.right = this.chartOptions.labelSeriesWithMarker ? (SERIESLABELWIDTH + 8) : LINECHARTCHARTMARGINS.right;\n this.width = this.getWidth();\n this.height = Math.max((<any>d3.select(this.renderTarget).node()).clientHeight, this.MINHEIGHT);\n if (this.chartOptions.legend == \"compact\")\n this.chartMargins.top = 72;\n else\n this.chartMargins.top = 40;\n\n if (this.chartOptions.hideChartControlPanel) {\n this.chartMargins.top += -28;\n }\n\n if (!this.chartOptions.brushRangeVisible && this.targetElement) {\n this.deleteBrushRange();\n }\n\n if (this.seriesLabelsMarker && !this.chartOptions.labelSeriesWithMarker) {\n this.seriesLabelsMarker.destroyMarker();\n this.seriesLabelsMarker = null;\n }\n\n this.strokeOpacity = this.chartOptions.isArea ? .55 : 1;\n this.nonFocusStrokeOpactiy = this.chartOptions.isArea ? .55 : .3;\n\n\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(this.data, this.aggregateExpressionOptions);\n this.chartComponentData.data.forEach((d, i) => {\n this.aggregateExpressionOptions[i].aggKey = d.aggKey;\n });\n if (this.chartOptions.xAxisHidden && this.chartOptions.focusHidden) {\n this.chartMargins.bottom = 5;\n }\n\n this.chartHeight = Math.max(1, this.height - this.chartMargins.bottom - this.chartMargins.top);\n this.chartWidth = this.getChartWidth();\n\n if (this.brush && this.svgSelection.select('.svgGroup').select(\".brushElem\") && !this.chartOptions.keepBrush) {\n this.brushStartTime = null;\n this.brushEndTime = null;\n this.brushStartPosition = null;\n this.brushEndPosition = null;\n this.clearBrush();\n }\n\n if (!this.chartOptions.hideChartControlPanel && this.chartControlsPanel === null) {\n this.chartControlsPanel = Utils.createControlPanel(this.renderTarget, this.legendWidth + (this.GUTTERWIDTH / 2), Math.max((this.chartMargins.top + 12), 0), this.chartOptions);\n var self = this;\n this.hasStackedButton = true;\n this.stackedButton = this.chartControlsPanel.append(\"button\")\n .style(\"left\", \"60px\")\n .attr(\"class\", \"tsi-stackedButton\")\n .attr(\"aria-label\", () => this.getString(\"set axis state to\") + ' ' + this.nextStackedState())\n .attr(\"title\", () => this.getString(\"Change y-axis type\"))\n .attr(\"type\", \"button\")\n .on(\"click\", function () {\n self.overwriteSwimLanes();\n self.render(self.data, { ...self.chartOptions, yAxisState: self.nextStackedState() }, self.aggregateExpressionOptions);\n d3.select(this).attr(\"aria-label\", () => self.getString(\"set axis state to\") + ' ' + self.nextStackedState());\n setTimeout(() => (d3.select(this).node() as any).focus(), 200);\n });\n } else if (this.chartOptions.hideChartControlPanel && this.chartControlsPanel !== null) {\n this.hasStackedButton = false;\n this.removeControlPanel();\n }\n\n if (this.chartControlsPanel !== null) {\n this.drawEllipsisMenu([{\n iconClass: \"flag\",\n label: this.getString(\"Drop a Marker\"),\n action: this.addMarker,\n description: \"\"\n }]);\n this.chartControlsPanel.style(\"top\", Math.max((this.chartMargins.top - 24), 0) + 'px');\n }\n\n this.adjustSwimLanes();\n\n if (this.svgSelection == null) {\n\n /******************** Static Elements *********************************/\n this.targetElement = d3.select(this.renderTarget)\n .classed(\"tsi-lineChart\", true)\n this.svgSelection = this.targetElement.append(\"svg\")\n .attr(\"class\", \"tsi-lineChartSVG tsi-chartSVG\")\n .attr('title', this.getString('Line chart'))\n .attr(\"height\", this.height);\n\n var g = this.svgSelection.append(\"g\")\n .classed(\"svgGroup\", true)\n .attr(\"transform\", \"translate(\" + this.chartMargins.left + \",\" + this.chartMargins.top + \")\");\n\n var defs = this.svgSelection.append('defs');\n\n this.brushElem = null;\n if (this.hasBrush) {\n this.brushElem = g.append(\"g\")\n .attr(\"class\", \"brushElem\");\n this.brushElem.classed(\"hideBrushHandles\", !this.chartOptions.brushHandlesVisible);\n } else {\n //if there is no brushElem, the voronoi lives here\n this.voronoiRegion = g.append(\"rect\").classed(\"voronoiRect\", true);\n }\n\n this.focus = g.append(\"g\")\n .attr(\"transform\", \"translate(-200,-100)\")\n .attr(\"class\", \"tsi-focus\");\n\n this.focus.append(\"line\")\n .attr(\"class\", \"tsi-focusLine tsi-vLine\")\n .attr(\"x1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y1\", this.chartOptions.aggTopMargin)\n .attr(\"y2\", this.chartHeight);\n this.focus.append(\"line\")\n .attr(\"class\", \"tsi-focusLine tsi-hLine\")\n .attr(\"x1\", 0)\n .attr(\"x2\", this.chartWidth)\n .attr(\"y1\", 0)\n .attr(\"y2\", 0);\n\n this.focus.append(\"circle\")\n .attr(\"r\", 4);\n\n this.horizontalValueBox = d3.select(this.renderTarget)\n .append('div')\n .attr('class', 'tsi-horizontalValueBox tsi-chartValueTextBox')\n .style('display', 'none')\n .attr('pointer-events', 'none');\n\n this.verticalValueBox = d3.select(this.renderTarget)\n .append('div')\n .attr('class', 'tsi-verticalValueBox')\n .style('display', 'none');\n\n this.horizontalValueBar = this.focus.append('line')\n .attr('y1', 0)\n .attr('y2', 0)\n .attr('class', 'tsi-horizontalValueBar')\n .style('display', 'none');\n\n this.swimLaneLabelGroup = g.append(\"g\").\n attr(\"class\", \"tsi-swimLaneLabels\");\n\n if (!this.tooltip) {\n this.tooltip = new Tooltip(d3.select(this.renderTarget));\n }\n\n this.draw = (isFromResize = false, event) => {\n this.minBrushWidth = (this.chartOptions.minBrushWidth) ? this.chartOptions.minBrushWidth : this.minBrushWidth;\n this.focus.attr(\"visibility\", (this.chartOptions.focusHidden) ? \"hidden\" : \"visible\");\n this.verticalValueBox.style(\"visibility\", (this.chartOptions.focusHidden) ? \"hidden\" : \"visible\");\n this.horizontalValueBox.style(\"visibility\", (this.chartOptions.focusHidden) ? \"hidden\" : \"visible\");\n if (this.chartOptions.xAxisHidden && this.chartOptions.focusHidden) {\n this.chartMargins.bottom = 5;\n }\n\n // Check if any swimlane labels present & modify left margin if so\n let isLabelVisible = false;\n this.aggregateExpressionOptions.filter((aggExpOpt) => {\n return this.chartComponentData.displayState[aggExpOpt.aggKey][\"visible\"];\n }).forEach(visibleAgg => {\n if (this.originalSwimLaneOptions?.[visibleAgg.swimLane]?.label) {\n isLabelVisible = true;\n }\n });\n\n if (isLabelVisible) {\n this.chartMargins.left = this.horizontalLabelOffset;\n } else if (this.chartMargins.left === this.horizontalLabelOffset) {\n this.chartMargins.left = LINECHARTCHARTMARGINS.left;\n }\n\n this.width = Math.max((<any>d3.select(this.renderTarget).node()).clientWidth, this.MINWIDTH);\n if (!isFromResize) {\n this.chartWidth = this.getChartWidth();\n }\n this.height = Math.max((<any>d3.select(this.renderTarget).node()).clientHeight, this.MINHEIGHT);\n this.chartHeight = Math.max(1, this.height - this.chartMargins.bottom - this.chartMargins.top);\n\n g.attr(\"transform\", \"translate(\" + this.chartMargins.left + \",\" + this.chartMargins.top + \")\");\n\n if (this.brushElem) {\n this.brushElem.classed(\"hideBrushHandles\", !this.chartOptions.brushHandlesVisible);\n }\n\n this.focus.select('.tsi-hLine').attr(\"x2\", this.chartWidth);\n this.focus.select('.tsi-vLine').attr(\"y2\", this.chartHeight);\n this.svgSelection\n .style(\"width\", this.getSVGWidth() + \"px\")\n .style(\"height\", this.height + \"px\");\n\n super.themify(this.targetElement, this.chartOptions.theme);\n\n\n if (!isFromResize) {\n this.legendObject.draw(\n this.chartOptions.legend,\n this.chartComponentData,\n (aggKey, splitBy) => { this.labelMouseover(aggKey, splitBy); },\n this.svgSelection,\n this.chartOptions, () => {\n Utils.revertAllSubtitleText(d3.select(this.renderTarget).selectAll('.tsi-markerValue'));\n },\n this.stickySeries,\n event);\n }\n\n this.svgSelection.selectAll(\".yAxis\").style(\"visibility\", \"hidden\");\n\n this.x = d3.scaleTime()\n .rangeRound([this.xOffset, Math.max(this.xOffset, this.chartWidth - (2 * this.xOffset))]);\n\n this.y = d3.scaleLinear()\n .range([Math.max(this.chartHeight - this.heightNonNumeric(), this.chartOptions.aggTopMargin) - LINECHARTTOPPADDING, this.chartOptions.aggTopMargin]);\n\n var fromAndTo: any = this.chartComponentData.setAllValuesAndVisibleTAs();\n var xExtent: any = (this.chartComponentData.allValues.length != 0) ? d3.extent(this.chartComponentData.allValues, (d: any) => d.dateTime) : [0, 1];\n var xRange = (this.chartComponentData.allValues.length != 0) ? Math.max(2, (xExtent[1].valueOf() - xExtent[0].valueOf())) : 2;\n var xOffsetPercentage = this.xOffset / this.chartWidth;\n if (this.chartOptions.timeFrame) {\n fromAndTo = [new Date(this.chartOptions.timeFrame[0]), new Date(this.chartOptions.timeFrame[1])];\n }\n this.x.domain(fromAndTo);\n this.xLowerBound = this.x(fromAndTo[0]);\n this.xUpperBound = this.x(fromAndTo[1]);\n\n //allPossibleTimes -> a combination of the beginning and end of buckets\n this.chartComponentData.setTimeMap();\n var startOfBuckets = this.chartComponentData.allValues.map((d: any) => d.dateTime);\n var endOfBuckets = this.chartComponentData.allValues.filter((d: any) => { return d.bucketSize != null })\n .map((d: any) => { return new Date(d.dateTime.valueOf() + d.bucketSize) });\n var allPossibleTimes = startOfBuckets.concat(endOfBuckets);\n var timeSet = new Set(allPossibleTimes);\n this.possibleTimesArray = Array.from(timeSet.values()).sort().map((ts: string) => {\n return new Date(ts);\n });\n\n if (this.voronoiRegion) {\n this.voronoiRegion.attr(\"x\", xOffsetPercentage * this.chartWidth)\n .attr(\"y\", this.chartOptions.aggTopMargin)\n .attr(\"width\", this.chartWidth - (xOffsetPercentage * this.chartWidth * 2))\n .attr(\"height\", this.chartHeight);\n }\n\n if (this.brushElem) {\n var self = this;\n this.brush = d3.brushX()\n .extent([[this.xLowerBound, Math.min(this.chartHeight, this.chartOptions.aggTopMargin)],\n [this.xUpperBound, this.chartHeight]])\n .on(\"start\", function (event) {\n if (self.activeMarker !== null && self.isDroppingMarker) {\n self.voronoiClick(event, this);\n }\n var handleHeight = self.getHandleHeight();\n self.brushElem.selectAll('.handle')\n .attr('height', handleHeight)\n .attr('y', (self.chartHeight - handleHeight) / 2)\n .attr('rx', '4px')\n .attr('ry', '4px');\n })\n .on(\"brush\", function (event) {\n self.brushBrush(event);\n self.drawBrushRange();\n })\n .on(\"end\", function (event) {\n self.brushEnd(event, this);\n self.drawBrushRange();\n });\n this.brushElem.call(this.brush);\n this.setBrush();\n }\n\n var yExtent: any = this.getYExtent(this.chartComponentData.allValues, false, null);\n var yRange = (yExtent[1] - yExtent[0]) > 0 ? yExtent[1] - yExtent[0] : 1;\n var yOffsetPercentage = this.chartOptions.isArea ? (1.5 / this.chartHeight) : (10 / this.chartHeight);\n this.y.domain([yExtent[0] - (yRange * yOffsetPercentage), yExtent[1] + (yRange * (10 / this.chartHeight))]);\n\n if (this.chartOptions.isArea) {\n this.areaPath = d3.area()\n .curve(this.chartOptions.interpolationFunction)\n .defined((d: any) => {\n return (d.measures !== null) &&\n (d.measures[this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)] !== null);\n })\n .x((d: any) => {\n return this.getXPosition(d, this.x);\n })\n .y0((d: any) => {\n return d.measures ? this.y(d.measures[this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)]) : 0;\n })\n .y1(this.chartHeight);\n }\n\n if (!this.chartOptions.xAxisHidden) {\n this.xAxis = g.selectAll(\".xAxis\").data([this.x]);\n this.drawXAxis(this.chartHeight);\n this.xAxis.exit().remove();\n\n var xAxisBaseline = g.selectAll(\".xAxisBaseline\").data([this.x]);\n var xAxisBaselineEntered = xAxisBaseline.enter().append(\"line\")\n .attr(\"class\", \"xAxisBaseline\")\n .attr(\"x1\", .5)\n .merge(xAxisBaseline)\n .attr(\"y2\", this.chartHeight + .5)\n .attr(\"y1\", this.chartHeight + .5)\n .attr(\"x2\", this.chartWidth - this.xOffset);\n xAxisBaseline.exit().remove();\n }\n if (g.selectAll(\".xAxis\").size() !== 0) {\n g.selectAll(\".xAxis\").style(\"visibility\", ((!this.chartOptions.xAxisHidden) ? \"visible\" : \"hidden\"));\n }\n\n\n /******************** Draw Line and Points ************************/\n this.visibleAggCount = Object.keys(this.chartComponentData.timeArrays).reduce((count: number, aggKey: string): number => {\n return count + (this.chartComponentData.displayState[aggKey]['visible'] ? 1 : 0);\n }, 0);\n\n this.yMap = {};\n this.colorMap = {};\n this.svgSelection.selectAll(\".yAxis\").remove();\n\n let visibleGroupData = this.chartComponentData.data.filter((agg) => this.chartComponentData.displayState[agg.aggKey][\"visible\"]);\n let visibleCDOs = this.aggregateExpressionOptions.filter((cDO) => {\n return this.chartComponentData.displayState[cDO.aggKey][\"visible\"];\n });\n let offsetsAndHeights = this.createYOffsets();\n\n // Add swimlane labels to SVG\n this.createSwimlaneLabels(offsetsAndHeights, visibleCDOs);\n\n let swimLaneCounts = {};\n\n // Reset public facing yExtents\n this.chartComponentData.resetYExtents();\n\n let aggregateGroups = this.svgSelection.select('.svgGroup').selectAll('.tsi-aggGroup')\n .data(visibleCDOs, (agg) => agg.aggKey);\n var self = this;\n\n let visibleNumericI = 0;\n aggregateGroups.enter()\n .append('g')\n .classed('tsi-aggGroup', true)\n .merge(aggregateGroups)\n .transition()\n .duration((this.chartOptions.noAnimate) ? 0 : self.TRANSDURATION)\n .ease(d3.easeExp)\n .attr('transform', (agg, i) => {\n return self.chartOptions.isArea ? null : 'translate(0,' + offsetsAndHeights[i][0] + ')';\n })\n .each(function (agg, i) {\n let yExtent;\n let aggVisible = true;\n var aggValues: Array<any> = [];\n let aggKey = agg.aggKey;\n Object.keys(self.chartComponentData.visibleTAs[aggKey]).forEach((splitBy) => {\n aggValues = aggValues.concat(self.chartComponentData.visibleTAs[aggKey][splitBy]);\n });\n\n yExtent = self.getGroupYExtent(aggKey, aggVisible, aggValues, yExtent);\n\n if (self.plotComponents[aggKey] === undefined || self.mismatchingChartType(aggKey)) {\n let g = d3.select(this);\n delete self.plotComponents[aggKey];\n g.selectAll('*').remove();\n self.plotComponents[aggKey] = self.createPlot(g, i, visibleCDOs);\n }\n\n let mouseoverFunction = self.getMouseoverFunction(visibleCDOs[i].dataType);\n let mouseoutFunction = self.getMouseoutFunction(visibleCDOs[i].dataType);\n let positionInGroup = visibleNumericI;\n if (self.getAggAxisType(agg) === YAxisStates.Shared) {\n yExtent = self.swimlaneYExtents[agg.swimLane];\n }\n\n // Update yExtent index in LineChartData after all local yExtent updates (this is public facing yExtent)\n // Only update if dataType is numeric\n if (agg.dataType === 'numeric') {\n let idx = self.aggregateExpressionOptions.findIndex(el => el.aggKey === aggKey)\n self.chartComponentData.setYExtents(idx, yExtent);\n }\n\n //should count all as same swim lane when not in stacked.\n let swimLane = agg.swimLane;\n let offsetImpact = (agg.dataType === DataTypes.Numeric) ? 1 : 0;\n if (swimLaneCounts[swimLane]) {\n positionInGroup = swimLaneCounts[swimLane];\n swimLaneCounts[swimLane] += offsetImpact;\n } else {\n positionInGroup = 0;\n swimLaneCounts[swimLane] = offsetImpact;\n }\n\n let axisState = new AxisState(self.getAggAxisType(agg), yExtent, positionInGroup);\n\n let yAxisOnClick = null;\n if (typeof self.chartOptions?.swimLaneOptions?.[swimLane]?.onClick === 'function') {\n yAxisOnClick = () => self.chartOptions.swimLaneOptions[swimLane].onClick?.(swimLane);\n }\n\n self.plotComponents[aggKey].render(self.chartOptions, visibleNumericI, agg, true, d3.select(this), self.chartComponentData, axisState,\n self.chartHeight, self.visibleAggCount, self.colorMap, self.previousAggregateData,\n self.x, self.areaPath, self.strokeOpacity, self.y, self.yMap, defs, visibleCDOs[i], self.previousIncludeDots, offsetsAndHeights[i],\n g, mouseoverFunction, mouseoutFunction, yAxisOnClick);\n\n //increment index of visible numerics if appropriate\n visibleNumericI += (visibleCDOs[i].dataType === DataTypes.Numeric ? 1 : 0);\n });\n aggregateGroups.exit().remove();\n /******************** Voronoi diagram for hover action ************************/\n\n this.voronoi = d3Voronoi.voronoi()\n .x(function (d: any) {\n return (d.bucketSize != undefined ? self.x(new Date(d.dateTime.valueOf() + (d.bucketSize / 2))) : self.x(d.dateTime))\n })\n .y(function (d: any) {\n if (d.measures) {\n return self.yMap[d.aggregateKey] ? self.yMap[d.aggregateKey](self.getValueOfVisible(d)) : null;\n }\n return null;\n })\n .extent([[0, 0], [this.chartWidth, this.chartHeight]]);\n\n //if brushElem present then use the overlay, otherwise create a rect to put the voronoi on\n var voronoiSelection = (this.brushElem ? this.brushElem.select(\".overlay\") : this.voronoiRegion);\n\n voronoiSelection.on(\"mousemove\", function (event) {\n let mouseEvent = d3.pointer(event);\n self.voronoiMousemove(mouseEvent);\n })\n .on(\"mouseout\", function (event, d) {\n if (!self.filteredValueExist() || !self.voronoiExists()) return;\n const [mx, my] = d3.pointer(event);\n const site = self.voronoiDiagram.find(mx, my);\n self.voronoiMouseout(event, site.data);\n self.chartOptions.onMouseout();\n if (self.tooltip)\n self.tooltip.hide();\n })\n .on(\"contextmenu\", function (event, d) {\n self.voronoiContextMenu(event, this);\n })\n .on(\"click\", function (event, d) {\n self.voronoiClick(event, this);\n });\n\n if (this.brushElem) {\n this.brushElem.selectAll(\".selection, .handle\").on(\"contextmenu\", function (event, d) {\n if (!self.chartOptions.brushContextMenuActions || self.chartOptions.brushContextMenuActions.length == 0 || self.chartOptions.autoTriggerBrushContextMenu)\n return;\n var mousePosition = d3.pointer(event, <any>self.targetElement.node());\n event.preventDefault();\n self.brushContextMenu.draw(self.chartComponentData, self.renderTarget, self.chartOptions,\n mousePosition, null, null, null, self.brushStartTime, self.brushEndTime);\n });\n this.brushElem.selectAll('.selection')\n .attr('stroke', this.chartOptions.color ? this.chartOptions.color : 'none')\n .attr('fill', this.chartOptions.color ? this.chartOptions.color : 'grey');\n\n var handleHeight = self.getHandleHeight();\n this.brushElem.selectAll('.handle')\n .attr('fill', this.chartOptions.color ? this.chartOptions.color : 'grey')\n .attr('height', handleHeight)\n .attr('y', (this.chartHeight - handleHeight) / 2);\n }\n\n /******************** Stack/Unstack button ************************/\n if (this.hasStackedButton) {\n this.stackedButton.style(\"opacity\", () => {\n if (this.chartOptions.yAxisState === YAxisStates.Stacked) return 1;\n if (this.chartOptions.yAxisState === YAxisStates.Shared) return .6;\n return .3;\n })\n .style(\"display\", this.visibleAggCount < 2 ? \"none\" : \"block\")\n .classed('tsi-lightTheme', this.chartOptions.theme == 'light')\n .classed('tsi-darkTheme', this.chartOptions.theme == 'dark');\n }\n\n let timeFrame = (this.chartOptions.timeFrame) ? this.chartOptions.timeFrame : this.x.domain();\n\n if (!this.chartOptions.hideChartControlPanel && this.chartControlsPanel !== null) {\n this.chartControlsPanel.style(\"width\", this.calcSVGWidth() + \"px\")\n }\n\n this.renderAllMarkers();\n this.drawHorizontalMarkers();\n this.voronoiDiagram = this.voronoi(this.getFilteredAndSticky(this.chartComponentData.allValues));\n }\n\n this.legendObject = new Legend(this.draw, this.renderTarget, this.legendWidth);\n this.contextMenu = new ContextMenu(this.draw, this.renderTarget);\n this.brushContextMenu = new ContextMenu(this.draw, this.renderTarget);\n window.addEventListener(\"resize\", (event) => {\n var self = this;\n if (!this.chartOptions.suppressResizeListener) {\n this.draw(true, event);\n this.renderAllMarkers();\n }\n });\n }\n\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(this.data, this.aggregateExpressionOptions);\n this.draw();\n this.gatedShowGrid();\n this.chartOptions.noAnimate = false; // ensure internal renders are always animated, overriding the users noAnimate option\n\n if (this.chartOptions.labelSeriesWithMarker && this.seriesLabelsMarker === null) {\n this.createSeriesLabelsMarker();\n }\n\n this.renderSeriesLabelsMarker();\n\n if (this.chartOptions.markers && this.chartOptions.markers.length > 0) {\n this.importMarkers();\n }\n\n d3.select(\"html\").on(\"click.\" + Utils.guid(), (event) => {\n if (this.ellipsisContainer && event.target != this.ellipsisContainer.select(\".tsi-ellipsisButton\").node()) {\n this.ellipsisMenu.setMenuVisibility(false);\n }\n });\n\n this.legendPostRenderProcess(this.chartOptions.legend, this.svgSelection, true, () => {\n this.updateBrushRange();\n });\n }\n\n private createPlot(svgGroup, i, cDO) {\n let chartType = cDO[i].dataType;\n if (chartType === DataTypes.Numeric) {\n return new LinePlot(svgGroup);\n } else if (chartType === DataTypes.Categorical) {\n return new CategoricalPlot(svgGroup);\n } else if (chartType === DataTypes.Events) {\n return new EventsPlot(svgGroup);\n }\n return null;\n }\n}\nexport default LineChart","/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday\n */\n(function (root, factory)\n{\n 'use strict';\n\n var moment;\n if (typeof exports === 'object') {\n // CommonJS module\n // Load moment.js as an optional dependency\n try { moment = require('moment'); } catch (e) {}\n module.exports = factory(moment);\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function (req)\n {\n // Load moment.js as an optional dependency\n var id = 'moment';\n try { moment = req(id); } catch (e) {}\n return factory(moment);\n });\n } else {\n root.Pikaday = factory(root.moment);\n }\n}(this, function (moment)\n{\n 'use strict';\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === 'function',\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent('on' + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent('on' + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n },\n\n hasClass = function(el, cn)\n {\n return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent('HTMLEvents');\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent('on' + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // position of the datepicker, relative to the field (default to bottom & left)\n // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n position: 'bottom left',\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: 'YYYY-MM-DD',\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // the default flag for moment's strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: '',\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: 'left',\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : 'Previous Month',\n nextMonth : 'Next Month',\n months : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null,\n\n // Enable keyboard input\n keyboardInput: true\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push('is-selection-disabled');\n }\n\n } else {\n return '<td class=\"is-empty\"></td>';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\" aria-selected=\"' + ariaSelected + '\">' +\n '<button tabIndex=\"-1\" class=\"pika-button pika-day\" type=\"button\" ' +\n 'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n opts.day +\n '</button>' +\n '</td>';\n },\n\n renderWeek = function (d, m, y) {\n // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n var onejan = new Date(y, 0, 1),\n weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n return '<td class=\"pika-week\">' + weekNum + '</td>';\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return '<tr class=\"pika-row' + (pickWholeWeek ? ' pick-whole-week' : '') + (isRowSelected ? ' is-selected' : '') + '\">' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n },\n\n renderBody = function(rows)\n {\n return '<tbody>' + rows.join('') + '</tbody>';\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push('<th></th>');\n }\n for (i = 0; i < 7; i++) {\n arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n }\n return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = '<div id=\"' + randId + '\" class=\"pika-title\">',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n (i === month ? ' selected=\"selected\"': '') +\n ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? 'disabled=\"disabled\"' : '') + '>' +\n opts.i18n.months[i] + '</option>');\n }\n\n monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select aria-label=\"select month\" class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected=\"selected\"': '') + '>' + (i) + '</option>');\n }\n }\n yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select aria-label=\"select year\" class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += '<button tabIndex=\"-1\" class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += '<button tabIndex=\"-1\" class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n }\n\n return html += '</div>';\n },\n\n renderTable = function(opts, data, randId)\n {\n return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"' + randId + '\">' + renderHead(opts) + renderBody(data) + '</table>';\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, 'is-disabled')) {\n if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect && opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, 'pika-prev')) {\n self.prevMonth();\n }\n else if (hasClass(target, 'pika-next')) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, 'pika-select')) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, 'pika-select-month')) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, 'pika-select-year')) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n // ignore if event comes from input box\n if (self.isVisible() && e.target && e.target.type !== 'text') {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n e.preventDefault();\n self.adjustDate('subtract', 1);\n break;\n case 38:\n self.adjustDate('subtract', 7);\n break;\n case 39:\n self.adjustDate('add', 1);\n break;\n case 40:\n self.adjustDate('add', 7);\n break;\n }\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n if (opts.parse) {\n date = opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n date = moment(opts.field.value, opts.format, opts.formatStrict);\n date = (date && date.isValid()) ? date.toDate() : null;\n }\n else {\n date = new Date(Date.parse(opts.field.value));\n }\n // if (isDate(date)) {\n // self.setDate(date);\n // }\n // if (!self._v) {\n // self.show();\n // }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, 'pika-single')) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners && hasClass(target, 'pika-select')) {\n if (!target.onchange) {\n target.setAttribute('onchange', 'return;');\n addEvent(target, 'change', self._onChange);\n }\n }\n do {\n if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement('div');\n self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n addEvent(self.el, 'mousedown', self._onMouseDown, true);\n addEvent(self.el, 'touchend', self._onMouseDown, true);\n addEvent(self.el, 'change', self._onChange);\n\n if (opts.keyboardInput) {\n addEvent(document, 'keydown', self._onKeyChange);\n }\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, 'change', self._onInputChange);\n\n if (!opts.defaultDate) {\n if (hasMoment && opts.field.value) {\n opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n } else {\n opts.defaultDate = new Date(Date.parse(opts.field.value));\n }\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += ' is-bound';\n addEvent(opts.trigger, 'click', self._onInputClick);\n addEvent(opts.trigger, 'focus', self._onInputFocus);\n addEvent(opts.trigger, 'blur', self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange > 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return '';\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment && moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = '';\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === 'right') {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === 'add') {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === 'subtract') {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c < this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \"2012\")\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v && !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n for (var c = 0; c < opts.numberOfMonths; c++) {\n randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== 'hidden') {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === 'function') {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute('aria-label', 'Use the arrow keys to pick a date');\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect;\n\n if (this._o.container) return;\n\n this.el.style.position = 'absolute';\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n if (typeof field.getBoundingClientRect === 'function') {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom & left\n if ((this._o.reposition && left + width > viewportWidth) ||\n (\n this._o.position.indexOf('right') > -1 &&\n left - width + field.offsetWidth > 0\n )\n ) {\n left = left - width + field.offsetWidth;\n }\n if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf('top') > -1 &&\n top - height - field.offsetHeight > 0\n )\n ) {\n top = top - height - field.offsetHeight;\n }\n\n this.el.style.left = left + 'px';\n this.el.style.top = top + 'px';\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i < cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && compareDates(opts.startRange, day),\n isEndRange = opts.endRange && compareDates(opts.endRange, day),\n isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled = (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek && isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, 'is-hidden');\n if (this._o.bound) {\n addEvent(document, 'click', this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === 'function') {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, 'click', this._onClick);\n }\n this.el.style.position = 'static'; // reset\n this.el.style.left = 'auto';\n this.el.style.top = 'auto';\n addClass(this.el, 'is-hidden');\n this._v = false;\n if (v !== undefined && typeof this._o.onClose === 'function') {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n var opts = this._o;\n\n this.hide();\n removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n removeEvent(this.el, 'touchend', this._onMouseDown, true);\n removeEvent(this.el, 'change', this._onChange);\n if (opts.keyboardInput) {\n removeEvent(document, 'keydown', this._onKeyChange);\n }\n if (opts.field) {\n removeEvent(opts.field, 'change', this._onInputChange);\n if (opts.bound) {\n removeEvent(opts.trigger, 'click', this._onInputClick);\n removeEvent(opts.trigger, 'focus', this._onInputFocus);\n removeEvent(opts.trigger, 'blur', this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n}));","import * as d3 from 'd3';\nimport './TimezonePicker.scss';\nimport { ChartComponent } from '../../interfaces/ChartComponent';\nimport Utils from \"../../utils\";\nimport moment from 'moment-timezone';\n\nclass TimezonePicker extends ChartComponent {\n private targetElement: any;\n private timeZones: Array<string> = [\"Local\", \"UTC\", \"Africa/Algiers\", \"Africa/Cairo\", \"Africa/Casablanca\", \"Africa/Harare\", \"Africa/Johannesburg\", \"Africa/Lagos\", \"Africa/Nairobi\", \"Africa/Windhoek\", \"America/Anchorage\", \"America/Bogota\", \"America/Buenos Aires\", \"America/Caracas\", \"America/Chicago\", \"America/Chihuahua\", \"America/Denver\", \"America/Edmonton\", \"America/Godthab\", \"America/Guatemala\", \"America/Halifax\", \"America/Indiana/Indianapolis\", \"America/Los Angeles\", \"America/Manaus\", \"America/Mexico City\", \"America/Montevideo\", \"America/New York\", \"America/Phoenix\", \"America/Santiago\", \"America/Sao Paulo\", \"America/St Johns\", \"America/Tijuana\", \"America/Toronto\", \"America/Vancouver\", \"America/Winnipeg\", \"Asia/Amman\", \"Asia/Beirut\", \"Asia/Baghdad\", \"Asia/Baku\", \"Asia/Bangkok\", \"Asia/Calcutta\", \"Asia/Colombo\", \"Asia/Dhaka\", \"Asia/Dubai\", \"Asia/Ho Chi Minh\", \"Asia/Hong Kong\", \"Asia/Irkutsk\", \"Asia/Istanbul\", \"Asia/Jakarta\", \"Asia/Jerusalem\", \"Asia/Kabul\", \"Asia/Karachi\", \"Asia/Kathmandu\", \"Asia/Krasnoyarsk\", \"Asia/Kuala Lumpur\", \"Asia/Kuwait\", \"Asia/Magadan\", \"Asia/Muscat\", \"Asia/Novosibirsk\", \"Asia/Qatar\", \"Asia/Rangoon\", \"Asia/Seoul\", \"Asia/Shanghai\", \"Asia/Singapore\", \"Asia/Taipei\", \"Asia/Tbilisi\", \"Asia/Tehran\", \"Asia/Tokyo\", \"Asia/Vladivostok\", \"Asia/Yakutsk\", \"Asia/Yekaterinburg\", \"Asia/Yerevan\", \"Atlantic/Azores\", \"Atlantic/Cape Verde\", \"Atlantic/South Georgia\", \"Australia/Adelaide\", \"Australia/Brisbane\", \"Australia/Canberra\", \"Australia/Darwin\", \"Australia/Hobart\", \"Australia/Melbourne\", \"Australia/Perth\", \"Australia/Queensland\", \"Australia/Sydney\", \"Europe/Amsterdam\", \"Europe/Andorra\", \"Europe/Athens\", \"Europe/Belfast\", \"Europe/Belgrade\", \"Europe/Berlin\", \"Europe/Brussels\", \"Europe/Budapest\", \"Europe/Dublin\", \"Europe/Helsinki\", \"Europe/Kiev\", \"Europe/Lisbon\", \"Europe/London\", \"Europe/Luxembourg\", \"Europe/Madrid\", \"Europe/Minsk\", \"Europe/Monaco\", \"Europe/Moscow\", \"Europe/Oslo\", \"Europe/Paris\", \"Europe/Rome\", \"Europe/Stockholm\", \"Europe/Vienna\", \"Europe/Warsaw\", \"Europe/Zurich\", \"Pacific/Auckland\", \"Pacific/Fiji\", \"Pacific/Guam\", \"Pacific/Honolulu\", \"Pacific/Midway\", \"Pacific/Tongatapu\"];\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n private sortTimezones() {\n let filteredTimezones = this.timeZones.filter((tz) => {\n return !(tz.toLowerCase() == 'local' || tz == 'UTC');\n })\n\n filteredTimezones.sort((a, b) => {\n let aOffset = moment.tz(new Date(), a.split(' ').join('_')).utcOffset();\n let bOffset = moment.tz(new Date(), b.split(' ').join('_')).utcOffset();\n if (aOffset < bOffset) {\n return -1;\n }\n if (aOffset > bOffset) {\n return 1;\n }\n return 0;\n });\n this.timeZones = ['Local', 'UTC'].concat(filteredTimezones);\n }\n\n public render(onTimezoneSelect, defaultTimeZone: string = null) {\n this.targetElement = d3.select(this.renderTarget)\n .classed(\"tsi-timezonePicker\", true)\n\n let d = new Date();\n var timezoneSelection = this.targetElement.append(\"select\")\n .attr(\"class\", \"tsi-timezonePicker tsi-select\");\n\n this.sortTimezones();\n\n var options = timezoneSelection.selectAll(\"option\")\n .data(this.timeZones)\n .enter()\n .append(\"option\")\n .attr('value', d => d)\n .text((tz) => Utils.convertTimezoneToLabel(tz, this.getString('Local')));\n timezoneSelection.on(\"change\", function (d) {\n var timezone = (<any>d3.select(this).node()).value.replace(/\\s/g, \"_\");\n onTimezoneSelect(timezone);\n });\n\n defaultTimeZone = defaultTimeZone.replace(/_/g, \" \");\n if (defaultTimeZone != null) {\n options.filter((d) => d == defaultTimeZone).attr(\"selected\", true);\n }\n return;\n }\n\n}\n\nexport default TimezonePicker;","import * as d3 from 'd3';\nimport Pikaday from '../../../packages/pikaday/pikaday';\nimport '../../../packages/pikaday/css/pikaday.css'\nimport moment from 'moment';\nimport './DateTimePicker.scss';\nimport { ChartComponent } from '../../interfaces/ChartComponent';\nimport TimezonePicker from '../TimezonePicker/TimezonePicker';\nimport Utils from \"../../utils\";\n\nclass DateTimePicker extends ChartComponent {\n private calendar: any;\n private calendarPicker: any;\n private timeControls: any;\n private minMillis: number;\n private maxMillis: number;\n private fromMillis: number;\n private toMillis: number;\n private fromMinutes: number;\n private fromHours: number;\n private toMinutes: number;\n private toHours: number;\n private onSet: any;\n private onCancel: any;\n private isValid: boolean = true;\n\n private targetElement: any;\n private dateTimeSelectionPanel: any;\n private quickTimesPanel: any;\n\n private isSettingStartTime: boolean = true;\n private startRange;\n private endRange;\n private anchorDate;\n private offsetName: string;\n\n private fromInput: any;\n private toInput: any;\n\n private quickTimeArray: Array<any> = [\n [\"Last 15 mins\", 15 * 60 * 1000],\n [\"Last 30 mins\", 30 * 60 * 1000],\n [\"Last Hour\", 60 * 60 * 1000],\n [\"Last 2 Hours\", 2 * 60 * 60 * 1000],\n [\"Last 4 Hours\", 4 * 60 * 60 * 1000],\n [\"Last 12 Hours\", 12 * 60 * 60 * 1000],\n [\"Last 24 Hours\", 24 * 60 * 60 * 1000],\n [\"Last 7 Days\", 7 * 24 * 60 * 60 * 1000],\n [\"Last 30 Days\", 30 * 24 * 60 * 60 * 1000],\n [\"Last 90 Days\", 90 * 24 * 60 * 60 * 1000]\n ];\n\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n // returns -1 if not currently a quicktime\n private getCurrentQuickTime() {\n let matchingQuickTime = this.quickTimeArray.filter((quickTimeTuple) => {\n return (this.toMillis - this.fromMillis === quickTimeTuple[1]);\n });\n if (matchingQuickTime.length !== 1 || this.toMillis !== this.maxMillis) {\n return -1;\n }\n return matchingQuickTime[0][1];\n }\n\n public getQuickTimeText(quickTimeMillis) {\n let filteredQuickTime = this.quickTimeArray.filter((quickTimeTuple) => {\n return (quickTimeMillis === quickTimeTuple[1]);\n });\n if (filteredQuickTime.length !== 1) {\n return null;\n }\n return filteredQuickTime[0][0];\n }\n\n private convertToCalendarDate(millis) {\n return this.roundDay(Utils.adjustDateFromTimezoneOffset(Utils.offsetFromUTC(new Date(millis), this.chartOptions.offset)))\n }\n\n private setNewOffset(oldOffset: any) {\n var valuesToUpdate = ['fromMillis', 'toMillis'];\n valuesToUpdate.forEach((currValue: string) => {\n var oldOffsetMinutes = Utils.getMinutesToUTC(oldOffset, this[currValue]);\n var utcMillis = this[currValue] - (oldOffsetMinutes * 60 * 1000);\n this[currValue] = utcMillis - Utils.getOffsetMinutes(this.chartOptions.offset, utcMillis) * 60 * 1000;\n });\n\n this.setFromMillis(this.fromMillis);\n this.setToMillis(this.toMillis);\n\n this.updateDisplayedFromDateTime();\n this.updateDisplayedToDateTime();\n\n this.startRange = new Date(this.fromMillis);\n this.endRange = new Date(this.toMillis);\n\n this.calendarPicker.config({ minDate: this.convertToCalendarDate(this.minMillis) });\n this.calendarPicker.config({ maxDate: this.convertToCalendarDate(this.maxMillis) });\n\n this.calendarPicker.draw();\n\n var rangeErrorCheck = this.rangeIsValid(this.fromMillis, this.toMillis);\n this.setIsSaveable(rangeErrorCheck.isSaveable);\n this.displayRangeErrors(rangeErrorCheck.errors);\n }\n\n private onSaveOrCancel = () => {\n this.isSettingStartTime = true;\n }\n\n public render(chartOptions: any = {}, minMillis: number, maxMillis: number,\n fromMillis: number = null, toMillis: number = null, onSet = null, onCancel = null) {\n this.isSettingStartTime = true;\n this.minMillis = minMillis;\n this.maxMillis = maxMillis;\n if (chartOptions.offset && (typeof chartOptions.offset === \"string\")) {\n this.offsetName = chartOptions.offset;\n }\n\n if (toMillis == null) {\n toMillis = this.maxMillis;\n }\n if (fromMillis == null) {\n fromMillis = Math.max(toMillis - (24 * 60 * 60 * 1000), minMillis);\n }\n this.chartOptions.setOptions(chartOptions);\n moment.locale(this.chartOptions.dateLocale);\n this.fromMillis = fromMillis;\n this.toMillis = toMillis;\n this.onSet = onSet;\n this.onCancel = onCancel;\n this.targetElement = d3.select(this.renderTarget)\n .classed(\"tsi-dateTimePicker\", true);\n this.targetElement.html('');\n super.themify(this.targetElement, this.chartOptions.theme);\n\n let group = this.targetElement.append('div')\n .classed('tsi-dateTimeGroup', true)\n .on('keydown', (event) => {\n if (event.keyCode <= 40 && event.keyCode >= 37) { //arrow key\n event.stopPropagation();\n }\n if (event.keyCode === 27 && this.chartOptions.dTPIsModal) { //escape\n this.onCancel();\n this.onSaveOrCancel();\n }\n });\n\n this.quickTimesPanel = group.append('div')\n .classed('tsi-quickTimesPanel', true);\n this.buildQuickTimesPanel();\n\n this.dateTimeSelectionPanel = group.append('div')\n .classed('tsi-dateTimeSelectionPanel', true);\n\n this.timeControls = this.dateTimeSelectionPanel.append(\"div\").classed(\"tsi-timeControlsContainer\", true);\n this.calendar = this.dateTimeSelectionPanel.append(\"div\").classed(\"tsi-calendarPicker\", true);\n this.createTimezonePicker();\n var saveButtonContainer = this.dateTimeSelectionPanel.append(\"div\").classed(\"tsi-saveButtonContainer\", true);\n var self = this;\n\n\n var saveButton = saveButtonContainer.append(\"button\").classed(\"tsi-saveButton\", true).text(this.getString(\"Save\"))\n .on(\"click\", function () {\n self.onSet(self.fromMillis, self.toMillis, self.chartOptions.offset, self.maxMillis === self.toMillis, self.getCurrentQuickTime());\n self.onSaveOrCancel();\n });\n\n var cancelButton = saveButtonContainer.append('button')\n .attr('class', 'tsi-cancelButton')\n .text(this.getString('Cancel'))\n .on('click', () => {\n this.onCancel();\n this.onSaveOrCancel();\n })\n .on('keydown', (event) => {\n if (event.keyCode === 9 && !event.shiftKey && this.chartOptions.dTPIsModal) { // tab\n this.quickTimesPanel.selectAll('.tsi-quickTime')\n .filter((d, i) => i === 0)\n .node()\n .focus();\n event.preventDefault();\n }\n });\n\n //originally set toMillis to last possible time\n this.toMillis = this.maxMillis;\n this.setFromMillis(fromMillis);\n this.setToMillis(toMillis);\n\n this.targetElement.append(\"div\").classed(\"tsi-errorMessageContainer\", true);\n this.createTimePicker();\n this.createCalendar();\n this.calendarPicker.draw();\n\n this.updateDisplayedFromDateTime();\n this.updateDisplayedToDateTime();\n\n this.startRange = new Date(this.fromMillis);\n this.endRange = new Date(this.toMillis);\n this.calendarPicker.draw();\n return;\n }\n\n private updateDisplayedDateTimes() {\n ['from', 'to'].forEach((fromOrTo) => {\n var selectedDate = new Date(this[fromOrTo + 'Millis']);\n this.calendarPicker.setDate(this.roundDay(Utils.offsetFromUTC(selectedDate)));\n this[fromOrTo + 'Input'].node().value = this.createTimeString(Utils.offsetFromUTC(selectedDate));\n })\n }\n\n private setFromQuickTimes(relativeMillis) {\n this.isSettingStartTime = true;\n this.setToMillis(this.maxMillis);\n this.setFromMillis(this.maxMillis - relativeMillis);\n this.updateDisplayedFromDateTime();\n this.updateDisplayedToDateTime();\n this.calendarPicker.draw();\n }\n\n private buildQuickTimesPanel() {\n let quickTimes = this.quickTimesPanel.selectAll('.tsi-quickTime')\n .data(this.quickTimeArray);\n let enteredQuickTimes = quickTimes.enter()\n .append('button')\n .attr('class', 'tsi-quickTime')\n .on('click', (event, d) => {\n this.setFromQuickTimes(d[1]);\n })\n .text((d) => d[0])\n .attr('aria-label', (d) => `${this.getString('select quick time of')} ${d[0]}`);\n // wrap around tab order if dTP in modal form\n let firstQuickTime = enteredQuickTimes.filter((d, i) => {\n return (i === 0);\n })\n .on('keydown', (event) => {\n if (event.keyCode === 9 && event.shiftKey && this.chartOptions.dTPIsModal) { // shift tab\n this.dateTimeSelectionPanel.select(\".tsi-saveButtonContainer\").select(\".tsi-cancelButton\").node().focus();\n event.preventDefault();\n }\n });\n\n if (this.chartOptions.dTPIsModal) {\n firstQuickTime.node().focus();\n }\n }\n\n private createTimeString(currDate: Date) {\n return this.getTimeFormat()(currDate);\n }\n\n private getTimeFormat() {\n return Utils.timeFormat(true, true, this.chartOptions.offset, true, 0, null, this.chartOptions.dateLocale);\n }\n\n public updateFromAndTo(fromMillis, toMillis) {\n this.setFromMillis(fromMillis);\n this.setToMillis(toMillis);\n\n this.updateDisplayedFromDateTime();\n this.updateDisplayedToDateTime();\n\n this.startRange = new Date(this.fromMillis);\n this.endRange = new Date(this.toMillis);\n this.calendarPicker.draw();\n }\n\n private createTimezonePicker() {\n const offset = this.chartOptions.offset;\n if (this.chartOptions.includeTimezones && (typeof offset == \"string\" || offset == 0)) {\n var timezoneContainer = this.dateTimeSelectionPanel.append(\"div\").attr(\"class\", \"tsi-timezoneContainer\");\n let timezoneSelectionLabelID = Utils.guid();\n let timezoneSelectionID = timezoneSelectionLabelID + 'Tz';\n timezoneContainer.append(\"label\")\n .classed(\"tsi-timeLabel\", true)\n .attr('aria-label', this.getString('timezone selection'))\n .attr('id', timezoneSelectionLabelID)\n .attr('for', timezoneSelectionID)\n .text(this.getString('timezone'));\n var timezonePickerContainer = timezoneContainer.append(\"div\").classed(\"tsi-timezonePickerContainer\", true);\n var timezonePicker = new TimezonePicker(timezonePickerContainer.node());\n timezonePicker.render((newOffset) => {\n let matchingQuickTime = this.getCurrentQuickTime();\n var oldOffset = this.chartOptions.offset;\n this.chartOptions.offset = newOffset;\n this.setNewOffset(oldOffset);\n if (matchingQuickTime !== -1) {\n this.setFromQuickTimes(matchingQuickTime);\n }\n }, (typeof offset == \"string\" ? offset : \"UTC\"));\n d3.select(timezonePicker.renderTarget).select('select')\n .attr('aria-labelledBy', timezoneSelectionLabelID)\n .attr('id', timezoneSelectionID);\n }\n }\n\n //zero out everything but year, month and day\n private roundDay(d: Date) {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n\n private setTimeRange(d: Date, isFromSelect: boolean) {\n if (this.isSettingStartTime) {\n this.calendarPicker.setStartRange(d);\n this.calendarPicker.setEndRange(null);\n this.startRange = d;\n this.anchorDate = d;\n }\n else {\n if (d.valueOf() > this.anchorDate.valueOf()) {\n if (isFromSelect) {\n this.setFromDate(this.anchorDate);\n this.setToDate(d);\n }\n this.calendarPicker.setEndRange(d);\n this.calendarPicker.setStartRange(this.anchorDate);\n this.startRange = this.anchorDate;\n this.endRange = d;\n } else {\n if (isFromSelect) {\n this.setFromDate(d);\n this.setToDate(this.anchorDate);\n }\n\n this.calendarPicker.setStartRange(d);\n this.calendarPicker.setEndRange(this.anchorDate);\n this.endRange = this.anchorDate;\n this.startRange = d;\n }\n this.setTimeInputBox(this.fromMillis, true);\n this.setTimeInputBox(this.toMillis, false);\n }\n }\n\n private createCalendar() {\n var i18nOptions = {\n previousMonth: this.getString('Previous Month'),\n nextMonth: this.getString('Next Month'),\n months: moment.localeData().months(),\n weekdays: moment.localeData().weekdays(),\n weekdaysShort: moment.localeData().weekdaysMin()\n };\n\n //@ts-ignore\n this.calendarPicker = new Pikaday({\n bound: false,\n container: this.calendar.node(),\n field: this.calendar.node(),\n i18n: i18nOptions,\n numberOfMonths: 2,\n onSelect: (d) => {\n this.setTimeRange(d, true);\n this.isSettingStartTime = !this.isSettingStartTime;\n this.calendarPicker.draw();\n },\n onDraw: (d) => {\n if (this.isSettingStartTime)\n return;\n var self = this;\n this.calendar.select(\".pika-single\").selectAll(\".pika-day\")\n .on(\"mouseover\", function () {\n var date = new Date(Number(d3.select(this).attr(\"data-pika-year\")),\n Number(d3.select(this).attr(\"data-pika-month\")),\n Number(d3.select(this).attr(\"data-pika-day\")));\n if (!self.isSettingStartTime) {\n if (date.valueOf() < self.anchorDate.valueOf() && self.startRange.valueOf() != date.valueOf()) {\n self.setTimeRange(date, false);\n self.calendarPicker.draw();\n return;\n }\n if (date.valueOf() >= self.anchorDate.valueOf() && (self.endRange == undefined || self.endRange.valueOf() != date.valueOf())) {\n self.setTimeRange(date, false);\n self.calendarPicker.draw();\n return;\n }\n }\n });\n },\n minDate: this.convertToCalendarDate(this.minMillis),\n maxDate: this.convertToCalendarDate(this.maxMillis),\n defaultDate: Utils.adjustDateFromTimezoneOffset(new Date(this.fromMillis))\n });\n }\n\n private setSelectedQuickTimes() {\n let isSelected = d => {\n return (this.toMillis === this.maxMillis && (this.toMillis - this.fromMillis === d[1]));\n }\n this.quickTimesPanel.selectAll('.tsi-quickTime')\n .classed('tsi-isSelected', isSelected)\n .attr('aria-pressed', isSelected);\n }\n\n private setFromDate(calendarDate: Date) {\n let convertedFrom = new Date(Utils.offsetFromUTC(new Date(this.fromMillis), this.chartOptions.offset));\n convertedFrom.setUTCFullYear(calendarDate.getFullYear());\n convertedFrom.setUTCMonth(calendarDate.getMonth());\n convertedFrom.setUTCDate(calendarDate.getDate());\n this.setFromMillis(Utils.offsetToUTC(convertedFrom, this.chartOptions.offset).valueOf());\n }\n\n private setToDate(calendarDate: Date) {\n let convertedTo = new Date(Utils.offsetFromUTC(new Date(this.toMillis), this.chartOptions.offset));\n convertedTo.setUTCFullYear(calendarDate.getFullYear());\n convertedTo.setUTCMonth(calendarDate.getMonth());\n convertedTo.setUTCDate(calendarDate.getDate());\n this.setToMillis(Utils.offsetToUTC(convertedTo, this.chartOptions.offset).valueOf());\n }\n\n private setIsSaveable(isSaveable: boolean) {\n // For now, lets allow users to save the time even in the presence of errors\n this.dateTimeSelectionPanel.select(\".tsi-saveButtonContainer\").select(\".tsi-saveButton\")\n .attr(\"disabled\", isSaveable ? null : true)\n .classed(\"tsi-buttonDisabled\", !isSaveable);\n this.isValid = isSaveable;\n }\n\n //line up the seconds and millis with the second and millis of the max date\n private adjustSecondsAndMillis(rawMillis) {\n var currDate = new Date(rawMillis);\n var maxDate = new Date(this.maxMillis);\n currDate.setUTCSeconds(maxDate.getUTCSeconds());\n currDate.setUTCMilliseconds(maxDate.getUTCMilliseconds());\n return currDate.valueOf();\n }\n\n private setFromMillis(millis: number) {\n var rangeErrorCheck = this.rangeIsValid(millis, this.toMillis);\n this.fromMillis = millis;\n this.setIsSaveable(rangeErrorCheck.isSaveable);\n this.displayRangeErrors(rangeErrorCheck.errors);\n this.setSelectedQuickTimes();\n }\n\n private setToMillis(millis: number) {\n var rangeErrorCheck = this.rangeIsValid(this.fromMillis, millis);\n this.toMillis = millis;\n this.setIsSaveable(rangeErrorCheck.isSaveable);\n this.displayRangeErrors(rangeErrorCheck.errors);\n this.setSelectedQuickTimes();\n }\n\n private displayRangeErrors(rangeErrors) {\n this.targetElement.select(\".tsi-errorMessageContainer\").selectAll(\".tsi-errorMessage\").remove();\n if (rangeErrors.length != 0) {\n this.targetElement.select(\".tsi-errorMessageContainer\").selectAll(\".tsi-errorMessages\")\n .data(rangeErrors)\n .enter()\n .append(\"div\")\n .classed(\"tsi-errorMessage\", true)\n .attr('role', 'alert')\n .attr('aria-live', 'assertive')\n .text(d => d);\n }\n }\n\n private rangeIsValid(prospectiveFromMillis: number, prospectiveToMillis: number) {\n var accumulatedErrors = [];\n var isSaveable = true;\n let bothTimesValid = !isNaN(prospectiveFromMillis) && !isNaN(prospectiveToMillis);\n\n if (isNaN(prospectiveFromMillis)) {\n\n accumulatedErrors.push(\"*Invalid Start date/time\");\n\n isSaveable = false;\n }\n\n if (isNaN(prospectiveToMillis)) {\n accumulatedErrors.push(\"*Invalid end date/time\");\n isSaveable = false;\n }\n\n if (bothTimesValid) {\n if (prospectiveFromMillis > prospectiveToMillis) {\n accumulatedErrors.push(\"*Start time must be before end time\");\n isSaveable = false;\n }\n if (prospectiveFromMillis < this.minMillis) {\n accumulatedErrors.push(\"*Start time is before first possible time (\" + this.getTimeFormat()(this.minMillis) + \")\");\n }\n if (prospectiveFromMillis > this.maxMillis) {\n accumulatedErrors.push(\"*Start time is after last possible time (\" + this.getTimeFormat()(this.maxMillis) + \")\");\n }\n if (prospectiveToMillis > this.maxMillis) {\n accumulatedErrors.push(\"*End time is after last possible time (\" + this.getTimeFormat()(this.maxMillis) + \")\");\n }\n if (prospectiveToMillis < this.minMillis) {\n accumulatedErrors.push(\"*End time is before first possible time (\" + this.getTimeFormat()(this.minMillis) + \")\");\n }\n }\n return {\n rangeIsValid: (accumulatedErrors.length == 0),\n errors: accumulatedErrors,\n isSaveable: isSaveable\n };\n }\n\n private updateDisplayedFromDateTime(fromInput = false) {\n this.calendarPicker.setStartRange(this.convertToCalendarDate(this.fromMillis));\n if (!fromInput)\n this.setTimeInputBox(new Date(this.fromMillis), true);\n }\n\n private updateDisplayedToDateTime(fromInput = false) {\n this.calendarPicker.setEndRange(this.convertToCalendarDate(this.toMillis));\n if (!fromInput)\n this.setTimeInputBox(new Date(this.toMillis), false);\n }\n\n private offsetUTC(date: Date) {\n var dateCopy = new Date(date.valueOf())\n dateCopy.setTime(dateCopy.getTime() - dateCopy.getTimezoneOffset() * 60 * 1000);\n return dateCopy;\n }\n\n private offsetFromUTC(date: Date) {\n var dateCopy = new Date(date.valueOf())\n dateCopy.setTime(dateCopy.getTime() + dateCopy.getTimezoneOffset() * 60 * 1000);\n return dateCopy;\n }\n\n private checkDateTimeValidity() {\n let parsedFrom = Utils.parseUserInputDateTime(this.fromInput.node().value, this.chartOptions.offset);\n let parsedTo = Utils.parseUserInputDateTime(this.toInput.node().value, this.chartOptions.offset);\n let rangeErrorCheck = this.rangeIsValid(parsedFrom, parsedTo);\n this.setIsSaveable(rangeErrorCheck.isSaveable);\n this.displayRangeErrors(rangeErrorCheck.errors);\n }\n\n private setTimeInputBox(utcDate, isFrom) {\n if (isFrom) {\n this.fromInput.node().value = this.createTimeString(utcDate);\n } else {\n this.toInput.node().value = this.createTimeString(utcDate);\n }\n }\n\n private createTimePicker() {\n var timeInputContainer = this.timeControls.append(\"div\").attr(\"class\", \"tsi-timeInputContainer\");\n var createTimePicker = (startOrEnd) => {\n var fromOrToContainer = timeInputContainer.append(\"div\").classed(\"tsi-\" + startOrEnd + \"Container\", true);\n let inputLabelID = Utils.guid();\n let inputID = inputLabelID + 'Input';\n let timeLabel = fromOrToContainer.append(\"label\")\n .classed(\"tsi-timeLabel\", true)\n .attr('id', inputLabelID)\n .attr('for', inputID)\n .attr('aria-label', `${startOrEnd === 'start' ? this.getString('Start time input') : this.getString('End time input')}`)\n .text(this.getString(startOrEnd));\n timeLabel.append(\"span\")\n .classed(\"tsi-timeRequired\", true)\n .text(this.getString('*'));\n let inputName = startOrEnd === 'start' ? 'fromInput' : 'toInput'\n this[inputName] = fromOrToContainer.append('input')\n .attr('class', 'tsi-dateTimeInput', true)\n .attr('aria-labelledby', inputLabelID)\n .attr('required', true)\n .attr('id', inputID)\n .on('input', () => {\n let rangeErrorCheck: any = this.checkDateTimeValidity();\n this.isSettingStartTime = true;\n if (this.isValid) {\n if (startOrEnd === 'start') {\n let parsedFrom = Utils.parseUserInputDateTime(this.fromInput.node().value, this.chartOptions.offset);\n this.setFromMillis(parsedFrom);\n this.updateDisplayedFromDateTime(true);\n this.calendarPicker.draw();\n } else {\n let parsedTo = Utils.parseUserInputDateTime(this.toInput.node().value, this.chartOptions.offset);\n this.setToMillis(parsedTo);\n this.updateDisplayedToDateTime(true);\n this.calendarPicker.draw();\n }\n }\n });\n if (startOrEnd == 'end') {\n fromOrToContainer.append(\"button\")\n .attr(\"class\", \"tsi-snapToEndRangeButton\")\n .text(this.getString(\"Latest\"))\n .attr('aria-label', this.getString('snap end time to latest'))\n .on(\"click\", () => {\n if (!this.isSettingStartTime) {\n this.setFromDate(this.startRange);\n }\n this.setToMillis(this.maxMillis);\n this.updateDisplayedFromDateTime();\n this.updateDisplayedToDateTime();\n this.isSettingStartTime = true;\n this.calendarPicker.draw();\n });\n }\n }\n createTimePicker(\"start\");\n createTimePicker(\"end\");\n }\n}\n\nexport default DateTimePicker;","import Utils from \"../utils\";\nimport { ChartDataOptions } from \"./ChartDataOptions\";\n\nconst MAXCARD = 150000;\n\nclass AggregateExpression extends ChartDataOptions {\n public measureObject: any;\n public splitByObject;\n public predicate: Object; // predicate TSX\n public visibleSplitByCap: number = 10;\n\n constructor(predicateObject: any, measureObject: any, measureTypes: Array<string>, searchSpan: any, splitByObject: any = null,\n colorOrOptionsObject: any, alias?: string, contextMenu?: Array<any>) {\n super((typeof (colorOrOptionsObject) === 'object' && !!colorOrOptionsObject) ? { ...colorOrOptionsObject, searchSpan: searchSpan, measureTypes: measureTypes } : { color: colorOrOptionsObject, searchSpan: searchSpan, measureTypes: measureTypes, alias: alias, contextMenu: contextMenu });\n this.predicate = predicateObject;\n this.splitByObject = splitByObject;\n this.measureObject = ((measureTypes.length == 1 && measureTypes[0] == 'count') || measureObject.property == 'Events Count') ? { count: {} } : { input: measureObject };\n }\n\n public toTsx(roundFromTo: boolean = false) {\n var tsx = {};\n let shiftMillis = Utils.parseShift(this.timeShift, this.startAt, this.searchSpan);\n let fromMillis = this.searchSpan.from.valueOf() + shiftMillis;\n let toMillis = this.searchSpan.to.valueOf() + shiftMillis;\n let bucketSizeInMillis = Utils.parseTimeInput(this.searchSpan.bucketSize);\n let roundedFromMillis = Math.floor((fromMillis + 62135596800000) / (bucketSizeInMillis)) * (bucketSizeInMillis) - 62135596800000;\n let roundedToMillis = Math.ceil((toMillis + 62135596800000) / (bucketSizeInMillis)) * (bucketSizeInMillis) - 62135596800000;\n if (roundFromTo) {\n fromMillis = roundedFromMillis;\n toMillis = roundedToMillis;\n }\n tsx['searchSpan'] = { from: (new Date(fromMillis)).toISOString(), to: (new Date(toMillis)).toISOString() };\n\n // create aggregates\n var measures = (this.measureObject.hasOwnProperty('count')) ? [{ count: {} }]\n : this.measureTypes.reduce((p, c) => {\n var measureObject = {};\n if (c == 'count')\n measureObject = { count: {} };\n else\n measureObject[c] = this['measureObject'];\n p.push(measureObject);\n return p;\n }, []);\n var aggregateObject = {};\n var dimensionObject = { dateHistogram: { input: { builtInProperty: \"$ts\" }, breaks: { size: this.searchSpan.bucketSize } } };\n if (this.splitByObject != null) {\n var bucketsCeil = Math.ceil((roundedToMillis - roundedFromMillis) / bucketSizeInMillis);\n aggregateObject['dimension'] = { uniqueValues: { input: this.splitByObject, take: Math.floor(MAXCARD / bucketsCeil) } };\n aggregateObject['aggregate'] = { dimension: dimensionObject, measures: measures };\n }\n else {\n aggregateObject['dimension'] = dimensionObject;\n aggregateObject['measures'] = measures;\n }\n var aggregates = [aggregateObject];\n tsx['aggregates'] = aggregates;\n\n // create predicate\n var predicate;\n if (!this.measureObject.hasOwnProperty('count'))\n predicate = { and: [this.predicate, { not: { eq: { left: this.measureObject.input, right: { 'double': null } } } }] };\n else\n predicate = this.predicate;\n tsx['predicate'] = predicate;\n\n return tsx;\n }\n}\nexport default AggregateExpression\n","import * as d3 from 'd3';\nimport Utils from \"../utils\";\nimport { ChartComponent } from \"./ChartComponent\";\n\nclass DateTimeButton extends ChartComponent {\n\n protected dateTimePicker: any;\n private pickerIsVisible: boolean = false;\n protected minMillis: number;\n protected maxMillis: number;\n protected onSet: any;\n protected dateTimeButton: any;\n protected dateTimePickerContainer: any;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n protected buttonDateTimeFormat(millis) {\n return Utils.timeFormat(!this.chartOptions.minutesForTimeLabels, !this.chartOptions.minutesForTimeLabels,\n this.chartOptions.offset, this.chartOptions.is24HourTime, 0, null, this.chartOptions.dateLocale)(millis);\n }\n\n public render(chartOptions, minMillis, maxMillis, onSet = null) {\n let self = this;\n this.chartOptions.setOptions(chartOptions);\n this.minMillis = minMillis;\n this.maxMillis = maxMillis;\n this.onSet = onSet ? onSet : () => { };\n let dateTimeContainer = d3.select(this.renderTarget);\n if (!this.dateTimeButton) {\n this.dateTimeButton = dateTimeContainer.append(\"button\")\n .classed('tsi-dateTimeButton', true);\n }\n if (!this.dateTimePickerContainer) {\n this.dateTimePickerContainer = dateTimeContainer.append('div').classed('tsi-dateTimePickerContainer', true)\n .attr('role', 'dialog')\n .attr('aria-label', this.getString('a time selection control dialog'));\n this.dateTimePickerContainer.style('display', 'none');\n }\n super.themify(d3.select(this.renderTarget), this.chartOptions.theme);\n }\n}\nexport { DateTimeButton }\n","import * as d3 from 'd3';\nimport './DateTimeButtonRange.scss';\nimport { DateTimeButton } from '../../interfaces/DateTimeButton';\nimport DateTimePicker from '../DateTimePicker/DateTimePicker';\nimport Utils from '../../utils';\n\nclass DateTimeButtonRange extends DateTimeButton {\n private onCancel;\n private fromMillis: number;\n private toMillis: number;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n private setButtonText(fromMillis, toMillis, isRelative, quickTime) {\n let fromString = this.buttonDateTimeFormat(fromMillis);\n let tzAbbr = Utils.createTimezoneAbbreviation(this.chartOptions.offset);\n let toString = this.buttonDateTimeFormat(toMillis) + ' (' + tzAbbr + ')';\n if (!isRelative) {\n this.dateTimeButton.text(`${fromString} - ${toString}`);\n this.dateTimeButton.attr('aria-label', `${this.getString('a button to launch a time selection dialog current selected time is ')} ${fromString} - ${toString}`)\n }\n else {\n let quickTimeText = this.dateTimePicker.getQuickTimeText(quickTime);\n let text = quickTimeText !== null ? `${quickTimeText} (${fromString} - ${toString})` : `${fromString} - ${this.getString('Latest')} (${toString})`\n this.dateTimeButton.text(text);\n this.dateTimeButton.attr('aria-label', `${this.getString('a button to launch a time selection dialog current selected time is ')} ${text}`)\n }\n }\n\n private onClose() {\n this.dateTimePickerContainer.style(\"display\", \"none\");\n this.dateTimeButton.node().focus();\n }\n\n public render(chartOptions: any = {}, minMillis: number, maxMillis: number,\n fromMillis: number = null, toMillis: number = null, onSet = null, onCancel = null) {\n super.render(chartOptions, minMillis, maxMillis, onSet);\n d3.select(this.renderTarget).classed('tsi-dateTimeContainerRange', true);\n this.fromMillis = fromMillis;\n this.toMillis = toMillis;\n\n this.onCancel = onCancel ? onCancel : () => { };\n\n if (!this.dateTimePicker) {\n this.dateTimePicker = new DateTimePicker(this.dateTimePickerContainer.node());\n }\n\n this.setButtonText(fromMillis, toMillis, toMillis === maxMillis, this.toMillis - this.fromMillis);\n\n this.dateTimeButton.on(\"click\", () => {\n if (this.dateTimePickerContainer.style(\"display\") !== \"none\") {\n this.onClose(); // close if already open\n }\n else {\n this.chartOptions.dTPIsModal = true;\n this.dateTimePickerContainer.style(\"display\", \"block\");\n this.dateTimePicker.render(this.chartOptions, minMillis, maxMillis, this.fromMillis, this.toMillis,\n (fromMillis, toMillis, offset, isRelative, currentQuickTime) => {\n this.chartOptions.offset = offset;\n\n this.fromMillis = fromMillis;\n this.toMillis = toMillis;\n\n this.setButtonText(fromMillis, toMillis, isRelative, currentQuickTime);\n this.onSet(fromMillis, toMillis, offset, isRelative, currentQuickTime);\n this.onClose();\n },\n () => {\n this.onClose();\n this.onCancel();\n }\n );\n }\n });\n }\n}\nexport default DateTimeButtonRange;\n","import * as d3 from \"d3\";\nimport \"./AvailabilityChart.scss\";\nimport LineChart from \"../LineChart/LineChart\";\nimport DateTimePicker from \"../DateTimePicker/DateTimePicker\";\nimport Utils from \"../../utils\";\nimport { ChartComponent } from \"../../interfaces/ChartComponent\";\nimport AggregateExpression from \"../../models/AggregateExpression\";\nimport DateTimeButtonRange from \"../DateTimeButtonRange/DateTimeButtonRange\";\n\nclass AvailabilityChart extends ChartComponent {\n private fromMillis: number;\n private toMillis: number;\n private selectedFromMillis: number;\n private selectedToMillis: number;\n private zoomedFromMillis: number;\n private zoomedToMillis: number;\n private minBrushWidth: number = 5;\n private color: string;\n private transformedAvailability: any;\n private minGhostWidth = 2;\n private timeContainer;\n\n private dateTimeButton: DateTimeButtonRange;\n\n private margins = {\n left: 10,\n right: 10\n }\n private targetElement: any;\n private brushMoveAction: any;\n private brushContextMenuActions: any;\n private timePickerLineChart: any;\n private timePickerContainer: any;\n private timePickerChart: any;\n private timePickerTextContainer: any;\n private sparkLineChart: any;\n private ae: any;\n private rawAvailability: any;\n private maxBuckets: number;\n private bucketSize: number;\n private dateTimePickerContainer: any;\n private dateTimePicker: any;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n //the most zoomed in possible\n private getMinZoomedRange() {\n let maxZoomFactor: number = (this.sparkLineChart.x.range()[1] - this.sparkLineChart.x.range()[0]) / this.minBrushWidth;\n let totalTimeRange: number = this.toMillis - this.fromMillis;\n return totalTimeRange / maxZoomFactor;\n }\n\n private zoom(event: any, direction: string, xPos: number) {\n if (this.chartOptions.isCompact)\n return;\n var range = Math.max(this.getMinZoomedRange(), (this.zoomedToMillis - this.zoomedFromMillis));\n let percentile = (xPos - this.sparkLineChart.x.range()[0]) /\n (this.sparkLineChart.x.range()[1] - this.sparkLineChart.x.range()[0]);\n let leftImpact = percentile * .2 * range;\n let rightImpact = (1 - percentile) * .2 * range;\n if (direction == 'out') {\n this.zoomedFromMillis = Math.max(this.zoomedFromMillis - leftImpact, this.fromMillis);\n this.zoomedToMillis = Math.min(this.zoomedToMillis + rightImpact, this.toMillis);\n } else {\n let prospectiveFromMillis = Math.max(this.zoomedFromMillis + leftImpact, this.fromMillis);\n let prospectiveToMillis = Math.min(this.zoomedToMillis - rightImpact, this.toMillis);\n if (prospectiveToMillis - prospectiveFromMillis >= this.getMinZoomedRange()) {\n this.zoomedFromMillis = prospectiveFromMillis;\n this.zoomedToMillis = prospectiveToMillis;\n } else {\n let offBy = this.getMinZoomedRange() - (prospectiveToMillis - prospectiveFromMillis);\n this.zoomedFromMillis = prospectiveFromMillis - (percentile * offBy);\n this.zoomedToMillis = prospectiveToMillis + ((1 - percentile) * offBy);\n }\n }\n this.setAvailabilityRange(this.zoomedFromMillis, this.zoomedToMillis);\n this.sparkLineChart.setBrushEndTime(new Date(this.zoomedToMillis));\n this.sparkLineChart.setBrushStartTime(new Date(this.zoomedFromMillis));\n this.sparkLineChart.setBrush();\n this.timePickerLineChart.drawBrushRange();\n event.preventDefault && event.preventDefault();\n }\n private setChartOptions(chartOptions) {\n this.chartOptions.setOptions({\n ...chartOptions, ...{\n keepBrush: true,\n isArea: true,\n noAnimate: true,\n minutesForTimeLabels: true,\n aggTopMargin: 0,\n yAxisHidden: true,\n focusHidden: true,\n singleLineXAxisLabel: false\n }\n });\n }\n private dateTimePickerAction(fromMillis, toMillis) {\n this.setBrush(fromMillis, toMillis, true);\n this.chartOptions.brushMoveEndAction(new Date(fromMillis), new Date(toMillis), this.chartOptions.offset, this.chartOptions.isRelative, this.chartOptions.currentQuickTime);\n this.setTicks();\n this.dateTimePickerContainer.style(\"display\", \"none\");\n }\n\n //transformation of buckets created by the UX client to buckets for the availabilityChart\n private createDisplayBuckets(fromMillis: number, toMillis: number) {\n var keysInRange = Object.keys(this.transformedAvailability[0].availabilityCount[\"\"]).reduce((inRangeObj: any, timestamp: string, i: number, timestamps: Array<string>) => {\n var currTSMillis = (new Date(timestamp)).valueOf();\n var nextTSMillis = currTSMillis + this.bucketSize;\n if (currTSMillis >= fromMillis && currTSMillis <= toMillis) {\n inRangeObj[(new Date(currTSMillis)).toISOString()] = this.transformedAvailability[0].availabilityCount[\"\"][timestamp];\n return inRangeObj;\n }\n if (currTSMillis < fromMillis && nextTSMillis > fromMillis) {\n inRangeObj[(new Date(fromMillis)).toISOString()] = this.transformedAvailability[0].availabilityCount[\"\"][timestamp];\n return inRangeObj;\n }\n return inRangeObj;\n\n }, {});\n var rawBucketCount: number = Math.ceil((toMillis - fromMillis) / this.bucketSize);\n var bucketMultiplier: number = Math.ceil(rawBucketCount / this.maxBuckets);\n var computedBucketSize: number = this.bucketSize * bucketMultiplier;\n var createKey = (millis) => Math.round(Math.floor(millis / computedBucketSize) * computedBucketSize);\n\n var firstBucket: number = createKey(fromMillis);\n var lastBucket: number = createKey(toMillis);\n var buckets = [];\n for (var i: number = firstBucket; i <= lastBucket; i += computedBucketSize) {\n buckets[(new Date(i)).toISOString()] = { count: 0 };\n }\n\n Object.keys(keysInRange).sort().forEach((ts: string, i) => {\n var tsMillis = (new Date(ts)).valueOf();\n var computedKey = createKey(tsMillis);\n buckets[(new Date(computedKey)).toISOString()].count += (keysInRange[ts].count / bucketMultiplier);\n });\n\n if (fromMillis !== null && firstBucket !== null) {\n buckets[(new Date(fromMillis)).toISOString()] = buckets[(new Date(firstBucket)).toISOString()];\n }\n if (toMillis !== null && lastBucket !== null) {\n buckets[(new Date(toMillis)).toISOString()] = buckets[(new Date(lastBucket)).toISOString()];\n }\n // delete the bucket before the from time\n if (firstBucket < fromMillis) {\n delete buckets[(new Date(firstBucket)).toISOString()];\n }\n\n return [{ \"availabilityCount\": { \"\": buckets } }];\n }\n private setRangeVariables(rawAvailability) {\n if (Utils.safeNotNullOrUndefined(() => rawAvailability.range.from || rawAvailability.range.to || rawAvailability.intervalSize)) {\n this.fromMillis = (new Date(rawAvailability.range.from)).valueOf();\n this.toMillis = (new Date(rawAvailability.range.to)).valueOf();\n this.bucketSize = Utils.parseTimeInput(rawAvailability.intervalSize);\n } else {\n this.fromMillis = null;\n this.toMillis = null;\n this.bucketSize = null;\n }\n }\n\n public render(transformedAvailability: any, chartOptions: any, rawAvailability: any = {}) {\n this.setChartOptions(chartOptions);\n this.rawAvailability = rawAvailability;\n this.transformedAvailability = transformedAvailability;\n this.color = this.chartOptions.color ? this.chartOptions.color : 'teal';\n this.maxBuckets = (this.chartOptions.maxBuckets) ? this.chartOptions.maxBuckets : 500;\n this.setRangeVariables(rawAvailability);\n\n var startBucket = (this.fromMillis !== null && this.bucketSize !== null) ?\n Math.round(Math.floor(this.fromMillis / this.bucketSize) * this.bucketSize) : null;\n var endBucket = (this.toMillis !== null && this.bucketSize !== null) ?\n Math.round(Math.floor(this.toMillis / this.bucketSize) * this.bucketSize) : null;\n\n if (startBucket !== null && startBucket === endBucket) {\n this.fromMillis = Math.floor(this.fromMillis / this.bucketSize) * this.bucketSize;\n this.toMillis = this.fromMillis + this.bucketSize;\n this.bucketSize = this.bucketSize / 60;\n }\n\n this.ae = [new AggregateExpression({ predicateString: \"\" }, { property: 'Count', type: \"Double\" }, ['count'],\n { from: new Date(this.fromMillis), to: new Date(this.toMillis) }, null, 'grey', 'Availability')];\n\n this.targetElement = d3.select(this.renderTarget)\n .classed(\"tsi-availabilityChart\", true)\n .classed(\"tsi-compact\", this.chartOptions.isCompact)\n .classed(\"tsi-withButton\", this.chartOptions.persistDateTimeButtonRange);\n\n this.chartOptions.yAxisHidden = true;\n this.chartOptions.focusHidden = true;\n this.chartOptions.singleLineXAxisLabel = true;\n this.chartOptions.suppressResizeListener = true;\n this.chartOptions.brushClearable = false;\n this.chartOptions.minBrushWidth = 1;\n this.chartOptions.brushHandlesVisible = true;\n\n let brushMoveAction = this.chartOptions.brushMoveAction;\n\n this.chartOptions.brushMoveAction = (from, to) => {\n this.setFromAndToTimes(from.valueOf(), to.valueOf());\n this.drawGhost();\n if (this.chartOptions.isCompact) {\n this.buildCompactFromAndTo();\n }\n if (brushMoveAction != null)\n brushMoveAction(from, to);\n }\n\n super.themify(this.targetElement, chartOptions.theme);\n\n if (this.timePickerContainer == null) {\n this.targetElement.html(\"\");\n this.timePickerContainer = this.targetElement.append(\"div\")\n .classed(\"tsi-timePickerContainer\", true);\n this.timePickerChart = this.timePickerContainer.append(\"div\").classed(\"tsi-timePickerChart\", true);\n var sparkLineContainer = this.targetElement.append(\"div\").classed(\"tsi-sparklineContainer\", true);\n this.timePickerTextContainer = this.targetElement.append(\"div\").classed(\"tsi-timePickerTextContainer\", true)\n .style(\"margin-left\", this.chartOptions.availabilityLeftMargin + this.margins.left);\n this.timePickerLineChart = new LineChart(this.timePickerChart.node() as any);\n this.timePickerLineChart.chartMargins.left = (this.chartOptions.availabilityLeftMargin - this.margins.left);\n this.buildFromAndToContainer();\n this.sparkLineChart = new LineChart(sparkLineContainer.node() as any);\n this.sparkLineChart.chartMargins.left = (this.chartOptions.availabilityLeftMargin - this.margins.left);\n this.dateTimePickerContainer = this.targetElement.append(\"div\").classed(\"tsi-dateTimePickerContainer\", true);\n this.dateTimePicker = new DateTimePicker(this.dateTimePickerContainer.node());\n window.addEventListener('resize', () => {\n this.timePickerLineChart.draw();\n this.setTicks();\n this.drawWarmRange();\n if (this.chartOptions.isCompact)\n this.buildCompactFromAndTo();\n setTimeout(() => {\n this.drawGhost();\n }, 100);\n });\n var pickerContainerAndContent = this.targetElement.selectAll(\".tsi-dateTimePickerContainer, .tsi-dateTimePickerContainer *\");\n }\n\n //clear the date time picker\n this.dateTimePickerContainer.style(\"display\", \"none\");\n\n this.timePickerContainer.selectAll('.tsi-compactFromTo').remove();\n if (this.chartOptions.isCompact) {\n this.targetElement.select('.tsi-sparklineContainer').style(\"display\", 'none');\n if (!this.chartOptions.persistDateTimeButtonRange)\n this.targetElement.select(\".tsi-timePickerTextContainer\").style('display', 'none');\n this.targetElement.select('.tsi-zoomButtonContainer').style('display', 'none');\n this.targetElement.select('.tsi-timePickerContainer').style('max-height', '68px').style('top', this.chartOptions.persistDateTimeButtonRange ? '6px' : '20px');\n } else {\n this.targetElement.select('.tsi-sparklineContainer').style(\"display\", 'flex');\n this.targetElement.select(\".tsi-timePickerTextContainer\").style('display', 'inherit');\n this.targetElement.select('.tsi-zoomButtonContainer').style('display', 'flex');\n this.targetElement.select('.tsi-timePickerContainer').style('max-height', 'none').style('top', '0px');\n }\n\n var sparkLineOptions: any = this.createSparkLineOptions(chartOptions);\n\n var visibileAvailability = this.createDisplayBuckets(this.fromMillis, this.toMillis);\n this.sparkLineChart.render(visibileAvailability, sparkLineOptions, this.ae);\n\n this.timePickerLineChart.render(visibileAvailability, this.chartOptions, this.ae);\n this.setTicks();\n this.drawWarmRange();\n\n if (!this.chartOptions.preserveAvailabilityState) {\n this.zoomedToMillis = this.toMillis;\n this.zoomedFromMillis = this.chartOptions.defaultAvailabilityZoomRangeMillis ? Math.max(this.fromMillis, this.toMillis - this.chartOptions.defaultAvailabilityZoomRangeMillis) : this.fromMillis;\n this.sparkLineChart.setBrushStartTime(new Date(this.zoomedFromMillis));\n this.sparkLineChart.setBrushEndTime(new Date(this.zoomedToMillis));\n this.setFromAndToTimes(Math.max(this.fromMillis, this.toMillis - (24 * 60 * 60 * 1000)), this.toMillis);\n this.setBrush(Math.max(this.fromMillis, this.toMillis - (24 * 60 * 60 * 1000)), this.toMillis);\n } else {\n if (this.zoomedFromMillis == null) this.zoomedFromMillis = this.chartOptions.defaultAvailabilityZoomRangeMillis ? Math.max(this.fromMillis, this.toMillis - this.chartOptions.defaultAvailabilityZoomRangeMillis) : this.fromMillis;\n if (this.zoomedToMillis == null) this.zoomedToMillis = this.toMillis;\n if (this.sparkLineChart.brushStartTime == null) this.sparkLineChart.setBrushStartTime(new Date(this.zoomedFromMillis));\n if (this.sparkLineChart.brushEndTime == null) this.sparkLineChart.setBrushEndTime(new Date(this.zoomedToMillis));\n if (this.selectedFromMillis == null || this.selectedToMillis == null) this.setFromAndToTimes(this.toMillis - (24 * 60 * 60 * 1000), this.toMillis);\n this.drawGhost();\n this.setBrush(this.selectedFromMillis, this.selectedToMillis);\n }\n\n this.sparkLineChart.setBrush();\n\n var self = this;\n this.timePickerChart.select(\".brushElem\").on(\"wheel.zoom\", function (event, d) {\n let direction = event.deltaY > 0 ? 'out' : 'in';\n let xPos = (d3.pointer(event)[0]);\n self.zoom(event, direction, xPos);\n });\n if (!this.chartOptions.isCompact) {\n this.buildZoomButtons();\n } else {\n this.timePickerChart.select('.brushElem').select('.selection')\n }\n this.setAvailabilityRange(this.zoomedFromMillis, this.zoomedToMillis);\n if (this.chartOptions.isCompact) {\n this.buildCompactFromAndTo();\n }\n this.timePickerLineChart.drawBrushRange();\n }\n\n private buildZoomButtons() {\n this.targetElement.selectAll(\".tsi-zoomButtonContainer\").remove();\n let midpoint = (this.sparkLineChart.x.range()[1] - this.sparkLineChart.x.range()[0]) / 2;\n var buttonsDiv = this.targetElement.append(\"div\")\n .classed(\"tsi-zoomButtonContainer\", true);\n buttonsDiv.append(\"button\")\n .attr(\"class\", \"tsi-zoomButton tsi-zoomButtonIn\")\n .attr('aria-label', this.getString('A line chart zoom in'))\n .attr('title', this.getString('zoom in'))\n .on(\"click\", (event) => {\n this.zoom(event, \"in\", midpoint);\n });\n buttonsDiv.append(\"button\")\n .attr(\"class\", \"tsi-zoomButton tsi-zoomButtonOut\")\n .attr('aria-label', this.getString('A line chart zoom out'))\n .attr('title', this.getString('zoom out'))\n .on(\"click\", (event) => {\n this.zoom(event, \"out\", midpoint);\n });\n }\n\n private setSelectedMillis(fromMillis, toMillis) {\n this.selectedFromMillis = fromMillis;\n this.selectedToMillis = toMillis;\n this.timePickerLineChart.drawBrushRange();\n }\n\n private renderDateTimeButton() {\n let minMillis = this.fromMillis + (Utils.getOffsetMinutes(this.chartOptions.offset, this.fromMillis) * 60 * 1000);\n let maxMillis = this.toMillis + (Utils.getOffsetMinutes(this.chartOptions.offset, this.toMillis) * 60 * 1000);\n let startMillis = this.selectedFromMillis + (Utils.getOffsetMinutes(this.chartOptions.offset, this.selectedFromMillis) * 60 * 1000);\n let endMillis = this.selectedToMillis + (Utils.getOffsetMinutes(this.chartOptions.offset, this.selectedFromMillis) * 60 * 1000);\n this.dateTimeButton.render(this.chartOptions, this.fromMillis, this.toMillis, this.selectedFromMillis, this.selectedToMillis,\n (fromMillis, toMillis, offset, isRelative, currentQuickTime) => {\n this.chartOptions.offset = offset;\n\n this.chartOptions.isRelative = isRelative;\n this.chartOptions.currentQuickTime = currentQuickTime;\n\n this.timePickerLineChart.chartOptions.offset = offset;\n this.sparkLineChart.chartOptions.offset = offset;\n this.dateTimePickerAction(fromMillis, toMillis);\n (<any>d3.select(this.renderTarget).select(\".tsi-dateTimeContainer\").node()).focus();\n },\n () => {\n this.dateTimePickerContainer.style(\"display\", \"none\");\n (<any>d3.select(this.renderTarget).select(\".tsi-dateTimeContainer\").node()).focus();\n });\n }\n\n private setFromAndToTimes(fromMillis, toMillis, isFromButton = false) {\n let timezone = Utils.parseTimezoneName(this.chartOptions.offset);\n let timezoneAbbreviation = Utils.timezoneAbbreviation(timezone);\n this.setSelectedMillis(fromMillis, toMillis);\n if (!isFromButton) {\n this.renderDateTimeButton();\n }\n }\n\n private drawGhost() {\n var svgGroup = this.targetElement.select('.tsi-sparklineContainer').select(\".tsi-lineChartSVG\").select(\".svgGroup\");\n svgGroup.selectAll(\".ghostRect\").remove();\n svgGroup.append(\"rect\")\n .classed(\"ghostRect\", true)\n .attr(\"x\", Math.max(this.sparkLineChart.x.range()[0], this.sparkLineChart.x(new Date(this.selectedFromMillis))))\n .attr(\"y\", 0)\n .attr(\"width\", Math.min(Math.max(this.minGhostWidth,\n this.sparkLineChart.x(new Date(this.selectedToMillis)) - this.sparkLineChart.x(new Date(this.selectedFromMillis))),\n this.sparkLineChart.x.range()[1] - this.sparkLineChart.x.range()[0]))\n .attr(\"height\", 8)\n .attr(\"fill\", this.chartOptions.color ? this.chartOptions.color : 'dark-grey')\n .attr(\"fill-opacity\", .3)\n .attr(\"pointer-events\", \"none\");\n }\n\n private drawWarmRange() {\n\n var svgGroup = this.targetElement.select('.tsi-timePickerContainer').select(\".tsi-lineChartSVG\").select(\".svgGroup\");\n if (svgGroup.select('.tsi-warmRect').empty()) {\n svgGroup.append(\"rect\")\n .classed(\"tsi-warmRect\", true);\n svgGroup.select('.brushElem').raise();\n }\n let warmRect = svgGroup.select(\".tsi-warmRect\");\n\n let outOfRange = true;\n if (this.chartOptions.warmStoreRange) {\n let warmStart = new Date(this.chartOptions.warmStoreRange[0]);\n let boundedWarmStart = new Date(Math.max(warmStart.valueOf(), this.zoomedFromMillis));\n let warmEnd = new Date(this.chartOptions.warmStoreRange.length === 2 ? this.chartOptions.warmStoreRange[1] : this.toMillis);\n let boundedWarmEnd = new Date(Math.min(warmEnd.valueOf(), this.zoomedToMillis));\n\n if (boundedWarmStart < boundedWarmEnd) {\n outOfRange = false;\n warmRect.attr(\"x\", Math.max(this.timePickerLineChart.x(boundedWarmStart)))\n .attr(\"y\", this.chartOptions.isCompact ? 12 : -8)\n .attr(\"width\", this.timePickerLineChart.x(boundedWarmEnd) - this.timePickerLineChart.x(boundedWarmStart))\n .attr(\"height\", this.chartOptions.isCompact ? 4 : Math.max((this.targetElement.select('.tsi-timePickerContainer').select(\".tsi-lineChartSVG\").node().getBoundingClientRect().height - 44), 0))\n .attr(\"fill-opacity\", this.chartOptions.isCompact ? .8 : .08)\n .attr('stroke-opacity', this.chartOptions.isCompact ? 0 : .5)\n .attr(\"pointer-events\", \"none\");\n }\n }\n if (outOfRange || this.chartOptions.warmStoreRange === null) {\n warmRect.style('display', 'none');\n } else {\n warmRect.style('display', 'block');\n }\n }\n\n private buildCompactFromAndTo() {\n this.timePickerContainer.selectAll('.tsi-compactFromTo').remove();\n\n // if the view is compact and there is a datetimebuttonrange present, we don't need compact from and to\n if (this.chartOptions.persistDateTimeButtonRange)\n return;\n\n var brushPositions = this.timePickerLineChart.getBrushPositions();\n var leftTimeText = null;\n var rightTimeText = null;\n\n if (this.selectedFromMillis != null && this.selectedToMillis != null) {\n leftTimeText = this.timePickerContainer.append('div')\n .classed('tsi-compactFromTo', true)\n .style('left', (brushPositions.leftPos != null ? Math.max(brushPositions.leftPos, 5) : 5) + 'px')\n .text(Utils.timeFormat(false, false, this.chartOptions.offset, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale)(new Date(this.selectedFromMillis)));\n let timezoneAbbreviation = ' (' + Utils.createTimezoneAbbreviation(this.chartOptions.offset) + ')';\n rightTimeText = this.timePickerContainer.append('div')\n .attr('class', 'tsi-compactFromTo')\n .style('right', brushPositions.rightPos != null ? 'calc(100% - ' + brushPositions.rightPos + 'px)' : '5px')\n .style('left', 'auto')\n .text(Utils.timeFormat(false, false, this.chartOptions.offset, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale)\n (new Date(this.selectedToMillis)) + timezoneAbbreviation);\n }\n\n if (leftTimeText && rightTimeText) {\n var rightSideOfLeft = leftTimeText.node().getBoundingClientRect().left + leftTimeText.node().getBoundingClientRect().width;\n var leftSideOfRight = rightTimeText.node().getBoundingClientRect().left;\n var totalWidth = this.timePickerContainer.node().getBoundingClientRect().width;\n var minOffset = 40;\n if (leftSideOfRight - rightSideOfLeft < minOffset) { // if there is overlap (or near overlap), correction needed\n var correction = (rightSideOfLeft - leftSideOfRight + minOffset) / 2;\n //if the correction puts either side off the edge of the container, weight the correction to the other side\n var leftWeight = 1;\n var rightWeight = 1;\n var padding = 32;\n if ((brushPositions.leftPos - correction) < padding) {\n leftWeight = 1 - ((padding - (brushPositions.leftPos - correction)) / correction)\n rightWeight = 2 - leftWeight;\n }\n if ((brushPositions.rightPos + correction) > (totalWidth - padding)) {\n rightWeight = 1 - (padding - (totalWidth - brushPositions.rightPos - correction)) / correction;\n leftWeight = 2 - rightWeight;\n }\n rightTimeText.style('right', 'calc(100% - ' + Math.round((brushPositions.rightPos + (rightWeight * correction))) + 'px)')\n .style('left', 'auto');\n leftTimeText.style('left', (brushPositions.leftPos - (leftWeight * correction)) + 'px');\n }\n }\n }\n\n private offsetUTC(date: Date) {\n date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000);\n return date;\n }\n\n private buildFromAndToContainer() {\n let dateTimeContainer = this.timePickerTextContainer.append('div').classed('tsi-dateTimeContainer', true);\n let timeframeLabel = dateTimeContainer.append(\"label\").text(this.getString(\"Timeframe\")).attr(\"id\", \"time-frame-label\");\n let dateTimeButtonContainer = dateTimeContainer.append(\"div\")\n .classed('tsi-dateTimeButtonContainer', true)\n .attr(\"aria-labelledby\", 'time-frame-label');\n this.dateTimeButton = new DateTimeButtonRange(dateTimeButtonContainer.node());\n }\n\n private setTicks() {\n this.timePickerLineChart.updateXAxis();\n let forceFirst = (this.timePickerLineChart.zoomedFromMillis == this.timePickerLineChart.fromMillis) && (this.zoomedFromMillis == this.fromMillis);\n let forceLast = (this.timePickerLineChart.zoomedToMillis == this.timePickerLineChart.toMillis) && (this.zoomedToMillis == this.toMillis);\n this.timePickerLineChart.updateXAxis(forceFirst, forceLast);\n\n let ticks = this.timePickerContainer.select('.tsi-timePickerChart')\n .select('.xAxis')\n .selectAll('.tick');\n ticks.each(function (d, i) {\n var elt = d3.select(this);\n elt.classed((i === 0 && forceFirst ? 'tsi-fromTick' : (i === ticks.size() - 1 && forceLast ? 'tsi-toTick' : '')), true);\n })\n }\n\n private setAvailabilityRange(fromMillis, toMillis) {\n this.zoomedFromMillis = fromMillis;\n this.zoomedToMillis = toMillis;\n var visibileAvailability = this.createDisplayBuckets(fromMillis, toMillis);\n this.chartOptions.keepBrush = true;\n var aeWithNewTimeSpan = {\n ...this.ae[0], ...{\n searchSpan: {\n from: (new Date(fromMillis)),\n to: (new Date(toMillis))\n }\n }\n };\n this.timePickerLineChart.render(visibileAvailability, this.chartOptions, [aeWithNewTimeSpan]);\n this.setTicks();\n this.drawWarmRange();\n this.timePickerLineChart.setBrush();\n }\n\n public setBrush(fromMillis, toMillis, isFromButton = false) {\n this.timePickerLineChart.setBrushEndTime(new Date(toMillis));\n this.timePickerLineChart.setBrushStartTime(new Date(fromMillis));\n this.timePickerLineChart.setBrush();\n this.setFromAndToTimes(fromMillis, toMillis, isFromButton);\n this.drawGhost();\n\n if (this.chartOptions.isCompact)\n this.buildCompactFromAndTo();\n }\n\n private createSparkLineOptions(chartOptions) {\n return {\n aggTopMargin: 0,\n theme: chartOptions.theme,\n grid: false,\n tooltip: false,\n legend: \"hidden\",\n brushContextMenuActions: [],\n snapBrush: false,\n keepBrush: false,\n xAxisHidden: true,\n yAxisHidden: true,\n focusHidden: true,\n minBrushWidth: 5,\n color: null,\n brushHandlesVisible: true,\n brushMoveAction: (from, to) => {\n this.setAvailabilityRange(from.valueOf(), to.valueOf());\n },\n brushClearable: false,\n hideChartControlPanel: true,\n brushRangeVisible: false,\n isArea: true\n };\n }\n}\n\nexport default AvailabilityChart","import Utils from \"../utils\";\nimport { ChartComponentData } from \"./ChartComponentData\";\nimport * as d3 from 'd3';\n\nclass GroupedBarChartData extends ChartComponentData {\n public timestamp;\n public valuesAtTimestamp;\n\n // allValues, aggsSeries, and allTimestampsArray span the entire time period of the aggregate expressions passed in\n public valuesOfVisibleType: Array<any> = [];\n public aggsSeries;\n\n public globalMax: number = -Number.MAX_VALUE;\n public globalMin: number = Number.MAX_VALUE;\n public stackedAggregateObject;\n\n constructor() {\n super();\n }\n\n public mergeDataToDisplayStateAndTimeArrays(data, timestamp, aggregateExpressionOptions = null) {\n super.mergeDataToDisplayStateAndTimeArrays(data, aggregateExpressionOptions);\n this.timestamp = timestamp;\n this.setValuesAtTimestamp();\n this.setFilteredAggregates();\n }\n\n private stackMin = (series): number => {\n return Number(d3.min(series, function (d) { return d[0][0]; }));\n }\n\n private stackMax = (series): number => {\n return Number(d3.max(series, function (d) { return d[0][1]; }));\n }\n\n //setting the data related to the entire time range (aggsSeries, allValus, globalMax, globalMin)\n public setEntireRangeData(scaledToCurrentTime) {\n this.globalMax = -Number.MAX_VALUE;\n this.globalMin = Number.MAX_VALUE;\n this.aggsSeries = {};\n this.valuesOfVisibleType = [];\n Object.keys(this.displayState).forEach((aggKey, aggI) => {\n var splitByNames = [];\n var currentTimeSeries;\n\n this.allTimestampsArray.forEach((ts) => {\n if (this.displayState[aggKey].visible) {\n var localSplitByNames = [];\n var stackedAggregateObject = Object.keys(this.displayState[aggKey].splitBys).reverse().reduce((sAO, splitByName) => {\n var splitBy = this.displayState[aggKey].splitBys[splitByName];\n localSplitByNames.push(splitByName);\n var value;\n if (this.data[aggI][this.displayState[aggKey].name][splitByName][ts])\n value = this.data[aggI][this.displayState[aggKey].name][splitByName][ts][splitBy.visibleType];\n else\n value = Number.MIN_VALUE;\n if (!splitBy.visible) {\n if (value > 0)\n value = Number.MIN_VALUE;\n else\n value = -Number.MIN_VALUE;\n }\n sAO[splitByName] = value;\n\n if ((!scaledToCurrentTime || ts == this.timestamp) && splitBy.visible) {\n this.valuesOfVisibleType.push(value);\n }\n return sAO;\n }, {});\n\n var series = d3.stack()\n .keys(localSplitByNames)\n .offset(d3.stackOffsetDiverging)\n ([stackedAggregateObject]);\n series.reverse();\n if (ts == this.timestamp)\n currentTimeSeries = series;\n\n if ((ts == this.timestamp || !scaledToCurrentTime) && series != undefined) {\n this.globalMax = Math.max(this.stackMax(series), this.globalMax);\n this.globalMin = Math.min(this.stackMin(series), this.globalMin);\n }\n }\n });\n this.aggsSeries[aggKey] = currentTimeSeries;\n });\n }\n\n public setValuesAtTimestamp() {\n var aggregateCounterMap = {};\n this.valuesAtTimestamp = {};\n this.data.forEach((aggregate, aggI) => {\n var aggName: string = Object.keys(aggregate)[0];\n var aggKey;\n if (aggregateCounterMap[aggName]) {\n aggKey = Utils.createEntityKey(aggName, aggregateCounterMap[aggName]);\n aggregateCounterMap[aggName] += 1;\n } else {\n aggKey = Utils.createEntityKey(aggName, 0);\n aggregateCounterMap[aggName] = 1;\n }\n this.valuesAtTimestamp[aggKey] = {};\n this.valuesAtTimestamp[aggKey].splitBys = Object.keys(aggregate[aggName])\n .reduce((aggSplitBys: any, splitBy: string, splitByI: number) => {\n aggSplitBys[splitBy] = {};\n aggSplitBys[splitBy].measurements = aggregate[aggName][splitBy][this.timestamp];\n return aggSplitBys;\n }, {});\n });\n }\n\n public getValueContainerData(aggKey): Array<any> {\n return Object.keys(this.displayState[aggKey].splitBys).map((splitBy) => {\n var measureType = this.displayState[aggKey].splitBys[splitBy].visibleType;\n var val;\n if (this.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements &&\n this.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements[measureType])\n val = this.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements[measureType];\n else\n val = null;\n return {\n measureType: measureType,\n aggKey: aggKey,\n splitBy: splitBy,\n val: val\n }\n })\n }\n}\nexport { GroupedBarChartData }\n","import Utils from \"../utils\";\nimport { ChartComponentData } from \"./ChartComponentData\";\nimport * as d3 from 'd3';\nimport { GroupedBarChartData } from \"./GroupedBarChartData\";\n\nclass PieChartData extends GroupedBarChartData {\n public flatValueArray;\n public visibleValuesSum = 0;\n\n constructor() {\n super();\n }\n\n public mergeDataToDisplayStateAndTimeArrays(data, timestamp, aggregateExpressionOptions = null) {\n ChartComponentData.prototype.mergeDataToDisplayStateAndTimeArrays.call(this, data, aggregateExpressionOptions);\n this.timestamp = Utils.getValueOrDefault({ '': timestamp }, '', this.allTimestampsArray[0]);\n super.setValuesAtTimestamp();\n this.setAllTimestampsArray();\n }\n\n public updateFlatValueArray(timestamp) {\n this.visibleValuesSum = 0;\n var values = [];\n Object.keys(this.valuesAtTimestamp).forEach((aggKey) => {\n Object.keys(this.valuesAtTimestamp[aggKey].splitBys).forEach((splitBy, splitByI) => {\n var value = 0;\n if (this.getSplitByVisible(aggKey, splitBy) && this.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements != undefined)\n value = this.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements[this.getVisibleMeasure(aggKey, splitBy)];\n values.push({\n aggKey: aggKey,\n splitBy: splitBy,\n val: value,\n splitByI: splitByI\n });\n this.visibleValuesSum += Math.abs(value);\n });\n });\n this.flatValueArray = values;\n }\n}\nexport { PieChartData }\n","import * as d3 from 'd3';\nimport './Slider.scss';\nimport Utils from \"../../utils\";\nimport { Component } from \"./../../interfaces/Component\";\n\nclass Slider extends Component {\n private sliderSVG: any = null;\n public sliderTextDiv: any = null;\n private xScale: any;\n private data;\n private width: number;\n private sliderWidth: number;\n private selectedLabel: string;\n private isAscendingTimePeriods: boolean;\n\n private margins = {\n left: 60,\n right: 60\n }\n private height = 55;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n Slider() {\n }\n\n private getXPositionOfLabel(label: string) {\n if (this.data.map(d => d.label).indexOf(label) != -1) {\n return this.xScale(label);\n }\n // find approximate position if ascending time periods and label is a time label as well\n if ((Utils.parseTimeInput(label) > -1) && this.isAscendingTimePeriods && this.data.length > 1) {\n let labelMillis = Utils.parseTimeInput(label);\n for (var i = 0; i < this.data.length; i++) {\n if (Utils.parseTimeInput(this.data[i].label) > labelMillis) {\n return (this.xScale(this.data[i].label) + this.xScale(this.data[Math.max(i - 1, 0)].label)) / 2;\n }\n }\n return this.xScale(this.data[this.data.length - 1].label);\n }\n return 0;\n }\n\n private determineIfAscendingTimePeriods() {\n let left = this.data.length > 0 ? Utils.parseTimeInput(this.data[0].label) : -1;\n let isAscending = left !== -1;\n for (let i = 0; isAscending && i < this.data.length - 1; i++) {\n isAscending = left < (left = Utils.parseTimeInput(this.data[i + 1].label));\n }\n return isAscending;\n }\n\n public render(data: Array<any>, options: any, width: number, selectedLabel: string = null) {\n this.chartOptions.setOptions(options);\n this.data = data;\n this.isAscendingTimePeriods = this.determineIfAscendingTimePeriods();\n this.width = width;\n var marginsTotal = this.margins.left + this.margins.right\n this.sliderWidth = width - marginsTotal;\n var targetElement = d3.select(this.renderTarget);\n if (targetElement.style(\"position\") == \"static\")\n targetElement.style(\"position\", \"relative\");\n if (selectedLabel)\n this.selectedLabel = selectedLabel;\n\n this.xScale = d3.scalePoint()\n .domain(data.map((d) => d.label))\n .range([0, this.sliderWidth]);\n\n width = Math.max(width, marginsTotal);\n var self = this;\n\n if (this.sliderSVG == null) {\n this.sliderSVG = targetElement.append(\"svg\")\n .attr(\"class\", \"tsi-sliderComponent\");\n var slider = this.sliderSVG.append(\"g\")\n .attr(\"class\", \"slider tsi-sliderG\")\n slider.append(\"line\")\n .attr(\"class\", \"slider-track tsi-sliderTrack\")\n .select(function () { return this.parentNode.appendChild(this.cloneNode(true)); })\n .attr(\"class\", \"track-overlay tsi-sliderTrackOverlay\")\n .call(d3.drag()\n .on(\"start.interrupt\", function () { slider.interrupt(); })\n .on(\"start drag\", (event, d) => {\n self.onDrag(event.x);\n })\n .on(\"end\", (event, d) => {\n self.onDragEnd(event.x);\n })\n );\n\n slider.insert(\"circle\", \".track-overlay\")\n .attr(\"class\", \"handle tsi-sliderHandle\")\n .attr(\"r\", 6);\n\n this.sliderTextDiv = targetElement.append(\"div\")\n .attr(\"class\", \"tsi-sliderLabel\")\n .attr(\"tabindex\", 0)\n .attr(\"aria-label\", selectedLabel)\n .on(\"keydown\", (event) => {\n if (event.keyCode == 37) {\n this.moveLeft();\n }\n if (event.keyCode == 39) {\n this.moveRight();\n }\n });\n }\n this.themify(this.sliderSVG, this.chartOptions.theme);\n\n this.sliderSVG.attr(\"width\", width + \"px\");\n\n var slider = this.sliderSVG.select(\".tsi-sliderG\")\n .attr(\"transform\", \"translate(\" + this.margins.left + \",\" + (this.height / 2) + \")\");\n\n slider.select(\".tsi-sliderTrack\")\n .attr(\"x1\", 0)\n .attr(\"x2\", this.sliderWidth)\n .attr(\"y1\", 0)\n .attr(\"y2\", 0);\n slider.select(\".tsi-sliderTrackOverlay\")\n .attr(\"x1\", -20)\n .attr(\"x2\", this.sliderWidth + 20)\n .attr(\"y1\", 0)\n .attr(\"y2\", 0);\n\n this.setStateFromLabel();\n }\n\n public remove() {\n if (this.sliderSVG)\n this.sliderSVG.remove();\n this.sliderSVG = null;\n if (this.sliderTextDiv)\n this.sliderTextDiv.remove();\n }\n\n private onDrag(h) {\n // find the closest time and set position to that\n let newSelectedLabel = this.setSelectedLabelAndGetLabelAction(h);\n if (!this.chartOptions.throttleSlider) {\n newSelectedLabel.action(newSelectedLabel.label);\n }\n\n this.setStateFromLabel();\n }\n\n private onDragEnd(h) {\n if (this.chartOptions.throttleSlider) {\n let newSelectedLabel = this.setSelectedLabelAndGetLabelAction(h, true);\n newSelectedLabel.action(newSelectedLabel.label);\n }\n }\n\n private setSelectedLabelAndGetLabelAction = (h, useFirstValue = false) => {\n //find the closest time and set position to that\n let reduceFirstValue = useFirstValue ? this.data[0] : { label: this.selectedLabel, action: () => { } };\n var newSelectedLabel = this.data.reduce((prev, curr) => {\n var currDiff = Math.abs(this.getXPositionOfLabel(curr.label) - h);\n var prevDiff = Math.abs(this.getXPositionOfLabel(prev.label) - h);\n return (currDiff < prevDiff) ? curr : prev;\n }, reduceFirstValue);\n this.selectedLabel = (newSelectedLabel != null) ? newSelectedLabel.label : this.selectedLabel;\n return newSelectedLabel;\n }\n\n private setSliderTextDivLabel = () => {\n this.sliderTextDiv.attr(\"aria-label\", () => {\n return this.getString(\"Currently displayed time is\") + ' ' + this.selectedLabel + \". \" +\n this.getString(\"Left arrow to go back in time\") + \", \" + this.getString(\"right arrow to go forward\");\n });\n }\n\n //set the position of the slider and text, and set the text, given a label\n private setStateFromLabel() {\n this.sliderSVG.select(\".handle\").attr(\"cx\", this.getXPositionOfLabel(this.selectedLabel));\n this.sliderTextDiv.text(this.selectedLabel);\n this.setSliderTextDivLabel();\n //adjust until center lines up with \n var centerDivOffset = this.sliderTextDiv.node().getBoundingClientRect().width / 2;\n this.sliderTextDiv.style(\"right\", (this.width - (this.margins.right + this.getXPositionOfLabel(this.selectedLabel))) - centerDivOffset + \"px\");\n }\n\n private moveLeft() {\n for (var i = 0; i < this.data.length; i++) {\n if (this.data[i].label == this.selectedLabel) {\n var newI = Math.max(0, i - 1);\n this.selectedLabel = this.data[newI].label;\n this.data[newI].action(this.selectedLabel);\n this.setStateFromLabel();\n return;\n }\n }\n }\n\n private moveRight() {\n for (var i = 0; i < this.data.length; i++) {\n if (this.data[i].label == this.selectedLabel) {\n var newI = Math.min(this.data.length - 1, i + 1);\n this.selectedLabel = this.data[newI].label;\n this.data[newI].action(this.selectedLabel);\n this.setStateFromLabel();\n return;\n }\n }\n }\n}\n\nexport default Slider\n","import * as d3 from 'd3';\nimport './PieChart.scss';\nimport Utils from \"../../utils\";\nimport { TooltipMeasureFormat } from \"./../../constants/Enums\";\nimport Legend from './../Legend';\nimport ContextMenu from './../ContextMenu';\nimport { PieChartData } from '../../models/PieChartData';\nimport Slider from '../Slider';\nimport Tooltip from '../Tooltip';\nimport { ChartVisualizationComponent } from '../../interfaces/ChartVisualizationComponent';\n\n\nclass PieChart extends ChartVisualizationComponent {\n private contextMenu: ContextMenu;\n chartComponentData = new PieChartData();\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n this.chartMargins = {\n top: 20,\n bottom: 28,\n left: 0,\n right: 0\n }\n }\n\n PieChart() { }\n\n public render(data: any, options: any, aggregateExpressionOptions: any) {\n super.render(data, options, aggregateExpressionOptions);\n\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(this.data, this.chartOptions.timestamp, this.aggregateExpressionOptions);\n var timestamp = (options && options.timestamp != undefined) ? options.timestamp : this.chartComponentData.allTimestampsArray[0];\n\n var targetElement = d3.select(this.renderTarget)\n .classed(\"tsi-pieChart\", true);\n\n if (this.svgSelection == null) {\n\n this.svgSelection = targetElement.append(\"svg\")\n .attr(\"class\", \"tsi-pieChartSVG tsi-chartSVG\")\n .attr('title', this.getString('Pie chart'));\n var g = this.svgSelection.append(\"g\");\n var tooltip = new Tooltip(d3.select(this.renderTarget));\n d3.select(this.renderTarget).append('div').classed('tsi-sliderWrapper', true);\n\n this.draw = (isFromResize = false, event) => {\n // Determine the number of timestamps present, add margin for slider\n if (this.chartComponentData.allTimestampsArray.length > 1)\n this.chartMargins.bottom = 68;\n if (this.chartOptions.legend == \"compact\") {\n this.chartMargins.top = 68;\n } else {\n this.chartMargins.top = 20;\n }\n\n this.width = this.getWidth();\n var height = +targetElement.node().getBoundingClientRect().height;\n if (!isFromResize) {\n this.chartWidth = this.getChartWidth();\n }\n var chartHeight = height;\n var usableHeight = height - this.chartMargins.bottom - this.chartMargins.top\n var outerRadius = (Math.min(usableHeight, this.chartWidth) - 10) / 2;\n var innerRadius = this.chartOptions.arcWidthRatio &&\n (this.chartOptions.arcWidthRatio < 1 && this.chartOptions.arcWidthRatio > 0) ?\n outerRadius - (outerRadius * this.chartOptions.arcWidthRatio) :\n 0;\n this.svgSelection\n .attr(\"width\", this.chartWidth)\n .attr(\"height\", chartHeight)\n this.svgSelection.select(\"g\").attr(\"transform\", \"translate(\" + (this.chartWidth / 2) + \",\" + (chartHeight / 2) + \")\");\n\n var timestamp = (this.chartOptions.timestamp != undefined) ? this.chartOptions.timestamp : this.chartComponentData.allTimestampsArray[0];\n this.chartComponentData.updateFlatValueArray(timestamp);\n super.themify(targetElement, this.chartOptions.theme);\n\n\n if (!this.chartOptions.hideChartControlPanel && this.chartControlsPanel === null) {\n this.chartControlsPanel = Utils.createControlPanel(this.renderTarget, this.CONTROLSWIDTH, this.chartMargins.top, this.chartOptions);\n } else if (this.chartOptions.hideChartControlPanel && this.chartControlsPanel !== null) {\n this.removeControlPanel();\n }\n\n if (this.ellipsisItemsExist() && !this.chartOptions.hideChartControlPanel) {\n this.drawEllipsisMenu();\n this.chartControlsPanel.style(\"top\", Math.max((this.chartMargins.top - 24), 0) + 'px');\n } else {\n this.removeControlPanel();\n }\n\n\n var labelMouseover = (aggKey: string, splitBy: string = null) => {\n //filter out the selected timeseries/splitby\n var selectedFilter = (d: any, j: number) => {\n return !(d.data.aggKey == aggKey && (splitBy == null || d.data.splitBy == splitBy))\n }\n\n this.svgSelection.selectAll(\".tsi-pie-path\")\n .filter(selectedFilter)\n .attr(\"stroke-opacity\", .3)\n .attr(\"fill-opacity\", .3);\n }\n\n var labelMouseout = (aggregateKey: string, splitBy: string) => {\n this.svgSelection.selectAll(\".tsi-pie-path\")\n .attr(\"stroke-opacity\", 1)\n .attr(\"fill-opacity\", 1);\n }\n\n function drawTooltip(d: any, mousePosition) {\n var xPos = mousePosition[0];\n var yPos = mousePosition[1];\n tooltip.render(self.chartOptions.theme);\n let color = Utils.colorSplitBy(self.chartComponentData.displayState, d.data.splitByI, d.data.aggKey, self.chartOptions.keepSplitByColor);\n tooltip.draw(d, self.chartComponentData, xPos, yPos, { ...self.chartMargins, top: 0, bottom: 0 }, (text) => {\n self.tooltipFormat(self.convertToTimeValueFormat(d.data), text, TooltipMeasureFormat.SingleValue);\n }, null, 20, 20, color);\n }\n\n this.legendObject.draw(\n this.chartOptions.legend,\n this.chartComponentData,\n labelMouseover,\n this.svgSelection,\n this.chartOptions,\n labelMouseout,\n null,\n event);\n var pie = d3.pie()\n .sort(null)\n .value(function (d: any) {\n return Math.abs(d.val);\n });\n\n var path: any = d3.arc()\n .outerRadius(outerRadius)\n .innerRadius(innerRadius);\n\n var arc = g.selectAll(\".tsi-pie-arc\")\n .data(pie(this.chartComponentData.flatValueArray));\n var arcEntered = arc\n .enter().append(\"g\")\n .merge(arc)\n .attr(\"class\", \"tsi-pie-arc\");\n var self = this;\n\n var drawArc = d3.arc()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius);\n\n function arcTween(a) {\n var i = d3.interpolate(this._current, a);\n this._current = i(0);\n return function (t) {\n return drawArc(i(t));\n };\n }\n\n var self = this;\n function pathMouseout(event, d: any) {\n if (self.contextMenu && self.contextMenu.contextMenuVisible)\n return;\n tooltip.hide();\n labelMouseout(d.data.aggKey, d.data.splitBy);\n (<any>self.legendObject.legendElement.selectAll('.tsi-splitByLabel')).classed(\"inFocus\", false);\n }\n\n function pathMouseInteraction(event, d: any) {\n if (this.contextMenu && this.contextMenu.contextMenuVisible)\n return;\n pathMouseout(event, d);\n labelMouseover(d.data.aggKey, d.data.splitBy);\n (<any>self.legendObject.legendElement.selectAll('.tsi-splitByLabel').filter(function (filteredSplitBy: string) {\n return (d3.select(this.parentNode).datum() == d.data.aggKey) && (filteredSplitBy == d.data.splitBy);\n })).classed(\"inFocus\", true);\n drawTooltip(d, d3.pointer(event, self.svgSelection.node()));\n }\n\n var mouseOutArcOnContextMenuClick = () => {\n arcEntered.selectAll(\"path\").each(pathMouseout);\n }\n\n arcEntered.each(function () {\n var pathElem = d3.select(this).selectAll<SVGPathElement, unknown>(\".tsi-pie-path\").data(d => [d]);\n var pathEntered = pathElem.enter()\n .append(\"path\")\n .attr(\"class\", \"tsi-pie-path\")\n .attr(\"d\", drawArc)\n .on(\"mouseover\", pathMouseInteraction)\n .on(\"mousemove\", pathMouseInteraction)\n .on(\"mouseout\", pathMouseout)\n .on(\"contextmenu\", (event, d: any) => {\n if (self.chartComponentData.displayState[d.data.aggKey].contextMenuActions &&\n self.chartComponentData.displayState[d.data.aggKey].contextMenuActions.length) {\n var mousePosition = d3.pointer(event, <any>targetElement.node());\n event.preventDefault();\n self.contextMenu.draw(self.chartComponentData, self.renderTarget, self.chartOptions,\n mousePosition, d.data.aggKey, d.data.splitBy, mouseOutArcOnContextMenuClick,\n new Date(self.chartComponentData.timestamp));\n }\n })\n .each(function (d) { (<any>this)._current = d; })\n .merge(pathElem)\n .transition()\n .duration(self.TRANSDURATION)\n .ease(d3.easeExp)\n .attrTween(\"d\", arcTween)\n .attr(\"fill\", (d: any) => {\n return Utils.colorSplitBy(self.chartComponentData.displayState, d.data.splitByI, d.data.aggKey, self.chartOptions.keepSplitByColor);\n })\n .attr(\"class\", \"tsi-pie-path\");\n });\n arc.exit().remove();\n\n /******************** Temporal Slider ************************/\n if (this.chartComponentData.allTimestampsArray.length > 1) {\n d3.select(this.renderTarget).select('.tsi-sliderWrapper').classed('tsi-hidden', false);\n slider.render(this.chartComponentData.allTimestampsArray.map(ts => {\n var action = () => {\n this.chartOptions.timestamp = ts;\n this.render(this.chartComponentData.data, this.chartOptions, this.aggregateExpressionOptions);\n }\n return {\n label: Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale)(new Date(ts)), action: action\n };\n }), this.chartOptions, this.chartWidth, Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale)(new Date(this.chartComponentData.timestamp)));\n }\n else {\n slider.remove();\n d3.select(this.renderTarget).select('.tsi-sliderWrapper').classed('tsi-hidden', true);\n }\n\n }\n\n this.legendObject = new Legend(this.draw, this.renderTarget, this.CONTROLSWIDTH);\n this.contextMenu = new ContextMenu(this.draw, this.renderTarget);\n\n // temporal slider\n var slider = new Slider(<any>d3.select(this.renderTarget).select('.tsi-sliderWrapper').node());\n window.addEventListener(\"resize\", () => {\n if (!this.chartOptions.suppressResizeListener)\n this.draw();\n });\n }\n this.draw();\n this.gatedShowGrid();\n\n d3.select(\"html\").on(\"click.\" + Utils.guid(), (event) => {\n if (this.ellipsisContainer && event.target != this.ellipsisContainer.select(\".tsi-ellipsisButton\").node()) {\n this.ellipsisMenu.setMenuVisibility(false);\n }\n });\n\n this.legendPostRenderProcess(this.chartOptions.legend, this.svgSelection, true);\n }\n}\nexport default PieChart","import { ChartComponentData } from \"./ChartComponentData\";\nimport { GroupedBarChartData } from \"./GroupedBarChartData\";\nimport * as d3 from \"d3\";\nimport Utils from \"../utils\";\n\nclass ScatterPlotData extends GroupedBarChartData {\n public temporalDataArray: any;\n public extents: any = {};\n private extentsSet: boolean = false;\n\n constructor() {\n super();\n }\n\n /******** SETS EXTENT OF EACH DATA MEASURE -- MEASURES UPDATED WHEN RENDER CALLED OUTSIDE OF TEMPORAL ********/\n public setExtents(measures: any, forceReset: boolean = false) {\n if (!this.extentsSet || forceReset) {\n // Reset extents\n this.extents = {};\n // Set axis extents\n measures.forEach(measure => {\n this.extents[measure] = d3.extent(this.allValues, (v: any) => {\n if (!v.measures)\n return null\n return measure in v.measures ? v.measures[measure] : null\n }\n );\n });\n this.extentsSet = true;\n }\n }\n\n /******** UPDATE EXTENTS BASED ON VISIBLE DATA ********/\n public updateExtents(measures: any) {\n let visibleData: Array<any> = []\n\n this.data.forEach((aggregate) => {\n let aggName: string = Object.keys(aggregate)[0];\n let aggKey = aggregate.aggKey;\n\n if (this.displayState[aggKey].visible == true) {\n Object.keys(aggregate[aggName]).forEach((splitBy) => {\n if (this.displayState[aggKey].splitBys[splitBy].visible == true) {\n visibleData.push(Object.values(aggregate[aggName][splitBy]));\n }\n })\n }\n })\n\n visibleData = [].concat.apply([], visibleData);\n\n measures.forEach(measure => {\n this.extents[measure] = d3.extent(visibleData, (v: any) => {\n return measure in v ? v[measure] : null\n }\n );\n });\n }\n\n /******** UPDATES CHART DATA, ALL TIMESTAMPS, AND VALUES AT THE CURRENT TIMESTAMP ********/\n public mergeDataToDisplayStateAndTimeArrays(data, timestamp, aggregateExpressionOptions = null) {\n ChartComponentData.prototype.mergeDataToDisplayStateAndTimeArrays.call(this, data, aggregateExpressionOptions);\n this.timestamp = (timestamp != undefined && this.allTimestampsArray.indexOf(timestamp) !== -1) ? timestamp : this.allTimestampsArray[0];\n this.setValuesAtTimestamp();\n this.setAllTimestampsArray();\n }\n\n /******** UPDATES DATA TO BE DRAWN -- IF SCATTER IS TEMPORAL, FLATTENS ALL TIMESTAMP DATA ********/\n public updateTemporalDataArray(isTemporal: boolean) {\n this.temporalDataArray = []\n\n if (!isTemporal) {\n this.allTimestampsArray.forEach((ts) => {\n this.timestamp = ts;\n this.setValuesAtTimestamp();\n this.updateTemporal();\n });\n } else {\n this.updateTemporal();\n }\n }\n\n /******** HELPER TO FETCH DATA AT THE CURRENT TIMESTAMP AND BUILD AN OBJECT FOR THAT TIMESTAMP ********/\n private updateTemporal() {\n Object.keys(this.valuesAtTimestamp).forEach((aggKey) => {\n Object.keys(this.valuesAtTimestamp[aggKey].splitBys).forEach((splitBy, splitByI) => {\n let measures = null, timestamp = null;\n if (this.getSplitByVisible(aggKey, splitBy) && this.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements != undefined) {\n measures = this.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements;\n timestamp = this.valuesAtTimestamp[aggKey].splitBys[splitBy].timestamp;\n }\n\n this.temporalDataArray.push({\n aggregateKey: aggKey,\n aggregateKeyI: this.data.findIndex((datum) => datum.aggKey === aggKey),\n splitBy: splitBy,\n measures,\n timestamp,\n splitByI: splitByI\n });\n });\n });\n }\n\n /******** OVERRIDES GROUPEDBARCHARTDATA -- UPDATES VALUES AT TIMESTAMP WITH MEASURES & TIMESTAMP********/\n public setValuesAtTimestamp() {\n let aggregateCounterMap = {};\n this.valuesAtTimestamp = {};\n this.data.forEach((aggregate, aggI) => {\n let aggName: string = Object.keys(aggregate)[0];\n let aggKey;\n if (aggregateCounterMap[aggName]) {\n aggKey = Utils.createEntityKey(aggName, aggregateCounterMap[aggName]);\n aggregateCounterMap[aggName] += 1;\n } else {\n aggKey = Utils.createEntityKey(aggName, 0);\n aggregateCounterMap[aggName] = 1;\n }\n this.valuesAtTimestamp[aggKey] = {};\n this.valuesAtTimestamp[aggKey].splitBys = Object.keys(aggregate[aggName])\n .reduce((aggSplitBys: any, splitBy: string, splitByI: number) => {\n aggSplitBys[splitBy] = {};\n aggSplitBys[splitBy].measurements = aggregate[aggName][splitBy][this.timestamp];\n aggSplitBys[splitBy].timestamp = this.timestamp;\n return aggSplitBys;\n }, {});\n });\n }\n}\nexport { ScatterPlotData }\n","import * as d3 from 'd3';\nimport * as d3Voronoi from 'd3-voronoi';\nimport './ScatterPlot.scss';\nimport { ChartVisualizationComponent } from './../../interfaces/ChartVisualizationComponent';\nimport Legend from './../Legend';\nimport { ScatterPlotData } from '../../models/ScatterPlotData';\nimport Slider from './../Slider';\nimport Tooltip from '../Tooltip';\nimport Utils from '../../utils';\nimport { TooltipMeasureFormat } from \"./../../constants/Enums\";\n\nclass ScatterPlot extends ChartVisualizationComponent {\n private activeDot: any = null;\n private chartHeight: number;\n private controlsOffset: number;\n private focus: any;\n private focusedAggKey: string;\n private focusedSplitBy: string;\n private focusedSite: any = null;\n private g: any;\n private height: number;\n private measures: Array<string>;\n private pointWrapper: any;\n private lineWrapper: any;\n private rMeasure: string;\n private rScale: any;\n private slider: any;\n private sliderWrapper: any;\n private targetElement: any;\n private tooltip: Tooltip;\n private voronoi: any;\n private voronoiDiagram: any;\n private voronoiGroup: any;\n private xAxis: any;\n private xMeasure: string;\n private xScale: any;\n private yAxis: any;\n private yMeasure: string;\n private yScale: any;\n private xAxisLabel: any;\n private yAxisLabel: any;\n\n readonly lowOpacity = 0.15;\n readonly standardOpacity = 0.6;\n private focusOpacity = 0.8;\n readonly standardStroke = 1;\n readonly lowStroke = 0.3;\n\n chartComponentData = new ScatterPlotData();\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n this.chartMargins = {\n top: 40,\n bottom: 48,\n left: 70,\n right: 60\n };\n }\n\n ScatterPlot() { }\n public render(data: any, options: any, aggregateExpressionOptions: any, fromSlider: boolean = false) {\n super.render(data, options, aggregateExpressionOptions);\n // If measure options not set, or less than 2, return\n if (this.chartOptions[\"spMeasures\"] == null || (this.chartOptions[\"spMeasures\"] != null && this.chartOptions[\"spMeasures\"].length < 2)) {\n let invalidMessage = \"spMeasures not correctly specified or has length < 2: \" + this.chartOptions[\"spMeasures\"] +\n \"\\n\\nPlease add the following chartOption: {spMeasures: ['example_x_axis_measure', 'example_y_axis_measure', 'example_radius_measure']} \" +\n \"where the measures correspond to the data key names.\"\n console.log(invalidMessage);\n return;\n }\n\n this.chartMargins.top = (this.chartOptions.legend === 'compact') ? 84 : 40;\n if (!this.chartOptions.hideChartControlPanel)\n this.chartMargins.top += 20;\n this.chartMargins.left = (this.chartOptions.spAxisLabels != null && this.chartOptions.spAxisLabels.length >= 2) ? 120 : 70;\n\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(this.data, this.chartOptions.timestamp, this.aggregateExpressionOptions);\n this.chartComponentData.setExtents(this.chartOptions.spMeasures, !fromSlider);\n\n // Check measure validity\n if (!this.checkExtentValidity()) return;\n\n this.controlsOffset = (this.chartOptions.legend == \"shown\" ? this.CONTROLSWIDTH : 0)\n this.setWidthAndHeight();\n\n /******** STATIC INITIALIZATION ********/\n if (this.svgSelection == null) {\n // Initialize extents\n //this.chartComponentData.setExtents(this.chartOptions.spMeasures);\n this.targetElement = d3.select(this.renderTarget)\n .classed(\"tsi-scatterPlot\", true);\n\n this.svgSelection = this.targetElement.append(\"svg\")\n .attr(\"class\", \"tsi-scatterPlotSVG tsi-chartSVG\")\n .attr('title', this.getString('Scatter plot'))\n .attr(\"height\", this.height)\n\n this.g = this.svgSelection.append(\"g\")\n .classed(\"tsi-svgGroup\", true)\n\n this.lineWrapper = this.g.append(\"g\")\n .classed(\"tsi-lineWrapper\", true);\n\n this.pointWrapper = this.g.append(\"g\")\n .classed(\"tsi-pointWrapper\", true);\n\n // Create temporal slider div\n this.sliderWrapper = d3.select(this.renderTarget).append('div').classed('tsi-sliderWrapper', true);\n\n this.tooltip = new Tooltip(d3.select(this.renderTarget));\n\n // Initialize voronoi\n this.voronoiGroup = this.g.append(\"rect\")\n .attr(\"class\", \"tsi-voronoiWrap\")\n .attr(\"fill\", \"transparent\");\n\n // Initialize focus crosshair lines\n this.focus = this.pointWrapper.append(\"g\")\n .attr(\"transform\", \"translate(-100,-100)\")\n .attr(\"class\", \"tsi-focus\")\n .style(\"display\", \"none\");\n\n this.focus.append(\"line\")\n .attr(\"class\", \"tsi-focusLine tsi-vLine\")\n .attr(\"x1\", 0)\n .attr(\"x2\", 0)\n .attr(\"y1\", this.chartOptions.aggTopMargin)\n .attr(\"y2\", this.chartHeight);\n\n this.focus.append(\"line\")\n .attr(\"class\", \"tsi-focusLine tsi-hLine\")\n .attr(\"x1\", 0)\n .attr(\"x2\", this.chartWidth)\n .attr(\"y1\", 0)\n .attr(\"y2\", 0);\n\n // Initialize focus axis data boxes\n let hHoverG: any = this.focus.append(\"g\")\n .attr(\"class\", 'hHoverG')\n .style(\"pointer-events\", \"none\")\n .attr(\"transform\", \"translate(0,\" + (this.chartHeight + this.chartOptions.aggTopMargin) + \")\");\n hHoverG.append(\"rect\")\n .style(\"pointer-events\", \"none\")\n .attr(\"class\", 'hHoverBox')\n .attr(\"x\", 0)\n .attr(\"y\", 4)\n .attr(\"width\", 0)\n .attr(\"height\", 0);\n hHoverG.append(\"text\")\n .style(\"pointer-events\", \"none\")\n .attr(\"class\", \"hHoverText\")\n .attr(\"dy\", \".71em\")\n .attr(\"transform\", \"translate(0,9)\")\n .text((d: string) => d);\n\n let vHoverG: any = this.focus.append(\"g\")\n .attr(\"class\", 'vHoverG')\n .attr(\"transform\", \"translate(0,\" + (this.chartHeight + this.chartOptions.aggTopMargin) + \")\");\n vHoverG.append(\"rect\")\n .attr(\"class\", 'vHoverBox')\n .attr(\"x\", -5)\n .attr(\"y\", 0)\n .attr(\"width\", 0)\n .attr(\"height\", 0)\n vHoverG.append(\"text\")\n .attr(\"class\", \"vHoverText\")\n .attr(\"dy\", \".32em\")\n .attr(\"x\", -10)\n .text((d: string) => d);\n\n // Add Window Resize Listener\n window.addEventListener(\"resize\", (event) => {\n if (!this.chartOptions.suppressResizeListener) {\n this.draw(true, event);\n }\n });\n\n // Temporal slider\n this.slider = new Slider(<any>d3.select(this.renderTarget).select('.tsi-sliderWrapper').node());\n\n // Legend\n this.legendObject = new Legend(this.draw.bind(this), this.renderTarget, this.CONTROLSWIDTH);\n }\n\n // Draw scatter plot\n this.draw();\n this.gatedShowGrid();\n\n d3.select(\"html\").on(\"click.\" + Utils.guid(), (event) => {\n if (this.ellipsisContainer && event.target != this.ellipsisContainer.select(\".tsi-ellipsisButton\").node()) {\n this.ellipsisMenu.setMenuVisibility(false);\n }\n });\n\n this.legendPostRenderProcess(this.chartOptions.legend, this.svgSelection, false);\n }\n\n private getSliderWidth() {\n return this.chartWidth + this.chartMargins.left + this.chartMargins.right - 16;\n }\n\n protected tooltipFormat(d: any, text: any, measureFormat: TooltipMeasureFormat, xyrMeasures: any) {\n super.tooltipFormat(d, text, measureFormat, xyrMeasures);\n if (!this.chartOptions.isTemporal) {\n let titleGroup = text.select('.tsi-tooltipTitleGroup');\n if (d.timestamp) {\n titleGroup.append('h4')\n .attr('class', 'tsi-tooltipSubtitle tsi-tooltipTimeStamp')\n .text(this.formatDate(d.timestamp, this.chartComponentData.getTemporalShiftMillis(d.aggregateKey)));\n }\n }\n }\n\n /******** DRAW UPDATE FUNCTION ********/\n public draw = (isFromResize = false, event?: any) => {\n this.activeDot = null;\n this.chartComponentData.updateTemporalDataArray(this.chartOptions.isTemporal);\n\n // Update extents to fit data if not temporal\n this.chartComponentData.updateExtents(this.chartOptions.spMeasures);\n\n this.focus.attr(\"visibility\", (this.chartOptions.focusHidden) ? \"hidden\" : \"visible\")\n\n // If only one data series visible, do not highlight on hover\n let visibleSplitBys = 0;\n Object.keys(this.chartComponentData.displayState).forEach(aggKey => {\n if (this.chartComponentData.displayState[aggKey].visible)\n Object.keys(this.chartComponentData.displayState[aggKey].splitBys).forEach(splitBy => {\n if (this.chartComponentData.displayState[aggKey].splitBys[splitBy].visible)\n visibleSplitBys++\n });\n })\n\n if (visibleSplitBys == 1) this.focusOpacity = this.standardOpacity;\n // Determine the number of timestamps present, add margin for slider\n if (this.chartComponentData.allTimestampsArray.length > 1 && this.chartOptions.isTemporal) {\n this.chartMargins.bottom = 88;\n }\n else {\n this.chartMargins.bottom = 48;\n }\n\n this.setWidthAndHeight(isFromResize);\n this.svgSelection\n .attr(\"height\", this.height)\n .style(\"width\", `${this.getSVGWidth()}px`);\n\n this.g\n .attr(\"transform\", \"translate(\" + this.chartMargins.left + \",\" + this.chartMargins.top + \")\");\n\n this.voronoiGroup\n .attr(\"width\", this.chartWidth)\n .attr(\"height\", this.chartHeight)\n\n super.themify(this.targetElement, this.chartOptions.theme);\n\n // Draw control panel\n if (!this.chartOptions.hideChartControlPanel && this.chartControlsPanel === null) {\n this.chartControlsPanel = Utils.createControlPanel(this.renderTarget, this.CONTROLSWIDTH, this.chartMargins.top, this.chartOptions);\n } else if (this.chartOptions.hideChartControlPanel && this.chartControlsPanel !== null) {\n this.removeControlPanel();\n }\n if (this.chartControlsPanel !== null && this.ellipsisItemsExist()) {\n this.drawEllipsisMenu();\n this.chartControlsPanel.style(\"top\", Math.max((this.chartMargins.top - 44), 0) + 'px');\n } else {\n this.removeEllipsisMenu();\n }\n\n // Resize focus line\n this.focus.select('.tsi-hLine').attr(\"x2\", this.chartWidth);\n this.focus.select('.tsi-vLine').attr(\"y2\", this.chartHeight);\n this.measures = this.chartOptions.spMeasures;\n\n this.xMeasure = this.measures[0];\n this.yMeasure = this.measures[1];\n this.rMeasure = this.measures[2] !== undefined ? this.measures[2] : null;\n\n let xExtentRange = this.chartComponentData.extents[this.xMeasure][1] - this.chartComponentData.extents[this.xMeasure][0];\n let yExtentRange = this.chartComponentData.extents[this.yMeasure][1] - this.chartComponentData.extents[this.yMeasure][0];\n\n // Pad extents\n let xOffset = (20 / this.chartWidth) * (xExtentRange == 0 ? 1 : xExtentRange);\n let yOffset = (20 / this.chartHeight) * (yExtentRange == 0 ? 1 : yExtentRange);\n\n let rOffset = null;\n\n if (this.rMeasure) {\n let rExtentRange = this.chartComponentData.extents[this.rMeasure][1] - this.chartComponentData.extents[this.rMeasure][0];\n rOffset = (20 / this.chartHeight) * (rExtentRange == 0 ? 1 : rExtentRange);\n }\n\n // Check measure validity\n if (!this.checkExtentValidity()) return;\n\n // Init scales\n this.yScale = d3.scaleLinear()\n .range([this.chartHeight, 0])\n .domain([this.chartComponentData.extents[this.yMeasure][0] - yOffset, this.chartComponentData.extents[this.yMeasure][1] + yOffset]);\n\n this.xScale = d3.scaleLinear()\n .range([0, this.chartWidth])\n .domain([this.chartComponentData.extents[this.xMeasure][0] - xOffset, this.chartComponentData.extents[this.xMeasure][1] + xOffset]);\n\n this.rScale = d3.scaleLinear()\n .range(this.chartOptions.scatterPlotRadius.slice(0, 2))\n .domain(this.rMeasure === null ? [0, 0] : [this.chartComponentData.extents[this.rMeasure][0] - rOffset, this.chartComponentData.extents[this.rMeasure][1] + rOffset]);\n\n // Draw axis\n this.drawAxis();\n\n // Draw axis labels\n this.drawAxisLabels();\n\n // Draw connecting lines (if toggled on)\n this.drawConnectingLines();\n\n // Draw data\n let scatter = this.pointWrapper.selectAll(\".tsi-dot\")\n .data(this.cleanData(this.chartComponentData.temporalDataArray), (d) => {\n if (this.chartOptions.isTemporal) {\n return d.aggregateKey + d.splitBy + d.splitByI;\n } else {\n return d.aggregateKey + d.splitBy + d.timestamp;\n }\n });\n\n scatter\n .enter()\n .append(\"circle\")\n .attr(\"class\", \"tsi-dot\")\n .attr(\"r\", (d) => this.rScale(d.measures[this.rMeasure]))\n .attr(\"cx\", (d) => this.xScale(d.measures[this.xMeasure]))\n .attr(\"cy\", (d) => this.yScale(d.measures[this.yMeasure]))\n .merge(scatter)\n .attr(\"id\", (d) => this.getClassHash(d.aggregateKey, d.splitBy, d.splitByI, d.timestamp))\n .transition()\n .duration(this.chartOptions.noAnimate ? 0 : this.TRANSDURATION)\n .ease(d3.easeExp)\n .attr(\"r\", (d) => this.rScale(d.measures[this.rMeasure]))\n .attr(\"cx\", (d) => this.xScale(d.measures[this.xMeasure]))\n .attr(\"cy\", (d) => this.yScale(d.measures[this.yMeasure]))\n .attr(\"fill\", (d) => Utils.colorSplitBy(this.chartComponentData.displayState, d.splitByI, d.aggregateKey, this.chartOptions.keepSplitByColor))\n .attr(\"stroke\", (d) => Utils.colorSplitBy(this.chartComponentData.displayState, d.splitByI, d.aggregateKey, this.chartOptions.keepSplitByColor))\n .attr(\"stroke-opacity\", this.standardStroke)\n .attr(\"fill-opacity\", this.standardOpacity)\n .attr(\"stroke-width\", \"1px\")\n\n scatter.exit().remove();\n\n // Draw voronoi\n this.drawVoronoi();\n\n // Resize controls\n this.setControlsPanelWidth();\n\n /******************** Temporal Slider ************************/\n if (this.chartComponentData.allTimestampsArray.length > 1 && this.chartOptions.isTemporal) {\n d3.select(this.renderTarget).select('.tsi-sliderWrapper').classed('tsi-hidden', false);\n this.slider.render(this.chartComponentData.allTimestampsArray.map(ts => {\n var action = () => {\n this.chartOptions.timestamp = ts;\n this.render(this.chartComponentData.data, this.chartOptions, this.aggregateExpressionOptions, true);\n }\n return {\n label: Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis, this.chartOptions.offset,\n this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale)(new Date(ts)), action: action\n };\n }), this.chartOptions, this.getSliderWidth(), Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale)(new Date(this.chartComponentData.timestamp)));\n }\n else {\n if (this.slider)\n this.slider.remove();\n d3.select(this.renderTarget).select('.tsi-sliderWrapper').classed('tsi-hidden', true);\n }\n\n // Draw Legend\n this.legendObject.draw(\n this.chartOptions.legend,\n this.chartComponentData,\n this.labelMouseOver.bind(this),\n this.svgSelection,\n this.chartOptions,\n this.labelMouseOut.bind(this),\n this.stickySeries,\n event);\n\n this.sliderWrapper\n .style(\"width\", `${this.svgSelection.node().getBoundingClientRect().width + 10}px`);\n }\n\n /******** DRAW CONNECTING LINES BETWEEN POINTS ********/\n private drawConnectingLines() {\n // Don't render connecting lines on temporal mode\n if (this.chartOptions.isTemporal) {\n this.lineWrapper.selectAll(\"*\").remove();\n return;\n }\n\n let dataSet = this.cleanData(this.chartComponentData.temporalDataArray);\n let connectedSeriesMap = {};\n\n // Find measure by which to connect series of points\n const getPointConnectionMeasure = (point => {\n let pConMes = this.aggregateExpressionOptions[point.aggregateKeyI]?.pointConnectionMeasure;\n return pConMes && pConMes in point.measures ? pConMes : null;\n })\n\n // Map data into groups of connected points, if connectedPoints enabled for agg\n dataSet.forEach(point => {\n if (point.aggregateKeyI !== null && point.aggregateKeyI < this.aggregateExpressionOptions.length &&\n this.aggregateExpressionOptions[point.aggregateKeyI].connectPoints) {\n let series = point.aggregateKey + \"_\" + point.splitBy;\n if (series in connectedSeriesMap) {\n connectedSeriesMap[series].data.push(point);\n } else {\n connectedSeriesMap[series] = {\n data: [point],\n pointConnectionMeasure: getPointConnectionMeasure(point)\n }\n }\n }\n })\n\n // Sort connected series by pointConnectionMeasure\n for (let key of Object.keys(connectedSeriesMap)) {\n let sortMeasure = connectedSeriesMap[key].pointConnectionMeasure;\n // If sort measure specified, sort by that measure\n if (sortMeasure) {\n connectedSeriesMap[key].data.sort((a, b) => {\n if (a.measures[sortMeasure] < b.measures[sortMeasure]) return -1;\n if (a.measures[sortMeasure] > b.measures[sortMeasure]) return 1;\n return 0;\n })\n }\n }\n\n let line = d3.line()\n .x((d: any) => this.xScale(d.measures[this.xMeasure]))\n .y((d: any) => this.yScale(d.measures[this.yMeasure]))\n .curve(this.chartOptions.interpolationFunction); // apply smoothing to the line\n\n // Group lines by aggregate\n let connectedGroups = this.lineWrapper.selectAll(`.tsi-lineSeries`).data(Object.keys(connectedSeriesMap));\n\n let self = this;\n\n connectedGroups.enter()\n .append(\"g\")\n .attr(\"class\", 'tsi-lineSeries')\n .merge(connectedGroups)\n .each(function (seriesName) {\n let series = d3.select(this).selectAll<SVGPathElement, unknown>(`.tsi-line`).data([connectedSeriesMap[seriesName].data], d => d[0].aggregateKeyI + d[0].splitBy);\n\n series.exit().remove();\n\n series\n .enter()\n .append(\"path\")\n .attr(\"class\", `tsi-line`)\n .merge(series)\n .attr(\"fill\", \"none\")\n .transition()\n .duration(self.chartOptions.noAnimate ? 0 : self.TRANSDURATION)\n .ease(d3.easeExp)\n .attr(\"stroke\", (d) => Utils.colorSplitBy(self.chartComponentData.displayState, d[0].splitByI, d[0].aggregateKey, self.chartOptions.keepSplitByColor))\n .attr(\"stroke-width\", 2.5)\n .attr(\"stroke-linejoin\", \"round\")\n .attr(\"stroke-linecap\", \"round\")\n .attr(\"d\", line)\n })\n\n connectedGroups.exit().remove()\n }\n\n /******** CHECK VALIDITY OF EXTENTS ********/\n private checkExtentValidity() {\n if (this.chartComponentData.allValues == 0) {\n return true;\n }\n let testExtent = {};\n this.chartOptions.spMeasures.forEach(measure => {\n testExtent[measure] = d3.extent(this.chartComponentData.allValues, (v: any) => {\n if (!v.measures)\n return null\n return measure in v.measures ? v.measures[measure] : null\n });\n });\n Object.keys(testExtent).forEach(extent => {\n testExtent[extent].forEach(el => {\n if (el == undefined) {\n console.log(\"Undefined Measure: \", extent)\n return false;\n }\n });\n });\n return true;\n }\n\n /******** CREATE VORONOI DIAGRAM FOR MOUSE EVENTS ********/\n private drawVoronoi() {\n let voronoiData = this.getVoronoiData(this.chartComponentData.temporalDataArray);\n let self = this;\n\n // Create random offset to solve colinear data issue\n const getRandomInRange = (min, max) => {\n return Math.random() * (max - min) + min;\n }\n const getOffset = () => (Math.random() < 0.5 ? -1 : 1) * getRandomInRange(0, .01);\n\n this.voronoi = d3Voronoi.voronoi()\n .x((d: any) => this.xScale(d.measures[this.xMeasure]) + getOffset())\n .y((d: any) => this.yScale(d.measures[this.yMeasure]) + getOffset())\n .extent([[0, 0], [this.chartWidth, this.chartHeight]]);\n\n this.voronoiDiagram = this.voronoi(voronoiData);\n\n this.voronoiGroup\n .on(\"mousemove\", function (event) {\n let mouseEvent = d3.pointer(event);\n self.voronoiMouseMove(mouseEvent);\n })\n .on(\"mouseover\", function (event) {\n let mouseEvent = d3.pointer(event);\n self.voronoiMouseMove(mouseEvent);\n let site = self.voronoiDiagram.find(mouseEvent[0], mouseEvent[1]);\n if (site != null)\n self.labelMouseOver(site.data.aggregateKey, site.data.splitBy);\n })\n .on(\"mouseout\", function () {\n self.voronoiMouseOut();\n })\n .on(\"click\", function (event) {\n let mouseEvent = d3.pointer(event);\n self.voronoiClick(mouseEvent);\n });\n }\n\n /******** STICKY/UNSTICKY DATA GROUPS ON VORONOI DIAGRAM CLICK ********/\n private voronoiClick(mouseEvent: any) {\n let site = this.voronoiDiagram.find(mouseEvent[0], mouseEvent[1]);\n if (site == null) return;\n // Unsticky all\n (<any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel')).classed(\"stickied\", false);\n\n if (this.chartComponentData.stickiedKey != null) {\n this.chartComponentData.stickiedKey = null;\n // Recompute Voronoi\n this.voronoiDiagram = this.voronoi(this.getVoronoiData(this.chartComponentData.temporalDataArray));\n site = this.voronoiDiagram.find(mouseEvent[0], mouseEvent[1]);\n this.voronoiMouseMove(mouseEvent);\n this.chartOptions.onUnsticky(site.data.aggregateKey, site.data.splitBy)\n return;\n }\n\n this.stickySeries(site.data.aggregateKey, site.data.splitBy);\n this.chartOptions.onSticky(site.data.aggregateKey, site.data.splitBy);\n }\n\n /******** UPDATE STICKY SPLITBY ********/\n public stickySeries = (aggregateKey: string, splitBy: string = null) => {\n let filteredValues = this.getVoronoiData(this.chartComponentData.temporalDataArray);\n if (filteredValues == null || filteredValues.length == 0)\n return;\n\n this.chartComponentData.stickiedKey = {\n aggregateKey: aggregateKey,\n splitBy: (splitBy == null ? null : splitBy)\n };\n\n (<any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel').filter(function (filteredSplitBy: any) {\n return (d3.select(this.parentNode).datum() == aggregateKey) && (filteredSplitBy == splitBy);\n })).classed(\"stickied\", true);\n\n this.voronoiDiagram = this.voronoi(this.getVoronoiData(this.chartComponentData.temporalDataArray));\n }\n\n /******** HIGHLIGHT DOT TARGETED BY CROSSHAIRS WITH BLACK / WHITE STROKE BORDER ********/\n private highlightDot(site) {\n\n //If dot is active, unhighlight\n this.unhighlightDot();\n // Add highlight border to newly focused dot\n let highlightColor = this.chartOptions.theme == \"light\" ? \"black\" : \"white\";\n let idSelector = \"#\" + this.getClassHash(site.data.aggregateKey, site.data.splitBy, site.data.splitByI, site.data.timestamp);\n\n this.activeDot = this.svgSelection.select(idSelector);\n\n this.activeDot\n .attr(\"stroke\", highlightColor)\n .attr(\"stroke-width\", \"2px\")\n // Raise active dot above crosshair\n .raise().classed(\"active\", true);\n\n }\n\n /******** GET UNIQUE STRING HASH ID FOR EACH DOT USING DATA ATTRIBUTES ********/\n private getClassHash(aggKey: string, splitBy: string, splitByI: number, timestamp: string) {\n return String(\"dot\" + Utils.hash(aggKey + splitBy + splitByI.toString() + timestamp));\n }\n\n /******** UNHIGHLIGHT ACTIVE DOT ********/\n private unhighlightDot() {\n if (this.activeDot) {\n this.activeDot\n .attr(\"stroke\", (d) => Utils.colorSplitBy(this.chartComponentData.displayState, d.splitByI, d.aggregateKey, this.chartOptions.keepSplitByColor))\n .attr(\"stroke-width\", \"1px\")\n }\n this.activeDot = null;\n }\n\n /******** EFFICIENTLY SWAP NEW FOCUSED GROUP WITH OLD FOCUSED GROUP ********/\n private labelMouseMove(aggKey: string, splitBy: string) {\n if (aggKey !== this.focusedAggKey || splitBy !== this.focusedSplitBy) {\n let selectedFilter = Utils.createValueFilter(aggKey, splitBy);\n let oldFilter = Utils.createValueFilter(this.focusedAggKey, this.focusedSplitBy);\n\n this.svgSelection.selectAll(\".tsi-dot\")\n .filter(selectedFilter)\n .attr(\"stroke-opacity\", this.standardStroke)\n .attr(\"fill-opacity\", this.focusOpacity)\n\n this.svgSelection.selectAll(\".tsi-dot\")\n .filter(oldFilter)\n .attr(\"stroke-opacity\", this.lowStroke)\n .attr(\"fill-opacity\", this.lowOpacity)\n\n let lineSelectedFilter = (d: any) => {\n return (d[0].aggregateKey === aggKey && d[0].splitBy === splitBy)\n }\n\n this.svgSelection.selectAll(\".tsi-line\")\n .filter((d: any) => lineSelectedFilter(d))\n .attr(\"stroke-opacity\", this.standardStroke)\n\n this.svgSelection.selectAll(\".tsi-line\")\n .filter((d: any) => !lineSelectedFilter(d))\n .attr(\"stroke-opacity\", this.lowStroke)\n\n this.focusedAggKey = aggKey;\n this.focusedSplitBy = splitBy;\n }\n // Raise crosshair to top\n this.focus.raise().classed(\"active\", true);\n // Raise highlighted dot above crosshairs\n if (this.activeDot != null)\n this.activeDot.raise().classed(\"active\", true);\n\n // Highlight legend group\n (this.legendObject.legendElement.selectAll('.tsi-splitByLabel').filter(function (filteredSplitBy: string) {\n return (d3.select(this.parentNode).datum() == aggKey) && (filteredSplitBy == splitBy);\n })).classed(\"inFocus\", true);\n }\n\n /******** DRAW CROSSHAIRS, TOOLTIP, AND LEGEND FOCUS ********/\n private voronoiMouseMove(mouseEvent: any) {\n let mouse_x = mouseEvent[0];\n let mouse_y = mouseEvent[1];\n let site = this.voronoiDiagram.find(mouse_x, mouse_y);\n if (site == null) return;\n\n // Short circuit mouse move if focused site has not changed\n if (this.focusedSite == null)\n this.focusedSite = site;\n else if (this.focusedSite == site) return;\n\n this.focusedSite = site;\n\n this.drawTooltip(site.data, [site[0], site[1]]);\n this.labelMouseMove(site.data.aggregateKey, site.data.splitBy);\n this.highlightDot(site);\n\n // Draw focus cross hair\n this.focus.style(\"display\", \"block\");\n this.focus.attr(\"transform\", \"translate(\" + site[0] + \",\" + site[1] + \")\");\n this.focus.select('.tsi-hLine').attr(\"transform\", \"translate(\" + (-site[0]) + \",0)\");\n this.focus.select('.tsi-vLine').attr(\"transform\", \"translate(0,\" + (-site[1]) + \")\");\n\n // Draw horizontal hover box \n this.focus.select('.hHoverG')\n .attr(\"transform\", \"translate(0,\" + (this.chartHeight - site[1]) + \")\")\n .select(\"text\")\n .text((Utils.formatYAxisNumber(site.data.measures[this.xMeasure])));\n let textElemDimensions = (<any>this.focus.select('.hHoverG').select(\"text\")\n .node()).getBoundingClientRect();\n this.focus.select(\".hHoverG\").select(\"rect\")\n .attr(\"x\", -(textElemDimensions.width / 2) - 3)\n .attr(\"width\", textElemDimensions.width + 6)\n .attr(\"height\", textElemDimensions.height + 5);\n\n // Draw vertical hover box\n this.focus.select('.vHoverG')\n .attr(\"transform\", \"translate(\" + (-site[0]) + \",0)\")\n .select(\"text\")\n .text(Utils.formatYAxisNumber(site.data.measures[this.yMeasure]))\n textElemDimensions = (<any>this.focus.select('.vHoverG').select(\"text\")\n .node()).getBoundingClientRect();\n this.focus.select(\".vHoverG\").select(\"rect\")\n .attr(\"x\", -(textElemDimensions.width) - 13)\n .attr(\"y\", -(textElemDimensions.height / 2) - 3)\n .attr(\"width\", textElemDimensions.width + 6)\n .attr(\"height\", textElemDimensions.height + 4);\n\n this.legendObject.triggerSplitByFocus(site.data.aggregateKey, site.data.splitBy);\n }\n\n /******** HIDE TOOLTIP AND CROSSHAIRS ********/\n private voronoiMouseOut() {\n this.focusedSite = null;\n this.focus.style(\"display\", \"none\");\n this.tooltip.hide();\n this.labelMouseOut();\n this.unhighlightDot();\n }\n\n /******** FILTER DATA BY VISIBLE AND STICKIED ********/\n private getVoronoiData(rawData: Array<any>) {\n let cleanData = this.cleanData(rawData);\n\n let filteredValues = cleanData.filter((d) => {\n return (this.chartComponentData.displayState[d.aggregateKey].visible &&\n this.chartComponentData.displayState[d.aggregateKey].splitBys[d.splitBy].visible)\n });\n\n if (this.chartComponentData.stickiedKey == null) return filteredValues;\n\n let stickiedValues = filteredValues.filter((d: any) => {\n return d.aggregateKey == this.chartComponentData.stickiedKey.aggregateKey &&\n ((this.chartComponentData.stickiedKey.splitBy == null) ? true :\n d.splitBy == this.chartComponentData.stickiedKey.splitBy);\n });\n return stickiedValues;\n }\n\n /******** HIGHLIGHT FOCUSED GROUP ********/\n private labelMouseOver(aggKey: string, splitBy: string = null) {\n // Remove highlight on previous legend group\n <any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel').classed(\"inFocus\", false);\n\n // Filter selected\n let selectedFilter = (d: any) => {\n let currAggKey = null, currSplitBy = null;\n if (d.aggregateKey != null) currAggKey = d.aggregateKey\n if (d.splitBy != null) currSplitBy = d.splitBy\n\n if (splitBy == null)\n return currAggKey == aggKey;\n\n if (currAggKey == aggKey && currSplitBy == splitBy)\n return false;\n return true;\n }\n\n //Highlight active group\n this.svgSelection.selectAll(\".tsi-dot\")\n .filter((d: any) => !selectedFilter(d))\n .attr(\"stroke-opacity\", this.standardStroke)\n .attr(\"fill-opacity\", this.focusOpacity)\n\n // Decrease opacity of unselected\n this.svgSelection.selectAll(\".tsi-dot\")\n .filter(selectedFilter)\n .attr(\"stroke-opacity\", this.lowStroke)\n .attr(\"fill-opacity\", this.lowOpacity)\n\n // Decrease opacity of unselected line\n this.svgSelection.selectAll(\".tsi-line\")\n .filter((d: any) => !(d[0].aggregateKey === aggKey && d[0].splitBy === splitBy))\n .attr(\"stroke-opacity\", this.lowStroke)\n\n }\n\n /******** UNHIGHLIGHT FOCUSED GROUP ********/\n private labelMouseOut() {\n // Remove highlight on legend group\n <any>this.legendObject.legendElement.selectAll('.tsi-splitByLabel').classed(\"inFocus\", false);\n\n this.g.selectAll(\".tsi-dot\")\n .attr(\"stroke-opacity\", this.standardStroke)\n .attr(\"fill-opacity\", this.standardOpacity)\n .attr(\"stroke\", (d) => Utils.colorSplitBy(this.chartComponentData.displayState, d.splitByI, d.aggregateKey, this.chartOptions.keepSplitByColor))\n .attr(\"fill\", (d) => Utils.colorSplitBy(this.chartComponentData.displayState, d.splitByI, d.aggregateKey, this.chartOptions.keepSplitByColor))\n .attr(\"stroke-width\", \"1px\");\n\n this.g.selectAll(\".tsi-line\")\n .attr(\"stroke-opacity\", this.standardStroke)\n }\n\n /******** FILTER DATA, ONLY KEEPING POINTS WITH ALL REQUIRED MEASURES ********/\n private cleanData(data: Array<any>) {\n // Exclude any data which does not contain the specified\n // chart option measure\n let filtered = data.filter((value) => {\n let valOk = true;\n this.chartOptions.spMeasures\n .forEach((measure) => {\n if (value.measures == null) valOk = false\n else if (!(measure in value.measures)) {\n valOk = false;\n }\n });\n return valOk;\n })\n return filtered;\n }\n\n /******** UPDATE CHART DIMENSIONS ********/\n private setWidthAndHeight(isFromResize = false) {\n this.height = Math.max((<any>d3.select(this.renderTarget).node()).clientHeight, this.MINHEIGHT);\n this.chartHeight = this.height - this.chartMargins.top - this.chartMargins.bottom;\n this.width = this.getWidth();\n if (!isFromResize) {\n this.chartWidth = this.getChartWidth();\n }\n }\n\n /******** SCALE AND DRAW AXIS ********/\n private drawAxis() {\n // Draw dynamic x axis and label\n this.xAxis = this.pointWrapper.selectAll(\".xAxis\").data([this.xScale]);\n this.xAxis.enter()\n .append(\"g\")\n .attr(\"class\", \"xAxis\")\n .merge(this.xAxis)\n .attr(\"transform\", \"translate(0,\" + (this.chartHeight) + \")\")\n .call(d3.axisBottom(this.xScale).ticks(Math.max(2, Math.floor(this.chartWidth / 150))));\n\n this.xAxis.exit().remove();\n\n // Draw dynamic y axis and label\n this.yAxis = this.pointWrapper.selectAll(\".yAxis\").data([this.yScale]);\n this.yAxis.enter()\n .append(\"g\")\n .attr(\"class\", \"yAxis\")\n .merge(this.yAxis)\n .call(d3.axisLeft(this.yScale).ticks(Math.max(2, Math.floor(this.chartHeight / 90))));\n\n this.yAxis.exit().remove()\n }\n\n /******** DRAW X AND Y AXIS LABELS ********/\n private drawAxisLabels() {\n let self = this;\n let xLabelData, yLabelData;\n\n const truncateTextLength = (textSelection, maxTextLengthPx: number) => {\n if (textSelection.node() && textSelection.node().getComputedTextLength) {\n var textLength = textSelection.node().getComputedTextLength();\n var text = textSelection.text();\n while (textLength > maxTextLengthPx && text.length > 0) {\n text = text.slice(0, -1);\n textSelection.text(text + '...');\n textLength = textSelection.node().getComputedTextLength();\n }\n }\n }\n\n // Associate axis label data\n (this.chartOptions.spAxisLabels != null && this.chartOptions.spAxisLabels.length >= 1) ?\n xLabelData = [this.chartOptions.spAxisLabels[0]] : xLabelData = [];\n\n (this.chartOptions.spAxisLabels != null && this.chartOptions.spAxisLabels.length >= 2) ?\n yLabelData = [this.chartOptions.spAxisLabels[1]] : yLabelData = [];\n\n this.xAxisLabel = this.pointWrapper.selectAll('.tsi-xAxisLabel').data(xLabelData);\n let xAxisLabel = this.xAxisLabel\n .enter()\n .append(\"text\")\n .attr(\"class\", \"tsi-xAxisLabel tsi-AxisLabel\")\n .merge(this.xAxisLabel)\n .style(\"text-anchor\", \"middle\")\n .attr(\"transform\", \"translate(\" + (this.chartWidth / 2) + \" ,\" + (this.chartHeight + 42) + \")\")\n .text(null);\n xAxisLabel.each(function (d) {\n let label = d3.select(this);\n Utils.appendFormattedElementsFromString(label, d, { inSvg: true });\n });\n //text is either in tspans or just in text. Either truncate text directly or through tspan\n if (xAxisLabel.selectAll(\"tspan\").size() == 0)\n truncateTextLength(xAxisLabel, this.chartWidth)\n else {\n xAxisLabel.selectAll(\"tspan\").each(function () {\n var tspanTextSelection = d3.select(this);\n truncateTextLength(tspanTextSelection, self.chartWidth / xAxisLabel.selectAll(\"tspan\").size());\n });\n }\n this.xAxisLabel.exit().remove();\n\n this.yAxisLabel = this.pointWrapper.selectAll('.tsi-yAxisLabel').data(yLabelData);\n let yAxisLabel = this.yAxisLabel\n .enter()\n .append(\"text\")\n .attr(\"class\", \"tsi-yAxisLabel tsi-AxisLabel\")\n .merge(this.yAxisLabel)\n .style(\"text-anchor\", \"middle\")\n .attr(\"transform\", \"translate(\" + (-70) + \" ,\" + (this.chartHeight / 2) + \") rotate(-90)\")\n .text(null);\n yAxisLabel.each(function (d) {\n let label = d3.select(this);\n Utils.appendFormattedElementsFromString(label, d, { inSvg: true });\n });\n //text is either in tspans or just in text. Either truncate text directly or through tspan\n if (yAxisLabel.selectAll(\"tspan\").size() == 0)\n truncateTextLength(yAxisLabel, this.chartHeight)\n else {\n yAxisLabel.selectAll(\"tspan\").each(function () {\n var tspanTextSelection = d3.select(this);\n truncateTextLength(tspanTextSelection, self.chartHeight / yAxisLabel.selectAll(\"tspan\").size());\n });\n }\n this.yAxisLabel.exit().remove();\n }\n\n /******** DRAW TOOLTIP IF ENABLED ********/\n private drawTooltip(d: any, mousePosition) {\n let self = this;\n if (this.chartOptions.tooltip) {\n let xPos = mousePosition[0];\n let yPos = mousePosition[1];\n\n let xyrMeasures = [this.xMeasure, this.yMeasure];\n if (this.rMeasure !== null) {\n xyrMeasures.push(this.rMeasure);\n }\n\n this.tooltip.render(this.chartOptions.theme);\n this.tooltip.draw(d, this.chartComponentData, xPos, yPos, this.chartMargins, (text) => {\n d.aggregateName = this.chartComponentData.displayState[d.aggregateKey].name;\n this.tooltipFormat(d, text, TooltipMeasureFormat.Scatter, xyrMeasures);\n }, null, 20, 20, Utils.colorSplitBy(this.chartComponentData.displayState, d.splitByI, d.aggregateKey, this.chartOptions.keepSplitByColor));\n }\n }\n\n /******** HELPERS TO FORMAT TIME DISPLAY ********/\n private labelFormatUsesSeconds() {\n return !this.chartOptions.minutesForTimeLabels && this.chartComponentData.usesSeconds;\n }\n\n private labelFormatUsesMillis() {\n return !this.chartOptions.minutesForTimeLabels && this.chartComponentData.usesMillis;\n }\n\n}\n\nexport default ScatterPlot\n","import * as d3 from 'd3';\nimport './GroupedBarChart.scss';\nimport Utils from \"../../utils\";\nimport { TooltipMeasureFormat } from \"./../../constants/Enums\";\nimport Legend from './../Legend';\nimport Slider from './../Slider';\nimport { GroupedBarChartData } from '../../models/GroupedBarChartData';\nimport ContextMenu from './../ContextMenu';\nimport Tooltip from '../Tooltip';\nimport { ChartVisualizationComponent } from '../../interfaces/ChartVisualizationComponent';\n\nclass GroupedBarChart extends ChartVisualizationComponent {\n private contextMenu: ContextMenu;\n private setStateFromData: any;\n private timestamp: any;\n private isStacked: boolean = null;\n private stackedButton: any = null;\n chartComponentData = new GroupedBarChartData();\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n this.chartMargins = {\n top: 52,\n bottom: 48,\n left: 70,\n right: 60\n }\n }\n\n GroupedBarChart() { }\n public render(data: any, options: any, aggregateExpressionOptions: any) {\n super.render(data, options, aggregateExpressionOptions);\n if (options && options.stacked || this.isStacked == null) {\n this.isStacked = this.chartOptions.stacked;\n }\n\n this.chartMargins.top = (this.chartOptions.legend === 'compact') ? 84 : 52;\n\n this.width = Math.max((<any>d3.select(this.renderTarget).node()).clientWidth, this.MINWIDTH);\n var height = Math.max((<any>d3.select(this.renderTarget).node()).clientHeight, this.MINHEIGHT);\n\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(this.data, this.timestamp, this.aggregateExpressionOptions);\n this.timestamp = (options && options.timestamp != undefined) ? options.timestamp : this.chartComponentData.allTimestampsArray[0];\n\n var chartHeight = height - this.chartMargins.bottom - this.chartMargins.top;\n this.chartWidth = this.getChartWidth();\n\n if (this.svgSelection == null) {\n var targetElement = d3.select(this.renderTarget)\n .classed(\"tsi-barChart\", true);\n var svgSelection = targetElement.append(\"svg\")\n .attr(\"class\", \"tsi-barChartSVG tsi-chartSVG\")\n .attr('title', this.getString('Bar chart'))\n .style(\"height\", height)\n .style(\"width\", this.getSVGWidth() + 'px');\n this.svgSelection = svgSelection;\n\n\n var g = svgSelection.append(\"g\")\n .attr(\"transform\", \"translate(\" + this.chartMargins.left + \",\" + this.chartMargins.top + \")\");\n\n var baseLine: any = g.append(\"line\")\n .classed(\"tsi-baseLine\", true)\n .attr(\"stroke-width\", 1);\n\n var focus = g.append(\"g\")\n .attr(\"transform\", \"translate(-100,-100)\")\n .attr(\"class\", \"tsi-focus\");\n focus.append(\"line\")\n .attr(\"class\", \"tsi-focusLine\")\n .attr(\"x1\", 0)\n .attr(\"x2\", this.chartWidth)\n .attr(\"y1\", 0)\n .attr(\"y2\", 0);\n var vHoverG: any = focus.append(\"g\")\n .attr(\"class\", 'vHoverG');\n var vHoverBox: any = vHoverG.append(\"rect\")\n .attr(\"class\", 'vHoverBox')\n .attr(\"x\", -5)\n .attr(\"y\", 0)\n .attr(\"width\", 0)\n .attr(\"height\", 0)\n var vHoverText: any = vHoverG.append(\"text\")\n .attr(\"class\", \"vHoverText hoverText\")\n .attr(\"dy\", \".32em\")\n .attr(\"x\", -10)\n .text(d => d);\n\n d3.select(this.renderTarget).append('div').classed('tsi-sliderWrapper', true);\n\n var tooltip = new Tooltip(d3.select(this.renderTarget));\n\n var measureMap = this.chartComponentData.data.map((aggregate, aggI) => {\n var aggName: string = Object.keys(aggregate)[0]\n var aggKey: string = Utils.createEntityKey(Object.keys(aggregate)[0], aggI);\n var possibleMeasures = Object.keys(aggregate)\n });\n\n var labelMouseover = (aggKey: string, splitBy: string = null) => {\n var self = this;\n svgSelection.selectAll(\".tsi-valueElement\")\n .attr(\"stroke-opacity\", 1)\n .attr(\"fill-opacity\", 1);\n //filter out the selected timeseries/splitby\n var selectedFilter = (d: any, j: number) => {\n var currAggKey: string;\n var currSplitBy: string;\n if (d.aggKey) {\n currAggKey = d.aggKey;\n currSplitBy = d.splitBy;\n } else if (d && d.length) {\n currAggKey = d[0].aggKey;\n currSplitBy = d[0].splitBy\n } else\n return true;\n return !(aggKey == currAggKey && (splitBy == null || splitBy == currSplitBy))\n }\n\n svgSelection.selectAll(\".tsi-valueElement\")\n .filter(selectedFilter)\n .attr(\"stroke-opacity\", .3)\n .attr(\"fill-opacity\", .3);\n var text = svgSelection.selectAll(\".barGroup\")\n .filter((d: any) => {\n return d == aggKey;\n })\n .select(\".labelGroup\").select(\"text\").text(null);\n var dy = parseFloat(text.attr(\"dy\"));\n\n let aggLabelGroup = text.append(\"tspan\").attr('class', \"tsi-labelGroupLine\");\n Utils.appendFormattedElementsFromString(aggLabelGroup, self.chartComponentData.displayState[aggKey].name, { inSvg: true, additionalClassName: \"tsi-aggregateLabelGroupText\" });\n let splitByLabelGroup = text.append(\"tspan\").attr('class', \"tsi-labelGroupLine\");\n Utils.appendFormattedElementsFromString(splitByLabelGroup, splitBy, { inSvg: true, additionalClassName: \"tsi-splitByLabelGroupText\" });\n\n splitByLabelGroup.selectAll('.tsi-splitByLabelGroupText').each(function (d, i) {\n if (i == 0) {\n d3.select(this).attr(\"y\", text.attr(\"y\"))\n .attr(\"x\", text.attr(\"x\"))\n .attr(\"dy\", (dy + dy * 2) + \"em\")\n .attr(\"text-anchor\", \"middle\");\n }\n });\n rePositionLabelGroupBoxes(svgSelection, aggKey);\n }\n\n var labelMouseout = (svgSelection, aggKey) => {\n var self = this;\n var allText = svgSelection.selectAll(\".barGroup\")\n .selectAll(\".labelGroup\")\n .selectAll(\"text\")\n .text(null);\n allText.each(function (aggKey) {\n var text = d3.select(this);\n if (self.chartComponentData.displayState[aggKey] != undefined) {\n Utils.appendFormattedElementsFromString(text, self.chartComponentData.displayState[aggKey].name, { inSvg: true, additionalClassName: \"tsi-aggregateLabelGroupText\" });\n }\n })\n rePositionLabelGroupBoxes(svgSelection);\n }\n\n var calcSpacePerAgg = () => {\n var aggregateCount = Math.max(Object.keys(this.chartComponentData.filteredAggregates).length, 1);\n return Math.max((this.chartWidth / 2) / aggregateCount, 0);\n }\n\n var rePositionLabelGroupBoxes = (svgSelection, aggKey = null) => {\n svgSelection.selectAll(\".barGroup\").filter((d, i) => {\n if (aggKey == null)\n return true;\n return d == aggKey\n })\n .each(function () {\n if (d3.select(this).select('.labelGroup').select('text').node() == null)\n return;\n var textElemDimensions = (<any>d3.select(this).select('.labelGroup').select('text').node())\n .getBoundingClientRect();\n var spacePerAgg = calcSpacePerAgg();\n var aggregateWidth = d3.select(this).attr(\"width\");\n\n // //truncate text to fit in spacePerAggregate of width\n var textSelection: any = d3.select(this).select('.labelGroup').select(\"text\");\n\n var truncateText = (textSelection, childrenSize = 1) => {\n if (textSelection.node().getComputedTextLength) {\n var textLength = textSelection.node().getComputedTextLength();\n var text = textSelection.text();\n while (textLength > ((spacePerAgg - 6) / childrenSize) && text.length > 0) {\n text = text.slice(0, -1);\n textSelection.text(text + '...');\n textLength = textSelection.node().getComputedTextLength();\n }\n }\n }\n\n //text is either in tspans or just in text. Either truncate text directly or through tspan\n if (textSelection.selectAll(\"tspan\").filter(function () { return !d3.select(this).classed(\"tsi-labelGroupLine\") }).size() === 0)\n truncateText(textSelection)\n else {\n textSelection.selectAll(\"tspan\").filter(function () { return !d3.select(this).classed(\"tsi-labelGroupLine\") }).each(function () {\n var tspanTextSelection = d3.select(this);\n let childrenSize = tspanTextSelection.classed(\"tsi-splitByLabelGroupText\") ? textSelection.selectAll(\".tsi-splitByLabelGroupText\").size() : textSelection.selectAll(\".tsi-aggregateLabelGroupText\").size();\n truncateText(tspanTextSelection, childrenSize);\n });\n }\n\n d3.select(this).select('.labelGroup').select(\"rect\")\n .attr(\"height\", textElemDimensions.height + 4)\n .attr(\"y\", chartHeight + 6)\n .attr(\"x\", 0)\n .attr(\"width\", spacePerAgg);\n });\n }\n\n var draw = (isFromResize = false) => {\n var self = this;\n this.width = this.getWidth();\n height = Math.max((<any>d3.select(this.renderTarget).node()).clientHeight, this.MINHEIGHT);\n\n this.chartComponentData.timestamp = (this.chartOptions.timestamp != undefined) ? this.chartOptions.timestamp : this.chartComponentData.allTimestampsArray[0];\n this.chartComponentData.setFilteredAggregates();\n\n if (!isFromResize) {\n this.chartWidth = this.getChartWidth();\n }\n\n super.themify(targetElement, this.chartOptions.theme);\n\n if (!this.chartOptions.hideChartControlPanel && this.chartControlsPanel === null) {\n this.chartControlsPanel = Utils.createControlPanel(this.renderTarget, this.CONTROLSWIDTH, this.chartMargins.top, this.chartOptions);\n\n this.stackedButton = this.chartControlsPanel.append(\"button\")\n .style(\"left\", \"60px\")\n .attr(\"class\", \"tsi-stackedButton\").on(\"click\", function () {\n self.chartOptions.stacked = !self.chartOptions.stacked;\n self.draw();\n })\n .attr(\"type\", \"button\")\n .attr('title', this.getString('Stack/Unstack Bars'));\n } else if (this.chartOptions.hideChartControlPanel && this.chartControlsPanel !== null) {\n this.removeControlPanel();\n }\n\n if (this.chartControlsPanel) {\n this.stackedButton.attr('aria-label', this.chartOptions.stacked ? this.getString(\"Unstack bars\") : this.getString(\"Stack bars\"))\n }\n\n if (this.chartControlsPanel !== null && this.ellipsisItemsExist()) {\n this.drawEllipsisMenu();\n this.chartControlsPanel.style(\"top\", Math.max((this.chartMargins.top - 24), 0) + 'px');\n } else {\n this.removeEllipsisMenu();\n }\n\n /********* Determine the number of timestamps present, add margin for slider *********/\n\n if (this.chartComponentData.allTimestampsArray.length > 1)\n this.chartMargins.bottom = 88;\n /*******************/\n chartHeight = height - this.chartMargins.bottom - this.chartMargins.top;\n focus.select(\"line\").attr(\"x2\", this.chartWidth);\n\n svgSelection.style(\"width\", `${this.getSVGWidth()}px`);\n if (this.timestamp.substring(this.timestamp.length - 5, this.timestamp.length) == \".000Z\")\n this.timestamp = this.timestamp.substring(0, this.timestamp.length - 5) + \"Z\";\n\n var aggregateCount = Math.max(Object.keys(this.chartComponentData.filteredAggregates).length, 1);\n\n svgSelection.select('g').attr(\"transform\", \"translate(\" + this.chartMargins.left + \",\" + this.chartMargins.top + \")\")\n .selectAll('.barGroup')\n .attr(\"visibility\", \"hidden\");\n var barGroups = g.selectAll<SVGGElement, unknown>('.barGroup').data(Object.keys(this.chartComponentData.displayState));\n var spacePerAggregate = calcSpacePerAgg();\n\n //map to x position\n var xPosMap = this.chartComponentData.filteredAggregates.reduce((map, aggKey, aggKeyI) => {\n map[aggKey] = ((1 / (aggregateCount + 1)) * (aggKeyI + 1) * this.chartWidth - (spacePerAggregate / 2))\n return map;\n }, {});\n\n this.legendObject.draw(this.chartOptions.legend, this.chartComponentData, labelMouseover,\n svgSelection, this.chartOptions, labelMouseout);\n\n barGroups = barGroups.enter()\n .append(\"g\")\n .attr(\"class\", \"barGroup\")\n .merge(barGroups)\n .attr(\"display\", (d, i) => { return (this.chartComponentData.displayState[d].visible ? \"inherit\" : \"none\"); })\n .attr(\"visibility\", \"visible\")\n .attr(\"transform\", (d, i) => {\n if (xPosMap[d])\n return \"translate(\" + xPosMap[d] + \",0)\";\n return \"\";\n });\n\n this.chartComponentData.setEntireRangeData(this.chartOptions.scaledToCurrentTime);\n var allValues: Array<number> = this.chartComponentData.valuesOfVisibleType;\n var aggsSeries = this.chartComponentData.aggsSeries;\n\n var yScale = d3.scaleLinear()\n .range([chartHeight, 0]);\n var extent = d3.extent(allValues);\n if (!this.chartOptions.stacked) {\n if (allValues.length > 0) { //check to make sure there are values present\n if (this.chartOptions.zeroYAxis) {\n if (extent[0] > 0)\n yScale.domain([0, d3.extent(allValues)[1]])\n else\n yScale.domain([d3.extent(allValues)[0], Math.max(d3.extent(allValues)[1], 0)])\n }\n else {\n var offset = (Math.abs(d3.extent(allValues)[1]) * .05);\n yScale.domain([d3.extent(allValues)[0] - offset, (d3.extent(allValues)[1] + offset)]);\n }\n } else {\n yScale.domain([0, 0]);\n }\n } else {\n yScale.domain([Math.min(this.chartComponentData.globalMin, this.chartComponentData.globalMax),\n Math.max(this.chartComponentData.globalMin, this.chartComponentData.globalMax)]);\n }\n\n var barBase = (yScale.domain()[0] > 0) ? yScale(yScale.domain()[0]) : yScale(0);\n\n var legendObject = this.legendObject;\n barGroups.each(function (aggKey, i) {\n var splitBys = Object.keys(self.chartComponentData.displayState[aggKey].splitBys)\n var filteredSplitBys = splitBys.filter((splitBy) => {\n return self.chartComponentData.displayState[aggKey].splitBys[splitBy].visible;\n });\n\n var splitByCount = filteredSplitBys.length;\n var barWidth = spacePerAggregate / splitByCount;\n\n var valueElements = d3.select(this).selectAll<SVGGElement, unknown>('.tsi-valueElement').data(self.chartComponentData.getValueContainerData(aggKey));\n\n var labelGroup = d3.select(this).selectAll<SVGGElement, unknown>(\".labelGroup\").data([aggKey]);\n var labelGroupEntered = labelGroup.enter()\n .append(\"g\")\n .attr(\"class\", \"labelGroup\");\n labelGroupEntered.append(\"rect\");\n var labelGroupText = labelGroupEntered.append(\"text\")\n .attr(\"dy\", \".71em\");\n Utils.appendFormattedElementsFromString(labelGroupText, self.chartComponentData.displayState[aggKey].name, { inSvg: true, additionalClassName: \"tsi-aggregateLabelGroupText\" });\n\n var labelGroupBox: any = labelGroupEntered.merge(labelGroup)\n .select(\"rect\")\n .attr(\"class\", 'aggregateLabelBox')\n .attr(\"x\", 0)\n .attr(\"y\", 1)\n .attr(\"width\", 0)\n .attr(\"height\", 0);\n\n d3.select(this).select(\".labelGroup\").select(\"text\")\n .transition()\n .duration(self.TRANSDURATION)\n .ease(d3.easeExp)\n .attr(\"x\", (d) => (spacePerAggregate / 2))\n .attr(\"y\", chartHeight + 12)\n .style(\"fill\", (d) => self.chartComponentData.displayState[aggKey].color)\n .attr(\"text-anchor\", \"middle\");\n\n labelGroup.exit().remove();\n\n rePositionLabelGroupBoxes(svgSelection, aggKey);\n\n var xScale = d3.scaleLinear()\n .domain([0, splitByCount])\n .range([0, spacePerAggregate]);\n\n //yOffset to position 0 at the appropriate place\n var yOffset = chartHeight - filteredSplitBys.reduce((offset, splitBy) => {\n var measureType = self.chartComponentData.displayState[aggKey].splitBys[splitBy].visibleType;\n var yScaledVal; // either 0 or the value \n if (self.chartComponentData.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements)\n yScaledVal = yScale(self.chartComponentData.valuesAtTimestamp[aggKey].splitBys[splitBy].measurements[measureType]);\n else\n yScaledVal = 0;\n return offset + yScaledVal;\n }, 0);\n\n //calculate the yPosition of an element, either by its data or explicitly through its value\n var calcYPos = (d, i) => {\n if (!self.chartOptions.stacked) {\n if (d.val > 0)\n return yScale(d.val);\n return yScale(0);\n }\n if (aggsSeries[d.aggKey] != undefined && aggsSeries[d.aggKey].length != 0) {\n return yScale(aggsSeries[d.aggKey][i][0][1]);\n }\n return 0;\n }\n\n //calculate the height of an element given its data\n var calcHeight = (d, i, dValue = null) => {\n if (!self.chartOptions.stacked) {\n if (yScale.domain()[0] >= 0)\n return chartHeight - calcYPos(d, i);\n dValue = (dValue != null) ? dValue : d.val;\n if (dValue > 0)\n return Math.abs(calcYPos(d, i) - yScale(0));\n return yScale(dValue) - yScale(0);\n }\n return Math.max(Math.abs(yScale(d.val) - yScale(0)), 0);\n }\n\n //map to x position for grouped, map to y position for stacked\n var splitByXPosMap = filteredSplitBys.reduce((map, splitBy, splitByI) => {\n map[splitBy] = xScale(splitByI);\n return map;\n }, {});\n\n var valueElementsEntered = valueElements.enter()\n .append(\"g\")\n .attr(\"class\", \"tsi-valueElement\");\n valueElementsEntered.append(\"rect\");\n valueElementsEntered.append(\"line\");\n\n\n var valueElementMouseout = (event, d) => {\n if (self.contextMenu && self.contextMenu.contextMenuVisible)\n return;\n focus.style(\"display\", \"none\");\n (<any>legendObject.legendElement.selectAll('.tsi-splitByLabel').filter(function (filteredSplitBy: string) {\n return (d3.select(this.parentNode).datum() == d.aggKey) && (filteredSplitBy == d.splitBy);\n })).classed(\"inFocus\", false);\n event.stopPropagation();\n svgSelection.selectAll(\".tsi-valueElement\")\n .attr(\"stroke-opacity\", 1)\n .attr(\"fill-opacity\", 1);\n labelMouseout(svgSelection, d.aggKey);\n tooltip.hide();\n }\n var mouseOutValueElementOnContextMenuClick = () => {\n valueElementsEntered.selectAll(\"path\").each(valueElementMouseout);\n }\n\n var splitByColors = Utils.createSplitByColors(self.chartComponentData.displayState, aggKey, self.chartOptions.keepSplitByColor);\n valueElementsEntered.merge(valueElements)\n .select<SVGGElement>(\"rect\")\n .attr(\"fill\", (d, j) => {\n return splitByColors[j];\n })\n .on(\"mouseover\", function (event, d) {\n if (self.contextMenu && self.contextMenu.contextMenuVisible)\n return;\n\n (legendObject.legendElement.selectAll('.tsi-splitByLabel').filter(function (filteredSplitBy: string) {\n return (d3.select(this.parentNode).datum() == d.aggKey) && (filteredSplitBy == d.splitBy);\n })).classed(\"inFocus\", true);\n labelMouseover(d.aggKey, d.splitBy);\n\n const e = valueElementsEntered.nodes();\n const j = e.indexOf(event.currentTarget);\n var yPos = calcYPos(d, j);\n if (d.val < 0) {\n yPos = yPos + calcHeight(d, j);\n }\n focus.style(\"display\", \"block\")\n .attr(\"transform\", \"translate(0,\" + yPos + \")\");\n\n focus.select('.vHoverG')\n .select(\"text\")\n .text(() => {\n if (!self.chartOptions.stacked)\n return Utils.formatYAxisNumber(d.val);\n var yVal = yScale.invert(calcYPos(d, j))\n if (d.val < 0)\n yVal += d.val;\n return Utils.formatYAxisNumber(yVal);\n });\n var textElemDimensions = (<any>focus.select('.vHoverG').select(\"text\")\n .node()).getBoundingClientRect();\n focus.select(\".vHoverG\").select(\"rect\")\n .attr(\"x\", -(textElemDimensions.width) - 13)\n .attr(\"y\", -(textElemDimensions.height / 2) - 3)\n .attr(\"width\", textElemDimensions.width + 6)\n .attr(\"height\", textElemDimensions.height + 4);\n\n (<any>focus.node()).parentNode.appendChild(focus.node());\n })\n .on(\"mousemove\", function (event, d) {\n if (self.chartOptions.tooltip) {\n const e = valueElementsEntered.nodes();\n const i = e.indexOf(event.currentTarget);\n var mousePos = d3.pointer(event, <any>g.node());\n tooltip.render(self.chartOptions.theme)\n tooltip.draw(d, self.chartComponentData, mousePos[0], mousePos[1], self.chartMargins, (text) => {\n self.tooltipFormat(self.convertToTimeValueFormat(d), text, TooltipMeasureFormat.SingleValue);\n }, null, 20, 20, splitByColors[i]);\n } else {\n tooltip.hide();\n }\n })\n .on(\"mouseout\", valueElementMouseout)\n .on(\"contextmenu\", (event, d: any) => {\n if (self.chartComponentData.displayState[d.aggKey].contextMenuActions &&\n self.chartComponentData.displayState[d.aggKey].contextMenuActions.length) {\n var mousePosition = d3.pointer(event, <any>targetElement.node());\n event.preventDefault();\n self.contextMenu.draw(self.chartComponentData, self.renderTarget, self.chartOptions,\n mousePosition, d.aggKey, d.splitBy, mouseOutValueElementOnContextMenuClick,\n new Date(self.chartComponentData.timestamp));\n }\n })\n .transition()\n .duration(self.TRANSDURATION)\n .ease(d3.easeExp)\n .attr(\"y\", (d, i) => calcYPos(d, i))\n .attr(\"height\", (d, i) => {\n if (self.chartOptions.stacked && (splitByXPosMap[d.splitBy] == undefined))\n return 0;\n return Math.max(calcHeight(d, i), 0);\n })\n .attr(\"x\", function (d, i) {\n if (self.chartOptions.stacked)\n return 0;\n if (splitByXPosMap[d.splitBy] != undefined)\n return splitByXPosMap[d.splitBy];\n //if invisible, put it in the empty space where it would be\n var splitBys = Object.keys(self.chartComponentData.displayState[aggKey].splitBys);\n var prevSplitBy = splitBys[0];\n for (var splitByI = 0; splitBys[splitByI] != d.splitBy; splitByI++) {\n if (splitByXPosMap[splitBys[splitByI]] != undefined)\n prevSplitBy = splitBys[splitByI];\n }\n if (splitByXPosMap[prevSplitBy] != undefined)\n return splitByXPosMap[prevSplitBy] + barWidth;\n return 0;\n })\n .attr(\"width\", (d, i) => {\n if (self.chartOptions.stacked)\n return spacePerAggregate;\n if (splitByXPosMap[d.splitBy] != undefined)\n return barWidth;\n return 0;\n });\n\n valueElementsEntered.merge(valueElements)\n .select(\"line\")\n .classed(\"tsi-baseLine\", true)\n .attr(\"stroke-width\", 2)\n .transition()\n .duration(self.TRANSDURATION)\n .ease(d3.easeExp)\n .attr(\"x1\", (d, i) => {\n if (self.chartOptions.stacked)\n return 0;\n if (splitByXPosMap[d.splitBy] != undefined)\n return splitByXPosMap[d.splitBy];\n return 0;\n })\n .attr(\"x2\", (d, i) => {\n if (self.chartOptions.stacked)\n return spacePerAggregate;\n if (splitByXPosMap[d.splitBy] != undefined)\n return splitByXPosMap[d.splitBy] + barWidth;\n return 0;\n })\n .attr(\"y1\", (d, i) => {\n if (!self.chartOptions.stacked) {\n return barBase;\n }\n var dValue = d.val;\n if (self.chartOptions.stacked && (splitByXPosMap[d.splitBy] == undefined))\n return calcYPos(d, i);\n return calcYPos(d, i) + calcHeight(d, i);\n })\n .attr(\"y2\", (d, i) => {\n if (!self.chartOptions.stacked) {\n return barBase;\n }\n var dValue = d.val;\n if (self.chartOptions.stacked && (splitByXPosMap[d.splitBy] == undefined))\n return calcYPos(d, i);\n return calcYPos(d, i) + calcHeight(d, i);\n });\n valueElements.exit().remove();\n });\n barGroups.exit().remove();\n\n var yAxis: any = g.selectAll(\".yAxis\")\n .data([yScale]);\n yAxis.enter()\n .append(\"g\")\n .attr(\"class\", \"yAxis\")\n .merge(yAxis)\n .call(d3.axisLeft(yScale).tickFormat(Utils.formatYAxisNumber).ticks(4));\n yAxis.exit().remove();\n\n baseLine\n .attr(\"x1\", 0)\n .attr(\"x2\", this.chartWidth)\n .attr(\"y1\", barBase + 1)\n .attr(\"y2\", barBase + 1);\n\n /******************** Stack/Unstack button ************************/\n this.stackedButton.style(\"opacity\", this.chartOptions.stacked ? 1 : .5)\n .classed('tsi-lightTheme', this.chartOptions.theme == 'light')\n .classed('tsi-darkTheme', this.chartOptions.theme == 'dark');\n\n /******************** Temporal Slider ************************/\n if (this.chartComponentData.allTimestampsArray.length > 1) {\n d3.select(this.renderTarget).select('.tsi-sliderWrapper').classed('tsi-hidden', false);\n slider.render(this.chartComponentData.allTimestampsArray.map(ts => {\n var action = () => {\n this.chartOptions.timestamp = ts;\n this.render(this.chartComponentData.data, this.chartOptions, this.aggregateExpressionOptions);\n }\n return {\n label: Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale)(new Date(ts)), action: action\n };\n }), this.chartOptions, this.getSVGWidth(), Utils.timeFormat(this.chartComponentData.usesSeconds,\n this.chartComponentData.usesMillis, this.chartOptions.offset, this.chartOptions.is24HourTime,\n null, null, this.chartOptions.dateLocale)(new Date(this.chartComponentData.timestamp)));\n }\n else {\n slider.remove();\n d3.select(this.renderTarget).select('.tsi-sliderWrapper').classed('tsi-hidden', true);\n }\n\n this.setControlsPanelWidth();\n }\n\n this.legendObject = new Legend(draw, this.renderTarget, this.CONTROLSWIDTH);\n this.contextMenu = new ContextMenu(this.draw, this.renderTarget);\n\n // temporal slider\n var slider = new Slider(<any>d3.select(this.renderTarget).select('.tsi-sliderWrapper').node());\n\n this.draw = draw;\n window.addEventListener(\"resize\", () => {\n if (!this.chartOptions.suppressResizeListener)\n this.draw();\n });\n }\n\n d3.select(\"html\").on(\"click.\" + Utils.guid(), (event) => {\n if (this.ellipsisContainer && event.target != this.ellipsisContainer.select(\".tsi-ellipsisButton\").node()) {\n this.ellipsisMenu.setMenuVisibility(false);\n }\n });\n\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(this.data, this.timestamp, this.aggregateExpressionOptions);\n this.draw();\n this.gatedShowGrid();\n\n this.legendPostRenderProcess(this.chartOptions.legend, this.svgSelection, true);\n }\n}\nexport default GroupedBarChart\n","import Utils from \"../utils\";\n\nclass HierarchyNode {\n public name: string;\n public markedName: string;\n public children: Array<HierarchyNode> = [];\n public parent: HierarchyNode;\n public isExpanded: boolean = false;\n public isSelected: boolean = false;\n public isLeaf: boolean = false;\n public childrenInFilter: boolean = false;\n public selfInFilter: boolean = false;\n public color: (n: HierarchyNode) => string = () => null;\n public click = (n) => { };\n public isLeafParent: boolean = false; // used in the event of context menut to denote that we should use a context menu for children\n public level: number;\n\n constructor(name: string, level: number) {\n this.name = name;\n this.level = level;\n this.markedName = name;\n }\n\n public filter(filterText) {\n var regExp = new RegExp(filterText, 'i');\n var isInFilter = (node) => {\n var childrenInFilter = node.children.reduce((p, c) => {\n p = isInFilter(c) || p;\n return p;\n }, false);\n var selfInFilter = regExp.test(node.name);\n node.markedName = selfInFilter ? Utils.mark(filterText, node.name) : node.name;\n if (node.parent != null)\n node.parent.childrenInFilter = (selfInFilter || childrenInFilter) && filterText.length > 0;\n node.selfInFilter = selfInFilter && filterText.length > 0;\n node.childrenInFilter = childrenInFilter && filterText.length > 0;\n return childrenInFilter || selfInFilter;\n }\n isInFilter(this);\n }\n\n public traverse(condition: (n: HierarchyNode) => boolean) {\n var traversal = [];\n if (condition(this))\n traversal.push(this);\n this.children.forEach(n => {\n traversal = traversal.concat(n.traverse(condition));\n })\n return traversal;\n }\n\n public colorify(el) {\n if (this.isLeaf && this.isSelected && this.color(this))\n el.style('background-color', this.color(this));\n if (!this.isSelected && this.isLeaf)\n el.style('background-color', null);\n }\n\n}\nexport { HierarchyNode }\n","import * as d3 from 'd3';\nimport './Hierarchy.scss';\nimport Utils from \"../../utils\";\nimport { Component } from \"./../../interfaces/Component\";\nimport { HierarchyNode } from \"./../../models/HierarchyNode\";\n\nclass Hierarchy extends Component {\n private filterText = '';\n private root: HierarchyNode;\n private withContextMenu: boolean = false;\n private contextMenu: any;\n private clickedNode: any;\n private hierarchyList: any;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n public render(data: any, options: any) {\n var self = this;\n var targetElement = d3.select(this.renderTarget).classed('tsi-hierarchy', true);\n targetElement.html('');\n this.chartOptions.setOptions(options);\n super.themify(targetElement, this.chartOptions.theme);\n this.withContextMenu = this.chartOptions.withContextMenu;\n this.root = this.buildTree(data);\n this.root.isExpanded = true;\n\n d3.select(\"html\").on(\"click.\" + Utils.guid(), (event) => {\n if (this.clickedNode && event.target != this.clickedNode && this.contextMenu) {\n this.closeContextMenu();\n this.clickedNode = null;\n }\n });\n\n var inputDebounceTimeout;\n var filter = targetElement.append('div').classed('tsi-filterWrapper', true).append('input').attr('placeholder', 'Search...').on('input', function (event) {\n clearTimeout(inputDebounceTimeout);\n inputDebounceTimeout = setTimeout(() => {\n self.filterText = (<any>this).value.trim();\n if (self.filterText.length == 1)\n return; // quick return for small sets\n var splitFilterText = self.filterText.split('/');\n self.root.filter(splitFilterText[0]);\n if (splitFilterText.length > 1) {\n for (var i = 1; i < splitFilterText.length; i++) {\n if (splitFilterText[i].length) {\n var nodesInFilter = self.root.traverse(n => n.selfInFilter);\n nodesInFilter.forEach(n => {\n var markedName = n.markedName;\n n.filter(splitFilterText[i], false)\n n.markedName = markedName;\n });\n nodesInFilter.forEach(n => {\n if (!n.childrenInFilter)\n n.selfInFilter = false;\n })\n }\n }\n }\n list.selectAll('ul').remove();\n list.classed('tsi-expanded', false);\n self.root.childrenInFilter = self.root.childrenInFilter || self.filterText.length == 0;\n if (self.root.childrenInFilter == false)\n list.append('ul').append('div').text(self.getString('No filter results'))\n else\n self.expandCollapseList(self.root, list, false, event);\n list.select('ul').classed('tsi-noPad', true);\n }, 250);\n });\n\n var navTabs = targetElement.append('div').classed('tsi-navTabWrapper', true);\n var allTab = navTabs.append('div').classed('tsi-navTab tsi-selected', true).text(this.getString('All hierarchies'));\n var selectedTab = navTabs.append('div').classed('tsi-navTab', true).text(this.getString('Selected'));\n\n var list = targetElement.append('div').classed('tsi-hierarchyList', true);\n this.hierarchyList = list;\n\n allTab.on('click', (event) => {\n if (!allTab.classed('tsi-selected')) {\n allTab.classed('tsi-selected', true)\n selectedTab.classed('tsi-selected', false)\n list.html('').classed('tsi-expanded', false);\n this.expandCollapseList(this.root, list, true, event);\n list.select('ul').classed('tsi-noPad', true);\n filter.attr('disabled', null);\n }\n });\n selectedTab.on('click', () => {\n if (!selectedTab.classed('tsi-selected')) {\n allTab.classed('tsi-selected', false)\n selectedTab.classed('tsi-selected', true)\n list.html('');\n var ul = list.append('ul').classed('tsi-noPad', true);\n var leafs = this.root.traverse(n => n.isSelected);\n leafs.forEach(n => {\n var li = ul.append('li').classed('tsi-leaf', n.isLeaf).classed('tsi-selected', n.isSelected).on('click', function () {\n n.isSelected = !n.isSelected;\n d3.select(this).classed('tsi-selected', n.isSelected);\n n.click(n)\n n.colorify(d3.select(this));\n });\n li.append('span').text(n.name).classed('tsi-markedName', true);\n n.colorify(li);\n });\n filter.attr('disabled', true);\n }\n });\n\n this.expandCollapseList(this.root, list, false);\n list.select('ul').classed('tsi-noPad', true);\n }\n\n public expandCollapseList = (node: HierarchyNode, el, isFromClick = false, event?: any) => {\n this.closeContextMenu();\n if (el.classed('tsi-expanded') && !(this.withContextMenu && node.isLeafParent)) {\n el.selectAll('ul').remove();\n el.classed('tsi-expanded', false);\n node.isExpanded = false;\n }\n else {\n if (this.withContextMenu && node.isLeafParent) {\n if (this.clickedNode != el.node()) {\n this.clickedNode = el.node();\n this.contextMenu = this.hierarchyList.append('div');\n node.children.filter(n => n.name[0] !== '~').forEach(n => {\n this.contextMenu.append('div').text(`${n.name}`).on('click', () => n.click(n));\n })\n this.contextMenu.append('div').classed('tsi-break', true);\n node.children.filter(n => n.name[0] === '~').forEach(n => {\n let noTildeName = n.name.slice(1);\n this.contextMenu.append('div').text(`${noTildeName}`).on('click', () => n.click(n));\n })\n this.contextMenu.classed('tsi-hierarchyContextMenu', true);\n if (event) {\n let mouseWrapper = d3.pointer(event, this.hierarchyList.node());\n let mouseElt = d3.pointer(event, el.node());\n this.contextMenu.attr('style', () => `top: ${mouseWrapper[1] - mouseElt[1]}px`);\n }\n el.classed('tsi-resultSelected', true);\n this.hierarchyList.selectAll('.tsi-noPad').on('scroll', () => { this.closeContextMenu() });\n }\n else {\n this.clickedNode = null;\n }\n }\n else {\n var list = el.append('ul');\n node.children.forEach(n => {\n if (isFromClick || n.selfInFilter || n.childrenInFilter || (node.isExpanded && this.filterText.length == 0)) {\n var self = this;\n var clickMethod = function () {\n if (n.isLeaf) {\n var parent = n.parent;\n while (parent != this.root) {\n parent.isExpanded = true;\n parent = parent.parent;\n }\n n.isSelected = !n.isSelected;\n n.click(n);\n var selector = d3.select(this);\n n.colorify(selector);\n selector.classed('tsi-selected', n.isSelected);\n }\n else {\n self.expandCollapseList(n, d3.select(this), true, event);\n }\n event.stopPropagation();\n }\n\n var li = list.append('li').classed('tsi-leaf', n.isLeaf)\n .classed('tsi-leafParent', n.isLeafParent && this.withContextMenu)\n .classed('tsi-selected', n.isSelected).on('click', clickMethod)\n\n li.append('span').classed('tsi-caret', true).attr('style', `left: ${(n.level - 1) * 18}px`);\n li.append('span').classed('tsi-markedName', true).html(n.markedName) // known unsafe usage of .html\n .attr('style', `padding-left: ${40 + (n.level - 1) * 18 - (n.isLeafParent && this.withContextMenu ? 16 : 0)}px`)\n .attr('title', n.isLeafParent && this.withContextMenu ? n.name : '');\n n.colorify(li);\n\n if ((n.isExpanded || n.childrenInFilter) && !n.isLeaf) {\n this.expandCollapseList(n, li, isFromClick, event)\n }\n }\n })\n node.isExpanded = (node.isExpanded || isFromClick) || (node == this.root);\n el.classed('tsi-expanded', true);\n }\n }\n }\n\n public buildTree(data: any) {\n var traverse = (data, key, level, parent = null) => {\n var node = new HierarchyNode(key, level);\n node.parent = parent;\n if (data.hasOwnProperty('$leaf')) {\n node.isLeaf = true;\n if (data.hasOwnProperty('click'))\n node.click = data.click;\n if (data.hasOwnProperty('color'))\n node.color = data.color;\n node.parent.isLeafParent = true;\n }\n else {\n Object.keys(data).sort().forEach(k => {\n node.children.push(traverse(data[k], k, level + 1, node));\n })\n }\n return node;\n }\n return traverse(data, '', 0);\n }\n\n private closeContextMenu() {\n if (this.contextMenu) {\n this.contextMenu.remove();\n }\n d3.selectAll('.tsi-resultSelected').classed('tsi-resultSelected', false);\n }\n}\nexport default Hierarchy","import Utils from \"../utils\";\nimport { ChartComponentData } from \"./ChartComponentData\";\nimport * as d3 from 'd3';\n\nclass HeatmapData {\n public chartComponentData: ChartComponentData;\n public visibleSBs: Array<any> = [];\n public timeStamps: Array<Date> = [];\n public colorScale: any;\n public from: Date;\n public to: Date;\n public bucketSize: number;\n public timeValues: any;\n public aggKey: string;\n public numRows: number = 0;\n public numCols: number = 0;\n public allValues: Array<any>;\n\n\n constructor(chartComponentData: ChartComponentData, aggKey: string) {\n this.aggKey = aggKey;\n this.chartComponentData = chartComponentData;\n this.chartComponentData.isFromHeatmap = true;\n this.visibleSBs = Object.keys(this.chartComponentData.displayState[aggKey].splitBys).filter((sb) => {\n return (this.chartComponentData.getSplitByVisible(aggKey, sb));\n });\n this.numRows = this.visibleSBs.length;\n this.from = new Date(chartComponentData.displayState[aggKey].aggregateExpression.searchSpan.from);\n this.to = new Date(chartComponentData.displayState[aggKey].aggregateExpression.searchSpan.to);\n this.bucketSize = Utils.parseTimeInput(chartComponentData.displayState[aggKey].aggregateExpression.searchSpan.bucketSize);\n this.createTimeValues();\n }\n\n private adjustStartTime() {\n return new Date(Utils.adjustStartMillisToAbsoluteZero(new Date(this.from).valueOf(), this.bucketSize));\n }\n\n private createTimeValues() {\n this.timeValues = {};\n this.allValues = [];\n //turn time array into an object keyed by timestamp \n var colI = 0;\n let adjustedStartTime = this.adjustStartTime();\n for (var currTime = adjustedStartTime; (currTime.valueOf() < this.to.valueOf()); currTime = new Date(currTime.valueOf() + this.bucketSize)) {\n this.timeValues[currTime.toISOString()] = this.visibleSBs.reduce((obj, splitBy, splitByI) => {\n obj[splitBy] = {\n colI: colI,\n rowI: splitByI,\n value: null\n };\n return obj;\n }, {});\n colI += 1;\n }\n this.numCols = Object.keys(this.timeValues).length;\n\n this.visibleSBs.forEach((splitBy, rowI) => {\n this.chartComponentData.timeArrays[this.aggKey][splitBy].forEach((valueObject, colI) => {\n var timestamp = new Date(valueObject.dateTime.valueOf()).toISOString();\n var visibleMeasure = this.chartComponentData.getVisibleMeasure(this.aggKey, splitBy);\n if (this.timeValues[timestamp]) {\n this.timeValues[timestamp][splitBy].value = valueObject.measures ? valueObject.measures[visibleMeasure] : null;\n if (Utils.safeNotNullOrUndefined(() => valueObject.measures[visibleMeasure]))\n this.allValues.push(valueObject.measures[visibleMeasure]);\n }\n });\n });\n }\n}\nexport { HeatmapData }\n","import * as d3 from 'd3';\nimport './HeatmapCanvas.scss';\nimport Utils from \"../../utils\";\nimport { ChartComponent } from \"../../interfaces/ChartComponent\";\nimport { HeatmapData } from \"../../models/HeatmapData\";\n\nclass HeatmapCanvas extends ChartComponent {\n private heatmapData: HeatmapData;\n private canvas: any;\n private ctx: any;\n private height: number;\n private rawCellWidth: number;\n private cellWidthMod: number;\n private rawCellHeight: number;\n private cellHeightMod: number;\n private colorLegend: any;\n private colorScale: any;\n private gradientWidth = 8;\n private aggKey: string;\n private focusedXIndex: number = -1;\n private focusedYIndex: number = -1;\n private focusedText: any;\n private highlightedSplitBy: string;\n private highlightedTime: Date;\n private highlightedValue: number;\n private onCellFocus;\n private aggI: number;\n private isOnlyAgg: boolean;\n\n constructor(renderTarget) {\n super(renderTarget);\n this.legendWidth = 80;\n }\n\n private renderScale(aggColor: any, isOnlyAgg: boolean) {\n this.colorLegend.selectAll(\"*\").remove();\n if (this.colorScale.domain() === null || isNaN(this.colorScale.domain()[0]) || isNaN(this.colorScale.domain()[1])) {\n return;\n }\n let gradientGuid = Utils.guid();\n var gradient = this.colorLegend.append(\"defs\")\n .append(\"linearGradient\")\n .attr(\"id\", \"gradient\" + this.aggI + gradientGuid)\n .attr(\"x1\", \"0%\")\n .attr(\"y1\", \"100%\")\n .attr(\"x2\", \"0%\")\n .attr(\"y2\", \"0%\");\n\n let interpolatedColors = [];\n\n var percentileCalc = (i) => i * (this.colorScale.domain()[1] - this.colorScale.domain()[0]) + this.colorScale.domain()[0];\n for (let i = 0; i <= 20; i++) {\n const color = this.getColor(aggColor, percentileCalc(i / 20), isOnlyAgg);\n\n gradient.append(\"stop\")\n .attr(\"offset\", (i * 5) + \"%\")\n .attr(\"stop-color\", color)\n .attr(\"stop-opacity\", 1);\n }\n\n var gradientRect = this.colorLegend.append(\"rect\")\n .attr(\"x\", this.legendWidth - this.gradientWidth)\n .attr(\"y\", 6)\n .attr(\"width\", this.gradientWidth)\n .attr(\"height\", Math.max(0, this.height - 12))\n .style(\"fill\", \"url(#gradient\" + String(this.aggI) + gradientGuid + \")\");\n\n var highlightedValueY = null;\n var range: number = this.colorScale.domain()[1] - this.colorScale.domain()[0];\n\n var highlightedText = this.colorLegend.append(\"text\").attr(\"class\", \"highlightedValueText\");\n var highlightedLine = this.colorLegend.append(\"line\").attr(\"class\", \"highlightedValueLine\");\n var minText = this.colorLegend.append(\"text\");\n var maxText = this.colorLegend.append(\"text\");\n\n var setHighlightedValueLineAndText = (line, text) => {\n var percentile;\n if (range == 0) {\n percentile = .5;\n } else {\n percentile = (this.highlightedValue != null) ? (this.highlightedValue - this.colorScale.domain()[0]) / range : 0;\n }\n\n highlightedValueY = (this.height - 6) + (12 - this.height) * percentile;\n\n text.attr(\"x\", this.legendWidth - this.gradientWidth - 10)\n .attr(\"y\", highlightedValueY)\n .style(\"stroke-width\", 2)\n .text(Utils.formatYAxisNumber(this.highlightedValue));\n line.attr(\"x1\", this.legendWidth - this.gradientWidth - 5)\n .attr(\"x2\", this.legendWidth)\n .attr(\"y1\", highlightedValueY)\n .attr(\"y2\", highlightedValueY)\n .style(\"stroke-width\", 2);\n\n minText.attr(\"fill-opacity\", ((highlightedValueY == null) || highlightedValueY < this.height - 18) ? 1 : 0);\n maxText.attr(\"fill-opacity\", ((highlightedValueY == null) || highlightedValueY > 18) ? 1 : 0);\n }\n\n minText.attr(\"x\", this.legendWidth - this.gradientWidth - 5)\n .attr(\"y\", this.height - 6)\n .text(Utils.formatYAxisNumber(this.colorScale.domain()[0]))\n .attr(\"fill-width\", ((highlightedValueY == null) || highlightedValueY < this.height - 18) ? 1 : 0);\n maxText.attr(\"x\", this.legendWidth - this.gradientWidth - 5)\n .attr(\"y\", 6)\n .text(Utils.formatYAxisNumber(this.colorScale.domain()[1]))\n .attr(\"fill-opacity\", ((highlightedValueY == null) || highlightedValueY > 18) ? 1 : 0);\n\n //render highlightedValue text and line IF there is a highlighted time and split by, OR IF there is an \n // artificially produced value from hovering over the color gradient\n if (this.highlightedTime && this.highlightedSplitBy != null && this.highlightedValue != null) {\n setHighlightedValueLineAndText(highlightedLine, highlightedText);\n minText.attr(\"fill-opacity\", ((highlightedValueY == null) || highlightedValueY < this.height - 18) ? 1 : 0);\n maxText.attr(\"fill-opacity\", ((highlightedValueY == null) || highlightedValueY > 18) ? 1 : 0);\n }\n\n var self = this;\n\n gradientRect.on(\"mousemove\", function (event) {\n var yPos = d3.pointer(event)[1];\n var percentile = 1 - ((yPos - 6) / (self.height - 12));\n\n self.highlightedValue = self.colorScale.domain()[0] + (range * percentile);\n setHighlightedValueLineAndText(highlightedLine, highlightedText);\n })\n .on(\"mouseleave\", () => {\n this.render(this.data, this.chartOptions, this.aggKey, null, null, this.onCellFocus, null, this.isOnlyAgg);\n })\n }\n\n private getExtent() {\n let rawExtent = d3.extent(this.heatmapData.allValues);\n let extent = rawExtent;\n if (rawExtent[0] === rawExtent[1]) {\n extent = [rawExtent[0] - .05, rawExtent[1] + .05];\n }\n return extent;\n }\n\n public render(data, chartOptions, aggKey, highlightedSplitBy: string = null, highlightedTime: Date = null, onCellFocus, aggI: number, isOnlyAgg: boolean) {\n this.chartOptions.setOptions(chartOptions);\n this.aggKey = aggKey;\n this.data = data;\n this.isOnlyAgg = isOnlyAgg;\n\n if (aggI != null) {\n this.aggI = aggI;\n }\n\n this.heatmapData = new HeatmapData(data, aggKey);\n var container = d3.select(this.renderTarget).classed(\"tsi-heatmapCanvasWrapper\", true);\n super.themify(container, this.chartOptions.theme);\n\n if (highlightedSplitBy != null)\n this.highlightedSplitBy = highlightedSplitBy;\n this.highlightedTime = highlightedTime;\n\n if (this.highlightedSplitBy != null && this.highlightedTime) {\n if (this.heatmapData.timeValues[this.highlightedTime.toISOString()][this.highlightedSplitBy] != null) {\n this.highlightedValue = this.heatmapData.timeValues[this.highlightedTime.toISOString()][this.highlightedSplitBy].value;\n }\n }\n\n if (onCellFocus)\n this.onCellFocus = onCellFocus;\n\n if (!container.select(\"canvas\").empty())\n this.canvas = container.select(\"canvas\");\n else\n this.canvas = container.append(\"canvas\").attr(\"class\", \"tsi-heatmapCanvas\");\n\n this.width = Math.floor(container.node().getBoundingClientRect().width - this.legendWidth - 10);\n this.height = Math.floor(container.node().getBoundingClientRect().height);\n this.canvas.attr(\"width\", this.width);\n this.canvas.attr(\"height\", this.height);\n\n this.ctx = this.canvas.node().getContext(\"2d\");\n this.ctx.clearRect(0, 0, this.width, this.height);\n\n container.selectAll(\"svg\").remove();\n var self = this;\n this.canvas.on(\"mousemove\", function (event) {\n var mouseCoords = d3.pointer(event);\n var indexesChanged = false;\n var newXIndex = self.calcCellXIndex(mouseCoords[0]);\n var newYIndex = self.calcCellYIndex(mouseCoords[1]);\n var visibleSplitBys = Object.keys(self.data.displayState[aggKey].splitBys).filter((splitBy) => {\n return self.data.isSplitByVisible(self.aggKey, splitBy);\n });\n if (newXIndex != self.focusedXIndex) {\n self.focusedXIndex = newXIndex;\n indexesChanged = true;\n }\n if (newYIndex != self.focusedYIndex) {\n self.focusedYIndex = newYIndex;\n indexesChanged = true;\n }\n var highlightedSplitBy = visibleSplitBys[self.focusedYIndex];\n if (indexesChanged && self.focusedXIndex >= 0 && self.focusedYIndex >= 0) {\n var cellX = self.calcCellX(self.focusedXIndex);\n var sortedDates = Object.keys(self.heatmapData.timeValues)\n .sort((a: string, b: string): number => {\n return ((new Date(a)).valueOf() < (new Date(b)).valueOf()) ? -1 : 1;\n });\n var startDate = new Date(sortedDates[self.focusedXIndex]);\n this.highlightedTime = startDate;\n self.onCellFocus(startDate, new Date(startDate.valueOf() + self.heatmapData.bucketSize),\n Math.max(0, cellX), cellX + self.calcCellWidth(self.focusedXIndex),\n self.calcCellY(self.focusedYIndex), highlightedSplitBy);\n }\n self.render(self.data, self.chartOptions, self.aggKey, highlightedSplitBy, this.highlightedTime, self.onCellFocus, null, self.isOnlyAgg);\n }).on(\"mouseout\", function () {\n self.focusedXIndex = -1;\n self.focusedYIndex = -1;\n self.render(self.data, self.chartOptions, self.aggKey, null, null, self.onCellFocus, null, self.isOnlyAgg);\n })\n this.aggKey = aggKey;\n\n this.rawCellHeight = Math.floor(this.height / this.heatmapData.numRows);\n this.cellHeightMod = this.height % this.heatmapData.numRows;\n this.rawCellWidth = this.width / this.heatmapData.numCols;\n this.cellWidthMod = this.width % this.heatmapData.numCols;\n\n\n this.colorLegend = container.append(\"svg\").attr(\"class\", \"tsi-heatmapColorLegend\")\n this.colorLegend.attr(\"width\", this.legendWidth)\n .attr(\"height\", this.height)\n .style(\"left\", (this.width) + \"px\");\n\n var aggColor = data.displayState[aggKey].color;\n\n if (isOnlyAgg) {\n this.colorScale = d3.scaleSequential(d3.interpolateViridis).domain(this.getExtent());\n } else {\n this.colorScale = d3.scaleLinear().domain(this.getExtent())\n .range([d3.hcl(aggColor).brighter().l, d3.hcl(aggColor).darker().l]);\n }\n\n this.renderScale(aggColor, isOnlyAgg);\n\n var sortedTimes = Object.keys(this.heatmapData.timeValues).sort((a: string, b: string): number => {\n return ((new Date(a)).valueOf() < (new Date(b)).valueOf()) ? -1 : 1;\n });\n\n sortedTimes.forEach((ts, tsI) => {\n Object.keys(this.heatmapData.timeValues[ts]).forEach((splitBy, sBI) => {\n var cellData = this.heatmapData.timeValues[ts][splitBy];\n if (cellData != null) {\n if (highlightedSplitBy && highlightedSplitBy != splitBy) {\n this.drawCell(cellData.rowI, cellData.colI, cellData.value, aggColor, isOnlyAgg, true);\n } else {\n this.drawCell(cellData.rowI, cellData.colI, cellData.value, aggColor, isOnlyAgg);\n }\n }\n });\n });\n\n\n }\n\n private calcCellXIndex(x: number) {\n let xI = 0;\n while (Math.round(xI * this.rawCellWidth) < x) {\n xI++;\n }\n return Math.max(xI - 1, 0);\n }\n\n private calcCellYIndex(y) {\n if (y < (this.cellHeightMod * (this.rawCellHeight + 1)))\n return Math.floor(y / (this.rawCellHeight + 1));\n var modOffset = this.cellHeightMod * (this.rawCellHeight + 1);\n return Math.floor((y - modOffset) / this.rawCellHeight) + this.cellHeightMod;\n }\n\n private calcCellHeight(i) {\n return this.rawCellHeight + (i < this.cellHeightMod ? 1 : 0) - (this.rawCellWidth > 10 ? 1 : 0);;\n }\n\n private calcCellX(i) {\n return Math.round(this.rawCellWidth * i);\n return Math.min(i, this.cellWidthMod) + (this.rawCellWidth * i);\n }\n\n private calcCellWidth(i) {\n return (Math.round(this.rawCellWidth * (i + 1)) - Math.round(this.rawCellWidth * i) - (this.rawCellWidth > 10 ? 1 : 0));\n }\n\n private calcCellY(i) {\n return Math.min(i, this.cellHeightMod) + (this.rawCellHeight * i);\n }\n\n private drawCell(rowI, colI, value, aggColor, isOnlyAgg, outOfFocus: boolean = false) {\n var x = this.calcCellX(colI);\n var y = this.calcCellY(rowI);\n this.ctx.fillStyle = value !== null ? this.getColor(aggColor, value, isOnlyAgg) : \"transparent\";\n this.ctx.globalAlpha = outOfFocus ? .3 : 1;\n this.ctx.fillRect(this.calcCellX(colI), this.calcCellY(rowI), this.calcCellWidth(colI), this.calcCellHeight(rowI));\n }\n\n private getColor(aggColor: any, index: number, isOnlyAgg: boolean): string {\n let color: string;\n if (isOnlyAgg) {\n color = this.colorScale(index);\n } else {\n const interpolatedColorLuminance = this.colorScale(index);\n const newColor = d3.hcl(aggColor);\n newColor.l = interpolatedColorLuminance;\n color = newColor.formatHex();\n }\n return color;\n }\n}\n\nexport default HeatmapCanvas;","import * as d3 from 'd3';\nimport './Heatmap.scss';\nimport Utils from \"../../utils\";\nimport Legend from '../Legend';\nimport HeatmapCanvas from '../HeatmapCanvas';\nimport AggregateExpression from '../../models/AggregateExpression';\nimport EllipsisMenu from '../EllipsisMenu';\nimport { TemporalXAxisComponent } from '../../interfaces/TemporalXAxisComponent';\n\nclass Heatmap extends TemporalXAxisComponent {\n private lineHeight = 12;\n private splitByLabelWidth = 140;\n private heatmapWrapper: any;\n private splitByLabels: any;\n private heatmapCanvasMap: any;\n private timeLabels: any = null;\n private height: number;\n private timeLabelsHeight = 52;\n private visibleAggs = null;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n this.chartMargins = {\n top: 0,\n bottom: 8,\n left: 40,\n right: 20\n };\n }\n\n private focusOnEllipsis() {\n if (this.ellipsisContainer !== null) {\n this.ellipsisContainer.select(\".tsi-ellipsisButton\").node().focus();\n }\n }\n\n private createControlsPanel() {\n this.chartControlsPanel = Utils.createControlPanel(this.renderTarget, this.CONTROLSWIDTH, 52, this.chartOptions);\n this.ellipsisContainer = this.chartControlsPanel.append(\"div\")\n .attr(\"class\", \"tsi-ellipsisContainerDiv\");\n this.ellipsisMenu = new EllipsisMenu(this.ellipsisContainer.node());\n }\n\n private chartControlsExist() {\n return (this.ellipsisItemsExist() && !this.chartOptions.hideChartControlPanel);\n }\n\n private addTimeLabels() {\n if (this.timeLabels === null || this.svgSelection === null) {\n this.svgSelection = this.heatmapWrapper.append('svg')\n .attr('class', 'tsi-heatmapSVG')\n .attr('title', this.getString('Heatmap'));\n this.timeLabels = this.svgSelection.append('g').attr(\"class\", \"tsi-heatmapTimeLabels\")\n .attr('transform', 'translate(' + this.chartMargins.left + ',0)');\n }\n\n if (!this.chartOptions.xAxisHidden) {\n this.xAxis = this.timeLabels.selectAll(\".xAxis\").data([this.x]);\n\n this.drawXAxis(this.chartHeight - 60);\n this.xAxis.exit().remove();\n\n var xAxisBaseline = this.timeLabels.selectAll(\".xAxisBaseline\").data([this.x]);\n var xAxisBaselineEntered = xAxisBaseline.enter().append(\"line\")\n .attr(\"class\", \"xAxisBaseline\")\n .attr(\"x1\", .5)\n .merge(xAxisBaseline)\n .attr(\"y2\", this.chartHeight - (this.chartMargins.bottom + this.timeLabelsHeight))\n .attr(\"y1\", this.chartHeight - (this.chartMargins.bottom + this.timeLabelsHeight))\n .attr(\"x2\", this.chartWidth - 90);\n xAxisBaseline.exit().remove();\n }\n if (this.timeLabels.selectAll(\".xAxis\").size() !== 0) {\n this.timeLabels.selectAll(\".xAxis\").style(\"visibility\", ((!this.chartOptions.xAxisHidden) ? \"visible\" : \"hidden\"));\n }\n }\n\n public mouseover = (hoveredAggKey, hoveredSplitBy) => {\n var heatmapCanvas = this.heatmapCanvasMap[hoveredAggKey];\n if (heatmapCanvas)\n heatmapCanvas.render(this.chartComponentData, this.chartOptions, hoveredAggKey, hoveredSplitBy, null, null, null, this.visibleAggs.length === 1);\n }\n public mouseout = (selection, hoveredAggKey) => {\n var heatmapCanvas: HeatmapCanvas = this.heatmapCanvasMap[hoveredAggKey];\n if (heatmapCanvas)\n heatmapCanvas.render(this.chartComponentData, this.chartOptions, hoveredAggKey, null, null, null, null, this.visibleAggs.length === 1);\n }\n\n public render(data, chartOptions, aggregateExpressionOptions) {\n super.render(data, chartOptions, aggregateExpressionOptions);\n // override visibleSplitByCap\n this.aggregateExpressionOptions = this.aggregateExpressionOptions.map((aE: AggregateExpression) => {\n return { ...aE, visibleSplitByCap: 10000 };\n });\n this.chartOptions.setOptions(chartOptions);\n var targetElement = d3.select(this.renderTarget).classed(\"tsi-heatmapComponent\", true);\n if (targetElement.style(\"position\") == \"static\")\n targetElement.style(\"position\", \"relative\");\n\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(this.data, this.aggregateExpressionOptions);\n\n\n if (this.chartControlsExist() && this.chartControlsPanel === null) {\n this.createControlsPanel();\n } else if ((this.chartOptions.hideChartControlPanel || !this.ellipsisItemsExist()) && this.chartControlsPanel !== null) {\n this.chartControlsPanel.remove();\n this.chartControlsPanel = null;\n }\n\n if (this.chartControlsExist()) {\n this.chartControlsPanel.style(\"top\", (16 + (this.chartOptions.legend === 'compact' ? 32 : 0)) + 'px');\n this.drawEllipsisMenu();\n }\n\n if (this.heatmapWrapper == null) {\n this.heatmapWrapper = targetElement.append('div')\n .attr(\"class\", \"tsi-heatmapWrapper\");\n\n this.draw = (isFromResize = false) => {\n\n this.height = Math.floor(Math.max((<any>d3.select(this.renderTarget).node()).clientHeight, this.MINHEIGHT));\n this.chartHeight = this.height - ((12 + (this.chartControlsExist() ? 28 : 0) + (this.chartOptions.legend === 'compact' ? 48 : 0)));\n\n super.themify(targetElement, this.chartOptions.theme);\n this.width = this.getWidth();\n if (!isFromResize) {\n this.chartWidth = this.getChartWidth();\n }\n\n this.x = d3.scaleTime()\n .rangeRound([0, this.chartWidth - 90]); // HARDCODED to be the width of a heatmapCanvas\n\n var fromAndTo: any = this.chartComponentData.setAllValuesAndVisibleTAs();\n this.x.domain(fromAndTo);\n\n this.heatmapWrapper.style(\"width\", this.chartWidth + (this.chartMargins.left + this.chartMargins.right) + \"px\")\n .style(\"height\", this.chartHeight + \"px\")\n .style(\"top\", (20 + (this.chartControlsExist() ? 36 : 0) + (this.chartOptions.legend === 'compact' ? 40 : 0)) + \"px\");\n\n if (this.chartControlsExist()) {\n this.setControlsPanelWidth();\n }\n\n var canvasWrapperHeightTotal = this.chartHeight - this.timeLabelsHeight - this.chartMargins.bottom;\n this.heatmapCanvasMap = {};\n this.visibleAggs = Object.keys(this.chartComponentData.displayState).filter((aggKey) => {\n return this.chartComponentData.getAggVisible(aggKey);\n });\n\n var self = this;\n var canvasWrappers = this.heatmapWrapper.selectAll(\".tsi-heatmapCanvasWrapper\")\n .data(this.visibleAggs);\n var canvasesEntered = canvasWrappers.enter()\n .append(\"div\")\n .merge(canvasWrappers)\n .attr(\"class\", \"tsi-heatmapCanvasWrapper\")\n .style(\"width\", this.chartWidth + 'px')\n .style('left', this.chartMargins.left + 'px')\n .style(\"height\", (d, i) => {\n return (canvasWrapperHeightTotal * (1 / this.visibleAggs.length)) + \"px\"\n })\n .style(\"top\", (d, i) => {\n return ((canvasWrapperHeightTotal * (1 / this.visibleAggs.length)) * i) + \"px\";\n }).each(function (aggKey, aggI) {\n var heatmapCanvas = new HeatmapCanvas(this);\n self.heatmapCanvasMap[aggKey] = heatmapCanvas;\n var renderHeatmapCanvas = () => {\n\n function onCellFocus(focusStartTime, focusEndTime, focusX1, focusX2, focusY, splitBy) {\n let shiftMillis = self.chartComponentData.getTemporalShiftMillis(aggKey);\n self.renderTimeLabels(focusStartTime, focusEndTime, focusX1, focusX2, focusY, (aggI * canvasWrapperHeightTotal / self.visibleAggs.length), shiftMillis);\n self.legendObject.triggerSplitByFocus(aggKey, splitBy);\n self.chartOptions.onMouseover(aggKey, splitBy);\n }\n\n heatmapCanvas.render(self.chartComponentData, self.chartOptions, aggKey, null, null, onCellFocus, aggI, self.visibleAggs.length === 1);\n }\n renderHeatmapCanvas();\n }).on(\"mouseleave\", () => {\n self.timeLabels.selectAll(\".tsi-heatmapTimeLabels\").remove();\n self.legendObject.legendElement.selectAll('.tsi-splitByLabel').classed(\"inFocus\", false);\n self.chartOptions.onMouseout();\n })\n canvasWrappers.exit().remove();\n\n this.legendObject.draw(this.chartOptions.legend, this.chartComponentData, this.mouseover,\n this.heatmapWrapper, this.chartOptions, this.mouseout);\n\n //remove all the colorKeys\n this.legendObject.legendElement.selectAll(\".seriesLabel\").selectAll(\".tsi-splitByLabel\").selectAll(\".colorKey\").style(\"display\", \"none\");\n\n if (isFromResize) {\n this.addTimeLabels();\n }\n }\n this.legendObject = new Legend(this.draw, this.renderTarget, this.CONTROLSWIDTH);\n\n\n }\n this.chartComponentData.mergeDataToDisplayStateAndTimeArrays(this.data, this.aggregateExpressionOptions);\n this.draw();\n this.gatedShowGrid();\n this.addTimeLabels();\n window.addEventListener(\"resize\", () => {\n if (!this.chartOptions.suppressResizeListener) {\n this.draw();\n this.addTimeLabels();\n }\n });\n this.legendPostRenderProcess(this.chartOptions.legend, this.heatmapWrapper, true);\n }\n\n public renderTimeLabels = (focusStartTime, focusEndTime, focusX1, focusX2, focusY, yOffset, shiftMillis) => {\n this.timeLabels.selectAll(\".tsi-heatmapTimeLabels\").remove();\n this.timeLabels.node().parentNode.appendChild(this.timeLabels.node());\n\n this.timeLabels.append(\"line\").attr(\"class\", \"tsi-heatmapFocusLine tsi-heatmapTimeLabels\")\n .attr(\"x1\", focusX1)\n .attr(\"x2\", focusX1)\n .attr(\"y1\", focusY + yOffset)\n .attr(\"y2\", this.chartHeight - this.timeLabelsHeight);\n\n this.timeLabels.append(\"line\").attr(\"class\", \"tsi-heatmapFocusLine tsi-heatmapTimeLabels\")\n .attr(\"x1\", focusX2)\n .attr(\"x2\", focusX2)\n .attr(\"y1\", focusY + yOffset)\n .attr(\"y2\", this.chartHeight - this.timeLabelsHeight);\n\n var textBoxG = this.timeLabels.append(\"g\")\n .attr(\"class\", \"tsi-heatmapTimeLabelTextBox tsi-heatmapTimeLabels\");\n\n var text = textBoxG.append(\"text\");\n\n text.append(\"tspan\").text(Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, shiftMillis, null, this.chartOptions.dateLocale)(focusStartTime))\n .attr(\"x\", 0)\n .attr(\"y\", 16);\n text.append(\"tspan\").text(Utils.timeFormat(this.chartComponentData.usesSeconds, this.chartComponentData.usesMillis,\n this.chartOptions.offset, this.chartOptions.is24HourTime, shiftMillis, null, this.chartOptions.dateLocale)(focusEndTime))\n .attr(\"x\", 0)\n .attr(\"y\", 30);\n\n var textDimensions = text.node().getBoundingClientRect();\n textBoxG.append(\"rect\")\n .attr(\"x\", - (textDimensions.width / 2) - 5)\n .attr(\"y\", 0)\n .attr(\"height\", textDimensions.height + 12)\n .attr(\"width\", textDimensions.width + 10)\n\n text.node().parentNode.appendChild(text.node());\n var rawOffset = (focusX1 + focusX2) / 2;\n var leftOffset = Math.floor(((rawOffset - ((textDimensions.width / 2) + 6)) > 0) ? rawOffset : ((textDimensions.width / 2) + 6));\n textBoxG.attr(\"transform\", \"translate(\" + leftOffset + \",\" + (this.chartHeight - this.timeLabelsHeight - this.chartMargins.bottom) + \")\");\n }\n}\n\nexport default Heatmap","class TimeSeriesEventCell {\n public key: string;\n public name: string;\n public type: string;\n public value: any;\n\n\tconstructor(name: string, value: any, type: string = null){\n this.key = name + \"_\" + type;\n this.name = name;\n this.type = type;\n this.value = value;\n }\n}\nexport {TimeSeriesEventCell}","import Utils from \"../utils\";\nimport { TimeSeriesEventCell } from \"./TimeSeriesEventCell\";\n\nclass TimeSeriesEvent {\n public cells = {};\n\n constructor(rawEvent, offset = null, offsetName: string = null, locale: string = 'en') {\n\n if (offset !== null) {\n let type = 'DateTime';\n let utcOffsetDate = Utils.offsetUTC(new Date(Date.parse(rawEvent['timestamp ($ts)'].split(\"Z\").join(\"\"))));\n rawEvent[offsetName + \"_\" + type] = {\n name: offsetName,\n value: () => Utils.timeFormat(true, true, offset, true, null, null, locale)(utcOffsetDate),\n type: type\n };\n }\n this.cells = Object.keys(rawEvent).reduce((cellObj, propId) => {\n var cell: TimeSeriesEventCell;\n if (propId == \"timestamp ($ts)\")\n cell = new TimeSeriesEventCell('timestamp ($ts)', rawEvent[propId], 'DateTime');\n else {\n cell = new TimeSeriesEventCell(rawEvent[propId]['name'], rawEvent[propId]['value'], rawEvent[propId]['type']);\n }\n cellObj[cell.key] = cell;\n return cellObj;\n }, {});\n }\n}\nexport { TimeSeriesEvent }","import Utils from \"../utils\";\nimport { valueTypes } from \"./../constants/Enums\";\nimport { TimeSeriesEvent } from \"./TimeSeriesEvent\";\n\nclass EventsTableData {\n public columns = {};\n public rows = [];\n public events: Array<TimeSeriesEvent> = [];\n private timestampColumnKey = \"timestamp ($ts)_DateTime\"\n private offsetName = null;\n private maxVisibleToStart = 10;\n private offsetNameCache = {};\n private timeSeriesIdProperties: Array<{ name: string, type: any }> = [];\n\n constructor() {\n\n }\n\n private createOffsetName(offset) {\n if (offset in this.offsetNameCache) {\n return this.offsetNameCache[offset];\n }\n var offsetSubstring = \"\";\n if ((typeof offset) === 'string') {\n offsetSubstring = Utils.convertTimezoneToLabel(offset);\n } else {\n offsetSubstring = Utils.formatOffsetMinutes(offset);\n }\n let offsetName = \"timestamp \" + offsetSubstring;\n this.offsetNameCache[offset] = offsetName;\n return offsetName;\n }\n\n public sortColumnKeys() {\n let columnKeys = Object.keys(this.columns);\n let existingTsidColumnKeys = Object.values(this.columns).filter(c => c['isTsid']).map(c => c['key']); // detect existing time series id properties in column keys\n columnKeys = existingTsidColumnKeys.concat(columnKeys.filter(c => !existingTsidColumnKeys.includes(c))); // put these time series id properties to the beginning of the column key list\n let offsetKey = this.offsetName + \"_DateTime\";\n\n let lessTimestamps = columnKeys.filter((columnKey) => {\n return (columnKey !== this.timestampColumnKey && columnKey !== offsetKey);\n });\n let timestamps = [];\n if (columnKeys.indexOf(this.timestampColumnKey) !== -1)\n timestamps.push(this.timestampColumnKey);\n if (columnKeys.indexOf(offsetKey) !== -1)\n timestamps.push(offsetKey);\n\n return timestamps.concat(lessTimestamps);\n }\n\n public setEvents(rawEvents, fromTsx, timeSeriesIdProperties, offset = null) {\n this.timeSeriesIdProperties = timeSeriesIdProperties;\n this.events = [];\n rawEvents.forEach((rawEvent) => {\n if (!fromTsx) {\n rawEvent = Object.keys(rawEvent).reduce((newEventMap, currColName) => {\n newEventMap[currColName] = {\n name: currColName,\n value: rawEvent[currColName]\n };\n return newEventMap;\n }, {});\n }\n if (offset !== null) {\n this.offsetName = this.createOffsetName(offset);\n }\n var event = new TimeSeriesEvent(rawEvent, offset, (offset !== null ? this.offsetName : null));\n this.events.push(event);\n });\n this.constructColumns();\n }\n\n public sortEvents(columnKey, isAscending) {\n var sortType = this.columns[columnKey].type;\n var aTop = 1;\n var bTop = -1;\n if (!isAscending) {\n aTop = -1;\n bTop = 1;\n }\n this.events.sort((a: TimeSeriesEvent, b: TimeSeriesEvent) => {\n if ((a.cells && a.cells[columnKey]) || (b.cells && b.cells[columnKey])) {\n var aConverted = (a.cells && a.cells[columnKey]) ? a.cells[columnKey].value : null;\n var bConverted = (b.cells && b.cells[columnKey]) ? b.cells[columnKey].value : null;\n\n //one value is null\n if (aConverted == null)\n return bTop;\n if (bConverted == null)\n return aTop;\n\n //convert to appropriate type\n if (sortType == \"Double\") {\n aConverted = Number(aConverted);\n bConverted = Number(bConverted);\n }\n else if (sortType == \"DateTime\") {\n aConverted = (new Date(aConverted)).valueOf();\n bConverted = (new Date(bConverted)).valueOf();\n }\n\n //compare\n if (aConverted > bConverted)\n return aTop;\n if (aConverted < bConverted)\n return bTop;\n return 0;\n }\n return 0;\n });\n }\n\n public constructColumns() {\n var timeSeriesIdPropertyKeys = this.timeSeriesIdProperties.map(p => `${p.name}_${p.type}`);\n var newColumns = {};\n this.events.forEach((event: TimeSeriesEvent) => {\n Object.keys(event.cells).forEach((cellKey: string) => {\n var cell = event.cells[cellKey];\n if (this.columns[cell.key] == null) {\n newColumns[cell.key] = {\n key: cell.key,\n name: cell.name,\n visible: true,\n type: cell.type,\n isTsid: timeSeriesIdPropertyKeys.includes(cell.key)\n }\n } else {\n newColumns[cell.key] = this.columns[cell.key];\n }\n })\n });\n var visibleColumnCounter = Object.values(newColumns).filter(c => c['isTsid']).length;\n Object.keys(newColumns).forEach(columnKey => {\n if (newColumns[columnKey].isTsid) {\n newColumns[columnKey].visible = true;\n } else {\n newColumns[columnKey].visible = visibleColumnCounter < this.maxVisibleToStart;\n visibleColumnCounter++\n }\n });\n this.columns = newColumns;\n }\n\n public generateCSVString(includeAllColumns: boolean = true, offset: number = 0): string {\n //replace comma at end of line with end line character\n var endLine = (s: string): string => {\n return s.slice(0, s.length - 1) + \"\\n\";\n }\n let columnKeys = this.sortColumnKeys();\n var csvString = endLine(columnKeys.reduce((headerString, columnKey) => {\n return headerString + Utils.sanitizeString(columnKey, valueTypes.String) + \",\";\n }, \"\"));\n\n this.events.forEach((event: TimeSeriesEvent) => {\n csvString += endLine(columnKeys.reduce((lineString, columnKey) => {\n let value = (event.cells[columnKey] ? (typeof (event.cells[columnKey].value) === 'function' ? event.cells[columnKey].value() : event.cells[columnKey].value) : null);\n return lineString + ((event.cells[columnKey] != null && Utils.sanitizeString(value, event.cells[columnKey].type) !== null) ?\n Utils.sanitizeString(value, event.cells[columnKey].type) : \"\") + \",\"\n }, \"\"));\n });\n return csvString;\n }\n\n}\nexport { EventsTableData }\n","import * as d3 from 'd3';\nimport './EventsTable.scss';\nimport Utils from \"../../utils\";\nimport { ChartComponent } from '../../interfaces/ChartComponent';\nimport { EventsTableData } from '../../models/EventsTableData';\nimport { TimeSeriesEvent } from '../../models/TimeSeriesEvent';\nimport { TimeSeriesEventCell } from '../../models/TimeSeriesEventCell';\n\nclass EventsTable extends ChartComponent {\n\n private eventsTable;\n private eventsLegend;\n private headers;\n\n private maxVisibleIndex = 100;\n private isAscending = true;\n private timestampColumnName = 'timestamp ($ts)';\n private sortColumn = 'timestamp ($ts)';\n private allSelectedState = \"all\" // all | some | none\n\n private eventsTableData = new EventsTableData();\n\n private margins = {\n left: 10,\n right: 10\n }\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n EventsTable() {\n }\n\n public renderFromEventsTsx(eventsFromTsx: any, chartOptions: any) {\n this.render(eventsFromTsx, chartOptions, true);\n }\n\n public render(events: any, chartOptions: any, fromTsx: boolean = false) {\n this.chartOptions.setOptions(chartOptions);\n this.maxVisibleIndex = 100;\n this.eventsTableData.setEvents(events, fromTsx, this.chartOptions.timeSeriesIdProperties, chartOptions.offset);\n\n var componentContainer = d3.select(this.renderTarget)\n .classed(\"tsi-tableComponent\", true);\n super.themify(componentContainer, this.chartOptions.theme);\n var tableLeftPanel;\n if (this.eventsTable == null) {\n tableLeftPanel = componentContainer.append(\"div\")\n .classed(\"tsi-tableLeftPanel\", true);\n this.eventsLegend = tableLeftPanel.append(\"div\")\n .classed(\"tsi-tableLegend\", true);\n this.eventsLegend.append(\"ul\");\n this.eventsTable = componentContainer.append(\"div\")\n .classed(\"tsi-eventsTable\", true);\n this.eventsTable.append(\"div\").classed(\"tsi-columnHeaders\", true);\n var table = this.eventsTable.append(\"div\").classed(\"tsi-eventRowsContainer\", true)\n .append(\"table\").classed(\"tsi-eventRows\", true);\n table.append(\"tr\");\n } else {\n tableLeftPanel = componentContainer.select(\"tsi-tableLeftPanel\");\n }\n this.renderLegend();\n this.buildTable();\n\n tableLeftPanel.selectAll(\".tsi-eventsDownload\").remove();\n var downloadButton = tableLeftPanel.append(\"button\")\n .attr(\"class\", \"tsi-eventsDownload tsi-primaryButton\")\n .attr(\"aria-label\", this.getString(\"Download as CSV\"))\n .on(\"click\", function () {\n this.classList.add('tsi-downloading');\n setTimeout(() => {\n Utils.downloadCSV(self.eventsTableData.generateCSVString(true, 0), \"Events\")\n this.classList.remove('tsi-downloading');\n }, 100);\n });\n downloadButton.append(\"div\").attr(\"class\", \"tsi-downloadEventsIcon\");\n downloadButton.append(\"div\").attr(\"class\", \"tsi-downloadEventsText\").text(this.getString(\"Download as CSV\"));\n\n\n //listen for table scroll and adjust the headers accordingly\n var self = this;\n\n this.eventsTable.select('.tsi-eventRowsContainer').node().scrollLeft = 0;\n this.eventsTable.select('.tsi-eventRowsContainer').node().scrollTop = 0;\n\n this.eventsTable.select('.tsi-eventRowsContainer').node().addEventListener('scroll', function (evt) {\n self.eventsTable.select('.tsi-columnHeaders').node().scrollLeft = this.scrollLeft;\n //check to see if need to infiniteScroll\n if ((this.scrollTop + this.clientHeight) > (this.scrollHeight - 100)) {\n let oldVisibleIndex = self.maxVisibleIndex\n self.maxVisibleIndex += (Math.min(100, self.eventsTableData.events.length - self.maxVisibleIndex));\n if (self.maxVisibleIndex != oldVisibleIndex)\n self.buildTable();\n }\n }, false);\n }\n\n public renderLegend() {\n this.eventsLegend.html(\"\");\n this.eventsLegend.append(\"ul\");\n\n var columns = this.eventsTableData.sortColumnKeys()\n .map((cIdx) => this.eventsTableData.columns[cIdx]);\n\n this.setSelectAllState();\n if (columns.length > 2) { // tristate - all selected\n var selectAllColumns = this.eventsLegend.select(\"ul\")\n .append(\"li\").attr(\"class\", \"tsi-selectAllColumns\");\n selectAllColumns.append(\"button\").attr(\"class\", \"tsi-columnToggleButton\")\n .attr(\"aria-label\", () => {\n var selectAllState = this.getSelectAllState();\n return selectAllState !== \"all\" ? this.getString(\"Toggle all columns\") : this.getString(\"Toggle all columns\");\n })\n .on(\"click\", () => {\n var setAllVisible: boolean = false;\n var selectAllState = this.getSelectAllState();\n if (selectAllState != \"all\") {\n setAllVisible = true;\n }\n Object.keys(this.eventsTableData.columns).forEach((columnKey) => {\n if (setAllVisible) {\n this.eventsTableData.columns[columnKey].visible = true;\n } else {\n if (columnKey != this.timestampColumnName)\n this.eventsTableData.columns[columnKey].visible = false;\n }\n\n });\n this.setLegendColumnStates();\n this.buildTable();\n });\n selectAllColumns.append(\"span\").attr(\"class\", \"tsi-columnToggleCheckbox\");\n selectAllColumns.append(\"span\").attr(\"class\", \"tsi-selectAllSomeState\");\n selectAllColumns.append(\"span\").attr(\"class\", \"tsi-columnToggleName\")\n .text(this.getString(\"All Columns\"));\n }\n var toggleableColumnLis = this.eventsLegend.select(\"ul\").selectAll(\".tsi-columnToggle\")\n .data(columns);\n\n var toggleableColumnLisEntered = toggleableColumnLis.enter()\n .append(\"li\")\n .classed(\"tsi-columnToggle\", true)\n .merge(toggleableColumnLis)\n var self = this;\n toggleableColumnLisEntered.each(function (d) {\n d3.select(this).append(\"button\").attr(\"class\", \"tsi-columnToggleButton\")\n .attr(\"aria-label\", (d: any) => \"toggle column \" + d.key)\n .on(\"click\", (event, d: any) => {\n d.visible = !d.visible;\n self.setLegendColumnStates();\n self.buildTable();\n });\n d3.select(this).append(\"div\").attr(\"class\", \"tsi-columnToggleCheckbox\");\n if (d.isTsid) {\n let typeIconCOntainer = d3.select(this).append(\"div\").attr(\"class\", \"tsi-columnTypeIcons\");\n typeIconCOntainer.append(\"span\").attr(\"class\", \"tsi-columnTypeIcon\")\n .classed(\"tsid\", true).attr(\"title\", self.getString(\"Time Series ID\"));\n typeIconCOntainer.append(\"span\").attr(\"class\", \"tsi-columnTypeIcon\")\n .classed(d.type, true);\n } else {\n d3.select(this).append(\"div\").attr(\"class\", \"tsi-columnTypeIcon\")\n .classed(d.type, true);\n }\n d3.select(this).select(\"button\").append(\"div\").attr(\"class\", \"tsi-onlyLabel\").text(self.getString(\"only\"))\n .attr('tabindex', \"0\")\n .attr('role', 'button')\n .on(\"click\", (event, d: any) => {\n event.stopPropagation();\n columns.forEach((column: any) => {\n if (column.key == d.key)\n column.visible = true;\n else\n column.visible = false;\n });\n self.setLegendColumnStates();\n self.buildTable();\n })\n d3.select(this).append(\"div\").attr(\"class\", \"tsi-columnToggleName\").classed('tsidPropertyName', (d: any) => d.isTsid).text((d: any) => columns.filter(c => c.name === d.name).length > 1 ? `${d.name} (${d.type})` : d.name);\n });\n this.setLegendColumnStates();\n toggleableColumnLis.exit().remove();\n }\n public setLegendColumnStates() {\n if (this.eventsLegend.select(\"ul\")) {\n this.eventsLegend.select(\"ul\").selectAll(\".tsi-columnToggle\").each(function () {\n d3.select(this).select(\".tsi-columnToggleCheckbox\").classed(\"tsi-notSelected\",\n (d: any) => !(d.visible));\n })\n }\n this.setSelectAllState();\n }\n\n public getSelectAllState() {\n var selectAllState: string = Object.keys(this.eventsTableData.columns).reduce((prev, curr: any) => {\n if (curr == this.timestampColumnName) // skip timestamp, will always be visible\n return prev;\n if (prev == null)\n return (this.eventsTableData.columns[curr].visible) ? \"all\" : \"none\";\n if (prev == \"some\")\n return \"some\";\n return (prev == (this.eventsTableData.columns[curr].visible ? \"all\" : \"none\")) ? prev : \"some\"\n }, null);\n\n if (selectAllState == null)\n selectAllState = \"none\";\n\n return selectAllState;\n }\n\n public setSelectAllState() {\n var selectAllState: string = this.getSelectAllState();\n let selectAllColumns = this.eventsLegend.select(\"ul\").select(\".tsi-selectAllColumns\");\n selectAllColumns.select(\".tsi-columnToggleCheckbox\")\n .classed(\"tsi-notSelected\", () => selectAllState !== \"all\");\n selectAllColumns.select(\".tsi-columnToggleButton\")\n .attr(\"aria-label\", (selectAllState !== \"all\" ? this.getString(\"Toggle all columns on\") : this.getString(\"Toggle all columns off\")));\n this.eventsLegend.select(\"ul\").select(\".tsi-selectAllColumns\").select(\".tsi-selectAllSomeState\")\n .style(\"visibility\", () => (selectAllState == \"some\") ? \"visible\" : \"hidden\");\n }\n\n private getFilteredColumnKeys() {\n return this.eventsTableData.sortColumnKeys().filter((columnKey: string) => {\n return this.eventsTableData.columns[columnKey].visible;\n });\n }\n\n //creates columnHeaders, returns a dictionary of widths so that buildTable can know the min width of each column\n private buildHeaders(filteredColumnKeys, focusedHeader = null) {\n let longAndDoubleExist = (propertyKey) => {\n let propertyName = this.eventsTableData.columns[propertyKey].name;\n return this.eventsTableData.columns.hasOwnProperty(propertyName + \"_Long\") && this.eventsTableData.columns.hasOwnProperty(propertyName + \"_Double\")\n }\n\n this.eventsTable.select(\".tsi-columnHeaders\").html(\"\");\n var self = this;\n var columnHeaders = this.eventsTable.select(\".tsi-columnHeaders\").selectAll(\".tsi-columnHeader\")\n .data(filteredColumnKeys);\n var isOffsetDateTimeColumn = (d: string) => d.includes('timestamp') && (d.includes('') || d.includes('-')) && !d.includes('$ts') ? true : null\n var columnHeadersEntered = columnHeaders.enter()\n .append(\"div\")\n .classed(\"tsi-columnHeader\", true)\n .classed(\"tsi-columnHeaderDisabled\", isOffsetDateTimeColumn)\n .each(function (d: string) {\n d3.select(this).append(\"span\")\n .classed(\"tsi-columnHeaderName\", true)\n .classed(\"moreMarginRight\", (d: any) => self.eventsTableData.columns[d].isTsid)\n .text(longAndDoubleExist(d) ? `${self.eventsTableData.columns[d].name} (${self.eventsTableData.columns[d].type})` : self.eventsTableData.columns[d].name);\n d3.select(this).append(\"span\").attr(\"class\", \"tsi-columnSortIcon\").classed(\"moreRight\", self.eventsTableData.columns[d].isTsid)\n .classed(\"up\", (self.sortColumn == d && self.isAscending))\n .classed(\"down\", (self.sortColumn == d && !self.isAscending));\n if (self.eventsTableData.columns[d].isTsid) {\n let typeIconContainer = d3.select(this).append(\"div\").attr(\"class\", \"tsi-columnTypeIcons\");\n typeIconContainer.append(\"span\").attr(\"class\", \"tsi-columnTypeIcon\")\n .classed(\"tsid\", true).attr(\"title\", self.getString(\"Time Series ID\"));\n typeIconContainer.append(\"span\").attr(\"class\", \"tsi-columnTypeIcon\")\n .classed(self.eventsTableData.columns[d].type, true);\n } else {\n d3.select(this).append(\"span\").attr(\"class\", \"tsi-columnTypeIcon\")\n .classed(self.eventsTableData.columns[d].type, true);\n }\n var id = JSON.parse(JSON.stringify(d));\n d3.select(this).append(\"button\").attr(\"class\", \"tsi-sortColumnButton\")\n .attr(\"aria-label\", title => \"Sort by column \" + title)\n .on(\"click\", function (event, f) {\n //set sort column and direction\n if (self.sortColumn == d) {\n self.isAscending = !self.isAscending;\n } else {\n self.isAscending = false;\n }\n self.sortColumn = d;\n\n self.eventsTableData.sortEvents(d, self.isAscending);\n self.buildTable(f);\n self.eventsTable.select('.tsi-columnHeaders').node().scrollLeft =\n self.eventsTable.select('.tsi-eventRowsContainer').node().scrollLeft;\n\n })\n .attr(\"disabled\", isOffsetDateTimeColumn);\n });\n var widthDictionary = {};\n columnHeadersEntered.each(function (d) {\n widthDictionary[d] = d3.select(this).node().getBoundingClientRect().width;\n })\n columnHeaders.exit().remove();\n\n if (focusedHeader !== null) {\n let columnHeader = d3.select(columnHeadersEntered.filter((d) => {\n return d === focusedHeader;\n }).nodes()[0]);\n\n if (columnHeader) {\n (<any>columnHeader.select(\"button\").node()).focus();\n }\n }\n\n return widthDictionary;\n }\n\n private adjustHeaderWidth(widthDictionary) {\n //set the width to fit inside the container less the scroll bar\n var tableSelection = this.eventsTable.select('.tsi-eventRowsContainer').node();\n var scrollBarWidthDiff = tableSelection.getBoundingClientRect().width - tableSelection.clientWidth;\n this.eventsTable.select(\".tsi-columnHeaders\").style(\"width\", \"calc(100% - \" + scrollBarWidthDiff + \"px)\");\n\n this.eventsTable.select(\".tsi-columnHeaders\").selectAll(\".tsi-columnHeader\")\n .style(\"width\", function (d) {\n if (widthDictionary[d])\n return (widthDictionary[d] - 17) + \"px\"; //17 pixel difference in element due to padding/border\n else {\n return d3.select(this).style(\"width\");\n }\n })\n }\n\n private buildTable(currentSortedCol = null) {\n var filteredColumnKeys = this.getFilteredColumnKeys();\n var widthDictionary = this.buildHeaders(filteredColumnKeys, currentSortedCol);\n this.eventsTable.select(\"table\").html(\"\");\n var self = this;\n var rowsData = this.eventsTableData.events.slice(0, this.maxVisibleIndex);\n var firstRow = this.eventsTable.select(\"table\").append(\"tr\")\n .classed(\"tsi-eventRow\", true);\n var firstRowCells = firstRow.selectAll(\"td\").data(filteredColumnKeys);\n firstRowCells.enter()\n .append(\"td\")\n .classed(\"tsi-eventCell\", true)\n .text(d => this.eventsTableData.columns[d].name);\n var rows = this.eventsTable.select(\"table\").selectAll(\"tsi-eventRow\").data(rowsData);\n var rowsEntered = rows.enter()\n .append(\"tr\")\n .classed(\"tsi-eventRow\", true)\n .merge(rows)\n .each(function (event: TimeSeriesEvent) {\n var visibleCells = filteredColumnKeys.map((columnKey: string) => {\n if (event.cells[columnKey])\n return event.cells[columnKey]\n return { key: columnKey, value: null };\n });\n var valueCells = d3.select(this).selectAll(\"td\").data(visibleCells);\n var valueCellsEntered = valueCells.enter()\n .append(\"td\")\n .classed(\"tsi-eventCell\", true)\n .style(\"min-width\", (d: TimeSeriesEventCell) => {\n if (widthDictionary[d.key] != null)\n return Math.ceil(widthDictionary[d.key]) + \"px\";\n else\n return \"none\";\n })\n .text((d: TimeSeriesEventCell) => {\n return self.formatValue(d.value, d.type);\n });\n valueCells.exit().remove();\n });\n if (rowsEntered.size() > 0) {\n var firstRow = rowsEntered.filter(function (d, i) { return i === 0; })\n firstRow.selectAll(\"td\").each(function (d) {\n var cellWidth = d3.select(this).node().getBoundingClientRect().width;\n widthDictionary[d.key] = (cellWidth > widthDictionary[d.key]) ? cellWidth : widthDictionary[d.key];\n });\n }\n rows.exit().remove();\n this.adjustHeaderWidth(widthDictionary);\n }\n\n private formatValue(value, type) {\n if (type === 'Dynamic') {\n return JSON.stringify(value);\n }\n if (type !== 'DateTime' || value === null || value === undefined) {\n return value;\n }\n if (typeof (value) === 'function') {\n return value();\n }\n let timeFormatFunction = Utils.timeFormat(true, true, 0, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale);\n let dateValue = new Date(value.split(\"Z\").join(\"\"));\n return timeFormatFunction(Utils.offsetUTC(dateValue));\n }\n}\n\nexport default EventsTable\n","import * as d3 from \"d3\";\nimport \"./ModelAutocomplete.scss\";\nimport \"awesomplete\";\nimport { Component } from \"../../interfaces/Component\";\nimport { ChartOptions } from \"../../models/ChartOptions\";\nimport Utils from \"../../utils\";\n\nclass ModelAutocomplete extends Component {\n public chartOptions: any = new ChartOptions(); // TODO handle onkeyup and oninput in chart options\n public ap: any; // awesomplete object \n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n public render(environmentFqdn: string, getToken: any, chartOptions: any) {\n this.chartOptions.setOptions(chartOptions);\n let targetElement = d3.select(this.renderTarget);\n targetElement.html(\"\");\n let wrapper = targetElement\n .append(\"div\")\n .attr(\"class\", \"tsi-modelAutocompleteWrapper\");\n super.themify(wrapper, this.chartOptions.theme);\n let inputWrapper = wrapper.append(\"div\").attr(\"class\", \"tsi-search\");\n inputWrapper.append(\"i\").classed(\"tsi-search-icon\", true);\n let input = inputWrapper\n .append(\"input\")\n .attr(\"class\", \"tsi-searchInput\")\n .attr(\"aria-label\", this.getString(\"Search Time Series Instances\"))\n .attr(\"aria-describedby\", \"tsi-search-desc\")\n .attr(\"role\", \"combobox\")\n .attr(\"aria-owns\", \"tsi-search-results\")\n .attr(\"aria-expanded\", \"false\")\n .attr(\"aria-haspopup\", \"listbox\")\n .attr(\n \"placeholder\",\n this.getString(\"Search Time Series Instances\") + \"...\"\n );\n let clear = inputWrapper\n .append(\"div\")\n .attr(\"class\", \"tsi-clear\")\n .attr(\"tabindex\", \"0\")\n .attr(\"role\", \"button\")\n .attr(\"aria-label\", \"Clear Search\")\n .on(\"click keydown\", function (event) {\n if (Utils.isKeyDownAndNotEnter(event)) {\n return;\n }\n (input.node() as any).value = \"\";\n noSuggest = true;\n input.dispatch(\"input\");\n self.ap.close();\n d3.select(this).classed(\"tsi-shown\", false);\n });\n inputWrapper\n .append(\"span\")\n .attr(\"id\", \"tsi-search-desc\")\n .style(\"display\", \"none\")\n .text(this.getString(\"Search suggestion instruction\"));\n inputWrapper\n .append(\"div\")\n .attr(\"class\", \"tsi-search-results-info\")\n .attr(\"aria-live\", \"assertive\");\n\n let Awesomplete = (window as any).Awesomplete;\n this.ap = new Awesomplete(input.node(), { minChars: 1 });\n let noSuggest = false;\n let justAwesompleted = false;\n (input.node() as any).addEventListener(\n \"awesomplete-selectcomplete\",\n (event) => {\n noSuggest = true;\n input.dispatch(\"input\");\n this.ap.close();\n justAwesompleted = true;\n }\n );\n input.on(\"keydown\", (event) => {\n this.chartOptions.onKeydown(event, this.ap);\n });\n\n (input.node() as any).addEventListener(\"keyup\", function (event) {\n if (justAwesompleted) {\n justAwesompleted = false;\n return;\n }\n let key = event.which || event.keyCode;\n if (key === 13) {\n noSuggest = true;\n input.dispatch(\"input\");\n }\n });\n\n var searchText;\n var self = this;\n\n input.on(\"input\", function (event) {\n searchText = (<any>this).value;\n if (searchText.replace(/ /g, \"\") && !noSuggest) {\n\n } else {\n self.ap.close();\n }\n self.chartOptions.onInput(searchText, noSuggest ? { which: 13 } : event);\n noSuggest = false;\n clear.classed(\"tsi-shown\", searchText.length);\n });\n }\n}\n\nexport default ModelAutocomplete;\n","import * as d3 from \"d3\";\nimport \"./ModelSearch.scss\";\nimport Utils from \"../../utils\";\nimport { Component } from \"./../../interfaces/Component\";\nimport \"awesomplete\";\nimport Hierarchy from \"../Hierarchy/Hierarchy\";\nimport ModelAutocomplete from \"../ModelAutocomplete/ModelAutocomplete\";\n\nclass ModelSearch extends Component {\n private hierarchies;\n private clickedInstance;\n private wrapper;\n private types;\n private instanceResults;\n private usedContinuationTokens = {};\n private contextMenu;\n private currentResultIndex = -1;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n d3.select(\"html\").on(\"click.\" + Utils.guid(), (event) => {\n if (\n this.clickedInstance &&\n event.target != this.clickedInstance &&\n this.contextMenu\n ) {\n this.closeContextMenu();\n this.clickedInstance = null;\n }\n });\n }\n\n ModelSearch() { }\n\n public render(\n environmentFqdn: string,\n getToken: any,\n hierarchyData: any,\n chartOptions: any\n ) {\n this.chartOptions.setOptions(chartOptions);\n let self = this;\n let continuationToken, searchText;\n let targetElement = d3.select(this.renderTarget);\n targetElement.html(\"\");\n this.wrapper = targetElement\n .append(\"div\")\n .attr(\"class\", \"tsi-modelSearchWrapper\");\n super.themify(this.wrapper, this.chartOptions.theme);\n let inputWrapper = this.wrapper\n .append(\"div\")\n .attr(\"class\", \"tsi-modelSearchInputWrapper\");\n\n let autocompleteOnInput = (st, event) => {\n self.usedContinuationTokens = {};\n\n // blow results away if no text\n if (st.length === 0) {\n searchText = st;\n self.instanceResults.html(\"\");\n self.currentResultIndex = -1;\n (hierarchyElement.node() as any).style.display = \"block\";\n (showMore.node() as any).style.display = \"none\";\n noResults.style(\"display\", \"none\");\n } else if (event.which === 13 || event.keyCode === 13) {\n (hierarchyElement.node() as any).style.display = \"none\";\n self.instanceResults.html(\"\");\n self.currentResultIndex = -1;\n noResults.style(\"display\", \"none\");\n searchInstances(st);\n searchText = st;\n }\n };\n\n let modelAutocomplete = new ModelAutocomplete(inputWrapper.node());\n modelAutocomplete.render(environmentFqdn, getToken, {\n onInput: autocompleteOnInput,\n onKeydown: (event, ap) => {\n this.handleKeydown(event, ap);\n },\n ...chartOptions,\n });\n var ap = modelAutocomplete.ap;\n\n let results = this.wrapper\n .append(\"div\")\n .attr(\"class\", \"tsi-modelSearchResults\")\n .on(\"scroll\", function () {\n self.closeContextMenu();\n let that = this as any;\n if (\n that.scrollTop + that.clientHeight + 150 >\n (self.instanceResults.node() as any).clientHeight &&\n searchText.length !== 0\n ) {\n searchInstances(searchText, continuationToken);\n }\n });\n let noResults = results\n .append(\"div\")\n .text(this.getString(\"No results\"))\n .classed(\"tsi-noResults\", true)\n .style(\"display\", \"none\");\n let instanceResultsWrapper = results\n .append(\"div\")\n .attr(\"class\", \"tsi-modelSearchInstancesWrapper\");\n this.instanceResults = instanceResultsWrapper\n .append(\"div\")\n .attr(\"class\", \"tsi-modelSearchInstances\");\n let showMore = instanceResultsWrapper\n .append(\"div\")\n .attr(\"class\", \"tsi-showMore\")\n .text(this.getString(\"Show more\") + \"...\")\n .on(\"click\", () => searchInstances(searchText, continuationToken))\n .style(\"display\", \"none\");\n\n let hierarchyElement = this.wrapper\n .append(\"div\")\n .attr(\"class\", \"tsi-hierarchyWrapper\");\n let hierarchy = new Hierarchy(hierarchyElement.node() as any);\n hierarchy.render(hierarchyData, {\n ...this.chartOptions,\n withContextMenu: true,\n });\n\n let searchInstances = (searchText, ct = null) => {\n var self = this;\n if (ct === \"END\") return;\n if (ct === null || !self.usedContinuationTokens[ct]) {\n self.usedContinuationTokens[ct] = true;\n }\n };\n\n getToken().then((token) => {\n\n });\n\n // get types\n getToken().then((token) => {\n\n });\n }\n\n public handleKeydown(event, ap) {\n if (!ap.isOpened) {\n let results = this.instanceResults.selectAll(\".tsi-modelResultWrapper\");\n if (results.size()) {\n if (\n event.keyCode === 40 &&\n this.currentResultIndex < results.nodes().length - 1\n ) {\n this.currentResultIndex++;\n results.nodes()[this.currentResultIndex].focus();\n } else if (event.keyCode === 38) {\n this.currentResultIndex--;\n if (this.currentResultIndex <= -1) {\n this.currentResultIndex = -1;\n ap.input.focus();\n } else {\n results.nodes()[this.currentResultIndex].focus();\n }\n }\n }\n }\n }\n\n private closeContextMenu() {\n if (this.contextMenu) {\n this.contextMenu.remove();\n }\n d3.selectAll(\".tsi-resultSelected\").classed(\"tsi-resultSelected\", false);\n }\n\n private stripHits = (str) => {\n return str\n .split(\"<hit>\")\n .map((h) =>\n h\n .split(\"</hit>\")\n .map((h2) => Utils.strip(h2))\n .join(\"</hit>\")\n )\n .join(\"<hit>\");\n };\n\n private getInstanceHtml(i) {\n return `<div class=\"tsi-modelResult\">\n <div class=\"tsi-modelPK\">\n ${i.highlights.name\n ? this.stripHits(i.highlights.name)\n : this.stripHits(\n i.highlights.timeSeriesIds\n ? i.highlights.timeSeriesIds.join(\" \")\n : i.highlights.timeSeriesId.join(\" \")\n )\n }\n </div>\n <div class=\"tsi-modelHighlights\">\n ${this.stripHits(\n i.highlights.description &&\n i.highlights.description.length\n ? i.highlights.description\n : this.getString(\"No description\")\n )}\n <br/><table>\n ${i.highlights.name\n ? \"<tr><td>\" +\n this.getString(\"Time Series ID\") +\n \"</td><td>\" +\n this.stripHits(\n i.highlights.timeSeriesIds\n ? i.highlights.timeSeriesIds.join(\" \")\n : i.highlights.timeSeriesId.join(\" \")\n ) +\n \"</td></tr>\"\n : \"\"\n } \n ${i.highlights.instanceFieldNames\n .map((ifn, idx) => {\n var val = i.highlights.instanceFieldValues[idx];\n if (\n ifn.indexOf(\"<hit>\") !== -1 ||\n val.indexOf(\"<hit>\") !== -1\n ) {\n return val.length === 0\n ? \"\"\n : \"<tr><td>\" +\n this.stripHits(ifn) +\n \"</td><td>\" +\n this.stripHits(val) +\n \"</tr>\";\n }\n })\n .join(\"\")}\n </table>\n </div>\n </div>`;\n }\n}\n\nexport default ModelSearch;\n","import Utils from \"../utils\";\nimport { ChartDataOptions } from \"./ChartDataOptions\";\n\nclass TsqExpression extends ChartDataOptions {\n private instanceObject: any;\n private variableObject: any;\n\n constructor(instanceObject: any, variableObject: any, searchSpan: any,\n colorOrOptionsObject: any, alias?: string, contextMenu?: Array<any>) {\n // This constructor should be called with the following parameters: \n // new TsqExpression(instanceObject, variableObject, searchSpan, optionsObject)\n // where the optionsObject should contain properties for color, alias, and contextMenu.\n //\n // However, to maintain backwards compatibility with older code, the constructor still \n // accepts the older set of parameters:\n // new TsqExpression(instanceObject, variableObject, searchSpan, color, alias, contextMenu)\n // Here we differentiate between both and call the parent class's constructor as appropriate.\n let optionsObject = (typeof (colorOrOptionsObject) === 'object' && !!colorOrOptionsObject)\n ? {\n ...colorOrOptionsObject,\n searchSpan: searchSpan,\n measureTypes: Object.keys(variableObject)\n }\n : {\n color: colorOrOptionsObject,\n searchSpan: searchSpan,\n measureTypes: Object.keys(variableObject),\n alias: alias,\n contextMenu: contextMenu\n };\n\n super(optionsObject);\n this.instanceObject = instanceObject;\n this.variableObject = variableObject;\n }\n\n public toTsq(roundFromTo: boolean = false, getEvents: boolean = false, getSeries: boolean = false) {\n var tsq = {};\n let shiftMillis = Utils.parseShift(this.timeShift, this.startAt, this.searchSpan);\n let fromMillis = this.searchSpan.from.valueOf() + shiftMillis;\n let toMillis = this.searchSpan.to.valueOf() + shiftMillis;\n if (roundFromTo) {\n let bucketSizeInMillis = Utils.parseTimeInput(this.searchSpan.bucketSize);\n let roundedFromMillis = Math.floor((fromMillis + 62135596800000) / (bucketSizeInMillis)) * (bucketSizeInMillis) - 62135596800000;\n let roundedToMillis = Math.ceil((toMillis + 62135596800000) / (bucketSizeInMillis)) * (bucketSizeInMillis) - 62135596800000;\n fromMillis = roundedFromMillis;\n toMillis = roundedToMillis;\n }\n tsq['searchSpan'] = { from: (new Date(fromMillis)).toISOString(), to: (new Date(toMillis)).toISOString() };\n tsq['timeSeriesId'] = this.instanceObject.timeSeriesId;\n if (getEvents) {\n return { getEvents: tsq };\n } else if (getSeries) {\n tsq['inlineVariables'] = { ...this.variableObject };\n tsq['projectedVariables'] = Object.keys(this.variableObject);\n return { getSeries: tsq };\n } else {\n tsq['interval'] = Utils.bucketSizeToTsqInterval(this.searchSpan.bucketSize);\n tsq['inlineVariables'] = { ...this.variableObject };\n tsq['projectedVariables'] = Object.keys(this.variableObject);\n return { aggregateSeries: tsq };\n }\n }\n\n // This method will create an API query payload for the variable statistics of the first inline variable\n // of this object, for numeric dataTypes. Categorical types work as expected.\n public toStatsTsq(fromMillis, toMillis) {\n let tsq = this.toTsq();\n let shiftMillis = Utils.parseShift(this.timeShift);\n fromMillis += shiftMillis;\n toMillis += shiftMillis;\n tsq.aggregateSeries['searchSpan'] = { from: (new Date(fromMillis)).toISOString(), to: (new Date(toMillis)).toISOString() };\n tsq.aggregateSeries['interval'] = 'P1000Y';\n if (this.dataType === 'numeric') {\n let inlineVariables = { min: {}, max: {}, avg: {}, stDev: {} };\n let firstVariable = tsq.aggregateSeries['inlineVariables'][Object.keys(tsq.aggregateSeries['inlineVariables'])[0]];\n Object.keys(inlineVariables).forEach(k => {\n inlineVariables[k] = JSON.parse(JSON.stringify(firstVariable));\n inlineVariables[k].aggregation.tsx = `${k}($value)`;\n delete inlineVariables[k]['interpolation'];\n });\n tsq.aggregateSeries['inlineVariables'] = inlineVariables;\n tsq.aggregateSeries['projectedVariables'] = Object.keys(inlineVariables);\n }\n return tsq;\n }\n}\nexport default TsqExpression\n","import * as d3 from 'd3';\nimport './HierarchyNavigation.scss';\nimport Utils from \"../../utils\";\nimport { Component } from \"./../../interfaces/Component\";\nimport ModelAutocomplete from '../ModelAutocomplete';\n\nclass HierarchyNavigation extends Component {\n\n private searchFunction;\n private hierarchyElem;\n private path: Array<string> = [];\n //selectedIds\n public selectedIds: Array<string> = [];\n public searchEnabled: boolean = true;\n private searchWrapperElem;\n private hierarchyNavWrapper;\n\n public ap: any; // awesomplete object\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n public async render(searchF: Function, hierarchyNavOptions: any = {}, preselectedIds: Array<string>): Promise<void> {\n this.chartOptions.setOptions(hierarchyNavOptions);\n this.searchFunction = searchF;\n\n const targetElement = d3.select(this.renderTarget).text('');\n this.hierarchyNavWrapper = this.createHierarchyNavWrapper(targetElement);\n\n this.selectedIds = preselectedIds;\n\n //render search wrapper\n //this.renderSearchBox()\n\n\n\n super.themify(this.hierarchyNavWrapper, this.chartOptions.theme);\n\n const results = this.createResultsWrapper(this.hierarchyNavWrapper);\n this.hierarchyElem = this.createHierarchyElem(results);\n\n this.pathSearchAndRenderResult({ search: { payload: this.requestPayload() }, render: { target: this.hierarchyElem } });\n\n\n }\n\n private createHierarchyNavWrapper(targetElement: d3.Selection<d3.BaseType, unknown, HTMLElement, any>): d3.Selection<d3.BaseType, unknown, HTMLElement, any> {\n return targetElement.append('div').attr('class', 'tsi-hierarchy-nav-wrapper');\n }\n\n private createResultsWrapper(hierarchyNavWrapper: d3.Selection<d3.BaseType, unknown, HTMLElement, any>): d3.Selection<d3.BaseType, unknown, HTMLElement, any> {\n return hierarchyNavWrapper.append('div').classed('tsi-hierarchy-or-list-wrapper', true);\n }\n\n private createHierarchyElem(results: d3.Selection<d3.BaseType, unknown, HTMLElement, any>): d3.Selection<d3.BaseType, unknown, HTMLElement, any> {\n return results.append('div').classed('tsi-hierarchy', true).attr(\"role\", \"navigation\").on('scroll', () => { });\n }\n\n // prepares the parameters for search request\n private requestPayload(hierarchy: any = null): { path: string, hierarchy: any } {\n const path = hierarchy?.path ?? this.path;\n return { path, hierarchy };\n }\n\n\n // renders tree for both 'Navigate' and 'Filter' mode (with Hierarchy View option selected), locInTarget refers to the 'show more' element -either hierarchy or instance- within the target\n private renderTree(data: any, target: any): void {\n\n let list = target.append('ul').attr(\"role\", target === this.hierarchyElem ? \"tree\" : \"group\");\n\n Object.keys(data).forEach(el => {\n let nodeNameToCheckIfExists = data[el] instanceof InstanceNode ? this.instanceNodeString(data[el]) : el;\n let li;\n if (list.selectAll(\".tsi-name\").nodes().find(e => e.innerText === nodeNameToCheckIfExists)) {\n li = null;\n } else {\n li = list.append('li').classed('tsi-leaf', data[el].isLeaf);\n\n //if the node is already selected, we want to highlight it\n if (this.selectedIds && this.selectedIds.includes(data[el].id)) {\n li.classed('tsi-selected', true);\n }\n }\n\n if (!li) return;\n\n li.attr(\"role\", \"none\");\n let newListElem = this.createHierarchyItemElem(data[el], el);\n li.node().appendChild(newListElem.node());\n\n data[el].node = li;\n if (data[el].children) {\n data[el].isExpanded = true;\n data[el].node.classed('tsi-expanded', true);\n this.renderTree(data[el].children, data[el].node);\n }\n });\n\n }\n\n private renderSearchBox() {\n this.searchWrapperElem = this.hierarchyNavWrapper.append('div').classed('tsi-hierarchy-search', true);\n\n\n let inputWrapper = this.searchWrapperElem.append(\"div\").attr(\"class\", \"tsi-search\");\n inputWrapper.append(\"i\").classed(\"tsi-search-icon\", true);\n\n let input = inputWrapper\n .append(\"input\")\n .attr(\"class\", \"tsi-searchInput\")\n .attr(\"aria-label\", this.getString(\"Search Time Series Instances\"))\n .attr(\"aria-describedby\", \"tsi-search-desc\")\n .attr(\"role\", \"combobox\")\n .attr(\"aria-owns\", \"tsi-search-results\")\n .attr(\"aria-expanded\", \"false\")\n .attr(\"aria-haspopup\", \"listbox\")\n .attr(\n \"placeholder\",\n this.getString(\"Search Time Series Instances\") + \"...\"\n );\n\n let self = this;\n\n input.on(\"keydown\", (event) => {\n this.chartOptions.onKeydown(event, this.ap);\n });\n\n var searchText;\n\n input.on(\"input\", function (event) {\n searchText = (event.target as any).value;\n if (searchText.length === 0) {\n //clear the tree\n self.hierarchyElem.selectAll('ul').remove();\n self.pathSearchAndRenderResult({ search: { payload: self.requestPayload() }, render: { target: self.hierarchyElem } });\n\n\n } else {\n //filter the tree\n self.filterTree(searchText);\n\n }\n });\n\n }\n\n private async pathSearchAndRenderResult({ search: { payload, bubbleUpReject = false }, render: { target, locInTarget = null } }) {\n try {\n const result = await this.searchFunction(payload);\n if (result.error) {\n throw result.error;\n }\n this.renderSearchResult(result, payload, target);\n } catch (err) {\n this.chartOptions.onError(\"Error in hierarchy navigation\", \"Failed to complete search\", err instanceof XMLHttpRequest ? err : null);\n if (bubbleUpReject) {\n throw err;\n }\n }\n }\n\n private renderSearchResult = (r, payload, target: any) => {\n\n const hierarchyData = r.hierarchyNodes?.hits?.length\n ? this.fillDataRecursively(r.hierarchyNodes, payload, payload)\n : {};\n\n const instancesData = r.instances?.hits?.length\n ? r.instances.hits.reduce((acc, i) => {\n acc[this.instanceNodeIdentifier(i)] = new InstanceNode(i.timeSeriesId, i.name, payload.path.length - this.path.length, i.id, i.description);\n return acc;\n }, {})\n : {};\n\n if (r.hierarchyNodes?.hits?.length) {\n let hitCountElem = target.select(\".tsi-hitCount\");\n if (hitCountElem.size() === 0) {\n hitCountElem = target.append('span').classed('tsi-hitCount', true).text('');\n }\n hitCountElem.text(r.hierarchyNodes.hitCount);\n }\n\n this.renderTree({ ...hierarchyData, ...instancesData }, target);\n }\n\n private filterTree(searchText) {\n let tree = this.hierarchyElem.selectAll('ul').nodes()[0];\n let list = tree.querySelectorAll('li');\n list.forEach((li) => {\n let name = li.querySelector('.tsi-name').innerText;\n if (name.toLowerCase().includes(searchText.toLowerCase())) {\n li.style.display = 'block';\n } else {\n li.style.display = 'none';\n }\n }\n );\n\n\n }\n\n // creates in-depth data object using the server response for hierarchyNodes to show in the tree all expanded, considering UntilChildren\n private fillDataRecursively(hierarchyNodes, payload, payloadForContinuation = null) {\n let data = {};\n\n hierarchyNodes.hits.forEach((h) => {\n let hierarchy = new HierarchyNode(h.name, payload.path, payload.path.length - this.path.length, h.cumulativeInstanceCount, h.id);\n\n hierarchy.expand = () => {\n hierarchy.isExpanded = true;\n hierarchy.node.classed('tsi-expanded', true);\n return this.pathSearchAndRenderResult({\n search: { payload: this.requestPayload(hierarchy), bubbleUpReject: true },\n render: { target: hierarchy.node }\n });\n };\n\n data[this.hierarchyNodeIdentifier(h.name)] = hierarchy;\n\n if (h.hierarchyNodes?.hits.length) {\n hierarchy.children = this.fillDataRecursively(h.hierarchyNodes, this.requestPayload(hierarchy), payloadForContinuation);\n }\n });\n\n return data;\n }\n\n //returns the dom element of one hierarchy level item for tree rendering\n private createHierarchyItemElem(hORi, key) {\n let self = this;\n let isHierarchyNode = hORi instanceof HierarchyNode;\n let hierarchyItemElem = d3.create('div').classed('tsi-hierarchyItem', true)\n .attr('style', `padding-left: ${hORi.isLeaf ? hORi.level * 18 + 20 : (hORi.level + 1) * 18 + 20}px`)\n .attr('tabindex', 0)\n //.attr('arialabel', isHierarchyNode ? key : Utils.getTimeSeriesIdString(hORi))\n .attr('arialabel', isHierarchyNode ? key : self.getAriaLabel(hORi))\n .attr('title', isHierarchyNode ? key : self.getAriaLabel(hORi))\n .attr(\"role\", \"treeitem\").attr('aria-expanded', hORi.isExpanded)\n .on('click keydown', async function (event) {\n if (Utils.isKeyDownAndNotEnter(event)) { return; }\n if (!isHierarchyNode) { // means it is an instance\n event.stopPropagation();\n\n //we want to store clicked instance and hightlight it in the hierarchy\n //if the instance is already selected, we want to deselect it\n if (self.chartOptions.onInstanceClick) {\n if (self.selectedIds && self.selectedIds.includes(hORi.id)) {\n self.selectedIds = self.selectedIds.filter(id => id !== hORi.id);\n hORi.node.classed('tsi-selected', false);\n }\n else {\n self.selectedIds.push(hORi.id);\n hORi.node.classed('tsi-selected', true);\n }\n }\n\n self.chartOptions.onInstanceClick(hORi);\n } else {\n if (hORi.isExpanded) {\n hORi.collapse();\n } else {\n await hORi.expand();\n }\n }\n })\n\n if (isHierarchyNode) {\n hierarchyItemElem.append('span').classed('tsi-caret-icon', true).attr('style', `left: ${(hORi.level) * 18 + 20}px`);\n hierarchyItemElem.append('span').classed('tsi-name', true).text(key);\n hierarchyItemElem.append('span').classed('tsi-instanceCount', true).text(hORi.cumulativeInstanceCount);\n hierarchyItemElem.append('span').classed('tsi-hitCount', true).text(''); // hit count is the number of hierarchy nodes below, it is filled after expand is clicked for this node (after search is done for this path)\n\n\n } else {\n let spanElem = hierarchyItemElem.append('span').classed('tsi-name', true);\n Utils.appendFormattedElementsFromString(spanElem, this.instanceNodeStringToDisplay(hORi));\n }\n\n return hierarchyItemElem;\n }\n\n private getAriaLabel(hORi) {\n if (hORi instanceof HierarchyNode) {\n return hORi.name;\n }\n\n //check description first then name then id\n return hORi.description || hORi.name || hORi.id || Utils.getTimeSeriesIdString(hORi);\n }\n\n private hierarchyNodeIdentifier = (hName) => {\n return hName ? hName : '(' + this.getString(\"Empty\") + ')';\n }\n\n private instanceNodeIdentifier = (instance) => {\n return `instance-${Utils.getInstanceKey(instance)}`;\n }\n\n private instanceNodeStringToDisplay = (instance) => {\n return instance.highlights?.name || Utils.getHighlightedTimeSeriesIdToDisplay(instance)\n || instance.name || Utils.getTimeSeriesIdToDisplay(instance, this.getString('Empty'));\n }\n\n private instanceNodeString = (instance) => {\n return instance.name || Utils.getTimeSeriesIdString(instance);\n }\n}\n\nclass HierarchyNode {\n name: string;\n id: string | null;\n path: string[];\n level: number;\n cumulativeInstanceCount: number | null;\n node: any;\n children: any;\n isExpanded: boolean;\n\n constructor(name: string, parentPath: string[], level: number, cumulativeInstanceCount: number | null = null, id: string | null = null) {\n this.name = name;\n this.id = id;\n this.path = parentPath.concat([name]);\n this.level = level;\n this.cumulativeInstanceCount = cumulativeInstanceCount;\n this.node = null;\n this.children = null;\n this.isExpanded = false;\n }\n\n expand() { }\n\n collapse() {\n this.isExpanded = false;\n this.node.classed('tsi-expanded', false);\n this.node.selectAll('ul').remove();\n }\n}\n\nclass InstanceNode {\n timeSeriesId: any;\n name: string | null;\n suppressDrawContextMenu: boolean;\n isLeaf: boolean;\n level: any;\n node: any;\n id: string | null;\n description: string | null;\n\n constructor(tsId: any, name: string | null = null, level: any, id: string | null = null, description: string | null = null) {\n this.timeSeriesId = tsId;\n this.name = name;\n this.suppressDrawContextMenu = false;\n this.isLeaf = true;\n this.level = level;\n this.node = null;\n this.id = id;\n this.description = description;\n }\n}\n\nexport enum HierarchySelectionValues { All = \"0\", Unparented = \"-1\" };\nexport enum ViewType { Hierarchy, List };\nexport enum State { Navigate, Search, Filter };\n\nexport default HierarchyNavigation","import * as d3 from 'd3';\nimport Pikaday from '../../../packages/pikaday/pikaday';\nimport '../../../packages/pikaday/css/pikaday.css'\nimport moment from 'moment';\nimport './SingleDateTimePicker.scss';\nimport { ChartComponent } from '../../interfaces/ChartComponent';\nimport Utils from \"../../utils\";\n\nclass SingleDateTimePicker extends ChartComponent {\n private calendar: any;\n private calendarPicker: any;\n private timeControls: any;\n private minMillis: number;\n private maxMillis: number;\n private millis: number;\n private minutes: number;\n private hours: number;\n private onSet: any;\n private targetElement: any;\n private isValid: boolean = true;\n private offsetName: string;\n private date: Date;\n private timeInput: any;\n private saveButton: any;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n public getMillis() {\n return this.millis;\n }\n\n public render(chartOptions: any = {}, minMillis: number, maxMillis: number,\n millis: number = null, onSet = null) {\n this.minMillis = minMillis;\n this.maxMillis = maxMillis;\n if (chartOptions.offset && (typeof chartOptions.offset == \"string\")) {\n []\n this.offsetName = chartOptions.offset;\n }\n\n if (millis === null) {\n millis = this.maxMillis;\n }\n\n this.chartOptions.setOptions(chartOptions);\n moment.locale(this.chartOptions.dateLocale);\n this.millis = millis;\n this.onSet = onSet;\n this.targetElement = d3.select(this.renderTarget)\n .classed(\"tsi-singleDateTimePicker\", true)\n this.targetElement.html('');\n super.themify(this.targetElement, this.chartOptions.theme);\n\n this.targetElement.on('keydown', (event) => {\n if (event.keyCode <= 40 && event.keyCode >= 37) { //arrow key\n event.stopPropagation();\n }\n if (event.keyCode === 27 && this.chartOptions.dTPIsModal) { //escape\n this.onSet();\n }\n });\n this.timeControls = this.targetElement.append(\"div\").classed(\"tsi-timeControlsContainer\", true);\n this.calendar = this.targetElement.append(\"div\").classed(\"tsi-calendarPicker\", true);\n var saveButtonContainer = this.targetElement.append(\"div\").classed(\"tsi-saveButtonContainer\", true);\n var self = this;\n this.saveButton = saveButtonContainer.append(\"button\").classed(\"tsi-saveButton\", true).text(this.getString(\"Save\"))\n .on(\"click\", () => {\n if (this.isValid) {\n self.onSet(this.millis);\n }\n })\n .on('keydown', (event) => {\n if (event.keyCode === 9 && !event.shiftKey && this.chartOptions.dTPIsModal) { // tab\n this.timeInput.node().focus();\n event.preventDefault();\n }\n })\n\n this.targetElement.append(\"div\").classed(\"tsi-errorMessageContainer\", true);\n this.createCalendar();\n this.calendarPicker.draw();\n this.createTimePicker();\n\n this.updateDisplayedDateTime();\n\n this.date = new Date(this.millis);\n this.calendarPicker.draw();\n if (this.chartOptions.dTPIsModal) {\n this.timeInput.node().focus();\n }\n return;\n }\n\n //zero out everything but year, month and day\n private roundDay(d: Date) {\n let offsetDate = Utils.offsetFromUTC(d, this.chartOptions.offset);\n return new Date(offsetDate.getUTCFullYear(), offsetDate.getUTCMonth(), offsetDate.getUTCDate());\n }\n\n private setSelectedDate(d: Date) {\n this.calendarPicker.setDate(d, true);\n this.setDate(d);\n this.timeInput.node().value = this.createTimeString(Utils.offsetFromUTC(new Date(this.millis)));\n }\n\n private createCalendar() {\n var i18nOptions = {\n previousMonth: this.getString('Previous Month'),\n nextMonth: this.getString('Next Month'),\n months: moment.localeData().months(),\n weekdays: moment.localeData().weekdays(),\n weekdaysShort: moment.localeData().weekdaysMin()\n };\n\n //@ts-ignore\n this.calendarPicker = new Pikaday({\n bound: false,\n container: this.calendar.node(),\n field: this.calendar.node(),\n i18n: i18nOptions,\n numberOfMonths: 1,\n onSelect: (d) => {\n this.setSelectedDate(d);\n this.calendarPicker.draw();\n this.checkDateTimeValidity();\n },\n onDraw: (d) => {\n var self = this;\n this.calendar.select(\".pika-single\").selectAll('button').attr('tabindex', -1);\n },\n minDate: this.convertToLocal(Utils.offsetFromUTC(new Date(this.minMillis), this.chartOptions.offset)),\n maxDate: this.convertToLocal(Utils.offsetFromUTC(new Date(this.maxMillis), this.chartOptions.offset)),\n defaultDate: this.convertToLocal(Utils.offsetFromUTC(new Date(this.millis), this.chartOptions.offset))\n });\n }\n\n private setDate(d: Date) {\n var date = Utils.offsetFromUTC(new Date(this.millis), this.chartOptions.offset);\n date.setUTCFullYear(d.getFullYear());\n date.setUTCMonth(d.getMonth());\n date.setUTCDate(d.getDate());\n this.setMillis(date.valueOf(), true);\n }\n\n private setIsValid(isValid: boolean) {\n this.isValid = isValid;\n }\n\n private setMillis(millis: number, shouldOffset = true) {\n var adjustedMillis = millis - (shouldOffset ? Utils.getOffsetMinutes(this.chartOptions.offset, millis) * 60 * 1000 : 0);\n this.millis = adjustedMillis;\n }\n\n private displayErrors(rangeErrors) {\n this.targetElement.select(\".tsi-errorMessageContainer\").selectAll(\".tsi-errorMessage\").remove();\n if (rangeErrors.length != 0) {\n this.targetElement.select(\".tsi-errorMessageContainer\").selectAll(\".tsi-errorMessages\")\n .data(rangeErrors)\n .enter()\n .append(\"div\")\n .classed(\"tsi-errorMessage\", true)\n .text(d => d);\n }\n }\n\n private checkDateTimeValidity() {\n let parsedMillis = this.parseUserInputDateTime();\n let errorCheck = this.dateTimeIsValid(parsedMillis);\n this.displayErrors(errorCheck.errors);\n this.setIsValid(errorCheck.rangeIsValid);\n }\n\n private dateTimeIsValid(prospectiveMillis: number) {\n var accumulatedErrors = [];\n\n if (isNaN(prospectiveMillis)) {\n accumulatedErrors.push('*time is invalid');\n } else {\n var firstDateTime = Utils.offsetFromUTC(new Date(this.minMillis), this.chartOptions.offset);\n var lastDateTime = Utils.offsetFromUTC(new Date(this.maxMillis), this.chartOptions.offset);\n if (prospectiveMillis < this.minMillis) {\n accumulatedErrors.push(\"*date/time is before first possible date and time (\" + this.getTimeFormat()(firstDateTime) + \")\");\n }\n if (prospectiveMillis > this.maxMillis) {\n accumulatedErrors.push(\"*date/time is after last possible date and time (\" + this.getTimeFormat()(lastDateTime) + \")\");\n }\n }\n\n return {\n rangeIsValid: (accumulatedErrors.length == 0),\n errors: accumulatedErrors\n };\n }\n\n private getTimeFormat() {\n return Utils.timeFormat(true, true, this.chartOptions.offset, true, 0, null, this.chartOptions.dateLocale);\n }\n\n private parseUserInputDateTime() {\n return Utils.parseUserInputDateTime(this.timeInput.node().value, this.chartOptions.offset);\n }\n\n private convertToCalendarDate(millis: number) {\n return this.roundDay(Utils.adjustDateFromTimezoneOffset(Utils.offsetFromUTC(new Date(millis), this.chartOptions.offset)));\n }\n\n private updateDisplayedDateTime(fromInput: boolean = false) {\n let selectedDate = new Date(this.millis);\n this.calendarPicker.setDate(this.convertToCalendarDate(this.millis), fromInput);\n if (!fromInput) {\n this.timeInput.node().value = this.createTimeString(Utils.offsetFromUTC(selectedDate));\n }\n }\n\n private createTimeString(currDate: Date) {\n let offsetDate = Utils.offsetFromUTC(currDate, this.chartOptions.offset);\n return this.getTimeFormat()(currDate);\n }\n\n // convert to representation such that: convertedDate.toString() === originalDate.toISOString()\n private convertToLocal(date: Date) {\n return new Date(date.valueOf() + date.getTimezoneOffset() * 60 * 1000);\n }\n\n private createTimePicker() {\n var self = this;\n let timeLabel = this.timeControls.append(\"h4\").classed(\"tsi-timeLabel\", true).text(this.getString('Date/Time'));\n this.timeInput = this.timeControls.append('input').attr('class', 'tsi-dateTimeInput tsi-input')\n .on('input', () => {\n this.checkDateTimeValidity();\n if (this.isValid) {\n let parsedMillis = this.parseUserInputDateTime();\n this.setMillis(parsedMillis, false);\n this.updateDisplayedDateTime(true);\n }\n })\n .on('keydown', (event) => {\n if (event.keyCode === 9 && event.shiftKey && this.chartOptions.dTPIsModal) { // tab\n this.saveButton.node().focus();\n event.preventDefault();\n }\n });\n }\n}\n\nexport default SingleDateTimePicker;","import * as d3 from 'd3';\nimport './DateTimeButtonSingle.scss';\nimport { DateTimeButton } from '../../interfaces/DateTimeButton';\nimport SingleDateTimePicker from '../SingleDateTimePicker/SingleDateTimePicker';\n\nclass DateTimeButtonSingle extends DateTimeButton {\n\n private selectedMillis: number;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n private closeSDTP() {\n this.dateTimePickerContainer.style(\"display\", \"none\");\n this.dateTimeButton.node().focus();\n }\n\n private sDTPOnSet = (millis: number = null) => {\n if (millis !== null) {\n this.dateTimeButton.text(this.buttonDateTimeFormat(millis));\n this.selectedMillis = millis;\n this.onSet(millis);\n }\n this.closeSDTP();\n }\n\n public render(chartOptions: any = {}, minMillis: number, maxMillis: number, selectedMillis: number = null, onSet = null) {\n super.render(chartOptions, minMillis, maxMillis, onSet);\n this.selectedMillis = selectedMillis;\n d3.select(this.renderTarget).classed('tsi-dateTimeContainerSingle', true);\n this.dateTimeButton.text(this.buttonDateTimeFormat(selectedMillis));\n if (!this.dateTimePicker) {\n this.dateTimePicker = new SingleDateTimePicker(this.dateTimePickerContainer.node());\n }\n\n let targetElement = <any>d3.select(this.renderTarget);\n var dateTimeTextChildren = (targetElement.select(\".tsi-dateTimePickerContainer\")).selectAll(\"*\");\n\n this.dateTimeButton.on(\"click\", () => {\n this.chartOptions.dTPIsModal = true;\n this.dateTimePickerContainer.style(\"display\", \"block\");\n this.dateTimePicker.render(this.chartOptions, this.minMillis, this.maxMillis, this.selectedMillis, this.sDTPOnSet);\n });\n }\n\n}\nexport default DateTimeButtonSingle\n","import Utils from '../utils';\n\nclass TsqRange {\n public from: Date;\n public to: Date;\n private bucketSizeMs: number;\n\n // List of interval values that would divide a time range neatly\n static NeatIntervals = [\n '1ms', '2ms', '4ms', '5ms', '8ms', '10ms', '20ms', '25ms', '40ms', '50ms', '100ms', '125ms', '200ms', '250ms', '500ms',\n '1s', '2s', '3s', '4s', '5s', '6s', '10s', '12s', '15s', '20s', '30s',\n '1m', '2m', '3m', '4m', '5m', '6m', '10m', '12m', '15m', '20m', '30m',\n '1h', '2h', '3h', '4h', '6h', '8h', '12h',\n '1d', '2d', '3d', '4d', '5d', '6d', '7d'\n ];\n\n static NeatIntervalsMs = [\n 1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500,\n 1000, 2000, 3000, 4000, 5000, 6000, 10000, 12000, 15000, 20000, 30000,\n 60000, 120000, 180000, 240000, 300000, 360000, 600000, 720000, 900000, 1200000, 1800000,\n 3600000, 7200000, 10800000, 14400000, 21600000, 28800000, 43200000,\n 86400000, 172800000, 259200000, 345600000, 432000000, 518400000, 604800000\n ];\n\n constructor(from: Date, to: Date) {\n this.from = from;\n this.to = to;\n }\n\n setNeatBucketSizeByNumerOfBuckets(targetNumberOfBuckets: number) {\n let timeRangeMs = Math.max(this.to.valueOf() - this.from.valueOf(), 1);\n let roughBucketsize = Math.ceil(timeRangeMs / targetNumberOfBuckets);\n this.setNeatBucketSizeByRoughBucketSize(roughBucketsize);\n }\n\n setNeatBucketSizeByRoughBucketSize(roughBucketSizeMillis: number) {\n let neatIntervalIndex = 1;\n for (; neatIntervalIndex < TsqRange.NeatIntervalsMs.length; neatIntervalIndex++) {\n if (TsqRange.NeatIntervalsMs[neatIntervalIndex] > roughBucketSizeMillis) { break; }\n }\n\n this.bucketSizeMs = TsqRange.NeatIntervalsMs[neatIntervalIndex - 1];\n }\n\n alignWithServerEpoch() {\n let fromMs = Utils.adjustStartMillisToAbsoluteZero(this.from.valueOf(), this.bucketSizeMs);\n let toMs = Utils.roundToMillis(this.to.valueOf(), this.bucketSizeMs);\n this.from = new Date(fromMs);\n this.to = new Date(toMs);\n }\n\n get fromMillis() {\n return this.from.valueOf();\n }\n\n get toMillis() {\n return this.to.valueOf();\n }\n\n get bucketSizeMillis() {\n return this.bucketSizeMs;\n }\n\n get bucketSizeStr() {\n let bucketSize = TsqRange.millisToLargestUnit(this.bucketSizeMs);\n return `${bucketSize.value}${bucketSize.unit}`;\n }\n\n static millisToLargestUnit(interval: number) {\n let value: number, unit: string;\n\n if (interval < 1000) {\n value = interval;\n unit = 'ms';\n } else if (interval < 1000 * 60) {\n value = Math.ceil(interval / 1000);\n unit = 's';\n } else if (interval < 1000 * 60 * 60) {\n value = Math.ceil(interval / (1000 * 60));\n unit = 'm';\n } else if (interval < 1000 * 60 * 60 * 24) {\n value = Math.ceil(interval / (1000 * 60 * 60));\n unit = 'h';\n } else {\n value = Math.ceil(interval / (1000 * 60 * 60 * 24));\n unit = 'd';\n }\n\n return { value, unit };\n }\n}\n\nexport { TsqRange };","import * as d3 from \"d3\";\nimport { Component } from \"./../../interfaces/Component\";\nimport PlaybackControls from \"../PlaybackControls\";\nimport { TsqRange } from \"../../models/TsqRange\";\nimport TsqExpression from \"../../models/TsqExpression\";\n\ntype d3Selection = d3.Selection<d3.BaseType, unknown, null, undefined>;\n\nexport interface GraphicInfo {\n graphic: any;\n width: number;\n height: number;\n}\n\nabstract class HistoryPlayback extends Component {\n protected targetElement: d3Selection;\n protected tsqExpressions: Array<TsqExpression>;\n protected componentContainer: d3Selection;\n protected component: d3Selection;\n protected playbackControlsContainer: d3Selection;\n protected playbackControls: PlaybackControls;\n protected graphicOriginalWidth: number;\n protected graphicOriginalHeight: number;\n protected currentCancelTrigger: Function;\n protected availabilityInterval: number;\n protected environmentFqdn: string;\n protected availability: TsqRange;\n protected getAuthToken: () => Promise<string>;\n protected playbackRate: number;\n protected graphic: any;\n\n readonly numberOfBuckets = 1000;\n readonly defaultPlaybackRate = 3000; // 3 seconds\n readonly fetchAvailabilityFrequency = 30000; // 30 seconds\n readonly playbackSliderHeight = 88;\n readonly previewApiFlag = \"?api-version=2018-11-01-preview\";\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n this.currentCancelTrigger = null;\n }\n\n protected abstract loadResources(): Promise<any>;\n protected abstract draw();\n protected abstract updateDataMarkers(data: Array<any>): void;\n protected abstract getDataPoints(data: Array<any>): void;\n protected onGraphicLoaded(): void { }\n\n protected renderBase(\n environmentFqdn: string,\n getToken: () => Promise<string>,\n data: Array<TsqExpression>,\n chartOptions\n ) {\n this.environmentFqdn = environmentFqdn;\n this.getAuthToken = getToken;\n this.tsqExpressions = data;\n this.chartOptions.setOptions(chartOptions);\n this.playbackRate =\n this.chartOptions.updateInterval || this.defaultPlaybackRate;\n\n }\n\n pauseAvailabilityUpdates() {\n if (this.availabilityInterval) {\n window.clearInterval(this.availabilityInterval);\n }\n }\n\n private onSelecTimestamp(timeStamp: Date) {\n let queryWindow = this.calcQueryWindow(timeStamp);\n\n let tsqArray = this.tsqExpressions.map((tsqExpression) => {\n tsqExpression.searchSpan = {\n from: queryWindow.fromMillis,\n to: queryWindow.toMillis,\n bucketSize: queryWindow.bucketSize,\n };\n return tsqExpression.toTsq();\n });\n\n this.getAuthToken().then((authToken: string) => {\n\n });\n }\n\n private calcQueryWindow(timeStamp: Date) {\n let timelineOffset = this.availability.fromMillis;\n let queryToMillis: number =\n Math.ceil(\n (timeStamp.valueOf() - timelineOffset) /\n this.availability.bucketSizeMillis\n ) *\n this.availability.bucketSizeMillis +\n timelineOffset;\n\n return {\n fromMillis: queryToMillis - this.availability.bucketSizeMillis,\n toMillis: queryToMillis,\n bucketSize: this.availability.bucketSizeStr,\n };\n }\n\n protected drawBase() {\n this.playbackControlsContainer\n .style(\"width\", `${this.renderTarget.clientWidth}px`)\n .style(\"height\", `${this.playbackSliderHeight}px`);\n\n this.playbackControls.render(\n this.availability.from,\n this.availability.to,\n this.onSelecTimestamp.bind(this),\n this.chartOptions,\n {\n intervalMillis: this.playbackRate,\n stepSizeMillis: this.availability.bucketSizeMillis,\n }\n );\n }\n\n private updateAvailability(from: Date, to: Date) {\n this.availability = new TsqRange(from, to);\n\n if (\n this.chartOptions.bucketSizeMillis &&\n this.chartOptions.bucketSizeMillis > 0\n ) {\n this.availability.setNeatBucketSizeByRoughBucketSize(\n this.chartOptions.bucketSizeMillis\n );\n } else {\n this.availability.setNeatBucketSizeByNumerOfBuckets(this.numberOfBuckets);\n }\n\n this.availability.alignWithServerEpoch();\n }\n\n\n}\nexport default HistoryPlayback;\n","import * as d3 from \"d3\";\nimport \"./ProcessGraphic.scss\";\nimport HistoryPlayback, {\n GraphicInfo,\n} from \"./../../components/HistoryPlayback\";\nimport Utils from \"../../utils\";\nimport TsqExpression from \"../../models/TsqExpression\";\n\nclass ProcessGraphic extends HistoryPlayback {\n private graphicSrc: string;\n constructor(renderTarget: Element) {\n super(renderTarget);\n this.currentCancelTrigger = null;\n }\n\n render(\n environmentFqdn: string,\n getToken: () => Promise<string>,\n graphicSrc: string,\n data: Array<TsqExpression>,\n chartOptions\n ) {\n this.graphicSrc = graphicSrc;\n this.renderBase(environmentFqdn, getToken, data, chartOptions);\n }\n\n protected loadResources(): Promise<GraphicInfo> {\n return new Promise((resolve, reject) => {\n let image = new Image();\n\n image.onload = () => {\n this.graphic = image;\n this.graphicOriginalWidth = image.width;\n this.graphicOriginalHeight = image.height;\n\n (this.component.node() as any).appendChild(this.graphic);\n\n resolve(null);\n };\n\n image.onerror = (errorMessage) => {\n console.log(errorMessage);\n reject(errorMessage);\n };\n\n image.src = this.graphicSrc;\n });\n }\n\n protected draw() {\n let graphicContainerWidth = this.renderTarget.clientWidth;\n let graphicContainerHeight =\n this.renderTarget.clientHeight - this.playbackSliderHeight;\n\n this.componentContainer\n .style(\"width\", `${graphicContainerWidth}px`)\n .style(\"height\", `${graphicContainerHeight}px`);\n\n let resizedImageDim = this.getResizedImageDimensions(\n graphicContainerWidth,\n graphicContainerHeight,\n this.graphicOriginalWidth,\n this.graphicOriginalHeight\n );\n\n this.component\n .style(\"width\", `${resizedImageDim.width}px`)\n .style(\"height\", `${resizedImageDim.height}px`);\n\n this.drawBase();\n }\n\n private getResizedImageDimensions(\n containerWidth: number,\n containerHeight: number,\n imageWidth: number,\n imageHeight: number\n ) {\n if (containerWidth >= imageWidth && containerHeight >= imageHeight) {\n return {\n width: imageWidth,\n height: imageHeight,\n };\n }\n\n // Calculate the factor we would need to multiply width by to make it fit in the container.\n // Do the same for height. The smallest of those two corresponds to the largest size reduction\n // needed. Multiply both width and height by the smallest factor to a) ensure we maintain the\n // aspect ratio of the image b) ensure the image fits inside the container.\n let widthFactor = containerWidth / imageWidth;\n let heightFactor = containerHeight / imageHeight;\n let resizeFactor = Math.min(widthFactor, heightFactor);\n\n return {\n width: imageWidth * resizeFactor,\n height: imageHeight * resizeFactor,\n };\n }\n\n protected getDataPoints(results: Array<IProcessGraphicLabelInfo>) {\n if (Array.isArray(results)) {\n let dataPoints = results.map((r, i): IProcessGraphicLabelInfo => {\n let value = this.parseTsqResponse(r);\n let color =\n typeof this.tsqExpressions[i].color === \"function\"\n ? (<Function>this.tsqExpressions[i].color)(value)\n : this.tsqExpressions[i].color;\n return {\n value,\n alias: this.tsqExpressions[i].alias,\n x: this.tsqExpressions[i].positionX,\n y: this.tsqExpressions[i].positionY,\n color: this.sanitizeAttribute(color),\n onClick: this.tsqExpressions[i].onElementClick,\n };\n });\n this.updateDataMarkers(dataPoints);\n }\n }\n protected updateDataMarkers(graphicValues: Array<IProcessGraphicLabelInfo>) {\n let textElements = this.component\n .selectAll<HTMLDivElement, unknown>(\"div\")\n .data(graphicValues);\n\n let newElements = textElements\n .enter()\n .append(\"div\")\n .classed(\"tsi-process-graphic-label\", true);\n\n newElements.append(\"div\").classed(\"title\", true);\n\n newElements.append(\"div\").classed(\"value\", true);\n\n newElements\n .merge(textElements)\n .classed(\"tsi-dark\", false)\n .classed(\"tsi-light\", false)\n .classed(Utils.getTheme(this.chartOptions.theme), true)\n .style(\"left\", (tsqe) => `${tsqe.x}%`)\n .style(\"top\", (tsqe) => `${tsqe.y}%`);\n\n // Trigger glow css animation when values update.\n const highlightCssClass = \"tsi-label-highlight\";\n\n this.component\n .selectAll(\".tsi-process-graphic-label\")\n .data(graphicValues)\n .classed(highlightCssClass, true)\n .classed(\"clickable\", (tsqe) => tsqe.onClick !== null)\n .on(\"animationend\", function () {\n d3.select(this).classed(highlightCssClass, false);\n })\n .on(\"click\", (event, tsqe) => {\n if (typeof tsqe.onClick === \"function\") {\n tsqe.onClick({\n timeStamp: this.playbackControls.currentTimeStamp,\n value: tsqe.value,\n color: tsqe.color,\n });\n }\n });\n\n this.component\n .selectAll(\".title\")\n .data(graphicValues)\n .text((tsqe) => tsqe.alias || \"\");\n\n this.component\n .selectAll(\".value\")\n .data(graphicValues)\n .text((tsqe) =>\n tsqe.value !== null ? Utils.formatYAxisNumber(tsqe.value) : \"--\"\n )\n .style(\"color\", (tsqe) => tsqe.color);\n }\n\n protected parseTsqResponse(response) {\n return response &&\n response.properties &&\n response.properties[0] &&\n response.properties[0].values\n ? response.properties[0].values[0]\n : null;\n }\n\n protected sanitizeAttribute(str) {\n let sanitized = String(str);\n let illegalChars = ['\"', \"'\", \"?\", \"<\", \">\", \";\"];\n illegalChars.forEach((c) => {\n sanitized = sanitized.split(c).join(\"\");\n });\n\n return sanitized;\n }\n}\n\ninterface IProcessGraphicLabelInfo {\n value: number;\n alias: string;\n x: number;\n y: number;\n color: string;\n onClick: Function;\n}\n\nexport default ProcessGraphic;\n","import * as d3 from 'd3';\nimport './PlaybackControls.scss';\nimport { Component } from \"./../../interfaces/Component\";\nimport Utils from '../../utils';\nimport { TemporalXAxisComponent } from '../../interfaces/TemporalXAxisComponent';\n\ntype d3Selection = d3.Selection<d3.BaseType, unknown, null, undefined>;\n\ninterface IPlaybackSettings {\n intervalMillis: number;\n stepSizeMillis: number;\n}\n\nclass PlaybackControls extends Component {\n private playbackInterval: number;\n private playButton: d3Selection;\n private handleElement: d3Selection;\n private controlsContainer: d3Selection;\n private track: d3Selection;\n private trackXOffset: number;\n private trackYOffset: number;\n private trackWidth: number;\n private timeFormatter: Function;\n private selectedTimeStamp: Date;\n private selectTimeStampCallback: (d: Date) => {};\n private timeStampToPosition: d3.ScaleTime<number, number>;\n private playbackSettings: IPlaybackSettings;\n private end: Date;\n private wasPlayingWhenDragStarted: boolean;\n\n readonly handleRadius: number = 7;\n readonly minimumPlaybackInterval: number = 1000; // 1 second\n\n constructor(renderTarget: Element, initialTimeStamp: Date = null) {\n super(renderTarget);\n this.playbackInterval = null;\n this.selectedTimeStamp = initialTimeStamp;\n }\n\n get currentTimeStamp() {\n return this.selectedTimeStamp;\n }\n\n render(\n start: Date,\n end: Date,\n onSelectTimeStamp: (d: Date) => {},\n options,\n playbackSettings: IPlaybackSettings) {\n this.end = end;\n this.selectTimeStampCallback = onSelectTimeStamp;\n this.chartOptions.setOptions(options);\n this.playbackSettings = playbackSettings;\n this.timeFormatter = Utils.timeFormat(true, false, this.chartOptions.offset, this.chartOptions.is24HourTime, null, null, this.chartOptions.dateLocale)\n\n let targetElement = d3.select(this.renderTarget);\n super.themify(targetElement, this.chartOptions.theme);\n\n targetElement.html('');\n\n let sliderContainer = targetElement.append('div')\n .classed('tsi-playback-timeline', true);\n\n let sliderContainerWidth = (<any>sliderContainer.node()).clientWidth;\n let sliderContainerHeight = (<any>sliderContainer.node()).clientHeight;\n this.trackXOffset = this.handleRadius + 8;\n this.trackYOffset = Math.floor(sliderContainerHeight / 2);\n this.trackWidth = sliderContainerWidth - (2 * this.trackXOffset);\n\n this.timeStampToPosition = d3.scaleTime()\n .domain([start, end])\n .range([0, this.trackWidth]);\n\n let timeAxisContainer = sliderContainer.append('div')\n .classed('tsi-playback-axis', true)\n .style('top', `${this.trackYOffset + 6}px`)\n .style('left', `${this.trackXOffset}px`)\n .style('width', `${this.trackWidth}px`);\n\n let timeAxis = new TimeAxis(<Element>timeAxisContainer.node());\n timeAxis.render(this.chartOptions, this.timeStampToPosition);\n\n let gWrapper = sliderContainer\n .append('svg')\n .append('g');\n\n sliderContainer.append('div')\n .classed('tsi-playback-input', true)\n .style('left', `${this.trackXOffset}px`)\n .style('width', `${this.trackWidth}px`);\n\n this.track = gWrapper\n .append('g')\n .classed('tsi-playback-track', true);\n\n gWrapper.call(d3.drag()\n .container(<any>sliderContainer.select('.tsi-playback-input').node())\n .on('start.interrupt', () => { gWrapper.interrupt(); })\n .on('start drag', (event) => {\n this.onDrag(event.x);\n })\n .on('end', () => {\n this.onDragEnd();\n })\n );\n\n this.track.append('line')\n .classed('tsi-left-of-handle', true)\n .attr('y1', this.trackYOffset)\n .attr('y2', this.trackYOffset);\n\n this.track.append('line')\n .classed('tsi-right-of-handle', true)\n .attr('y1', this.trackYOffset)\n .attr('y2', this.trackYOffset);\n\n this.handleElement = gWrapper.append('circle')\n .classed('tsi-playback-handle', true)\n .attr('r', this.handleRadius)\n .attr('cy', this.trackYOffset);\n\n this.controlsContainer = targetElement.append('div')\n .classed('tsi-playback-buttons', true);\n\n this.playButton = this.controlsContainer.append('button')\n .classed('tsi-play-button', this.playbackInterval === null)\n .classed('tsi-pause-button', this.playbackInterval !== null)\n .on('click', () => {\n if (this.playbackInterval === null) {\n this.play();\n } else {\n this.pause();\n }\n });\n\n this.controlsContainer.append('span')\n .classed('tsi-playback-timestamp', true)\n .style('margin', `0 ${this.trackXOffset}px`);\n\n this.selectedTimeStamp = this.selectedTimeStamp || start;\n let handlePosition = this.timeStampToPosition(this.selectedTimeStamp);\n this.updateSelection(handlePosition, this.selectedTimeStamp);\n }\n\n play() {\n if (this.playbackInterval === null) {\n // Default to an interval if one is not provided. Also, the interval should\n // not be lower than the minimum playback interval.\n let playbackIntervalMs = Math.max(this.playbackSettings.intervalMillis || this.minimumPlaybackInterval, this.minimumPlaybackInterval);\n\n this.next();\n this.playbackInterval = window.setInterval(this.next.bind(this), playbackIntervalMs);\n this.playButton\n .classed('tsi-play-button', false)\n .classed('tsi-pause-button', true);\n }\n }\n\n pause() {\n // Pause only if component is in 'play' mode (i.e. an interval has ben set)\n // otherwise, do nothing.\n if (this.playbackInterval !== null) {\n window.clearInterval(this.playbackInterval);\n this.playbackInterval = null;\n this.playButton\n .classed('tsi-play-button', true)\n .classed('tsi-pause-button', false);\n }\n }\n\n next() {\n // If we've reached the end of the available time stamps, do nothing until \n // the end moves forward.\n if (this.selectedTimeStamp.valueOf() === this.end.valueOf()) {\n return;\n }\n\n let newValue = this.selectedTimeStamp.valueOf() + this.playbackSettings.stepSizeMillis;\n newValue = Math.min(newValue, this.end.valueOf());\n this.selectedTimeStamp = new Date(newValue);\n\n let handlePosition = this.timeStampToPosition(this.selectedTimeStamp);\n this.updateSelection(handlePosition, this.selectedTimeStamp);\n\n this.selectTimeStampCallback(this.selectedTimeStamp);\n }\n\n private clamp(number: number, min: number, max: number) {\n let clamped = Math.max(number, min);\n return Math.min(clamped, max);\n }\n\n private onDrag(positionX: number) {\n this.wasPlayingWhenDragStarted = this.wasPlayingWhenDragStarted ||\n (this.playbackInterval !== null);\n this.pause();\n\n let handlePosition = this.clamp(positionX, 0, this.trackWidth);\n this.selectedTimeStamp = this.timeStampToPosition.invert(handlePosition);\n\n this.updateSelection(handlePosition, this.selectedTimeStamp);\n }\n\n private onDragEnd() {\n this.selectTimeStampCallback(this.selectedTimeStamp);\n if (this.wasPlayingWhenDragStarted) {\n this.play();\n this.wasPlayingWhenDragStarted = false;\n }\n }\n\n private updateSelection(handlePositionX: number, timeStamp: Date) {\n this.track.select('.tsi-left-of-handle')\n .attr('x1', this.trackXOffset)\n .attr('x2', this.trackXOffset + handlePositionX);\n\n this.track.select('.tsi-right-of-handle')\n .attr('x1', this.trackXOffset + handlePositionX)\n .attr('x2', this.trackXOffset + this.trackWidth);\n\n this.handleElement\n .attr('cx', this.trackXOffset + handlePositionX);\n\n this.controlsContainer\n .select('.tsi-playback-timestamp')\n .text(this.timeFormatter(timeStamp));\n }\n}\n\nclass TimeAxis extends TemporalXAxisComponent {\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n }\n\n render(options, timeScale: d3.ScaleTime<number, number>) {\n this.chartOptions.setOptions(options);\n this.x = timeScale;\n\n if (this.chartOptions.xAxisHidden) { return; }\n\n let targetElement = d3.select(this.renderTarget);\n targetElement.html('');\n\n this.chartWidth = (<Element>targetElement.node()).clientWidth;\n\n this.xAxis = targetElement.append('svg')\n .classed('xAxis', true)\n .data([this.x]);\n\n this.drawXAxis(0, true, true);\n }\n}\n\nexport default PlaybackControls","import * as d3 from 'd3';\nimport { Component } from '../../interfaces/Component';\nimport Utils from '../../utils';\nimport './ColorPicker.scss';\nimport { KeyCodes } from '../../constants/Enums';\n\ninterface ColorPickerOptions {\n theme?: string,\n numberOfColors?: number,\n colors?: Array<string>,\n defaultColor?: string,\n isColorValueHidden?: boolean,\n onSelect?: (colorHex: string) => void,\n onClick?: (event: any) => void\n};\n\nclass ColorPicker extends Component {\n private colorPickerElem: any;\n private selectedColor: string | null;\n private isColorGridVisible: boolean;\n private componentId: string;\n\n constructor(renderTarget: Element, componentId: string = Utils.guid()) {\n super(renderTarget);\n this.componentId = componentId;\n }\n\n public render(options: ColorPickerOptions = {}) {\n this.chartOptions.setOptions(options);\n this.selectedColor = this.chartOptions.defaultColor;\n if (this.chartOptions.colors.indexOf(this.selectedColor) === -1) {\n this.chartOptions.colors.push(this.selectedColor);\n }\n\n this.colorPickerElem = d3.select(this.renderTarget).classed(\"tsi-colorPicker\", true);\n this.colorPickerElem.text('');\n super.themify(this.colorPickerElem, this.chartOptions.theme);\n\n // color selection button\n let colorPickerButton = this.colorPickerElem.append('button').classed(\"tsi-colorPickerButton\", true)\n .attr(\"title\", this.getString('Select color'))\n .attr(\"aria-label\", (this.selectedColor ? this.selectedColor : this.getString('No color')) + ' ' + this.getString('Select color'))\n .attr(\"aria-controls\", `tsi-colorGrid_${this.componentId}`)\n .on('click', (event) => {\n if (this.isColorGridVisible) {\n this.hideColorGrid(true);\n } else {\n this.chartOptions.onClick(event); this.showColorGrid();\n }\n });\n if (this.selectedColor) {\n colorPickerButton.append('div').classed(\"tsi-selectedColor\", true).style(\"background-color\", this.selectedColor);\n } else {\n colorPickerButton.append('div').classed(\"tsi-selectedColor\", true).classed(\"tsi-noColor\", true);\n }\n\n colorPickerButton.append('span').classed(\"tsi-selectedColorValue\", true).classed(\"hidden\", this.chartOptions.isColorValueHidden)\n .attr(\"id\", `tsi-selectedColorValue_${this.componentId}`)\n .text(this.selectedColor ? this.selectedColor : this.getString('No color'));\n\n // color grid\n let colorGridElem = this.colorPickerElem.append('div').classed(\"tsi-colorGrid\", true).attr(\"id\", `tsi-colorGrid_${this.componentId}`).attr(\"role\", \"grid\");\n let colorGridRowElem = colorGridElem.append('div').classed(\"tsi-colorGridRow\", true).attr(\"role\", \"row\");\n this.chartOptions.colors.forEach((c, idx) => {\n let gridItem = colorGridRowElem.append('div').classed(\"tsi-colorItem\", true).classed(\"tsi-selected\", c === this.selectedColor)\n .attr(\"tabindex\", 0)\n .attr(\"role\", \"gridcell\")\n .attr(\"aria-label\", c)\n .attr(\"aria-selected\", c === this.selectedColor)\n .style(\"background-color\", c)\n .on('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n this.chartOptions.onSelect(c); this.hideColorGrid(true); this.setSelectedColor(c, gridItem);\n })\n .on('keydown', (event) => {\n if (event.keyCode === KeyCodes.Tab && !event.shiftKey && idx === this.chartOptions.colors.length - 1) { // tab\n event.preventDefault();\n this.colorPickerElem.selectAll(\".tsi-colorItem\").nodes()[0].focus();\n } else if (event.keyCode === KeyCodes.Enter) {\n event.preventDefault();\n event.stopPropagation();\n this.chartOptions.onSelect(c);\n this.hideColorGrid(true);\n this.setSelectedColor(c, gridItem);\n } else if (event.keyCode === KeyCodes.Esc) {\n event.preventDefault();\n event.stopPropagation();\n this.hideColorGrid(true);\n }\n });\n });\n }\n\n public getSelectedColorValue = () => {\n return this.selectedColor;\n }\n\n private showColorGrid = () => {\n this.colorPickerElem.select(\".tsi-colorGrid\").style(\"display\", \"flex\");\n this.isColorGridVisible = true;\n this.colorPickerElem.selectAll(\".tsi-colorItem\").nodes()[0].focus();\n this.colorPickerElem.select(\".tsi-colorPickerButton\").attr(\"aria-expanded\", true);\n }\n\n public hideColorGrid = (withFocusBackToPickerButton: boolean = false) => {\n this.colorPickerElem.select(\".tsi-colorGrid\").style(\"display\", \"none\");\n this.isColorGridVisible = false;\n this.colorPickerElem.select(\".tsi-colorPickerButton\").attr(\"aria-expanded\", false);\n if (withFocusBackToPickerButton) {\n this.colorPickerElem.select(\".tsi-colorPickerButton\").node().focus();\n }\n }\n\n private setSelectedColor = (cStr, gridItem) => {\n this.colorPickerElem.select(\".tsi-selectedColor\").classed(\"tsi-noColor\", false);\n this.colorPickerElem.select(\".tsi-selectedColor\").style(\"background-color\", cStr);\n this.colorPickerElem.select(\".tsi-selectedColorValue\").text(cStr);\n this.colorPickerElem.select(\".tsi-colorItem.tsi-selected\").classed(\"tsi-selected\", false);\n this.colorPickerElem.select(\".tsi-colorItem.tsi-selected\").attr(\"aria-selected\", false);\n this.colorPickerElem.select(\".tsi-colorPickerButton\").attr(\"aria-label\", (this.selectedColor ? this.selectedColor : this.getString('No color')) + ' ' + this.getString('Select color'));\n gridItem.classed(\"tsi-selected\", true);\n gridItem.attr(\"aria-selected\", true);\n this.selectedColor = cStr;\n }\n\n public getColorPickerElem = () => {\n return this.colorPickerElem;\n }\n}\n\nexport default ColorPicker","// import * as atlas from \"azure-maps-control\";\nimport \"./GeoProcessGraphic.scss\";\nimport HistoryPlayback from \"./../../components/HistoryPlayback\";\nimport TsqExpression from \"../../models/TsqExpression\";\n\nclass GeoProcessGraphic extends HistoryPlayback {\n // private dataSource: atlas.source.DataSource;\n private azureMapsSubscriptionKey: string;\n private zoom: number;\n private width: number;\n private height: number;\n private theme: string;\n private center: Array<number>;\n private bearing: number;\n private pitch: number;\n private maxZoom: number;\n private minZoom: number;\n private duration: number;\n // private map: atlas.Map;\n\n constructor(renderTarget: Element) {\n super(renderTarget);\n this.currentCancelTrigger = null;\n }\n\n render(\n environmentFqdn: string,\n getToken: () => Promise<string>,\n data: Array<TsqExpression>,\n chartOptions\n ) {\n this.zoom = chartOptions.zoom;\n this.center = chartOptions.center;\n this.bearing = chartOptions.bearing;\n this.pitch = chartOptions.pitch;\n this.maxZoom = chartOptions.maxZoom;\n this.minZoom = chartOptions.minZoom;\n this.duration = chartOptions.duration;\n this.azureMapsSubscriptionKey = chartOptions.subscriptionKey;\n this.width = chartOptions.width;\n this.height = chartOptions.height;\n this.theme = chartOptions.theme;\n this.renderBase(environmentFqdn, getToken, data, chartOptions);\n }\n\n protected loadResources(): Promise<any> {\n (<HTMLElement>this.component.node()).style.width = `${this.width}px`;\n (<HTMLElement>this.component.node()).style.height = `${this.height}px`;\n\n // this.map = new atlas.Map(<HTMLElement>this.component.node(), {\n // authOptions: {\n // authType: atlas.AuthenticationType.subscriptionKey,\n // subscriptionKey: this.azureMapsSubscriptionKey,\n // },\n // });\n // this.map.events.add(\"ready\", () => {\n // this.dataSource = new atlas.source.DataSource();\n // this.map.sources.add(this.dataSource);\n\n // for (let i = 0; i < this.tsqExpressions.length; i++) {\n // let popup = new atlas.Popup({\n // content: `<div class = 'tsi-gpgPopUp id= tsi-popup${i}'></div>`,\n // pixelOffset: [0, -30],\n // });\n // let marker = new atlas.HtmlMarker({\n // htmlContent:\n // `<div class = tsi-geoprocess-graphic> <img class='tsi-gpgcircleImage\n // id= tsi-htmlMarker${i}' src= \"` +\n // this.tsqExpressions[i].image +\n // '\" /> </div>',\n // position: [0, 0],\n // popup: popup,\n // });\n // this.map.markers.add(marker);\n // this.map.popups.add(popup);\n // this.map.events.add(\"click\", marker, () => {\n // marker.togglePopup();\n // });\n // }\n // });\n // this.map.setCamera({\n // center: this.center,\n // bearing: this.bearing,\n // pitch: this.pitch,\n // zoom: this.zoom,\n // maxZoom: this.maxZoom,\n // minZoom: this.minZoom,\n // type: \"fly\",\n // duration: this.duration,\n // });\n return Promise.resolve();\n }\n\n protected draw() {\n this.drawBase();\n }\n\n protected getDataPoints(results: Array<IGeoProcessGraphicLabelInfo>) {\n // let dataPoints = results.map((r): IGeoProcessGraphicLabelInfo => {\n // // return this.parseTsqResponse(r);\n // });\n // this.updateDataMarkers(dataPoints);\n }\n\n protected parseTsqResponse(response) {\n let parsedResponse = {};\n if (response && response.properties) {\n for (let i = 0; i < response.properties.length; i++) {\n response.properties[i] &&\n response.properties[i].name &&\n response.properties[i].values\n ? (parsedResponse[response.properties[i].name] =\n response.properties[i].values[0])\n : null;\n }\n }\n return parsedResponse;\n }\n\n protected updateDataMarkers(dataPoints: Array<any>) {\n for (let i = 0; i < dataPoints.length; i++) {\n let lat = dataPoints[i][this.tsqExpressions[i].positionXVariableName];\n let lon = dataPoints[i][this.tsqExpressions[i].positionYVariableName];\n // this.map.markers.getMarkers()[i].setOptions({\n // position: [lat, lon],\n // });\n // let dataPointArr = Object.entries(dataPoints[i]);\n\n // this.map.popups.getPopups()[i].setOptions({\n // position: [lat, lon],\n // content: this.createTable(dataPointArr, i),\n // });\n }\n }\n\n protected createTable(dataPointArr, idx) {\n let gpgTooltipDiv = document.createElement(\"div\");\n gpgTooltipDiv.className = \"tsi-gpgTooltip tsi-\" + this.theme;\n\n let gpgTooltipInnerDiv = document.createElement(\"div\");\n gpgTooltipInnerDiv.className = \"tsi-gpgTooltipInner\";\n\n let gpgTooltipTitleDiv = document.createElement(\"div\");\n gpgTooltipTitleDiv.className = \"tsi-gpgTooltipTitle\";\n\n let title = document.createTextNode(this.tsqExpressions[idx].alias);\n gpgTooltipTitleDiv.appendChild(title);\n\n let gpgTooltipTable = document.createElement(\"table\");\n gpgTooltipTable.className = \"tsi-gpgTooltipValues\";\n gpgTooltipTable.classList.add(\"tsi-gpgTooltipTable\");\n\n for (let i = 0; i < dataPointArr.length; i++) {\n let spacer = document.createElement(\"tr\");\n spacer.className = \"tsi-gpgTableSpacer\";\n gpgTooltipTable.appendChild(spacer);\n\n let gpgTooltipValueRow = document.createElement(\"tr\");\n\n let gpgValueLabelCell = document.createElement(\"td\");\n gpgValueLabelCell.className = \"tsi-gpgValueLabel\";\n let labelName = document.createTextNode(dataPointArr[i][0]);\n gpgValueLabelCell.appendChild(labelName);\n gpgTooltipValueRow.appendChild(gpgValueLabelCell);\n\n let gpgValueCell = document.createElement(\"td\");\n gpgValueCell.className = \"tsi-gpgValueCell\";\n let cellData = document.createTextNode(dataPointArr[i][1].toFixed(5));\n gpgValueCell.appendChild(cellData);\n gpgTooltipValueRow.appendChild(gpgValueCell);\n\n gpgTooltipTable.appendChild(gpgTooltipValueRow);\n }\n gpgTooltipInnerDiv.appendChild(gpgTooltipTitleDiv);\n gpgTooltipInnerDiv.appendChild(gpgTooltipTable);\n gpgTooltipDiv.appendChild(gpgTooltipInnerDiv);\n return gpgTooltipDiv;\n }\n}\ninterface IGeoProcessGraphicLabelInfo { }\nexport default GeoProcessGraphic;\n","import LineChart from \"./components/LineChart/LineChart\";\nimport AvailabilityChart from \"./components/AvailabilityChart/AvailabilityChart\";\nimport PieChart from \"./components/PieChart/PieChart\";\nimport ScatterPlot from \"./components/ScatterPlot/ScatterPlot\";\nimport GroupedBarChart from \"./components/GroupedBarChart/GroupedBarChart\";\nimport Grid from \"./components/Grid/Grid\";\nimport Slider from \"./components/Slider/Slider\";\nimport Hierarchy from \"./components/Hierarchy/Hierarchy\";\nimport AggregateExpression from \"./models/AggregateExpression\";\nimport Heatmap from \"./components/Heatmap/Heatmap\";\nimport EventsTable from \"./components/EventsTable/EventsTable\";\nimport ModelSearch from \"./components/ModelSearch/ModelSearch\";\nimport DateTimePicker from \"./components/DateTimePicker/DateTimePicker\";\nimport TimezonePicker from \"./components/TimezonePicker/TimezonePicker\";\nimport Utils from \"./utils\";\nimport './styles/index.scss'\nimport EllipsisMenu from \"./components/EllipsisMenu/EllipsisMenu\";\nimport TsqExpression from \"./models/TsqExpression\";\nimport ModelAutocomplete from \"./components/ModelAutocomplete/ModelAutocomplete\";\nimport HierarchyNavigation from \"./components/HierarchyNavigation/HierarchyNavigation\";\nimport SingleDateTimePicker from \"./components/SingleDateTimePicker/SingleDateTimePicker\";\nimport DateTimeButtonSingle from \"./components/DateTimeButtonSingle/DateTimeButtonSingle\";\nimport DateTimeButtonRange from \"./components/DateTimeButtonRange/DateTimeButtonRange\";\nimport ProcessGraphic from './components/ProcessGraphic/ProcessGraphic';\nimport PlaybackControls from './components/PlaybackControls/PlaybackControls';\nimport ColorPicker from \"./components/ColorPicker/ColorPicker\";\nimport GeoProcessGraphic from \"./components/GeoProcessGraphic/GeoProcessGraphic\";\n\nclass UXClient {\n UXClient() {\n }\n\n // Public facing components have class constructors exposed as public UXClient members.\n // This allows for typings to be bundled while maintaining 'new Component()' syntax\n public DateTimePicker: typeof DateTimePicker = DateTimePicker;\n public PieChart: typeof PieChart = PieChart;\n public ScatterPlot: typeof ScatterPlot = ScatterPlot;\n public BarChart: typeof GroupedBarChart = GroupedBarChart;\n public LineChart: typeof LineChart = LineChart;\n public AvailabilityChart: typeof AvailabilityChart = AvailabilityChart;\n public Grid: typeof Grid = Grid;\n public Slider: typeof Slider = Slider;\n public Hierarchy: typeof Hierarchy = Hierarchy;\n public AggregateExpression: typeof AggregateExpression = AggregateExpression;\n public TsqExpression: typeof TsqExpression = TsqExpression;\n public Heatmap: typeof Heatmap = Heatmap;\n public EventsTable: typeof EventsTable = EventsTable;\n public ModelSearch: typeof ModelSearch = ModelSearch;\n public ModelAutocomplete: typeof ModelAutocomplete = ModelAutocomplete;\n public HierarchyNavigation: typeof HierarchyNavigation = HierarchyNavigation;\n public TimezonePicker: typeof TimezonePicker = TimezonePicker;\n public EllipsisMenu: typeof EllipsisMenu = EllipsisMenu;\n public SingleDateTimePicker: typeof SingleDateTimePicker = SingleDateTimePicker;\n public DateTimeButtonSingle: typeof DateTimeButtonSingle = DateTimeButtonSingle;\n public DateTimeButtonRange: typeof DateTimeButtonRange = DateTimeButtonRange;\n public ProcessGraphic: typeof ProcessGraphic = ProcessGraphic;\n public PlaybackControls: typeof PlaybackControls = PlaybackControls;\n public ColorPicker: typeof ColorPicker = ColorPicker;\n public GeoProcessGraphic: typeof GeoProcessGraphic = GeoProcessGraphic;\n\n public transformTsxToEventsArray(events, options) {\n var timezoneOffset = options.timezoneOffset ? options.timezoneOffset : 0;\n var rows: any[] = [];\n var eventSourceProperties = {};\n var nameToStrippedPropName = {};\n var valueToStrippedValueMap = {};\n for (var eventIdx in events) {\n var eventSourceId;\n if (events[eventIdx].hasOwnProperty('schema')) {\n eventSourceProperties[events[eventIdx].schema.rid] = {};\n eventSourceProperties[events[eventIdx].schema.rid].propertyNames = events[eventIdx].schema.properties.reduce(function (prev, curr) {\n prev.push({ name: curr.name, type: curr.type });\n return prev;\n }, []);\n eventSourceProperties[events[eventIdx].schema.rid].eventSourceName = events[eventIdx].schema['$esn'];\n eventSourceId = events[eventIdx].schema.rid;\n } else {\n eventSourceId = events[eventIdx].schemaRid;\n }\n\n var timeStamp = (new Date((new Date(events[eventIdx]['$ts'])).valueOf() - timezoneOffset)).toISOString().slice(0, -1).replace('T', ' ');\n var event = { 'timestamp ($ts)': timeStamp };\n\n // lts logic\n var lts = events[eventIdx]['$lts'] ? events[eventIdx]['$lts'] : null;\n if (lts) {\n event['LocalTimestamp_DateTime'] = {\n value: lts.replace('T', ' '),\n name: 'LocalTimestamp',\n type: 'DateTime'\n }\n }\n\n event[\"EventSourceName_String\"] = {\n value: eventSourceProperties[eventSourceId].eventSourceName,\n name: 'EventSourceName',\n type: 'String'\n };\n for (var propIdx in eventSourceProperties[eventSourceId].propertyNames) {\n var name = eventSourceProperties[eventSourceId].propertyNames[propIdx].name;\n if (!nameToStrippedPropName.hasOwnProperty(name))\n nameToStrippedPropName[name] = Utils.stripForConcat(name);\n var strippedName = nameToStrippedPropName[name];\n var type = eventSourceProperties[eventSourceId].propertyNames[propIdx].type;\n var columnNameAndType = strippedName + \"_\" + type;\n if (!valueToStrippedValueMap.hasOwnProperty(String(events[eventIdx].values[propIdx])))\n valueToStrippedValueMap[String(events[eventIdx].values[propIdx])] = Utils.stripForConcat(String(events[eventIdx].values[propIdx]));\n var eventObject = {\n value: valueToStrippedValueMap[String(events[eventIdx].values[propIdx])],\n name: strippedName,\n type: type\n }\n event[columnNameAndType] = eventObject;\n }\n if (events[eventIdx].hasOwnProperty('$op')) {\n let defaultType = 'String';\n let otherProps = JSON.parse(events[eventIdx]['$op']);\n Object.keys(otherProps).forEach((propNameRaw) => {\n let strippedNameOP = Utils.stripForConcat(propNameRaw);\n let columnNameAndTypeOP = strippedNameOP + '_String';\n event[columnNameAndTypeOP] = {\n value: otherProps[propNameRaw],\n name: strippedNameOP,\n type: defaultType\n }\n });\n }\n rows.push(event);\n }\n return rows;\n }\n\n private toISONoMillis(dateTime) {\n return dateTime.toISOString().slice(0, -5) + \"Z\";\n }\n\n //specifiedRange gives the subset of availability buckets to be returned. If not included, will return all buckets\n public transformAvailabilityForVisualization(availabilityTsx: any): Array<any> {\n var from = new Date(availabilityTsx.range.from);\n var to = new Date(availabilityTsx.range.to);\n var rawBucketSize = Utils.parseTimeInput(availabilityTsx.intervalSize);\n\n var buckets = {};\n var startBucket = Math.round(Math.floor(from.valueOf() / rawBucketSize) * rawBucketSize);\n var firstKey = this.toISONoMillis(new Date(startBucket));\n var firstCount = availabilityTsx.distribution[firstKey] ? availabilityTsx.distribution[firstKey] : 0;\n\n // reset first key if greater than the availability range from\n if (startBucket < (new Date(availabilityTsx.range.from)).valueOf())\n firstKey = this.toISONoMillis(new Date(availabilityTsx.range.from));\n buckets[firstKey] = { count: firstCount }\n\n Object.keys(availabilityTsx.distribution).forEach(key => {\n var formattedISO = this.toISONoMillis(new Date(key));\n buckets[formattedISO] = { count: availabilityTsx.distribution[key] };\n });\n\n //set end time value\n var lastBucket = Math.round(Math.floor(to.valueOf() / rawBucketSize) * rawBucketSize);\n\n // pad out if range is less than one bucket;\n if (startBucket == lastBucket) {\n for (var i = startBucket; i <= startBucket + rawBucketSize; i += (rawBucketSize / 60)) {\n if (buckets[this.toISONoMillis(new Date(i))] == undefined)\n buckets[this.toISONoMillis(new Date(i))] = { count: 0 };\n }\n //reset startBucket to count 0 if not the start time\n if (startBucket != from.valueOf()) {\n buckets[this.toISONoMillis(new Date(startBucket))] = { count: 0 }\n }\n }\n return [{ \"availabilityCount\": { \"\": buckets } }];\n }\n\n public transformAggregatesForVisualization(aggregates: Array<any>, options): Array<any> {\n var result: any[] = [];\n aggregates.forEach((agg, i) => {\n var transformedAggregate = {};\n var aggregatesObject = {};\n transformedAggregate[options[i].alias] = aggregatesObject;\n\n if (agg.hasOwnProperty('__tsiError__'))\n transformedAggregate[''] = {};\n else if (agg.hasOwnProperty('aggregate')) {\n agg.dimension.forEach((d, j) => {\n var dateTimeToValueObject = {};\n aggregatesObject[d] = dateTimeToValueObject;\n agg.aggregate.dimension.forEach((dt, k) => {\n var measuresObject = {};\n dateTimeToValueObject[dt] = measuresObject;\n options[i].measureTypes.forEach((t, l) => {\n if (agg.aggregate.measures[j][k] != null && agg.aggregate.measures[j][k] != undefined &&\n agg.aggregate.measures[j][k][l] != null && agg.aggregate.measures[j][k][l] != undefined)\n measuresObject[t] = agg.aggregate.measures[j][k][l];\n else\n measuresObject[t] = null;\n })\n })\n })\n }\n else {\n var dateTimeToValueObject = {};\n aggregatesObject[''] = dateTimeToValueObject;\n agg.dimension.forEach((dt, j) => {\n var measuresObject = {};\n dateTimeToValueObject[dt] = measuresObject;\n options[i].measureTypes.forEach((t, l) => {\n measuresObject[t] = agg.measures[j][l];\n })\n })\n }\n\n result.push(transformedAggregate);\n });\n return result;\n }\n\n // exposed publicly to use for highlighting elements in the well on hover/focus\n public createEntityKey(aggName: string, aggIndex: number = 0) {\n return Utils.createEntityKey(aggName, aggIndex);\n }\n\n public transformTsqResultsToEventsArray(results) {\n let flattenedResults: any[] = [];\n results.forEach(tsqr => {\n tsqr.timestamps.forEach((ts, idx) => {\n let event = {};\n event['timestamp ($ts)'] = ts;\n tsqr.properties.forEach(p => {\n event[`${p.name}_${p.type}`] = { name: p.name, type: p.type, value: p.values[idx] };\n });\n flattenedResults.push(event);\n });\n });\n return flattenedResults.sort((a, b) => (new Date(a['timestamp ($ts)'])).valueOf() < (new Date(b['timestamp ($ts)'])).valueOf() ? -1 : 1);\n }\n}\n\n\nexport default UXClient"],"names":["this","moment","HierarchyNode"],"mappings":";;;;;;;;AAAA,IAAY,QAMX;AAND,CAAA,UAAY,QAAQ,EAAA;AAChB,IAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ;AACR,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,GAAA,OAAU;AACV,IAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,GAAA,EAAA,CAAA,GAAA,IAAO;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAS;AACb,CAAC,EANW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AAQpB;AACA,IAAY,aAA0D;AAAtE,CAAA,UAAY,aAAa,EAAA;AAAE,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAAE,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AAAA,CAAC,EAA1D,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AACzB,IAAY,iBAA0E;AAAtF,CAAA,UAAY,iBAAiB,EAAA;AAAE,IAAA,iBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAAE,IAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AAAA,CAAC,EAA1E,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;AAC7B,IAAY,eAAoF;AAAhG,CAAA,UAAY,eAAe,EAAA;AAAE,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AAAE,IAAA,eAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AAAA,CAAC,EAApF,eAAe,KAAf,eAAe,GAAA,EAAA,CAAA,CAAA;AAC3B,IAAY,qBAAkG;AAA9G,CAAA,UAAY,qBAAqB,EAAA;AAAE,IAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAAE,IAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAAE,IAAA,qBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AAAE,IAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AAAA,CAAC,EAAlG,qBAAqB,KAArB,qBAAqB,GAAA,EAAA,CAAA,CAAA;AACjC,IAAY,UAAsD;AAAlE,CAAA,UAAY,UAAU,EAAA;AAAE,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,UAAoB;AAAE,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAAA,CAAC,EAAtD,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAEtB,IAAY,sBAUX;AAVD,CAAA,UAAY,sBAAsB,EAAA;AAC9B,IAAA,sBAAA,CAAA,MAAA,CAAA,GAAA,EAAS;AACT,IAAA,sBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,sBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,sBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,sBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,sBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,sBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,sBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,sBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACvC,CAAC,EAVW,sBAAsB,KAAtB,sBAAsB,GAAA,EAAA,CAAA,CAAA;AAYlC,IAAY,UAGX;AAHD,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACrC,CAAC,EAHW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;AAKtB;AACA,IAAY,WAA2E;AAAvF,CAAA,UAAY,WAAW,EAAA;AAAG,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAAE,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAAE,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAAC,CAAC,EAA3E,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AACvB,IAAY,SAAiF;AAA7F,CAAA,UAAY,SAAS,EAAA;AAAG,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAAE,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAAE,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAAC,CAAC,EAAjF,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AACrB,IAAY,iBAAgE;AAA5E,CAAA,UAAY,iBAAiB,EAAA;AAAG,IAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAAE,IAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AAAC,CAAC,EAAhE,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;AAC7B,IAAY,oBAAkG;AAA9G,CAAA,UAAY,oBAAoB,EAAA;AAAG,IAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AAAE,IAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAAE,IAAA,oBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAAC,CAAC,EAAlG,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;AAChC,IAAY,UAAmI;AAA/I,CAAA,UAAY,UAAU,EAAA;AAAG,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAAE,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAAE,IAAA,UAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AAAE,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAAE,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAAE,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AAAC,CAAC,EAAnI,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;ACnCf,MAAM,iCAAiC,GAAG;AAC7C,IAAA,iBAAiB,EAAE,EAAE;AACrB,IAAA,mBAAmB,EAAE,EAAE;AACvB,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,sBAAsB,EAAE,KAAK;IAC7B,aAAa,EAAE,aAAa,CAAC,WAAW;IACxC,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ;IAC7C,eAAe,EAAE,eAAe,CAAC;CACpC;AAOM,MAAM,qBAAqB,GAAG,MAAM;AAEpC,MAAM,sBAAsB,GAAG;AAClC,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,0BAA0B,EAAE,CAAC;AAC7B,IAAA,gBAAgB,EAAE;CACrB;AAEM,MAAM,wCAAwC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAEzM,MAAM,mBAAmB,GAAG,CAAC;AAC7B,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,kBAAkB,GAAG,mBAAmB;AAC9C,MAAM,qBAAqB,GAAG;AACjC,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,KAAK,EAAE;CACV;AACM,MAAM,gBAAgB,GAAG,CAAC;AAC1B,MAAM,wBAAwB,GAAG,EAAE;AACnC,MAAM,cAAc,GAAG,CAAC;AACxB,MAAM,gBAAgB,GAAG,EAAE;;AC/BlC,MAAqB,KAAK,CAAA;IAGtB,OAAO,iBAAiB,CAAC,GAAW,EAAA;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ;gBACxB,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;iBAC5B;;gBAED,IAAI,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;gBACtC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE;oBAC9B,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,oBAAA,OAAO,QAAQ,IAAI,GAAG,EAAE;wBACpB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;wBAClC,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC9C;oBACA,IAAI,QAAQ,IAAI,GAAG;wBACf,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1C;AACA,gBAAA,OAAO,SAAS;YACpB;QACJ;AACK,aAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU;YAC3D,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,aAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,aAAa;YACjE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;QACpD,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IACjC;AAEA,IAAA,OAAO,cAAc,GAAA;AACjB,QAAA,OAAO,WAAW;IACtB;;IAGA,OAAO,cAAc,CAAC,WAAmB,EAAA;AACrC,QAAA,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE;AACvC,QAAA,IAAI,SAAS,GAAG,CAAC,WAAW,EAAE,YAAY,KAAI;AAC1C,YAAA,IAAI,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9F,YAAA,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;AAChF,QAAA,CAAC;AACD,QAAA,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,YAAA,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QACpC;AACA,QAAA,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,IAAI;QAC3C;AACA,QAAA,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI;QAChD;AACA,QAAA,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACpD,YAAA,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QACrD;AACA,QAAA,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACpD,YAAA,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAC1D;QACA,OAAO,EAAE;IACb;AAEA,IAAA,OAAO,eAAe,CAAC,UAAkB,EAAE,OAAY,EAAA;QACnD,IAAI,WAAW,GAAG,QAAQ;QAC1B,IAAI,YAAY,GAAG,IAAI;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,KAAI;AAClD,YAAA,IAAI,cAAc,GAAG,MAAM,CAAC,oBAAoB,CAAC;YACjD,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,WAAW,EAAE;gBACrD,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC;gBACnD,YAAY,GAAG,cAAc;YACjC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,YAAY;IACvB;AAGA,IAAA,OAAO,iBAAiB,CAAC,CAAM,EAAE,cAAsB,EAAA;AACnD,QAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,SAAS;AAC7E,gBAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;QACzC;AACA,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,OAAO,SAAS,CAAC,gBAAwB,IAAI,EAAE,aAAkB,IAAI,EAAA;AACjE,QAAA,QAAQ,aAAa,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI;IACrF;IAEA,OAAO,UAAU,CAAC,WAAmB,EAAE,aAAA,GAAqB,IAAI,EAAE,UAAA,GAAkB,IAAI,EAAA;QACpF,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE;YAC3C,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;QACtF;AAEA,QAAA,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/E,YAAA,OAAO,CAAC;QACZ;AACA,QAAA,IAAI,MAAc;AAClB,QAAA,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAClD,YAAA,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9G;aAAO;AACH,YAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;QAC7C;QACA,OAAO,CAAC,MAAM;IAClB;AAEA,IAAA,OAAO,+BAA+B,CAAC,UAAU,EAAE,UAAU,EAAA;QACzD,IAAI,eAAe,GAAG,cAAc;AACpC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,eAAe,IAAI,UAAU,CAAC,GAAG,UAAU,GAAG,eAAe;IACjG;IAEA,OAAO,uBAAuB,CAAC,UAAkB,EAAA;QAC7C,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,IAAI;QAAE;QAChC,IAAI,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC;AACzD,QAAA,IAAI,gBAAgB,GAAG,CAAC,MAAM,KAAI;AAC9B,YAAA,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;AACnC,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;AACzB,gBAAA,cAAc,GAAG,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,cAAc;AAChF,YAAA,OAAO,cAAc;AACzB,QAAA,CAAC;AACD,QAAA,IAAI,kBAAkB,GAAG,IAAI,EAAE;AAC3B,YAAA,UAAU,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,GAAG,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,GAAG;QACzH;QACA,IAAI,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,IAAI;QACtE,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,WAAW,EAAE;IAC9C;AAEA,IAAA,OAAO,eAAe,CAAC,OAAe,EAAE,QAAgB,EAAA;AACpD,QAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,QAAQ;IAC5E;AAEA,IAAA,OAAO,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,EAAA;AAC3C,QAAA,IAAI,gBAAgB,CAAC,YAAY,KAAK,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,EAAE;YACvF,OAAO,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK;QACrD;AACA,QAAA,OAAO,IAAI;IACf;IAEA,OAAO,gBAAgB,CAAC,IAAI,EAAA;AACxB,QAAA,IAAI,oBAAoB,GAAG,CAAC,EAAE,EAAE,EAAE,KAAI;YAClC,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AAC9B,gBAAA,OAAO,KAAK;YAChB;YACA,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;AACrE,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAI;AAC/C,gBAAA,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC,EAAE,IAAI,CAAC;AACZ,QAAA,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,gBAAA,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD;AACA,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,CAAC;IACN;IAEA,OAAO,mBAAmB,CAAC,MAAM,EAAA;AAC7B,QAAA,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;YAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG;aAC5B,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;IAE1D;AAEA,IAAA,OAAO,gBAAgB,CAAC,MAAW,EAAE,MAAc,EAAA;AAC/C,QAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AACnB,YAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3D;QACA,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAa,CAAC,EAAE;AACnD,YAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAChD;aAAO;AACH,YAAA,OAAO,MAAM;QACjB;IACJ;IAEA,OAAO,SAAS,CAAC,IAAU,EAAA;AACvB,QAAA,IAAI,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACnF,QAAA,OAAO,aAAa;IACxB;;AAGA,IAAA,OAAO,eAAe,CAAC,MAAW,EAAE,cAAsB,EAAA;AACtD,QAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AACnB,YAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC;QACtE;QACA,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAa,CAAC,EAAE;AACnD,YAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC;QAC3D;aAAO;YACH,OAAO,CAAC,MAAM;QAClB;IACJ;IAEA,OAAO,cAAc,CAAC,YAAY,EAAA;QAC9B,IAAI,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QACpC,OAAO,KAAK,GAAG,SAAS;IAC5B;IAEA,OAAO,oBAAoB,CAAC,YAAY,EAAA;AACpC,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1D,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;AAClC,YAAA,OAAO,EAAE;AACb,QAAA,OAAO,IAAI;IACf;IAEA,OAAO,0BAA0B,CAAC,MAAM,EAAA;QACpC,IAAI,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;QAC9C,IAAI,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAC/D,QAAQ,oBAAoB,CAAC,MAAM,KAAK,CAAC,GAAG,oBAAoB,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;IACrG;IAEA,OAAO,iBAAiB,CAAC,WAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;AACrB,YAAA,IAAI,WAAW,KAAK,CAAC,EAAE;AACnB,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,OAAO,EAAE;QACb;AACA,QAAA,IAAI,WAAW,IAAI,OAAO,EAAE;AACxB,YAAA,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAC5B;QACA,OAAO,WAAW,KAAK,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;IACvE;AAEA,IAAA,OAAO,sBAAsB,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,EAAA;QACvD,IAAI,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QACnD,IAAI,WAAW,GAAG,EAAE;QACpB,IAAI,YAAY,GAAG,EAAE;AACrB,QAAA,IAAI,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAA,WAAW,GAAG,SAAS,GAAG,KAAK;QACnC;AACA,QAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;YACpB,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,GAAG;QACjE;QACA,IAAI,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;QAClE,IAAI,cAAc,GAAG,CAAC,oBAAoB,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,oBAAoB,KAAK,KAAK,IAAI,IAAI,GAAG,oBAAoB,GAAG,EAAE;AACrJ,QAAA,OAAO,YAAY,GAAG,GAAG,GAAG,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,cAAc;IAC9F;IAEA,OAAO,eAAe,CAAC,WAAmB,EAAA;QAEtC,IAAI,SAAS,GAAG,IAAI;AACpB,QAAA,IAAI,SAAS,GAAG,EAAE,GAAG,IAAI;AACzB,QAAA,IAAI,OAAO,GAAG,SAAS,GAAG,EAAE;AAC5B,QAAA,IAAI,MAAM,GAAG,OAAO,GAAG,EAAE;QAEzB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;AAC3C,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;AAClD,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,EAAE;AACtD,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,EAAE;QACtD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AAE3C,QAAA,IAAI,WAAW,IAAI,MAAM,EAAE;YACvB,OAAO,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,EAAE,CAAC;QACzD;AAAO,aAAA,IAAI,WAAW,IAAI,OAAO,EAAE;YAC/B,OAAO,KAAK,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;QAC9D;AAAO,aAAA,IAAI,WAAW,IAAI,SAAS,EAAE;YACjC,OAAO,OAAO,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;QAChE;AACK,aAAA,IAAI,WAAW,IAAI,SAAS,EAAE;AAC/B,YAAA,OAAO,OAAO,IAAI,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG;QAC5D;QACA,OAAO,MAAM,GAAG,IAAI;IACxB;AAEA,IAAA,OAAO,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAA;QAC1D,OAAO,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;IACxI;;IAEA,OAAO,UAAU,CAAC,WAAW,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE,MAAA,GAAc,CAAC,EAAE,YAAA,GAAwB,IAAI,EAAE,WAAA,GAAsB,IAAI,EAAE,UAAA,GAAqB,IAAI,EAAE,MAAM,GAAG,IAAI,EAAA;QAC1K,OAAO,CAAC,CAAC,KAAI;AACT,YAAA,IAAI,WAAW,KAAK,CAAC,EAAE;gBACnB,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC;YAC3C;AACA,YAAA,IAAI,YAAY;AAChB,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;gBACrB,YAAY,GAAG,UAAU;YAC7B;iBAAO;AACH,gBAAA,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC;YACvF;YACA,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAa,CAAC,EAAE;AACnD,gBAAA,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YACtH;iBAAO;gBACH,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YACpF;AACJ,QAAA,CAAC;IACL;IAEA,OAAO,cAAc,CAAC,IAAS,EAAA;AAE3B,QAAA,IAAI,WAAW,GAAG,CAAC,GAAG,KAAI;YACtB,IAAI,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/B,YAAA,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,MAAM,UAAU,CAAC,MAAM,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAC1H,QAAA,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,YAAA;AACN,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;gBACzD,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC1B,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClC,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AAC1B,oBAAA,IAAI,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC1E,IAAI,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO;AACzB,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;yBACX,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,yBAAA,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI;yBACpB,IAAI,CAAC,YAAY,CAAC;AACvB,oBAAA,IAAI,CAAC,MAAM,CAAC,OAAO;AACd,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;yBACX,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,yBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI;yBACjC,IAAI,CAAC,aAAa,CAAC;gBAC5B;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,OAAO,WAAW,CAAC,CAAO,EAAE,eAAwB,IAAI,EAAA;AACpD,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE;QAC3B,IAAI,CAAC,YAAY,EAAE;YACf,IAAI,KAAK,IAAI,CAAC;gBACV,KAAK,GAAG,EAAE;YACd,IAAI,KAAK,GAAG,EAAE;AACV,gBAAA,KAAK,GAAG,KAAK,GAAG,EAAE;QAC1B;AACA,QAAA,OAAO,KAAK;IAChB;IAEA,OAAO,mBAAmB,CAAC,CAAO,EAAA;QAC9B,IAAI,KAAK,GAAW,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,OAAO,GAAW,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;AACrF,QAAA,IAAI,IAAI,GAAW,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI;QACvD,OAAO,KAAK,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI;IAC7C;AAEA,IAAA,OAAO,YAAY,CAAC,YAAiB,EAAE,IAAY,EAAE,OAAe,EAAA;QAChE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,KAAK;IAC9F;AACA,IAAA,OAAO,mBAAmB,CAAC,YAAiB,EAAE,IAAY,EAAE,OAAe,EAAA;QACvE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW;IAC3D;AAEA,IAAA,OAAO,oBAAoB,CAAC,UAAkB,EAAE,SAAc,EAAA;AAC1D,QAAA,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG;AACvB,aAAA,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAClC,QAAA,IAAI,UAAU,IAAI,OAAO,EAAE;AACvB,YAAA,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB;iBACjC,MAAM,CAAC,MAAM;AACb,iBAAA,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,iBAAA,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC;QACxC;AACK,aAAA,IAAI,UAAU,IAAI,OAAO,EAAE;AAC5B,YAAA,CAAC,CAAC,MAAM,CAAC,MAAM;AACV,iBAAA,IAAI,CAAC,OAAO,EAAE,EAAE;AAChB,iBAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3B;AACK,aAAA;AACD,YAAA,CAAC,CAAC,MAAM,CAAC,MAAM;AACV,iBAAA,IAAI,CAAC,GAAG,EAAE,wBAAwB;AAClC,iBAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;QAC7B;IACJ;IAEA,OAAO,KAAK,CAAC,IAAI,EAAA;QACb,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACvC,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI;QACpB,IAAI,WAAW,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,SAAS,IAAI,EAAE;AACxD,QAAA,OAAO,WAAW;IACtB;IAEA,OAAO,cAAc,CAAC,IAAI,EAAA;AACtB,QAAA,IAAI,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACtD,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAG,EAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC;AACjE,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,OAAO,0BAA0B,CAAC,QAAQ,EAAE,YAAqB,KAAK,EAAA;QAClE,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,IAAI,sBAAsB,GAAG,aAAa,CAAC,SAAS,KAAK,EAAE,IAAI,aAAa,CAAC,aAAa;YAC1F,IAAI,aAAa,GAAG,CAAA,EAAG,aAAa,CAAC,OAAO,CAAA,EAAG,CAAC,sBAAsB,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,EAAE,CAAA,CAAE;AACnG,YAAA,KAAK,CAAC,iCAAiC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC;QAC3F;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE;AACnC,YAAA,QAAQ,CAAC,MAAM,CAAC,gBAAgB;iBAC3B,IAAI,CAAC,CAAC,IAAG;gBACN,OAAO,CAAA,EAAG,aAAa,CAAC,SAAS,GAAG,CAAC,aAAa,CAAC,aAAa,IAAI,CAAC,SAAS,IAAI,IAAI,GAAG,EAAE,CAAA,CAAE;AACjG,YAAA,CAAC,CAAC;QACV;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE;AACvC,YAAA,QAAQ,CAAC,MAAM,CAAC,oBAAoB;iBAC/B,IAAI,CAAC,CAAC,IAAI,aAAa,CAAC,aAAa,CAAC;QAC/C;IACJ;AAEA,IAAA,OAAO,qBAAqB,CAAC,YAAY,EAAE,OAAO,GAAG,CAAC,EAAA;QAClD,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK;AACvC,aAAA,KAAK,CAAC,SAAS,EAAE,OAAO;AACxB,aAAA,IAAI,CAAC,YAAA;AACF,YAAA,IAAI,CAAC,0BAA0B,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,KAAK,CAAC;AAC7F,QAAA,CAAC,CAAC;IACV;AAEA,IAAA,OAAO,cAAc,CAAC,SAAiB,EAAE,gBAA0B,IAAI,EAAA;AACnE,QAAA,IAAI,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS;YAClH,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QACrE,IAAI,iBAAiB,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;QAC9H,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,WAAW,GAAG,CAAC;AACnB,QAAA,IAAI,aAAa,EAAE;AACf,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,IAAI,WAAW,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AACtE,gBAAA,IAAI,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC;gBAC5B,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE;AAC9B,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClB,oBAAA,WAAW,EAAE;gBACjB;YACJ;QACJ;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAA,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE;AAC1B,gBAAA,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;oBACzC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC7B,oBAAA,WAAW,EAAE;gBACjB;YACJ;AACK,iBAAA,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;gBAClD,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACjC,gBAAA,WAAW,EAAE;YACjB;QACJ;AACA,QAAA,OAAO,MAAM;IACjB;IAEA,OAAO,gBAAgB,CAAC,IAAU,EAAA;AAC9B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1E;IAEA,OAAO,4BAA4B,CAAC,IAAU,EAAA;QAC1C,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/E,QAAA,OAAO,QAAQ;IACnB;AAEA,IAAA,OAAO,aAAa,CAAC,IAAU,EAAE,MAAM,GAAG,CAAC,EAAA;AACvC,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAClE,QAAA,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC;AACnE,QAAA,OAAO,QAAQ;IACnB;AAEA,IAAA,OAAO,WAAW,CAAC,IAAU,EAAE,MAAM,GAAG,CAAC,EAAA;AACrC,QAAA,IAAI,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAClE,QAAA,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC;AACnE,QAAA,OAAO,QAAQ;IACnB;AAGA,IAAA,OAAO,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAA;AAC1C,QAAA,IAAI,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACpE,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,MAAM,EAAE;AAC1D,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;AACzE,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;IAC5B;IAEA,OAAO,gBAAgB,CAAC,KAAa,EAAA;QACjC,IAAI,QAAQ,GAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE;AACjB,YAAA,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACzC;AACA,QAAA,OAAO,QAAQ,CAAC,QAAQ,EAAE;IAE9B;IAEA,OAAO,mBAAmB,CAAC,YAAiB,EAAE,MAAc,EAAE,kBAA2B,KAAK,EAAA;AAC1F,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC;YACzD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,SAAS,GAAY,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,KAAa;YAClF,IAAI,OAAO,IAAI,MAAM;AACjB,gBAAA,OAAO,KAAK;YAChB,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK;gBACzC,OAAO,KAAK,IAAI,IAAI;AACxB,YAAA,OAAO,KAAK;QAChB,CAAC,EAAE,IAAI,CAAC;AACR,QAAA,IAAI,SAAS,IAAI,CAAC,eAAe,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QACpF;QACA,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK;QACzC,IAAI,gBAAgB,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;aACnG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,MAAM,GAAG,EAAE;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3E,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,YAAA,QAAQ,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrC;AACA,QAAA,OAAO,MAAM;IACjB;IAEA,OAAO,YAAY,CAAC,YAAiB,EAAE,YAAoB,EAAE,MAAc,EAAE,eAAA,GAA2B,KAAK,EAAA;AACzG,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC;AACzD,YAAA,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK;AAErC,QAAA,IAAI,SAAS,GAAY,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,KAAa;YAClF,IAAI,OAAO,IAAI,MAAM;AACjB,gBAAA,OAAO,KAAK;YAChB,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK;gBACzC,OAAO,KAAK,IAAI,IAAI;AACxB,YAAA,OAAO,KAAK;QAChB,CAAC,EAAE,IAAI,CAAC;AAER,QAAA,IAAI,SAAS,IAAI,CAAC,eAAe,EAAE;YAC/B,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7F,YAAA,OAAO,aAAa,CAAC,YAAY,CAAC;QACtC;QAEA,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK;QACzC,IAAI,gBAAgB,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;aACnG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,QAAA,QAAQ,CAAC,CAAC,GAAG,gBAAgB,CAAC,YAAY,CAAC;AAC3C,QAAA,OAAO,QAAQ,CAAC,SAAS,EAAE;IAC/B;IAEA,OAAO,QAAQ,CAAC,KAAU,EAAA;QACtB,OAAO,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU;IAC9C;AAEA,IAAA,OAAO,cAAc,GAAA;AACjB,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,GAAS,QAAS,CAAC,SAAS;QACjF,IAAI,GAAG,EAAE;AACL,YAAA,IAAI,GAAG,CAAC,eAAe,EAAE;gBACrB,GAAG,CAAC,eAAe,EAAE;YACzB;AAAO,iBAAA,IAAI,GAAG,CAAC,KAAK,EAAE;gBAClB,GAAG,CAAC,KAAK,EAAE;YACf;QACJ;IACJ;AAEA,IAAA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,EAAA;AACpB,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AAClB,YAAA,OAAO,IAAI;QACf,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,EAAA,EAAI,OAAO,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAClF;IAEA,OAAO,IAAI,CAAC,GAAG,EAAA;QACX,IAAI,IAAI,GAAG,IAAI,EACX,CAAC,GAAG,GAAG,CAAC,MAAM;QAElB,OAAO,CAAC,EAAE;AACN,YAAA,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5C;AAEA;;AAE8D;QAC9D,OAAO,IAAI,KAAK,CAAC;IACrB;AAGA,IAAA,OAAO,IAAI,GAAA;QACP,IAAI,EAAE,GAAG,MAAK;AACV,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO;iBAC1C,QAAQ,CAAC,EAAE;iBACX,SAAS,CAAC,CAAC,CAAC;AACrB,QAAA,CAAC;AACD,QAAA,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG;AAC9C,YAAA,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE;IACvC;AAEA,IAAA,OAAO,iBAAiB,CAAC,YAAY,EAAE,OAAO,EAAA;AAC1C,QAAA,OAAO,CAAC,CAAM,EAAE,CAAS,KAAI;AACzB,YAAA,IAAI,UAAkB;AACtB,YAAA,IAAI,WAAmB;AACvB,YAAA,IAAI,CAAC,CAAC,YAAY,EAAE;AAChB,gBAAA,UAAU,GAAG,CAAC,CAAC,YAAY;AAC3B,gBAAA,WAAW,GAAG,CAAC,CAAC,OAAO;YAC3B;AAAO,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;AACtB,gBAAA,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;AAC9B,gBAAA,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;YAC9B;;AACI,gBAAA,OAAO,IAAI;AACf,YAAA,QAAQ,UAAU,IAAI,YAAY,KAAK,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,WAAW,CAAC;AACrF,QAAA,CAAC;IACL;AAEA,IAAA,OAAO,WAAW,CAAC,SAAiB,EAAE,UAAkB,OAAO,EAAA;AAC3D,QAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;QACrE,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;QAC9C,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE;IAChB;AAEA,IAAA,OAAO,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAA;QACxC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;AACnC,YAAA,OAAO,EAAE;QACb;AACA,QAAA,IAAI,IAAI,KAAK,UAAU,CAAC,MAAM,IAAI,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE;YACxD,IAAI,eAAe,GAAG,IAAI,KAAK,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AACrF,YAAA,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE;gBACnJ,IAAI,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACxD,gBAAA,OAAO,GAAG,GAAG,cAAc,GAAG,GAAG;YACrC;QACJ;AACA,QAAA,OAAO,GAAG;IACd;IAEA,OAAO,qBAAqB,CAAC,YAAY,EAAA;AACrC,QAAA,IAAI,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC;AACnF,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE;YACtB,iBAAiB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAG,CAAC,KAAK,EAAE;QACzE;IACJ;AAEA,IAAA,OAAO,4BAA4B,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAK,EAAG,CAAC,EAAE,aAAa,GAAG,iBAAiB,EAAA;QACzG,OAAO;AACH,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,MAAK;AACT,gBAAA,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;AACvC,gBAAA,MAAM,EAAE;YACZ,CAAC;AACD,YAAA,WAAW,EAAE;SAChB;IACL;IAGA,OAAO,kBAAkB,CAAC,YAAiB,EAAE,WAAmB,EAAE,cAAsB,EAAE,YAAiB,EAAA;AACvG,QAAA,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,MAAM,EAAE;AACrE,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAQ,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,WAAW;AACjF,aAAC,YAAY,CAAC,MAAM,IAAI,OAAO,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;AACvD,QAAA,IAAI,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK;AACxD,aAAA,IAAI,CAAC,OAAO,EAAE,wBAAwB;AACtC,aAAA,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;AACvC,aAAA,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,cAAc,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAE5D,QAAA,OAAO,kBAAkB;IAC7B;IAEA,OAAO,6BAA6B,CAAC,cAAsB,EAAA;QACvD,IAAI,aAAa,GAAG,EAAE;QACtB,IAAI,cAAc,KAAK,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;AACrD,YAAA,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;YACjC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YACrC,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;YACrD,aAAa,IAAI,IAAI;YACrB,aAAa,IAAI,cAAc;YAC/B,aAAa,IAAI,IAAI;AACrB,YAAA,OAAO,aAAa;QACxB;aACK;AACD,YAAA,OAAO,cAAc;QACzB;IACJ;;IAEA,OAAO,mBAAmB,CAAC,SAAiB,EAAA;QACxC,OAAO,SAAS,GAAG,mBAAmB;IAC1C;AAEA,IAAA,OAAO,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAA;AAChE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAQ,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,WAAW;aAC/D,aAAa,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;IAC1C;;IAEA,OAAO,iBAAiB,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI,EAAA;AACvE,QAAA,IAAI,aAAa,GAAG,eAAe,CAAC,YAAY,CAAC;AACjD,QAAA,IAAI,aAAa,IAAI,SAAS,EAAE;AAC5B,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS;AAC/B,gBAAA,OAAO,YAAY;AACvB,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B;AACA,QAAA,OAAO,aAAa;IACxB;IAEA,OAAO,sBAAsB,CAAC,WAAW,EAAA;AACrC,QAAA,IAAI;AACA,YAAA,IAAI,KAAK,GAAG,WAAW,EAAE;YACzB,OAAO,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;QACnD;QACA,OAAO,GAAG,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;IACJ;IAMA,OAAO,UAAU,CAAC,IAAI,EAAA;QAClB,IAAI,mBAAmB,GAAG,EAAE;AAC5B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,KAAI;YAC1B,IAAI,OAAO,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,IAAI,MAAM;AACV,YAAA,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;AAC9B,gBAAA,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACrE,gBAAA,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;YACrC;iBAAO;gBACH,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1C,gBAAA,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;YACpC;AACA,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,OAAO,aAAa,CAAC,KAAK,EAAE,UAAU,EAAA;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,cAAc,KAAK,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,cAAc;IAC7F;AAEA,IAAA,OAAO,yBAAyB,CAAC,SAAc,EAAE,eAAoB,EAAA;QACjE,IAAI,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC;QAErJ,IAAI,YAAY,GAAG,KAAK,CAAC,0BAA0B,CAAC,SAAS,EAAE,eAAe,CAAC;;AAG/E,QAAA,IAAI,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ,GAAG,KAAK,CAAC;AACtI,QAAA,IAAI,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;QACvI,IAAI,MAAM,IAAI,QAAQ,IAAI,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACpK,QAAA,IAAI,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;;AAGxC,QAAA,IAAI,WAAW,GAAG;YACd,CAAC,SAAS,GAAG;AACT,gBAAA,EAAE,EAAE;AACP;SACJ;;AAGD,QAAA,IAAI,YAAY,GAAG;YACf,cAAc,EAAE,KAAK,IAAI,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;YACxG,cAAc,EAAE,KAAK,IAAI,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;AACxG,YAAA,cAAc,EAAE;SACnB;;AAGD,QAAA,IAAI,sBAAsB,GAAG,CAAC,KAAK,KAAI;YACnC,IAAI,KAAK,GAAG,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACrD,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;AACrC,gBAAA,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;;AAE7G,gBAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,+BAA+B,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACvH,gBAAA,IAAI,cAAc,GAAG,OAAO,GAAG,mBAAmB;gBAClD,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE;AAEtD,gBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;AACvD,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC;;AAGD,QAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC;AACpE,QAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC;QACpE,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,QAAQ,CAAC;YACpE,YAAY,CAAC,cAAc,GAAG,KAAK,IAAI,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1H;;QAGA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC3D,YAAA,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;gBAC1C,IAAI,QAAQ,GAAG,EAAE;gBAEjB,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC;gBACtG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC;;AAGtG,gBAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;oBAC9D,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC;gBAC1G;;AAGA,gBAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AAC5I,oBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,wBAAA,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC;4BAC/G,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ;oBAClD;yBACK;wBACD,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ;oBAC9C;gBACJ;YACJ;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,WAAW;IACtB;AAEA,IAAA,OAAO,0BAA0B,CAAC,SAAc,EAAE,eAAoB,EAAA;QAClE,IAAI,aAAa,GAAG,EAAE;QAEtB,IAAI,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,QAAQ;AAChI,aAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AACtH,QAAA,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC;QAE/B,IAAI,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,QAAQ;AAChI,aAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AAEtH,QAAA,IAAI,YAAY,IAAI,aAAa,EAAE;YAC/B,IAAI,QAAQ,GAAG,YAAY;AAC3B,YAAA,YAAY,IAAI,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG;YACnE,aAAa,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzD;aAAO;AACH,YAAA,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC;QACnC;AAEA,QAAA,IAAI,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,QAAQ;AACvK,aAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI;AAE7H,QAAA,IAAI,YAAY,IAAI,IAAI,EAAE;AACtB,YAAA,IAAI,YAAY,IAAI,aAAa,EAAE;AAC/B,gBAAA,YAAY,IAAI,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG;YACvE;QACJ;QAEA,OAAO;AACH,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,YAAY,GAAG,YAAY,GAAG;SAC5C;IACL;AAcA,IAAA,OAAO,cAAc,CAAC,aAAa,EAAE,eAAe,EAAA;AAChD,QAAA,IAAI,WAAW,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC;AACzC,QAAA,IAAI,eAAe,KAAK,IAAI,EAAE;YAC1B,IAAI,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;YAC3D,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;QAC3F;AACA,QAAA,OAAO,WAAW;IACtB;IAEA,OAAO,oBAAoB,CAAC,OAAO,EAAA;QAC/B,IAAI,aAAa,GAAG,EAAE;QACtB,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;YACtB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC;YAC1B,IAAI,kBAAkB,GAAG,EAAE;YAC3B,IAAI,oBAAoB,GAAG,EAAE;AAC7B,YAAA,oBAAoB,CAAC,MAAM,CAAC,GAAG,kBAAkB;AACjD,YAAA,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACxC,IAAI,SAAS,EAAE;gBACX,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AAC1C,oBAAA,kBAAkB,CAAC,UAAU,CAAC,GAAG,EAAE;AACnC,oBAAA,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE;AACvB,wBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAa,KAAI;AACzD,4BAAA,IAAI,SAAiB;AACrB,4BAAA,IAAI;gCACA,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE;AAC3C,gCAAA,kBAAkB,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC;4BAC5E;4BAAE,OAAO,UAAU,EAAE;AACjB,gCAAA,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA,wBAAA,CAA0B,CAAC;4BACnD;AACJ,wBAAA,CAAC,CAAC;oBACN;AACJ,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,aAAa;IACxB;;;AAIA,IAAA,OAAO,oBAAoB,CAAC,wBAA6B,EAAE,aAAqB,EAAE,aAAqB,EAAA;QACnG,MAAM,QAAQ,GAAG,sBAAsB;QACvC,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE;QACpD,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE;AAEpD,QAAA,IAAI,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,YAAY;AACtE,YAAA,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,YAAY,EAAE;YAEtE,IAAI,aAAa,GAAG,EAAE;YACtB,IAAI,gBAAgB,GAAG,EAAE;YAEzB,IAAI,uBAAuB,GAAG,QAAQ;AACtC,YAAA,IAAI,sBAAsB,GAAG,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE;YAC1E,IAAI,mBAAmB,GAAG,QAAQ;AAElC,YAAA,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,SAAiB,KAAI;AAC7E,gBAAA,IAAI,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE;gBACjD,IAAI,WAAW,GAAG,YAAY,IAAI,WAAW,GAAG,YAAY,EAAE;oBAC1D,gBAAgB,CAAC,SAAS,CAAC,GAAG,wBAAwB,CAAC,YAAY,CAAC,SAAS,CAAC;gBAClF;qBAAO;oBACH,aAAa,CAAC,SAAS,CAAC,GAAG,wBAAwB,CAAC,YAAY,CAAC,SAAS,CAAC;AAC3E,oBAAA,IAAI,WAAW,GAAG,sBAAsB,EAAE;wBACtC,sBAAsB,GAAG,WAAW;wBACpC,uBAAuB,GAAG,SAAS;oBACvC;AACA,oBAAA,IAAI,WAAW,GAAG,mBAAmB,EAAE;wBACnC,mBAAmB,GAAG,WAAW;oBACrC;gBACJ;AACJ,YAAA,CAAC,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,YAAY,CAAC;AAE7E,YAAA,IAAI,uBAAuB,KAAK,QAAQ,EAAE;gBACtC,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AACpC,gBAAA,IAAI,sBAAsB,GAAG,SAAS,IAAI,CAAC,sBAAsB,GAAG,UAAU,IAAI,SAAS,EAAE;;;AAGzF,oBAAA,wBAAwB,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;gBACzE;qBACK;AACD,oBAAA,wBAAwB,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE;gBACnG;YACJ;iBAAO;AACH,gBAAA,IAAI,YAAY,GAAW,CAAC,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;AAClF,gBAAA,IAAI,YAAY,GAAG,YAAY,EAAE;AAC7B,oBAAA,wBAAwB,CAAC,KAAK,CAAC,EAAE,GAAG,aAAa;gBACrD;qBAAO;oBACH,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3G,oBAAA,wBAAwB,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE;gBACzE;YACJ;AAEA,YAAA,IAAI,mBAAmB,KAAK,QAAQ,EAAE;AAClC,gBAAA,wBAAwB,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE;YACvF;iBAAO;AACH,gBAAA,IAAI,cAAc,GAAW,CAAC,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;AACtF,gBAAA,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE;AAC1E,oBAAA,wBAAwB,CAAC,KAAK,CAAC,IAAI,GAAG,aAAa;gBACvD;qBAAO;AACH,oBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AACvD,oBAAA,wBAAwB,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE;gBAC7E;YACJ;AACA,YAAA,wBAAwB,CAAC,YAAY,GAAG,aAAa;AACrD,YAAA,OAAO,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;QACvD;AACA,QAAA,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;IACzC;IAEA,OAAO,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,GAAG,IAAI,EAAA;AACjF,QAAA,IAAI,cAAc,GAAG,gBAAgB,CAAC,KAAK;AAC3C,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC;AAC3E,QAAA,IAAI,iBAAiB,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;AAC7D,QAAA,IAAI,iBAAiB,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;;AAGrE,QAAA,IAAI,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAE1E,IAAI,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC;AAC5D,QAAA,kBAAkB,CAAC,cAAc,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;AAC1F,QAAA,IAAI,eAAe,KAAK,IAAI,EAAE;AAC1B,YAAA,kBAAkB,CAAC,eAAe,GAAG,eAAe;QACxD;AACA,QAAA,OAAO,kBAAkB;IAC7B;AAEA,IAAA,OAAO,aAAa,GAAA;QAChB,OAAO,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAChD,YAAA,SAAS,CAAC,QAAQ,CAAC;IAC3B;IA2FA,OAAO,YAAY,CAAC,GAAG,EAAA;QACnB,IAAI,KAAK,GAAG,CAAC;AAEb,QAAA,IAAI,MAAM,GAAG,CAAC,GAAG,KAAI;YACjB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE;gBACnC,QAAQ,OAAO,GAAG;AACd,oBAAA,KAAK,QAAQ;wBACT,KAAK,IAAI,CAAC;wBACV;AACJ,oBAAA,KAAK,QAAQ;AACT,wBAAA,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;wBACvB;AACJ,oBAAA,KAAK,SAAS;wBACV,KAAK,IAAI,CAAC;wBACV;AACJ,oBAAA,KAAK,QAAQ;wBACT,IAAI,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;wBAC/D,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE;AAC/C,4BAAA,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;gCACjB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oCAAE;gCAAU;gCAC1C,MAAM,CAAC,GAAG,CAAC;AACX,gCAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACpB;wBACJ;6BAAO;4BACH,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC;wBACtC;wBACA;;YAEZ;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC;AAED,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC;IACtB;;AAhkCO,KAAA,CAAA,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE;AA+qB9B,KAAA,CAAA,kBAAkB,IAAI,UAAU,OAAO,EAAE,KAAK,EAAA;AACjD,IAAA,QAAQ,OAAO,IAAI,KAAK,CAAC,MAAM;AACnC,CAAC,CAAC;AAqIK,KAAA,CAAA,oBAAoB,GAAG,CAAC,CAAC,KAAI;AAChC,IAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE;QACrC,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO;AAC9B,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACZ,YAAA,OAAO,IAAI;QACf;aAAO;YACH,CAAC,CAAC,cAAc,EAAE;QACtB;IACJ;AACA,IAAA,OAAO,KAAK;AAChB,CAAC;AAsIM,KAAA,CAAA,cAAc,GAAG,CAAC,QAAQ,KAAI;AACjC,IAAA,OAAO,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,GAAG,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE;AACjJ,CAAC;AAEM,KAAA,CAAA,aAAa,GAAG,CAAC,GAAG,KAAI;IAC3B,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,qBAAqB,CAAC;AACpE,CAAC;AAEM,KAAA,CAAA,qBAAqB,GAAG,CAAC,QAAQ,KAAI;IACxC,OAAO,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,GAAG,qBAAqB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/F,CAAC;AAEM,KAAA,CAAA,wBAAwB,GAAG,CAAC,QAAQ,EAAE,kBAAkB,KAAI;AAC/D,IAAA,OAAO,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,kBAAkB,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,GAAG,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3J,CAAC;AAEM,KAAA,CAAA,mCAAmC,GAAG,CAAC,QAAQ,KAAI;AACtD,IAAA,OAAO,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1I,CAAC;AAEM,KAAA,CAAA,oBAAoB,GAAG,CAAC,QAAQ,KAAI;AACvC,IAAA,OAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;AACvE,CAAC;AAED;AACO,KAAA,CAAA,iCAAiC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,OAAA,GAAkF,IAAI,KAAI;IAOnJ,IAAI,IAAI,GAA6B,EAAE;AACvC,IAAA,IAAI,eAAe,GAAG,CAAC,GAAG,KAAgB;QACtC,IAAI,IAAI,GAAG,EAAE;QACb,IAAI,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;QACrD,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE;gBACT,IAAI,CAAC,EAAE;oBACH,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBACzB;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACvD,IAAI,CAAC,EAAE;oBACH,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBACzB;YACJ;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;AACf,IAAA,CAAC;AAED,IAAA,IAAI,UAAU,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,KAAK;IAC3E,IAAI,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG,CAAC;IAChD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE;YACT,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1C;aAAO;YACH,IAAI,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,UAAU,CAAA,CAAA,CAAG,CAAC;AACpD,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtD,YAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,IAAI,mBAAmB,GAAG,OAAO,IAAI,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,GAAG,EAAE;AACnG,IAAA,IAAI,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACxE,QAAQ,CAAC,KAAK;AACT,SAAA,MAAM,CAAC,CAAC,IACL,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM;AACnC,UAAE,OAAO,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,OAAO;AACvF,cAAE,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAE3C,SAAA,OAAO,CAAC,uBAAuB,EAAE,IAAI;SACrC,KAAK,CAAC,QAAQ;SACd,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM;SACrC,OAAO,CAAC,mBAAmB,EAAE,OAAO,IAAI,OAAO,CAAC,mBAAmB;SACnE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AACrB,IAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAC5B,CAAC;AAEM,KAAA,CAAA,yBAAyB,GAAG,CAAC,IAAY,KAAI;AAChD,IAAA,IAAI,WAAW,GAAG,IAAI,IAAI,EAAE;IAC5B,IAAI,IAAI,EAAE;AACN,QAAA,wCAAwC,CAAC,OAAO,CAAC,CAAC,IAAG;AACjD,YAAA,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAChD,QAAA,CAAC,CAAC;IACN;AACA,IAAA,OAAO,WAAW;AACtB,CAAC;;ACtiCL,MAAM,OAAO,CAAA;AAyHZ,IAAA,WAAA,GAAA;AAvHW,QAAA,IAAA,CAAA,mBAAmB,GAAG;AAC1B,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,eAAe,EAAE,eAAe;AAChC,YAAA,eAAe,EAAE,eAAe;AAChC,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,iBAAiB,EAAE,iBAAiB;AACpC,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,mBAAmB,EAAE,mBAAmB;AACxC,YAAA,iBAAiB,EAAE,iBAAiB;AACpC,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,uBAAuB,EAAE,uBAAuB;AAChD,YAAA,2BAA2B,EAAE,2BAA2B;AACxD,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,sBAAsB,EAAE,sBAAsB;AAC9C,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,kBAAkB,EAAE,kBAAkB;AACtC,YAAA,mBAAmB,EAAE,mBAAmB;AACxC,YAAA,eAAe,EAAE,eAAe;AAChC,YAAA,8BAA8B,EAAE,8BAA8B;AAC9D,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,cAAc,EAAE,oBAAoB;AACpC,YAAA,kBAAkB,EAAE,6CAA6C;AACjE,YAAA,oBAAoB,EAAE,8CAA8C;AACpE,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,6BAA6B,EAAE,6BAA6B;AAC5D,YAAA,+BAA+B,EAAE,+BAA+B;AAChE,YAAA,2BAA2B,EAAE,2BAA2B;AACxD,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,kCAAkC,EAAE,kCAAkC;AACtE,YAAA,iBAAiB,EAAE,iBAAiB;AACpC,YAAA,iBAAiB,EAAE,iBAAiB;AACpC,YAAA,qBAAqB,EAAE,qBAAqB;AAC5C,YAAA,uBAAuB,EAAE,uBAAuB;AAChD,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,wDAAwD,EAAE,wDAAwD;AAClH,YAAA,kBAAkB,EAAE,kBAAkB;AACtC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,wBAAwB,EAAE,wBAAwB;AAClD,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,kBAAkB,EAAE,kBAAkB;AACtC,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,yBAAyB,EAAE,yBAAyB;AACpD,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,sBAAsB,EAAE,sBAAsB;AAC9C,YAAA,uBAAuB,EAAE,uBAAuB;AAChD,YAAA,sBAAsB,EAAE,sBAAsB;AAC9C,YAAA,iCAAiC,EAAE,kCAAkC;AACrE,YAAA,sEAAsE,EAAE,uEAAuE;AAC/I,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,oBAAoB,EAAE,oBAAoB;AAC1C,YAAA,kBAAkB,EAAE,kBAAkB;AACtC,YAAA,YAAY,EAAE,YAAY;AAC1B,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,+BAA+B,EAAE,8FAA8F;AAC/H,YAAA,8BAA8B,EAAE,2FAA2F;AAC3H,YAAA,gBAAgB,EAAE,gBAAgB;AAClC,YAAA,iBAAiB,EAAE,iBAAiB;AACpC,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,kBAAkB,EAAE,kBAAkB;AACtC,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,aAAa,EAAE,aAAa;AAC5B,YAAA,iBAAiB,EAAE,wCAAwC;AAC3D,YAAA,qBAAqB,EAAE,qBAAqB;AAC5C,YAAA,+BAA+B,EAAE,+BAA+B;AAChE,YAAA,qCAAqC,EAAE,qCAAqC;AAC5E,YAAA,2CAA2C,EAAE,2CAA2C;AACxF,YAAA,2BAA2B,EAAE,2BAA2B;AACxD,YAAA,gCAAgC,EAAE,gCAAgC;AAClE,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,UAAU,EAAE,UAAU;AACtB,YAAA,SAAS,EAAE;SACd;QAEO,IAAA,CAAA,YAAY,GAAQ,EAAE;AAG1B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB;IAChD;AAEO,IAAA,YAAY,CAAE,eAAoB,EAAA;AACrC,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,SAAiB,KAAI;AACzD,YAAA,IAAI,SAAS,IAAI,eAAe,EAAE;gBAC9B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC;YAC7D;AACJ,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,SAAS,CAAE,SAAiB,EAAA;AAC/B,QAAA,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QACvC;AACA,QAAA,OAAO,SAAS;IACpB;IAEO,QAAQ,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;AAEH;;AChID,MAAM,YAAY,CAAA;AAAlB,IAAA,WAAA,GAAA;AAyFW,QAAA,IAAA,CAAA,eAAe,GAAY,IAAI,OAAO,EAAE;IAsNnD;AApNY,IAAA,wBAAwB,CAAC,iBAAyB,EAAA;AACtD,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,WAAW;YACvD,OAAO,EAAE,CAAC,WAAW;AACzB,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,SAAS;YACrD,OAAO,EAAE,CAAC,SAAS;AACvB,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,eAAe;YAC3D,OAAO,EAAE,CAAC,eAAe;AAC7B,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,cAAc;YAC1D,OAAO,EAAE,CAAC,cAAc;AAC5B,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,UAAU;YACtD,OAAO,EAAE,CAAC,UAAU;AACxB,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,aAAa;YACzD,OAAO,EAAE,CAAC,aAAa;AAC3B,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,cAAc;YAC1D,OAAO,EAAE,CAAC,cAAc;AAC5B,QAAA,IAAI,iBAAiB,IAAI,sBAAsB,CAAC,eAAe;YAC3D,OAAO,EAAE,CAAC,eAAe;;QAE7B,OAAO,EAAE,CAAC,cAAc;IAC5B;AAEA,IAAA,UAAU,CAAC,eAAe,EAAA;QACtB,eAAe,GAAG,CAAC,eAAe,GAAG,EAAE,GAAG,eAAe;AACzD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3D,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,2BAA2B,EAAE,KAAK,CAAC;AACrG,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,4BAA4B,EAAE,KAAK,CAAC;AACvG,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC;AACrE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC;AACrE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC;AAC/D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC;AACrE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,sBAAsB,EAAE,KAAK,CAAC;AAC3F,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,cAAc,EAAE,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,GAAG,CAAC;AACrE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,EAAE,KAAK,CAAC;AACzE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,EAAE,KAAK,CAAC;AACzE,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,sBAAsB,EAAE,KAAK,CAAC;AAC3F,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC;AACjE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,gBAAgB,EAAE,KAAK,CAAC;AAC/E,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC;AACrE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC;AAC9D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,kBAAkB,EAAE,KAAK,CAAC;AACnF,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,yBAAyB,EAAE,IAAI,CAAC;AAChG,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;AACpE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC;AACrE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;AACpE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC;AACjE,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,qBAAqB,EAAE,KAAK,CAAC;AACzF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,gBAAgB,EAAE,IAAI,CAAC;AAC9E,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,iBAAiB,EAAE,MAAK,EAAG,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,oBAAoB,EAAE,MAAK,EAAG,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,SAAS,CAAC;AAC3E,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,EAAE,KAAK,CAAC;AACzE,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,wBAAwB,EAAE,KAAK,CAAC;AAC/F,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,MAAK,EAAG,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,EAAE,MAAK,EAAG,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU,EAAE,MAAK,EAAG,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,MAAK,EAAG,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,MAAK,EAAG,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,MAAK,EAAG,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,qBAAqB,EAAE,KAAK,CAAC;AACzF,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,uBAAuB,EAAE,KAAK,CAAC;AAC7F,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC;AAC1E,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,kBAAkB,EAAE,IAAI,CAAC;AAClF,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,wBAAwB,EAAE,EAAE,CAAC;QAC5F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,iBAAiB,EAAE,QAAQ,OAAO,EAAE,CAAA,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAClJ,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,iBAAiB,EAAE,KAAK,CAAC;AACjF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,iBAAiB,EAAE,KAAK,CAAC;AACjF,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,6BAA6B,EAAE,KAAK,CAAC;AACzG,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,aAAa,EAAE,KAAK,CAAC;AACzE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC;AAChE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,eAAe,EAAE,EAAE,CAAC;AAC1E,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACzE,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC,OAAO,KAAI,EAAG,CAAC,CAAC;AAC5F,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,CAAC;AACtE,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC;AAC1E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC;AACvE,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,iBAAiB,EAAE,IAAI,CAAC;AAChF,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,mBAAmB,EAAE,IAAI,CAAC;AACpF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AACzF,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC;AACvF,QAAA,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,oCAAoC,EAAE,IAAI,CAAC;AACtH,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,gBAAgB,EAAE,IAAI,CAAC;AAC9E,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC;AAC1E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC;AACvE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC;AAC1E,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,gBAAgB,EAAE,EAAE,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACrH,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,oBAAoB,EAAE,KAAK,CAAC;AACvF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,MAAK,EAAG,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,UAAU,EAAE,MAAK,EAAG,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,iBAAiB,EAAE,IAAI,CAAC;QAChF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iCAAiC,CAAC,CAAC;AAClI,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,uBAAuB,EAAE,KAAK,CAAC;QAC7F,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAI,EAAG,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,iBAAiB,CAAC,eAAe,EAAE,wBAAwB,EAAE,EAAE,CAAC;AACpG,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC;AAC1E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC;AACvE,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,kBAAkB,EAAE,CAAC,CAAC;IACnF;AAEQ,IAAA,YAAY,CAAC,OAAO,EAAA;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;IAC1C;AAEQ,IAAA,UAAU,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,IAAI,eAAe,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE;AACjF,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B;QACA,OAAO,KAAK,CAAC,iBAAiB,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,CAAC;IAC/E;IAEO,QAAQ,GAAA;QACX,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,yBAAyB,EAAE,IAAI,CAAC,yBAAyB;YACzD,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;YAC3D,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;YAC7D,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YAChC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,kCAAkC,EAAE,IAAI,CAAC,kCAAkC;YAC3E,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,gBAAgB,EAAE,IAAI,CAAC;SAC1B;IACL;AACH;;AC3TD,MAAM,SAAS,CAAA;AAUJ,IAAA,SAAS,CAAC,GAAW,EAAA;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC;IACxD;AAEA,IAAA,WAAA,CAAY,YAAqB,EAAA;QAXxB,IAAA,CAAA,aAAa,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG;QAE7E,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,UAAU,GAAY,KAAK;AAExB,QAAA,IAAA,CAAA,YAAY,GAAiB,IAAI,YAAY,EAAE;AAmB/C,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,KAAI;AACvC,YAAA,OAAO,IAAI,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,GAAG,EAAE,CAAA;AAClB,iBAAA,EAAA,KAAK,GAAG,KAAK,CAAA,CAAA,EAAI,MAAM,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,GAAG,CAAA,CAAA,EAAI,MAAM,GAAG,IAAI;AAC9D,iBAAA,EAAA,KAAK,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,IAAI,CAAA,OAAA,EAAU,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,KAAK,GAAG,IAAI;AAC/D,iBAAA,EAAA,KAAK,GAAG,IAAI,CAAA,CAAA,EAAI,MAAM,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,GAAG,EAAE,GAAG;AAC9E,QAAA,CAAC;AAjBA,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;IACjC;IAEU,OAAO,CAAC,aAAkB,EAAE,KAAa,EAAA;QAClD,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC;AAChD,QAAA,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;AAC1C,QAAA,aAAa,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;AACzC,QAAA,aAAa,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC1B;IASU,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,aAAmC,EAAE,WAAW,GAAG,IAAI,EAAA;IAExF;AAEU,IAAA,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAA;AAC9C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,uCAAuC,CAAC;QACrF,KAAK,CAAC,iCAAiC,CAAC,KAAK,EAAE,CAAC,CAAC,aAAa,CAAC;QAE/D,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE;AACjC,YAAA,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG;AAC5B,iBAAA,IAAI,CAAC,OAAO,EAAE,2CAA2C,CAAC;YAC5D,KAAK,CAAC,iCAAiC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;QAC5D;QAEA,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,6BAA6B,EAAE;AAC3D,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG;AACd,iBAAA,IAAI,CAAC,GAAG,CAAC,aAAa;AACtB,iBAAA,IAAI,CAAC,OAAO,EAAE,8CAA8C,CAAC;QAChE;IACD;AAEA;;ACpDD,MAAM,oBAAoB,GAAG,EAAE;AAC/B,MAAM,uBAAuB,GAAG,EAAE;AAElC,MAAM,MAAO,SAAQ,SAAS,CAAA;AAW1B,IAAA,WAAA,CAAY,SAAc,EAAE,YAAqB,EAAE,WAAmB,EAAA;QAClE,KAAK,CAAC,YAAY,CAAC;QAuJf,IAAA,CAAA,cAAc,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,KAAI;AACpE,YAAA,IAAI,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC9E,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CACvE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,YAAA,IAAI,gBAAgB,GAAG,YAAY,GAAG,YAAY,CAAC,WAAW,GAAG,IAAI;YACxD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAe,EAAE,IAAY,KAAI;gBACrH,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM;YAClH,CAAC,EAAE,IAAI;YACP,IAAI,gBAAgB,GAAG,MAAK;AACxB,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa;gBACnF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,EAAE,gBAAgB,CAAC,MAAM,CAAC;AACrH,gBAAA,IAAI,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE;oBAChF,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC;gBACnE;AACJ,YAAA,CAAC;AAED,YAAA,IAAI,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;YACrF,IAAI,uBAAuB,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK;iBAC9D,KAAK,CAAC,gBAAgB;AACtB,iBAAA,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;AAE1C,YAAA,IAAI,aAAa,GAAG,uBAAuB,CAAC,SAAS,CAAC,mBAAmB;iBACpE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,UAAU,CAAS,EAAA;AAC5G,gBAAA,OAAO,CAAC;AACZ,YAAA,CAAC,CAAC;YAEN,IAAI,IAAI,GAAG,IAAI;YAEf,IAAI,oBAAoB,GAAG;AACtB,iBAAA,KAAK;iBACL,MAAM,CAAC,KAAK;iBACZ,KAAK,CAAC,aAAa;AACnB,iBAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,GAAG,QAAQ,GAAG,cAAc;AACvE,iBAAA,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,GAAG,GAAG,GAAG,IAAI;iBAC5D,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,OAAe,KAAI;gBACvC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,KAAK,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,CAAC,EAAE;AAClF,oBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC1C,IAAI,CAAC,SAAS,EAAE;oBAChB,KAAK,CAAC,cAAc,EAAE;gBAC1B;AACJ,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAU,EAAE,OAAe,EAAA;AAC9C,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE;AAC/B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC9C;qBAAO;AACH,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;gBACtC;gBACA,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,OAAe,EAAA;gBAC7C,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC;AACxC,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,EAAA;gBAC3B,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,mBAAmB;AAC1C,qBAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,qBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;AACjD,YAAA,CAAC;iBACA,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAI;AAC1B,gBAAA,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,IAAI,yBAAyB,GAAG,EAAE;gBAC/E,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE;AACpG,gBAAA,OAAO,CAAA,kCAAA,EAAqC,OAAO,CAAA,CAAA,EAAI,KAAK,EAAE;AAClE,YAAA,CAAC;iBACA,OAAO,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC,KAAI;gBAChC,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI,EAAE;AAC7C,oBAAA,OAAO,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,YAAY,IAAI,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO;gBAC/H;AACJ,YAAA,CAAC,CAAC;YAEN,IAAI,MAAM,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAExH,YAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,EAAA;AAC1C,gBAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AACpH,gBAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,IAAI,UAAU,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;oBAChF,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAe,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACrF,oBAAA,IAAI,eAAe,GAAG,QAAQ,CAAC,KAAK;yBAC/B,MAAM,CAAC,KAAK;AACZ,yBAAA,IAAI,CAAC,OAAO,EAAE,cAAc;yBAC5B,KAAK,CAAC,QAAQ,CAAC;AACpB,oBAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;wBAChC,eAAe,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAAI;AAC5C,4BAAA,OAAO,CAAC;AACZ,wBAAA,CAAC,CAAC;oBACN;yBAAO;wBACH,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC;oBACpE;AACA,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAC9C,CAAC,QAAQ,KAAK,SAAS,CAAC,WAAW,IAAI,QAAQ,KAAK,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;AAC5G,oBAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;gBAC5B;qBAAO;AACH,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE;gBACvD;AAEA,gBAAA,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE;oBAChD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC1B,yBAAA,IAAI,CAAC,OAAO,EAAE,aAAa;AAC3B,yBAAA,IAAI,CAAC,YAAY,EAAE,MAAK;AACrB,wBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;wBACvJ,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA,CAAE;AAExH,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;AACtD,yBAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;wBACxB,KAAK,CAAC,eAAe,EAAE;AACvB,wBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1C,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI;AACT,6BAAA,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;wBAChG,IAAI,CAAC,SAAS,EAAE;AACpB,oBAAA,CAAC,CAAC;gBACV;AAEA,gBAAA,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,EAAE;AACnD,oBAAA,IAAI,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;yBAC1B,MAAM,CAAC,KAAK;AACZ,yBAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;oBACpC,KAAK,CAAC,iCAAiC,CAAC,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;gBACnI;AAEA,gBAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;AAChC,oBAAA,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC5D,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC1B,6BAAA,IAAI,CAAC,YAAY,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAA,CAAA,EAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;AACjK,6BAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB;AACvC,6BAAA,EAAE,CAAC,QAAQ,EAAE,UAAU,IAAS,EAAA;AAC7B,4BAAA,IAAI,UAAU,GAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvD,4BAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,GAAG,UAAU;4BACvF,IAAI,CAAC,SAAS,EAAE;AACpB,wBAAA,CAAC;AACA,6BAAA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;4BACnB,KAAK,CAAC,eAAe,EAAE;AAC3B,wBAAA,CAAC,CAAC;oBACV;oBACA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,0BAA0B;yBAC5C,IAAI,CAAC,UAAU,CAAC,EAAA;AACb,wBAAA,IAAI,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA6B,QAAQ;6BAC1E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;4BAC5F,OAAO;AACH,gCAAA,IAAI,EAAE,IAAI;AACV,gCAAA,MAAM,EAAE,MAAM;AACd,gCAAA,OAAO,EAAE,OAAO;AAChB,gCAAA,cAAc,EAAE,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO;6BAClG;wBACL,CAAC,CAAC,CAAC;wBAEP;AACK,6BAAA,KAAK;6BACL,MAAM,CAAC,QAAQ;AACf,6BAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;6BAC/B,KAAK,CAAC,UAAU;AAChB,6BAAA,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAS,KAAI;4BAChC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;AAC5G,gCAAA,WAAW,GAAG,EAAE;AACxB,wBAAA,CAAC;6BACA,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,IAAI,CAAC;AACnC,wBAAA,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAC9B,oBAAA,CAAC,CAAC;gBACV;qBAAO;AACH,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,MAAM,EAAE;gBAClE;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE7B,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,GAAG,gBAAgB,CAAC,MAAM;YACzG,uBAAuB,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE;YACjE,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,cAAc,EAAE;AAChD,gBAAA,uBAAuB,CAAC,MAAM,CAAC,QAAQ;AAClC,qBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAChC,qBAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB;qBAClC,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,cAAc,IAAI,OAAO,GAAG,MAAM;AACpF,qBAAA,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC;YACtC;AAEA,YAAA,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAA;gBACjC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,EAAE;AACtC,oBAAA,IAAU,IAAK,CAAC,SAAS,GAAS,IAAK,CAAC,YAAY,GAAG,EAAE,GAAS,IAAK,CAAC,YAAY,EAAE;AAClF,wBAAA,gBAAgB,EAAE;oBACtB;gBACJ;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACpC,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,YAAoB,EAAE,OAAe,KAAI;;YAE7D,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,OAAO;AAC3D,gBAAA,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO;gBAC7E;AACJ,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI;AAC3C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,YAAY,IAAI,YAAY;gBAChE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,EAAE;AACxD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI;YAC9C;iBAAO;AACH,gBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,oBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC;gBAClD;YACJ;AACJ,QAAA,CAAC;AA5VG,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc;AACpE,aAAA,IAAI,CAAC,OAAO,EAAE,YAAY;AAC1B,aAAA,KAAK,CAAC,MAAM,EAAE,KAAK;AACnB,aAAA,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;IACnD;AAEQ,IAAA,oBAAoB,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,EAAA;AAC3D,QAAA,OAAO,CAAC,YAAY,EAAE,MAAM,KAAI;YAC5B,KAAK,EAAE,eAAe,EAAE;AACxB,YAAA,YAAY,CAAC,SAAS,CAAC,mBAAmB;AACrC,iBAAA,MAAM,CAAC,YAAA,EAAc,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAC5E,iBAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC5B,YAAA,YAAY,CAAC,SAAS,CAAC,oBAAoB;AACtC,iBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AAC7B,YAAA,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC;AACvC,QAAA,CAAC;IACL;IAEQ,oBAAoB,CAAC,YAAoB,EAAE,OAAe,EAAA;AAC9D,QAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO;AAC5F,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,QAAQ;QACvF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,QAAQ;AAC/H,aAAA,MAAM,CAAC,CAAC,IAAa,EAAE,IAAY,KAAa;AAC7C,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI;QAClG,CAAC,EAAE,KAAK,CAAC;;QAEb,IAAI,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI;AACjE,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,YAAY,IAAI,YAAY;YAChE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI;QAC9C;IACJ;IAEO,mBAAmB,CAAC,MAAc,EAAE,OAAe,EAAA;QACtD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,QAAQ,EAAE;YACtC;QACJ;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;QAC3E,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,UAAU,SAAc,EAAA;YAC7E,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,MAAM,MAAM,SAAS,IAAI,OAAO,CAAC;QACnF,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;QAE3B,IAAI,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AAExG,QAAA,IAAI,cAAc,IAAI,EAAE,EAAE;AACtB,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;gBACjF,OAAO,CAAC,IAAI,MAAM;AACtB,YAAA,CAAC,CAAC,CAAC,IAAI,EAAE;YACT,IAAI,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/F,IAAI,WAAW,CAAC,SAAS,GAAG,oBAAoB,IAAI,WAAW,CAAC,YAAY,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,SAAS,GAAG,oBAAoB,EAAE;AAChI,gBAAA,WAAW,CAAC,SAAS,GAAG,oBAAoB;YAChD;QACJ;IACJ;AAEQ,IAAA,mBAAmB,CAAC,MAAM,EAAA;QAC9B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,GAAG,oBAAoB,GAAG,uBAAuB;IACxI;AAEQ,IAAA,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,EAAA;AAC3C,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,gBAAgB;AACpD,aAAA,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QAClG,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;AACzC,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAI;AACxC,YAAA,IAAI,WAAW,GAAG,CAAC,GAAG,QAAQ,GAAG,GAAG;YACpC,IAAI,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,GAAG;YACvC,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK;AAElC,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM;AACjB,iBAAA,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,GAAG;AAChC,iBAAA,IAAI,CAAC,YAAY,EAAE,KAAK;AACxB,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAE5B,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM;AACjB,iBAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG;AAC7B,iBAAA,IAAI,CAAC,YAAY,EAAE,KAAK;AACxB,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAChC,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,YAAY,CAAC,MAAM,EAAA;AACvB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ;AACpE,QAAA,QAAQ,QAAQ,KAAK,SAAS,CAAC,WAAW,IAAI,QAAQ,KAAK,SAAS,CAAC,MAAM;IAC/E;AAEQ,IAAA,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAA;AACvD,QAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC;QACpD;AACA,QAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC/C;IACJ;IAEQ,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAA;AAC9C,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,YAAY;AAC9F,QAAA,QAAQ,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC;QACjD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AAChC,QAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK;aAC1B,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;aACrC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7C,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM;AACvB,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM;AACpB,aAAA,IAAI,CAAC,QAAQ,EAAE,MAAM;AACrB,aAAA,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1B,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE;QAC9B,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,UAAU,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,GAAG,CAAC;IAClD;IAEQ,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAA;AACzC,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,YAAY;AAC9F,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,gBAAgB;AACxG,QAAA,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QAC5C,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;QAEhC,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;QACjE,IAAI,cAAc,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACnE,QAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAElE,QAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK;AAC1B,aAAA,IAAI,CAAC,OAAO,EAAE,CAAA,EAAG,aAAa,IAAI;AAClC,aAAA,IAAI,CAAC,QAAQ,EAAE,GAAG,cAAc,CAAA,EAAA,CAAI,CAAC;AAE1C,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE;QAC9B,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,UAAU,CAAC;AAEjD,QAAA,IAAI,gBAAgB,KAAK,iBAAiB,CAAC,QAAQ,EAAE;AACjD,YAAA,GAAG,CAAC,MAAM,CAAC,MAAM;AACZ,iBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,CAAM,KAAI;AAC1B,gBAAA,OAAO,YAAY,IAAI,aAAa,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,cAAc,GAAG,GAAG,CAAC,GAAG,eAAe;AAChG,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC;AAC/D,iBAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,EAAE,CAAC,CAAC;AAC3D,iBAAA,KAAK,CAAC,MAAM,EAAE,MAAM;iBACpB,KAAK,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,GAAG,CAAC;QAErD;aAAO;AACH,YAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM;AACvB,iBAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;AAChC,iBAAA,IAAI,CAAC,QAAQ,EAAE,kBAAkB;iBACjC,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,GAAc,aAAa,GAAG,CAAC,EAAC,aAAA,CAAe;AACjE,iBAAA,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,GAAG,CAAC;QAClD;IACJ;AA0MO,IAAA,IAAI,CAAC,WAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,EAAE,kBAAkB,GAAG,IAAI,EAAE,KAAW,EAAA;AAC1J,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,YAAY,EAAE,KAAK,CAAC;AACxF,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa;QAC/B,IAAI,IAAI,GAAG,IAAI;AAGf,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAE1D,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,IAAI,QAAQ;aAClD,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,IAAI,SAAS;aAChD,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC;AAEpD,QAAA,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;AACnE,QAAA,IAAI,YAAY,GAAQ,MAAM,CAAC,SAAS,CAAC,kBAAkB;aACtD,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;AAE9B,QAAA,IAAI,mBAAmB,GAAG,YAAY,CAAC,KAAK;aACvC,MAAM,CAAC,KAAK;aACZ,KAAK,CAAC,YAAY;aAClB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;YACpB,OAAO,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC;AACpG,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,WAAW,EAAE,MAAK;YACrB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI;AAC3F,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC,EAAA;YACjC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;gBAChC,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK;AACxD,YAAA,OAAO,WAAW;AACtB,QAAA,CAAC,CAAC;QAEN,IAAI,IAAI,GAAG,IAAI;QAEf,MAAM,kBAAkB,GAAW,EAAE;QAErC,MAAM,kBAAkB,GAAW,MAAM,CAAC,IAAI,EAAE,CAAC,YAAY;QAC7D,IAAI,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,kBAAkB,GAAG,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5G,IAAI,aAAa,GAAG,CAAC;AAErB,QAAA,mBAAmB,CAAC,IAAI,CAAC,UAAU,MAAc,EAAE,CAAS,EAAA;YACxD,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACvD,YAAA,IAAI,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC9E,YAAA,IAAI,UAAU,GAAY,gBAAgB,CAAC,MAAM,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE;YACnF,IAAI,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA6B,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAClH,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC;YAC9C,IAAI,sBAAsB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,QAAQ;iBAC/D,KAAK,CAAC,eAAe;iBACrB,IAAI,CAAC,OAAO,EAAE,CAAC,GAAW,EAAE,CAAC,KAAI;gBAC9B,OAAO,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAC;AACtG,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,YAAY,EAAE,CAAC,GAAW,KAAI;AAChC,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;gBAChI,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA,CAAE;AAC5H,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,CAAS,EAAA;AACnC,gBAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO;gBAC/D,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,QAAQ;;gBAG1D,IAAI,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI;oBACjE,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE;AACxD,oBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI;gBAC9C;gBACA,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,CAAC;iBACA,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;gBAC1B,cAAc,CAAC,CAAC,CAAC;AACrB,YAAA,CAAC;iBACA,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ;AACpE,YAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,WAAW,IAAI,QAAQ,KAAK,SAAS,CAAC,MAAM,EAAE;AACrE,gBAAA,sBAAsB,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC;AAChE,gBAAA,IAAI,QAAQ,GAAG,sBAAsB,CAAC,SAAS,CAA0B,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACpG,gBAAA,IAAI,eAAe,GAAG,QAAQ,CAAC,KAAK;qBAC/B,MAAM,CAAC,KAAK;AACZ,qBAAA,IAAI,CAAC,OAAO,EAAE,cAAc;qBAC5B,KAAK,CAAC,QAAQ,CAAC;gBACpB,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,CAAC;AAChE,gBAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;YAC5B;AAEA,YAAA,IAAI,mBAAmB,GAAG,sBAAsB,CAAC,SAAS,CAA8B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5G,mBAAmB,CAAC,KAAK;iBACpB,MAAM,CAAC,IAAI;iBACX,KAAK,CAAC,mBAAmB;iBACzB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAS,KAAK,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9F,iBAAA,IAAI,CAAC,YAAA;gBACF,KAAK,CAAC,iCAAiC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;AAC/G,YAAA,CAAC,CAAC;AAGN,YAAA,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACnC,YAAA,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE/B,YAAA,IAAI,sBAAsB;YAC1B,IAAI,gBAAgB,CAAC,MAAM,IAAI,0BAA0B,GAAG,gBAAgB,CAAC,EAAE;AAC3E,gBAAA,sBAAsB,GAAG,0BAA0B,GAAG,kBAAkB;AACxE,gBAAA,aAAa,IAAI,sBAAsB,GAAG,kBAAkB;YAChE;iBAAO,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,KAAK,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;gBACrG,sBAAsB,GAAG,gBAAgB,CAAC,MAAM,GAAG,gBAAgB,GAAG,kBAAkB;AACxF,gBAAA,aAAa,IAAI,sBAAsB,GAAG,kBAAkB;YAChE;iBAAO;gBACH,sBAAsB,GAAG,gBAAgB;gBACzC,aAAa,IAAI,sBAAsB;YAC3C;YACA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,EAAE;AACrC,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;YAClE;iBAAO;AACH,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC5C;YAEA,IAAI,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;YACjH,IAAI,uBAAuB,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK;iBAC9D,KAAK,CAAC,gBAAgB;AACtB,iBAAA,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;YAE1C,IAAI,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AAElC,YAAU,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU;AACxE,YAAA,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAA;gBACjC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,EAAE;AACrC,oBAAA,IAAU,IAAK,CAAC,SAAS,GAAS,IAAK,CAAC,YAAY,GAAG,EAAE,GAAS,IAAK,CAAC,YAAY,EAAE;AAClF,wBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa;wBACnF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,EAAE,gBAAgB,CAAC,MAAM,CAAC;AACrH,wBAAA,IAAI,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE;4BAChF,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC;wBACnE;oBACJ;gBACJ;AACJ,YAAA,CAAC,CAAC;YACF,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAA;gBACzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,SAAS,EAAE;AACvC,oBAAA,IAAU,IAAK,CAAC,UAAU,GAAS,IAAK,CAAC,WAAW,GAAG,EAAE,GAAS,IAAK,CAAC,WAAW,EAAE;AACjF,wBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa;wBACnF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,EAAE,gBAAgB,CAAC,MAAM,CAAC;AACrH,wBAAA,IAAI,gBAAgB,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE;AAChF,4BAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;wBACjC;oBACJ;gBACJ;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAEpC,QAAA,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,EAAE;YAClB,MAAM,CAAC,IAAI,EAAE,CAAC;;AAEjC,YAAA,IAAI,aAAa,GAAG,kBAAkB,EAAE;gBACpC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAClD,gBAAA,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;oBAChC,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBAClD,IAAI,qBAAqB,GAAG,CAAC,0BAA0B,GAAG,kBAAkB,IAAI,gBAAgB;AAEhG,oBAAA,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;AACxH,oBAAA,IAAI,aAAa,GAAG,qBAAqB,EAAE;AACvC,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;oBACzC;AACJ,gBAAA,CAAC,CAAC;YACN;iBAAO;gBACH,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;YACvD;QACJ;AAEA,QAAA,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IAChC;AACH;;AChiBD,MAAM,kBAAkB,CAAA;AAkBpB,IAAA,WAAA,GAAA;QAjBO,IAAA,CAAA,IAAI,GAAQ,EAAE;QACd,IAAA,CAAA,YAAY,GAAQ,EAAE;QACtB,IAAA,CAAA,UAAU,GAAQ,EAAE;QAEpB,IAAA,CAAA,cAAc,GAAW,CAAC;QAC1B,IAAA,CAAA,UAAU,GAAQ,EAAE;QACpB,IAAA,CAAA,SAAS,GAAQ,EAAE;QACnB,IAAA,CAAA,gBAAgB,GAAQ,EAAE;QAE1B,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,UAAU,GAAW,QAAQ;QAC7B,IAAA,CAAA,QAAQ,GAAW,CAAC;QACpB,IAAA,CAAA,WAAW,GAAQ,IAAI;QAEvB,IAAA,CAAA,aAAa,GAAY,KAAK;AAK3B,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,MAAM,KAAI;YAC/B,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,QAAQ,GAAG,IAAI;AACzH,QAAA,CAAC;QA6CO,IAAA,CAAA,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,KAAI;AAChE,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC1E,gBAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW;gBAChF,IAAI,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE;AAC7C,oBAAA,OAAO,kBAAkB;gBAC7B;YACJ;AACA,YAAA,OAAO,WAAW;AACtB,QAAA,CAAC;IAzDD;IAMU,qBAAqB,GAAA;QAC3B,IAAI,aAAa,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAG;AACnB,YAAA,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,IAAG;AACpC,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;AAC/C,oBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI;AACnC,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;IAC/D;AAEO,IAAA,WAAW,CAAC,MAAM,EAAA;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO;IAC7F;;AAGQ,IAAA,UAAU,CAAC,0BAA0B,EAAA;QACzC,IAAI,0BAA0B,IAAI,IAAI;YAClC,0BAA0B,GAAG,EAAE;;QAEnC,IAAI,0BAA0B,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtD,YAAA,KAAK,IAAI,CAAC,GAAG,0BAA0B,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvE,gBAAA,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC;QACJ;QACA,IAAI,cAAc,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,GAAG,KAAI;AAC3E,YAAA,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI;AACjB,gBAAA,OAAO,cAAc;YACzB,OAAO,cAAc,GAAG,CAAC;QAC7B,CAAC,EAAE,CAAC,CAAC;QACL,IAAI,MAAM,GAAG,CAAC;QACd,IAAI,MAAM,GAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;AACtD,QAAA,0BAA0B,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACvC,YAAA,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;AACnB,gBAAA,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAC1B,gBAAA,MAAM,EAAE;YACZ;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,0BAA0B;IACrC;AAYO,IAAA,oCAAoC,CAAC,IAAI,EAAE,0BAA0B,GAAG,IAAI,EAAA;AAC/E,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,eAAe,GAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AAGjB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,0BAA0B,GAAG,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC;QACxE,IAAI,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAEzC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAc,EAAE,CAAS,KAAI;YACpD,IAAI,OAAO,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,IAAI,aAAa,GAAG,EAAE,GAAG,SAAS,EAAE;AACpC,YAAA,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAEvB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM;AAC5B,YAAA,aAAa,CAAC,MAAM,GAAG,MAAM;AAE7B,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC3B,eAAe,CAAC,MAAM,CAAC,GAAG;AACtB,oBAAA,OAAO,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe;AACpF,wBAAA,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO;oBACxF,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI;AACpC,oBAAA,KAAK,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK;AACzE,wBAAA,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;AAC1E,oBAAA,qBAAqB,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,qBAAqB;AAC1E,oBAAA,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAAO;AAC9C,oBAAA,eAAe,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe;AAC9D,oBAAA,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,WAAW;AACtD,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,QAAQ;oBAChD,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,iBAAiB;AAC9D,oBAAA,aAAa,EAAE;iBAClB;YACL;iBAAO;gBACH,eAAe,CAAC,MAAM,CAAC,GAAG;AACtB,oBAAA,OAAO,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe;wBACpF,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;AAC3D,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,KAAK,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK;wBACzE,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;AACjD,oBAAA,qBAAqB,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,qBAAqB;AAC1E,oBAAA,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAAO;AAC9C,oBAAA,eAAe,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe;AAC9D,oBAAA,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,WAAW;AACtD,oBAAA,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,QAAQ;AAChD,oBAAA,iBAAiB,EAAE,EAAE;AACrB,oBAAA,aAAa,EAAE;iBAClB;YACL;YACA,IAAI,0BAA0B,EAAE;gBAC5B,eAAe,CAAC,MAAM,CAAC,CAAC,kBAAkB,GAAG,0BAA0B,CAAC,CAAC,CAAC;oBACtE,0BAA0B,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE;gBAClD,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,GAAG,0BAA0B,CAAC,CAAC,CAAC;;AAE3E,gBAAA,IAAI,0BAA0B,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE;AAClF,oBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,iBAAiB,GAAG,0BAA0B,CAAC,CAAC,CAAC,CAAC,iBAAiB;gBAC/F;YACJ;iBAAO;;gBAEH,IAAI,qBAAqB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB;oBAClG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB,GAAG,EAAE;AACrD,gBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,kBAAkB,GAAG,qBAAqB;gBAClE,IAAI,sBAAsB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB;oBACpG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,GAAG,EAAE;AACtD,gBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,GAAG,sBAAsB;YACxE;AACA,YAAA,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,UAAU,EAAE;gBACvG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;gBACpG,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;AAChG,gBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU;AAClG,oBAAA,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC;AACvF,oBAAA,IAAI;YACZ;YAEA,IAAI,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO;AACtD,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE;AAE5B,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,QAAgB,KAAI;gBACxE,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS,EACrE,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAAO,EACrC,0BAA0B,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAC/G,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EACxD,eAAe,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC;AACnD,gBAAA,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,WAAW,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE;oBACrH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC/F;AAEA,gBAAA,IAAI,SAAS;;gBAGb,IAAI,0BAA0B,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9I,oBAAA,SAAS,GAAG,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE;gBACvF;;AAEK,qBAAA,IAAI,0BAA0B,CAAC,CAAC,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,EAAE,EAAE;oBACrJ,SAAS,GAAG,0BAA0B,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;gBAChE;;AAEK,qBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC/E,oBAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO;gBACnE;;qBAEK;oBACD,SAAS,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC;gBACtE;gBAEA,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG;AACxC,oBAAA,OAAO,EAAE,SAAS;oBAClB,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,GAAG,IAAI;oBACrH,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,EAAE;iBAC1G;gBACD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;AAC3E,oBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,YAAY,EAAE;AACzG,oBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,YAAY;gBAC9G;qBAAO;oBACH,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;gBAClH;gBACA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE;oBACnL,IAAI,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK;AAC9F,wBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,oBAAA,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;gBACjK;;AAGA,gBAAA,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,gBAAgB,EAAE;AAC7E,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;oBACxE,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;AACxD,wBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;oBAC1F;oBACA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;oBACrG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAClG,oBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AACnE,oBAAA,IAAI,CAAC,cAAc,IAAI,CAAC;gBAC5B;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,aAAa;AACxB,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;AACtC,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY;AAC1C,YAAA,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO;gBAC5D,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE;AACjG,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YAC3B;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,eAAe;QACnC,IAAI,CAAC,qBAAqB,EAAE;IAChC;AAEQ,IAAA,qBAAqB,CAAC,SAAS,EAAA;QACnC,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,IAAI,KAAI;AACvD,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;AAC5D,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3C,oBAAA,YAAY,CAAC,OAAO,CAAC,GAAG,IAAI;AAChC,gBAAA,CAAC,CAAC;YACN;AACA,YAAA,OAAO,YAAY;QACvB,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;IACpC;AAEO,IAAA,2BAA2B,CAAC,MAAM,EAAA;QACrC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB;QACtD,IAAI,EAAE,EAAE;AACJ,YAAA,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE;gBAC5C,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;YAC3C;AACA,YAAA,IAAI,EAAE,CAAC,SAAS,EAAE;gBACd,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC;YAC7C;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEO,IAAA,sBAAsB,CAAC,MAAM,EAAA;QAChC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB;QACtD,IAAI,EAAE,EAAE;AACJ,YAAA,OAAO,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC;QACpE;AACA,QAAA,OAAO,CAAC;IACZ;AAEO,IAAA,uBAAuB,CAAC,SAAS,EAAA;QACpC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,IAAI;QAClD,CAAC,EAAE,KAAK,CAAC;IACb;AAEO,IAAA,sBAAsB,CAAC,SAAS,EAAA;QACnC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,IAAI;QACvD,CAAC,EAAE,KAAK,CAAC;IACb;;IAGO,yBAAyB,GAAA;QAC5B,IAAI,QAAQ,GAAG,CAAC;QAChB,IAAI,UAAU,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,MAAc,KAAI;AACpD,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE;AAC5B,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;oBACrD,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;AACzC,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AACxE,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;AAC1D,4BAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC1F;AACA,wBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AACnE,wBAAA,IAAI,CAAC,cAAc,IAAI,CAAC;AAExB,wBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;4BAC3C,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE;4BACjC,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU;4BACrD,IAAI,MAAM,GAAG,UAAU;gCACnB,UAAU,GAAG,MAAM;AACvB,4BAAA,IAAI,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM;4BACxD,IAAI,QAAQ,GAAG,QAAQ;gCACnB,QAAQ,GAAG,QAAQ;AAC3B,wBAAA,CAAC,CAAC;wBACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;wBACrG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;oBACtG;AACJ,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;;QAEF,IAAI,CAAC,QAAQ,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACrE,IAAI,CAAC,UAAU,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU;AAC/E,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC;QACvC;AACA,QAAA,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/D;IAEO,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAA;QAC7C,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AAChD,QAAA,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;QAC5B,IAAI,SAAS,GAAG,IAAI;QACpB,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,IAAI,EAAE;AACjC,YAAA,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;AACpG,gBAAA,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;YAC5B;YACA,CAAC,IAAI,EAAE;QACX;AACA,QAAA,OAAO,SAAS;IACpB;AAEQ,IAAA,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,EAAA;AAC/C,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC;AAC3C,YAAA,OAAO,IAAI;AAEf,QAAA,IAAI,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AAClD,YAAA,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,IAAI,UAAU;AAC9D,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,IAAI;QACf;QAEA,IAAI,eAAe,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAClD,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;gBACjD,OAAO,EAAE;YACb,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;AACjD,gBAAA,OAAO,CAAC;AACZ,YAAA,OAAO,CAAC;AACZ,QAAA,CAAC,CAAC,CAAC,CAAC,CAAC;AAEL,QAAA,IAAI,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE;AACvD,QAAA,OAAO,WAAW,GAAG,UAAU,EAAE;YAC7B,WAAW,IAAI,CAAC,UAAU;QAC9B;AACA,QAAA,OAAO,WAAW;IACtB;AAEQ,IAAA,wBAAwB,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,UAAU,CAAC;IAC9C;;AAGO,IAAA,uBAAuB,CAAC,GAAQ,EAAE,MAAc,EAAE,OAAe,EAAE,OAAe,EACrF,IAAA,GAAa,IAAI,EAAE,EAAA,GAAW,IAAI,EAAE,UAAA,GAAqB,IAAI,EAC7D,UAAkB,EAAA;QAElB,IAAI,QAAQ,GAAe,EAAE;QAC7B,IAAI,YAAY,GAAG,EAAE;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,UAAkB,KAAI;AAC5C,YAAA,IAAI,WAAW,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;AACzE,YAAA,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE;YAC3C,YAAY,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;AAC/C,QAAA,CAAC,CAAC;QACF,GAAG,GAAG,YAAY;QAClB,IAAI,qBAAqB,GAAG,MAAK;YAC7B,IAAI,eAAe,GAAQ,EAAE;AAC7B,YAAA,eAAe,CAAC,cAAc,CAAC,GAAG,MAAM;AACxC,YAAA,eAAe,CAAC,eAAe,CAAC,GAAG,OAAO;AAC1C,YAAA,eAAe,CAAC,SAAS,CAAC,GAAG,OAAO;AACpC,YAAA,eAAe,CAAC,UAAU,CAAC,GAAG,EAAE;AAChC,YAAA,eAAe,CAAC,YAAY,CAAC,GAAG,UAAU;AAC1C,YAAA,OAAO,eAAe;AAC1B,QAAA,CAAC;AAED,QAAA,IAAI,IAAI;AACJ,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/D,QAAA,IAAI,EAAE;AACF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;AACzD,QAAA,IAAI,IAAI,IAAI,EAAE,IAAI,UAAU,EAAE;AAC1B,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC;AACvE,YAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACtB,gBAAA,IAAI,iBAAiB,GAAG,WAAW,CAAC,OAAO,EAAE;AAC7C,gBAAA,IAAI,sBAAsB,IAAI,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;;gBAEjH,IAAI,CAAC,sBAAsB,EAAE;AACzB,oBAAA,KAAK,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE;AACxI,wBAAA,IAAI,eAAe,GAAQ,qBAAqB,EAAE;AAClD,wBAAA,eAAe,CAAC,UAAU,CAAC,GAAG,QAAQ;AACtC,wBAAA,IAAI,cAAc,GAAG,QAAQ,CAAC,WAAW,EAAE;AAC3C,wBAAA,IAAI,GAAG,CAAC,cAAc,CAAC,EAAE;AACrB,4BAAA,IAAI,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC;4BACtC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,OAAe,KAAI;gCAClD,eAAe,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC;AAChE,4BAAA,CAAC,CAAC;wBACN;6BAAO;AACH,4BAAA,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI;wBACtC;AACA,wBAAA,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AAC9B,wBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC9D,wBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC;oBAC3E;gBACJ;qBAAO;oBACH,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;AACxC,wBAAA,IAAI,eAAe,GAAQ,qBAAqB,EAAE;wBAClD,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC;AACtD,wBAAA,IAAI,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC;wBACtC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,OAAe,KAAI;4BAClD,eAAe,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC;AAChE,wBAAA,CAAC,CAAC;AACF,wBAAA,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AAClC,oBAAA,CAAC,CAAC;gBACN;YACJ;QACJ;aAAO;AACH,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,QAAgB,KAAI;AACjD,gBAAA,IAAI,eAAe,GAAQ,qBAAqB,EAAE;gBAClD,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;AAChD,gBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE;AACf,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAe,KAAI;AACnD,wBAAA,eAAe,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;AACjE,oBAAA,CAAC,CAAC;gBACN;AACA,gBAAA,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;AAClC,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,QAAQ;IACnB;IAGO,gBAAgB,CAAC,IAAY,EAAE,OAAe,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO;AACxE,YAAA,OAAO,KAAK;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS;AACtD,YAAA,OAAO,KAAK;AAChB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO;IAC5D;IAEO,kBAAkB,CAAC,MAAc,EAAE,OAAe,EAAA;AACrD,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,IAAI,KAAK;aACnE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aACvE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAChF;IAEO,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAA;QAClD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS;AAC9F,YAAA,OAAO,IAAI;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW;IAChE;AAEO,IAAA,aAAa,CAAC,MAAM,EAAA;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO;IAC5C;IAEO,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAA;QACpC,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO;IAC7F;AAEO,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAC3B,YAAA,OAAO,KAAK;QAChB,IAAI,iBAAiB,GAAG,KAAK;AAC7B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAChE,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;gBACtC,iBAAiB,GAAG,IAAI;AAChC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,iBAAiB;IAC5B;AAEO,IAAA,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,EAAA;AACpC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC7D,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAClG;IAEO,qBAAqB,GAAA;AACxB,QAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;YACvE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO;AAC5C,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,cAAc,CAAC,CAAM,EAAA;AACzB,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACvB,OAAO,UAAU,CAAC,MAAM;QAC5B;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACvB,OAAO,UAAU,CAAC,MAAM;QAC5B;QACA,OAAO,UAAU,CAAC,OAAO;IAC7B;IAGO,iBAAiB,CAAC,SAAiB,CAAC,EAAE,aAAqB,IAAI,EAAE,UAAU,GAAG,IAAI,EAAA;;AAErF,QAAA,IAAI,OAAO,GAAG,CAAC,CAAS,KAAY;AAChC,YAAA,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;AAC1C,QAAA,CAAC;QAED,IAAI,SAAS,GAAG,EAAE;QAClB,IAAI,YAAY,GAAG,2BAA2B;QAE9C,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,QAAQ,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAG;AACvB,YAAA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;AAC1B,YAAA,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,aAAa;AAC/E,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACrD,gBAAA,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;gBACvE,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,EAAE;oBACvD,aAAa,IAAI,GAAG,GAAG,aAAa,CAAC,QAAQ,GAAG,GAAG,GAAG,OAAO;gBACjE;AAAO,qBAAA,IAAI,OAAO,KAAK,EAAE,EAAE;AACvB,oBAAA,aAAa,IAAI,GAAG,GAAG,OAAO;gBAClC;qBAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE;AACpE,oBAAA,aAAa,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,aAAa;gBACtF;gBAEA,IAAI,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK;AACvF,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBACnB,IAAI,MAAM,GAAG,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI;AAChD,oBAAA,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AACnB,oBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACrB,oBAAA,YAAY,IAAI,KAAK,CAAC,cAAc,CAAC,aAAa,GAAG,GAAG,GAAG,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG;AAC7F,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;QAEjC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC7B,YAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3D,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzC,oBAAA,IAAI,MAAM,GAAG,KAAK,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI;AAClE,oBAAA,IAAI,MAAM,IAAI,MAAM,EAAE;wBAClB,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AACpC,4BAAA,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS;gCAC9D,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;oBACtG;AACJ,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,UAAkB,KAAI;AACnD,YAAA,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;AAC7C,YAAA,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG;AAC9H,YAAA,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG;AACzH,YAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACxB,gBAAA,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG;AAC1F,YAAA,CAAC,CAAC;AACF,YAAA,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;AAClC,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,SAAS;IACpB;IAEO,kBAAkB,GAAA;QACrB,IAAI,oBAAoB,GAAG,EAAE;AAC7B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC9C,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC/C,IAAI,eAAe,GAAG,CAAC,eAAe,CAAC,OAAO,GAAG,EAAE;AAC/C,gBAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,KAAI;oBACzD,OAAO,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO;AACxD,gBAAA,CAAC,CAAC;AACN,YAAA,IAAI,OAAO,GAAG,eAAe,CAAC,IAAI;YAClC,IAAI,gBAAgB,GAAG,EAAE;YACzB,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC;AACtE,YAAA,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC/C,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,oBAAoB;IAC/B;AACH;;AC9kBD,MAAM,YAAa,SAAQ,SAAS,CAAA;AAQhC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;IACvB;IAEQ,cAAc,CAAC,QAAgB,EAAE,KAAa,EAAA;QAClD,IAAI,cAAc,GAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC;QAChE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,QAAQ,GAAG,MAAM,GAAG,EAAE;IAC5E;AAEO,IAAA,iBAAiB,CAAC,SAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;QAC9B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC;IAC9E;IAEQ,eAAe,CAAC,YAAoB,CAAC,EAAA;AACzC,QAAA,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM;AACvE,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC/E,YAAA,QAAQ,SAAS,KAAK,CAAC;AAC3B,QAAA,CAAC,CAAC;AACF,QAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;IAC3B;AAEQ,IAAA,kBAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAA;AAClC,QAAA,QAAQ,KAAK,CAAC,OAAO;YACjB,KAAK,CAAC;AACF,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3B,KAAK,CAAC,cAAc,EAAE;gBACtB;YACJ,KAAK,EAAE;AACH,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBAC7B,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBACjC,KAAK,CAAC,cAAc,EAAE;gBACtB;YACJ,KAAK,EAAE;AACH,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3B,KAAK,CAAC,cAAc,EAAE;gBACtB;YACJ,KAAK,EAAE;AACH,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3B,KAAK,CAAC,cAAc,EAAE;gBACtB;;IAEZ;AAEO,IAAA,MAAM,CAAC,SAAS,EAAE,OAAA,GAAe,EAAE,EAAA;AACtC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AAErC,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;AAC/F,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAC5B,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AACpD,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAE7D,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,QAAQ;AAC5D,aAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB;aAClC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;aACvD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;AAClD,aAAA,IAAI,CAAC,MAAM,EAAE,QAAQ;aACrB,EAAE,CAAC,OAAO,EAAE,YAAA;AACT,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;iBAC/H,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;YACrH,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;AAC3C,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAC3B;AACJ,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK;AACvD,aAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;AAChC,aAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAEzB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;AAC7F,aAAA,KAAK;aACL,MAAM,CAAC,QAAQ;AACf,aAAA,OAAO,CAAC,sBAAsB,EAAE,IAAI;aACpC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK;AAC/B,aAAA,IAAI,CAAC,MAAM,EAAE,QAAQ;AACrB,aAAA,IAAI,CAAC,MAAM,EAAE,UAAU;aACvB,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AACxB,YAAA,MAAM,CAAC,GAAG,kBAAkB,CAAC,KAAK,EAAE;YACpC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACxC,QAAA,CAAC;aACA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAM,KAAI;YAC3B,CAAC,CAAC,MAAM,EAAE;AACd,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,YAAA;AACF,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI;iBACT,MAAM,CAAC,KAAK;iBACZ,IAAI,CAAC,OAAO,EAAE,CAAC,CAAM,KAAK,uBAAuB,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAEnH,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI;iBACT,MAAM,CAAC,KAAK;AACZ,iBAAA,OAAO,CAAC,uBAAuB,EAAE,IAAI;iBACrC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,KAAK,CAAC;AAE9B,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI;iBACT,MAAM,CAAC,KAAK;AACZ,iBAAA,OAAO,CAAC,6BAA6B,EAAE,IAAI;AAC3C,iBAAA,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AACjC,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,YAAY,CAAC,YAAwB,EAAA;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,YAAY,KAAI;YAC7D,SAAS,CAAC,IAAI,CAAC;gBACX,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,WAAW,EAAE,YAAY,CAAC;AAC7B,aAAA,CAAC;AACF,YAAA,OAAO,SAAS;QACpB,CAAC,EAAE,EAAE,CAAC;IACV;AACH;;ACvHD,MAAM,IAAK,SAAQ,SAAS,CAAA;AAiBxB,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QAhBf,IAAA,CAAA,WAAW,GAAW,cAAc;QACpC,IAAA,CAAA,QAAQ,GAAW,cAAc;QACjC,IAAA,CAAA,WAAW,GAAW,iBAAiB;AACvC,QAAA,IAAA,CAAA,kBAAkB,GAAuB,IAAI,kBAAkB,EAAE;QAEjE,IAAA,CAAA,WAAW,GAAG,IAAI;QAOnB,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,UAAU,GAAY,KAAK;AAyC1B,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAI;AAC/B,YAAA,OAAO,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI;AAC3C,QAAA,CAAC;AAEM,QAAA,IAAA,CAAA,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,KAAI;AAC9B,YAAA,IAAI;AACM,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI;AACrE,qBAAA,KAAK,EAAE;YAChB;YAAE,OAAO,CAAC,EAAE;AACR,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAClB;AACJ,QAAA,CAAC;AA+CO,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAC,KAAI;YAC7B,IAAI,OAAO,IAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AACzC,gBAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;AACjJ,YAAA,OAAO,CAAC;AACZ,QAAA,CAAC;QAEO,IAAA,CAAA,qBAAqB,GAAG,MAAK;YACjC,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,KAAK,QAAQ,EAAE;gBACjD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB;YACxE;iBAAO;AACH,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,KAAI;AAC/E,oBAAA,IAAI,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;AACzC,oBAAA,QAAQ,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ;AAC7G,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC;QAqLO,IAAA,CAAA,aAAa,GAAG,CAAC,OAAY,EAAE,MAAc,EAAE,MAAc,KAAI;AACrE,YAAA,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE;oBACjC,OAAO,CAAC,cAAc,EAAE;gBAC5B;gBACA;YACJ;YACA,IAAI,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAC5B,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9C,IAAI,SAAS,IAAI,EAAE;gBACf;YACJ,QAAQ,SAAS;AACb,gBAAA,KAAK,CAAC;;oBAEF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;oBAC9B,OAAO,CAAC,cAAc,EAAE;oBACxB;AACJ,gBAAA,KAAK,CAAC;;oBAEF,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC;oBAC9B,OAAO,CAAC,cAAc,EAAE;oBACxB;AACJ,gBAAA,KAAK,CAAC;;oBAEF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;oBAC9B,OAAO,CAAC,cAAc,EAAE;oBACxB;AACJ,gBAAA,KAAK,CAAC;;oBAEF,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC;oBAC9B,OAAO,CAAC,cAAc,EAAE;oBACxB;;AAIZ,QAAA,CAAC;IAxUD;IAEA,OAAO,QAAQ,CAAC,YAAiB,EAAA;AAC7B,QAAA,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAE,CAAC,CAAC,MAAM,EAAE;IACxE;IAEA,OAAO,QAAQ,CAAC,YAAiB,EAAE,YAA0B,EAAE,0BAA+B,EAC1F,kBAAsC,EAAA;AACtC,QAAA,YAAY,CAAC,SAAS,GAAG,IAAI;AAC7B,QAAA,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAE,CAAC,CAAC,MAAM,EAAE;AACpE,QAAA,IAAI,aAAa,GAAQ,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK;AACxD,aAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;AAChC,aAAA,KAAK,CAAC,OAAO,EAAE,MAAM;AACrB,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QAE5B,IAAI,aAAa,GAAS,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AACxD,QAAA,aAAa,CAAC,WAAW,GAAG,kBAAkB,CAAC,WAAW;AAC1D,QAAA,aAAa,CAAC,UAAU,GAAG,kBAAkB,CAAC,UAAU;AACxD,QAAW,aAAa,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,0BAA0B,EAAE,kBAAkB;AACnI,QAAA,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7B;AAEA,IAAA,OAAO,wBAAwB,CAAC,YAAiB,EAAE,YAA0B,EAAE,0BAA+B,EAC1G,kBAAsC,EAAE,SAAS,GAAG,cAAc,EAAA;QAClE,OAAO;AACH,YAAA,SAAS,EAAE,MAAM;AACjB,YAAA,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,MAAK;gBACT,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,0BAA0B,EAAE,kBAAkB,CAAC;YAC7F,CAAC;AACD,YAAA,WAAW,EAAE;SAChB;IACL;IAEA,IAAI,GAAA;IACJ;AAeO,IAAA,oBAAoB,CAAC,IAAS,EAAE,OAAY,EAAE,0BAA+B,EAAE,kBAAkB,EAAA;AACpG,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAI;YACrC,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;gBACpC,IAAI,GAAG,GAAG,EAAE;AACZ,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAG;AACxC,oBAAA,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AACnC,gBAAA,CAAC,CAAC;AACF,gBAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9F,gBAAA,IAAI,0BAA0B,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK;AACjE,oBAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,0BAA0B,CAAC,CAAC,CAAC,CAAC,KAAK;AAC5D,gBAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACzB,gBAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACf,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,CAAC;IAC3F;IAEQ,UAAU,GAAA;QACd,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC/D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAI;gBACxE,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBACvD,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC9B;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,OAAO;IAClB;IAEQ,uBAAuB,CAAC,eAAe,EAAE,UAAU,EAAA;AACvD,QAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAClE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACjC,YAAA,OAAO,CAAC,CAAC,QAAQ,KAAK,IAAI;AAC9B,QAAA,CAAC,CAAC;AACF,QAAA,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,KAAI;YACzB,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,SAAS;AACjE,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAI;AAC3C,YAAA,OAAO,eAAe,CAAC,EAAE,CAAC;AAC9B,QAAA,CAAC,CAAC;IACN;IAoBQ,cAAc,GAAA;AAClB,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC7C,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;AACvF,QAAA,IAAI,kBAAkB,GAAG,WAAW,CAAC,KAAK;aACrC,MAAM,CAAC,IAAI;AACX,aAAA,IAAI,CAAC,UAAU,EAAE,CAAC;aAClB,KAAK,CAAC,WAAW;aACjB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAiB;aACpE,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AACxB,YAAA,MAAM,CAAC,GAAG,kBAAkB,CAAC,KAAK,EAAE;YACpC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACvC,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAC1B,aAAA,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,KAAI;AACtB,YAAA,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;AACpF,QAAA,CAAC,CAAC;AACN,QAAA,kBAAkB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACtC;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACpE,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,KAAI;AAC/D,YAAA,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE;AACd,YAAA,OAAO,KAAK;QAChB,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB;AAE5C,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK;aACvB,MAAM,CAAC,IAAI;AACX,aAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI;AAClC,aAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;AAChB,YAAA,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AACnH,YAAA,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAe,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACtF,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK;;YAGrJ,IAAI,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAe,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvF,YAAA,IAAI,gBAAgB,GAAG,CAAC,CAAC,KAAI;AACzB,gBAAA,OAAO,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA,GAAI,OAAO,KAAK,EAAE,IAAI,IAAI,GAAG,OAAO,IAAI,EAAE,GAAG;AAC5G,YAAA,CAAC;YAED,UAAU,CAAC,KAAK;iBACX,MAAM,CAAC,IAAI;AACX,iBAAA,IAAI,CAAC,UAAU,EAAE,CAAC;iBAClB,KAAK,CAAC,UAAU;iBAChB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAA,kBAAA,EAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;iBACzE,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;gBACxB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvC,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAG;AACpB,gBAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAE,CAAC,CAAC,EAAE;AAC5F,YAAA,CAAC;iBACA,IAAI,CAAC,UAAU,CAAC,EAAA;AACb,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;gBACpC,IAAI,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;AACrF,gBAAA,IAAI,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK;AAClC,qBAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC;gBAC7C,KAAK,CAAC,iCAAiC,CAAC,UAAU,EAAE,gBAAgB,CAAE,CAAC,CAAC;AACxE,gBAAA,IAAI,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK;AACxC,qBAAA,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC;AAE3C,gBAAA,IAAI,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;gBACpF,YAAY,CAAC,KAAK;qBACb,MAAM,CAAC,KAAK;AACZ,qBAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;qBAC/B,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC;AAC5B,YAAA,CAAC,CAAC;AACN,YAAA,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE1B,YAAA,IAAI,YAAY,GAAG,KAAK,CAAC,KAAK;iBACzB,MAAM,CAAC,IAAI;iBACX,KAAK,CAAC,KAAK;iBACX,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,CAAA,cAAA,EAAiB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA,CAAE;iBAC3E,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AACxB,gBAAA,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE;gBAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AAC1C,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAC7C,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,UAAU,EAAE,CAAC;iBAClB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAM,EAAE,CAAC,KAAI;AAC9B,gBAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrD,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA,CAAA,EAAI,gBAAgB,CAAE,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE;gBAC/H;AACA,gBAAA,IAAI,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,KAAI;oBAC9D,OAAO,CAAA,EAAG,WAAW,CAAA,EAAA,EAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA,CAAE;AACvD,gBAAA,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACb,gBAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA,CAAA,EAAI,gBAAgB,CAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,eAAe,EAAE;AACrL,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,UAAU,CAAM,EAAE,CAAC,EAAA;AACrB,gBAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;gBAChF,QAAQ,CAAC,KAAK;qBACT,MAAM,CAAC,KAAK;AACZ,qBAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;qBAChC,IAAI,CAAC,CAAC,OAAe,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACrE,gBAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAC5B,YAAA,CAAC,CAAC;AACN,YAAA,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAChC,QAAA,CAAC,CAAC;AAEN,QAAA,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IAC/B;IAEO,MAAM,CAAC,IAAS,EAAE,OAAY,EAAE,0BAA+B,EAAE,qBAAyC,IAAI,EAAA;AACjH,QAAA,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACjD,IAAI,kBAAkB,EAAE;AACpB,YAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;QAChD;aAAO;YACH,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,EAAE,0BAA0B,CAAC;QAClG;QAEA,IAAI,CAAC,qBAAqB,EAAE;AAE5B,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAE1D,QAAA,IAAI,CAAC;AACA,aAAA,OAAO,CAAC,mBAAmB,EAAE,IAAI;aACjC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;AAClD,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC;aACX,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;AAC/B,aAAA,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,aAAA,EAAE,CAAC,OAAO,EAAE,MAAK;YACd,IAAI,IAAI,EAAE;AACN,gBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB;AACJ,QAAA,CAAC,CAAC;AAEN,QAAc,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;gBACvB,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;AAC3C,oBAAA,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AACnB,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,CAAC;AACZ,QAAA,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;AAEZ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;AAChE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;AAChF,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI;AAC1B,iBAAA,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,iBAAA,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,iBAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;gBACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACnC,YAAA,CAAC,CAAC;QACV;QAEA,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE;YACzD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAClC,iBAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;iBAC/B,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;iBAC/C,IAAI,CAAC,QAAQ;AACb,iBAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACrB,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE;AACrB,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChB,KAAK,CAAC,cAAc,EAAE;gBAC1B;AACJ,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,OAAO,EAAE,MAAK;AACd,gBAAA,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE;oBACrB,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AACzD,oBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBAC/B;AACJ,YAAA,CAAC,CAAC;QACV;IACJ;AAuCH;;ACxVD,MAAM,cAAe,SAAQ,SAAS,CAAA;AAqBrC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAChC,KAAK,CAAC,YAAY,CAAC;QArBX,IAAA,CAAA,QAAQ,GAAG,GAAG;QACb,IAAA,CAAA,SAAS,GAAG,GAAG;QAChB,IAAA,CAAA,aAAa,GAAG,GAAG;QACnB,IAAA,CAAA,WAAW,GAAG,CAAC;QAGd,IAAA,CAAA,kBAAkB,GAAG,IAAI;QACzB,IAAA,CAAA,iBAAiB,GAAG,IAAI;QACxB,IAAA,CAAA,YAAY,GAAiB,IAAI;QAKjC,IAAA,CAAA,YAAY,GAAG,IAAI;AACnB,QAAA,IAAA,CAAA,WAAW,GAAW,IAAI,CAAC,aAAa;AAuD3C,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,aAAa,GAAG,KAAK,KAAI;AAChD,YAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;AAC1K,QAAA,CAAC;AAjDA,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,EAAE;IACnD;IAEO,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAC9G;IAEO,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB,IAAI,CAAC,QAAQ,EAAE;QAChB;IACD;IAEO,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;IACjC;IAEO,aAAa,GAAA;AACnB,QAAA,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAA,CAAE,CAAC,CAAC,KAAK,EAAE;IACjF;IAEU,gBAAgB,CAAC,uBAAuB,GAAG,EAAE,EAAA;AACtD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;AACrL,YAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;gBACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK;AAC3D,qBAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC;YAC5C;AACA,YAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;YACpE;YAEA,IAAI,aAAa,GAAG,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC3B,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;YAClL;AACA,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;gBAClC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACzP;AAEA,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;gBACpC,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;YACtE;YAEA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5G;IACD;IAMU,kBAAkB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC5B,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;QACjC;AACA,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IACzB;IAEU,kBAAkB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;QAChC;AACA,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IACzB;IAEU,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC;IACvF;IAEO,kBAAkB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE;IACpD;IAEU,kBAAkB,GAAA;QAC3B,QAAQ,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI;IAC9G;AAEU,IAAA,WAAW,CAAC,MAAM,EAAA;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC;IACnD;AAEU,IAAA,gBAAgB,CAAC,MAAM,EAAA;QAChC,IAAI,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC5D,YAAA,OAAO,GAAG,CAAC,MAAM,KAAK,MAAM;AAC7B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,OAAO,CAAC,CAAC,CAAC;QAClB;AACA,QAAA,OAAO,EAAE;IACV;IAEU,mBAAmB,CAAC,WAAW,EAAE,cAAc,EAAE,aAAmC,EAAE,WAAW,GAAG,IAAI,EAAA;AACjH,QAAA,IAAI,kBAAkB,GAAG,CAAC,cAAc,CAAC;QACzC,QAAQ,aAAa;YACpB,KAAK,oBAAoB,CAAC,WAAW;AACpC,gBAAA,OAAO,kBAAkB;YAC1B,KAAK,oBAAoB,CAAC,OAAO;AAChC,gBAAA,OAAO,WAAW;AACnB,YAAA;AACC,gBAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,oBAAA,OAAO,kBAAkB;gBAC1B;gBACA,IAAI,WAAW,GAAG,IAAI;AACtB,gBAAA,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAC/B,oBAAA,IAAI,EAAE,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,CAAC,EAAE;wBACnE,WAAW,GAAG,KAAK;oBACpB;AACD,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,EAAE,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,kBAAkB;;IAE5G;;AAGU,IAAA,wBAAwB,CAAC,CAAM,EAAA;QACxC,IAAI,cAAc,GAAG,EAAE;AACvB,QAAA,IAAI,WAAW,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW;AAChI,QAAA,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG;QACnC,OAAO;YACN,YAAY,EAAE,CAAC,CAAC,MAAM;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;AAClB,YAAA,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AAClE,YAAA,QAAQ,EAAE;SACV;IACF;IAEU,UAAU,CAAC,IAAI,EAAE,WAAW,EAAA;AACrC,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC9F,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;IAClH;IAEU,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,aAAmC,EAAE,WAAW,GAAG,IAAI,EAAA;QACvF,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;AAC/C,QAAY,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC;AAE/C,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,CAAC,YAAY,CAAC;AAChF,QAAA,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC;AAE7D,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAChC,aAAA,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC;QAExC,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC;AAEhD,QAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,WAAW,EAAE;AACvC,YAAA,UAAU,CAAC,MAAM,CAAC,IAAI;AACpB,iBAAA,IAAI,CAAC,OAAO,EAAE,0CAA0C;AACxD,iBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/D;AAEA,QAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,MAAM,EAAE;AAClC,YAAA,UAAU,CAAC,MAAM,CAAC,IAAI;AACpB,iBAAA,IAAI,CAAC,OAAO,EAAE,0CAA0C;iBACxD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/B;AAEA,QAAA,IAAI,YAAY,GAAG,GAAG,CAAC,iBAAiB;AACxC,QAAA,IAAI,WAAW,KAAK,CAAC,IAAI,YAAY,EAAE;AACtC,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAAC,YAAY,CAAC;AACpF,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;gBACxB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7C,gBAAA,IAAI,WAAW,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;gBAClH,YAAY,GAAG,CAAC,GAAG,YAAY,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAC3D;QACD;QAEA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAChC,iBAAA,IAAI,CAAC,OAAO,EAAE,mDAAmD,CAAC;YACpE,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,KAAI;AACrC,gBAAA,IAAI,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK;AACxC,qBAAA,IAAI,CAAC,OAAO,EAAE,2CAA2C,CAAC;AAC5D,gBAAA,YAAY,CAAC,MAAM,CAAC,KAAK;AACvB,qBAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB;AACpC,qBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpB,gBAAA,YAAY,CAAC,MAAM,CAAC,KAAK;AACvB,qBAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB;AACpC,qBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrB,YAAA,CAAC,CAAC;QACH;AAGA,QAAA,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;YACjD,IAAI,WAAW,IAAI,QAAQ,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC;AAEtF,YAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;AACnC,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;AAClC,qBAAA,IAAI,CAAC,OAAO,EAAE,oCAAoC,CAAC;AACrD,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAI;AAClD,oBAAA,IAAI,EAAE,QAAQ,KAAK,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AAC3E,wBAAA,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;AACxD,wBAAA,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;AAC7B,6BAAA,OAAO,CAAC,kBAAkB,GAAG,QAAQ,KAAK,SAAS,CAAC,OAAO,KAAK,WAAW,KAAK,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACrJ,6BAAA,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACtE,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI;AACZ,6BAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB;6BAC9B,IAAI,CAAC,WAAW,CAAC;AACnB,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI;AACZ,6BAAA,IAAI,CAAC,OAAO,EAAE,eAAe;6BAC7B,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC7C;AACD,gBAAA,CAAC,CAAC;YACH;iBAAO;AACN,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAChC,qBAAA,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;AACtC,gBAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC;gBAC1K,gBAAgB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAI;AAC3C,oBAAA,IAAI,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK;AACrC,yBAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB;yBACpC,OAAO,CAAC,kBAAkB,GACzB,QAAQ,KAAK,SAAS,CAAC,OAAO;AAC9B,yBAAC,WAAW,KAAK,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;yBACrF,aAAa,KAAK,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACrD,oBAAA,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK;AACvC,yBAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB,CAAC;AAC1C,oBAAA,KAAK,CAAC,iCAAiC,CAAC,YAAY,EAAE,WAAW,CAAC;AAClE,oBAAA,SAAS,CAAC,MAAM,CAAC,KAAK;AACpB,yBAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB;yBACvC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7C,gBAAA,CAAC,CAAC;YACH;QACD;IACD;IAEU,WAAW,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;IAC1E;AAEU,IAAA,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,EAAA;AACvD,QAAA,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;IAC7I;IAEU,YAAY,GAAA;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;IAC9D;IAEU,qBAAqB,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;;AAEjF,YAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACpE,gBAAA,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YACrG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;QACjE;IACD;IAEU,uBAAuB,CAAC,WAAmB,EAAE,YAAiB,EAAE,sBAA+B,EAAE,oBAAyB,SAAS,EAAA;AAC5I,QAAA,IAAI,WAAW,KAAK,OAAO,EAAE;YAC5B,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,iBAAiB,CAAC;YAC9D,IAAI,sBAAsB,EAAE;gBAC3B,IAAI,CAAC,qBAAqB,EAAE;YAC7B;QACD;aAAO;AACN,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE;QAClE;IACD;IAEU,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC,EAAA;AAC3D,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ;AACvC,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE;AACjE,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;AAE5C,QAAA,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,EAAE;AAC7D,YAAA,KAAK,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AACpE,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACjB,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,SAAS,EAAE,CAAC,KAAK,KAAI;AACpB,gBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC/C,gBAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC9C,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,mBAAmB;AACrD,qBAAA,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;YACnC,CAAC;YACD,WAAW,EAAE,MAAK;gBACjB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,mBAAmB;AACrD,qBAAA,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;YAClC,CAAC;YACD,MAAM,EAAE,MAAK;AACZ,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AACjF,oBAAA,IAAI,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE;oBACvC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACpG;AACA,gBAAA,MAAM,EAAE;YACT,CAAC;AACD,YAAA,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAI;gBAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC5C,gBAAA,MAAM,CAAC,SAAS,GAAG,CAAA,uBAAA,CAAyB;AAC5C,gBAAA,OAAO,MAAM;YACd,CAAC;AACD,YAAA,SAAS,EAAE;AACX,SAAA,CAAC;;QAGF,IAAI,iBAAiB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;QACnE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAChD;AACA;;AC/UD,MAAM,cAAc,GAAG,EAAE;AACzB;AACA,MAAM,gBAAgB,CAAA;AAkClB,IAAA,WAAA,CAAY,aAAqB,EAAA;AA3B1B,QAAA,IAAA,CAAA,qBAAqB,GAAW,sBAAsB,CAAC,IAAI;QAC3D,IAAA,CAAA,OAAO,GAAQ,IAAI;QACnB,IAAA,CAAA,eAAe,GAAY,KAAK;QAChC,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,eAAe,GAAe,IAAI;QAclC,IAAA,CAAA,aAAa,GAAY,KAAK;QAC9B,IAAA,CAAA,sBAAsB,GAAW,EAAE;QAStC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,CAAC;QACtE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,cAAc,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC;AAC5D,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,uBAAuB,EAAE,sBAAsB,CAAC,IAAI,CAAC;AACzH,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,iBAAiB,EAAE,KAAK,CAAC;AACvF,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,KAAK,CAAC;QAC/E,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,iBAAiB,CAAC;QAChF,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,SAAS,CAAC;AAChE,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC;AACrF,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,cAAc,EAAE,EAAE,CAAC;AAC9E,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC;AAC9E,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,gBAAgB,EAAE,IAAI,CAAC;AACpF,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,OAAO,CAAC;AAC7G,QAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,yBAAyB,EAAE,KAAK,CAAC;AACvG,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,CAAC;AACxF,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC;AAClF,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,CAAC;AACnF,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,wBAAwB,EAAE,EAAE,CAAC;AAClG,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,uBAAuB,EAAE,IAAI,CAAC;AAClG,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,uBAAuB,EAAE,IAAI,CAAC;AAClG,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAClE,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC;AACtE,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC;AAC3E,QAAA,IAAI,CAAC,6BAA6B,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,+BAA+B,EAAE,IAAI,CAAC;AAClH,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,CAAC;IAC5F;AACH;;ACrED,MAAM,2BAA4B,SAAQ,cAAc,CAAA;AAEpD,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;IACvB;AAEO,IAAA,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAA;QACnD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,0BAA0B,IAAI,CAAC,IAAI,0BAA0B;YAC1E,IAAI,gBAAgB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AACnD,YAAA,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC;AACH;;ACdD,MAAM,sBAAuB,SAAQ,2BAA2B,CAAA;AAQ5D,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;IACvB;IAEQ,iBAAiB,GAAA;QACrB,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;AACzB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC3G,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzG,KAAK,CAAC,MAAM,CAAC;YACT,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM;AACtC,SAAA,CAAC;AACF,QAAA,OAAO,KAAK;IAChB;IAEQ,WAAW,CAAC,oBAAoB,EAAE,SAAS,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAA;AACzE,QAAA,IAAI,OAAO,GAAQ,IAAI,CAAC,iBAAiB,EAAE;AAC3C,QAAA,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;AACpE,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AACnB,YAAA,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;QAC3B;QAEA,IAAI,SAAS,EAAE;AACX,YAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjC;QACA,IAAI,QAAQ,EAAE;AACV,YAAA,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD;QAEA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC;AACjE,QAAA,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACtB,UAAU,CAAC,KAAK;AAChB,aAAA,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAChN;AAEQ,IAAA,cAAc,CAAC,oBAAoB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACtH;IAEQ,sBAAsB,CAAC,KAAK,GAAG,IAAI,EAAA;QACvC,IAAI,iBAAiB,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK;QACrF,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,iBAAiB;IACvE;IAEQ,qBAAqB,CAAC,KAAK,GAAG,IAAI,EAAA;AACtC,QAAA,IAAI,iBAAiB,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK;QAC/E,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,iBAAiB;IACvE;AAEO,IAAA,WAAW,CAAC,UAAU,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAA;QACpD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACvG,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC;IAC9C;AAEQ,IAAA,cAAc,CAAC,UAAU,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAA;;AAExD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AACnC,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;YACjE,IAAI,IAAI,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;AACpD,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;oBACtC,IAAI,sBAAsB,GAAW,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC;AAChH,oBAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACjN,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;aAAO;AACH,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;YACjE,IAAI,IAAI,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;AACpD,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;oBACtC,IAAI,sBAAsB,GAAW,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC;;AAEnG,oBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,UAAU,MAAM,CAAC,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;AAC7D,wBAAA,sBAAsB,GAAG,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC;oBACzG;AACA,oBAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACjN,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB;AACvC,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;AAElE,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IAChE;IAEU,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAA;QAC5D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;aAC/B,MAAM,CAAC,GAAG;AACV,aAAA,IAAI,CAAC,OAAO,EAAE,OAAO;AACrB,aAAA,KAAK,CAAC,IAAI,CAAC,KAAK;aAChB,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,OAAO,GAAG,GAAG;AAChD,aAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC5C;IAEQ,UAAU,CAAC,EAAE,EAAE,EAAE,EAAA;AACrB,QAAA,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE;IAC7G;IAEQ,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAA;AACzC,QAAA,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,QAAQ;IAC/D;IAEQ,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAA;QACxC,IAAI,iBAAiB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAE9E,IAAI,UAAU,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAE/I,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAI;YAC7B,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,IAAI,GAAG,UAAU,KAAK,UAAU,GAAG,IAAI,CAAC;YACpG,IAAI,iBAAiB,EAAE;AACnB,gBAAA,OAAO,GAAG;YACd;AACA,YAAA,IAAI,OAAO,IAAI,MAAM,EAAE;AACnB,gBAAA,OAAO,WAAW;YACtB;YACA,IAAI,CAAC,iBAAiB,EAAE;AACpB,gBAAA,OAAO,UAAU;YACrB;AACA,YAAA,OAAO,WAAW;AACtB,QAAA,CAAC;IACL;AAEH;;ACrID,MAAM,aAAc,SAAQ,kBAAkB,CAAA;AAE1C,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS;IACzB;;IAIO,WAAW,CAAC,GAAW,EAAE,KAAuB,EAAA;AACnD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;IAC/B;IAEO,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B;IACJ;IAEO,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,KAAI;YACtD,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE;gBACjC,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;YACtC;AACA,YAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC1B,gBAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE;AAC9B,oBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC/B;qBAAO;oBACH,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;gBACjC;YACJ;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,EAAE,EAAE,CAAC;IACV;AAEA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QApCJ,IAAA,CAAA,OAAO,GAAQ,EAAE;QAKhB,IAAA,CAAA,SAAS,GAAe,EAAE;IAgClC;AAEO,IAAA,oCAAoC,CAAC,IAAI,EAAE,0BAA0B,GAAG,IAAI,EAAA;AAC/E,QAAA,KAAK,CAAC,oCAAoC,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAChF;AACH;;AC1CD,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,qBAAqB,GAAG,GAAG;AACjC,MAAM,+BAA+B,GAAG,GAAG;AAC3C,MAAM,eAAe,GAAG,CAAC;AAEzB,MAAM,WAAY,SAAQ,SAAS,CAAA;IAkB/B,WAAA,CAAY,SAAc,EAAE,YAAqB,EAAA;QAC7C,KAAK,CAAC,YAAY,CAAC;QAfhB,IAAA,CAAA,kBAAkB,GAAY,KAAK;AAgBtC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc;AACzE,aAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;AAC/B,aAAA,KAAK,CAAC,MAAM,EAAE,KAAK;AACnB,aAAA,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IAC5B;AAEQ,IAAA,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,EAAA;AACvD,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC;AAChB,aAAA,SAAS,CAAC,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAE;aAClD,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnC,QAAA,IAAI,gBAAgB,GAAG,SAAS,CAAC,KAAK;aACjC,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAA,qDAAA,EAAwD,CAAC,CAAC,QAAQ,EAAE;aACzF,KAAK,CAAC,SAAS;AACf,aAAA,KAAK,CAAC,YAAY,EAAE,CAAA,EAAG,+BAA+B,IAAI;AAC1D,aAAA,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC9B,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,cAAc,EAAE,QAAQ,CAAC;AACrE,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC;AACxE,QAAA,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IAC7B;AAEQ,IAAA,WAAW,CAAC,SAAS,EAAE,mBAAmB,EAAE,GAAG,EAAE,QAAQ,EAAA;QAC7D,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,CAAC;AACvE,QAAA,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACnD;AAEQ,IAAA,oBAAoB,CAAC,OAAO,EAAA;AAChC,QAAA,IAAI,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI;AACvC,QAAA,IAAI,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;QAClF,QAAQ,CAAC,aAAa,GAAG,qBAAqB,IAAI,UAAU;IAChE;IAEQ,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAA;AAC3C,QAAA,IAAI,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG;AACpC,QAAA,IAAI,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACpF,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;QAC5H,QAAQ,CAAC,YAAY,GAAG,gBAAgB,IAAI,WAAW;IAC3D;;AAGQ,IAAA,6BAA6B,CAAC,IAAI,EAAE,MAAA,GAAkB,IAAI,EAAA;AAC9D,QAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC3I;AAEQ,IAAA,mBAAmB,CAAC,sBAAsB,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAA;AAC9E,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;QAC/E,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE;AAC/C,YAAA,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,CAAC,WAAW,GAAG,MAAM,KAAK,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,eAAe,CAAC,CAAA,EAAA,CAAI;AAC9H,iBAAA,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;QAC3B;aAAO;YACH,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,MAAM,GAAG,eAAe,CAAA,EAAA,CAAI;AAC9D,iBAAA,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QAC9B;IACJ;IAEQ,qBAAqB,CAAC,sBAAsB,EAAE,QAAQ,EAAA;QAC1D,IAAI,YAAY,GAAG,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC;AACrB,QAAA,IAAI,QAAQ,KAAK,CAAC,EAAE;AAChB,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA,2BAAA,EAA8B,QAAQ,GAAG,CAAC,CAAA,CAAE,CAAC;AAChG,YAAA,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE;AACnB,gBAAA,aAAa,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI;AAC5F,gBAAA,YAAY,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;YAC9F;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE;AAC1C,YAAA,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI;iBACpC,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,CAAC,GAAG,YAAY,CAAA,EAAA,CAAI,CAAC;QAChD;aAAO;YACH,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,aAAa,IAAI;AACpD,iBAAA,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;QAC7B;IACJ;IAEQ,4BAA4B,CAAC,yBAA8B,IAAI,EAAA;AACnE,QAAA,IAAI,sBAAsB,KAAK,IAAI,EAAE;AACjC,YAAA,OAAO,CAAC;QACZ;AACA,QAAA,OAAO,sBAAsB,CAAC,qBAAqB,EAAE,CAAC,GAAG;YACrD,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG;IAClE;AAEQ,IAAA,wBAAwB,CAAC,KAAK,EAAA;AAClC,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC,QAAa,KAAI;AAC3F,YAAA,QAAQ,QAAQ,CAAC,QAAQ,GAAG,KAAK;AACrC,QAAA,CAAC,CAAC,CAAC,MAAM,EAAE;IACf;AAEQ,IAAA,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,GAAG,CAAC,EAAA;QACzD,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,oBAAoB;aACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACpB,YAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ;AACrB,YAAA,OAAO,CAAC;QACZ,CAAC,CAAC,CAAC;AAEP,QAAA,IAAI,qBAAqB,GAAG,cAAc,CAAC,KAAK;aAC3C,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,CAAA,iBAAA,CAAmB;aACjC,OAAO,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ;aACzC,KAAK,CAAC,cAAc;aACpB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;AAChB,aAAA,EAAE,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;AAChC,YAAA,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACxC,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACZ,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;AACxG,gBAAA,IAAI,CAAC,sBAAsB,GAAG,CAAC;AAC/B,gBAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC,QAAQ;gBACrC;YACJ;YACA,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,mBAAmB,IAAI,CAAC,KAAK,IAAI,CAAC,sBAAsB,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AACzH,gBAAA,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC7C;AACJ,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;AAC3B,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACZ;YACJ;AACA,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI;AACvF,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI;AACjF,gBAAA,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;YAChC;iBAAO;AACH,gBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI;AACvF,gBAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC;YACrD;YACA,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,OAAO,EAAE;AACtB,QAAA,CAAC,CAAC;AACN,QAAA,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IAClC;IAEO,IAAI,CAAC,kBAAkB,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAA;AACjJ,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAE9B,IAAI,CAAC,OAAO,EAAE;YACV,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,kBAAkB;YACzE,IAAI,CAAC,EAAE,GAAG,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB;QACzE;aAAO;AACH,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,uBAAuB;QAClD;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AAEtB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QAEtB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,KAAK,CAAC;AAErD,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC;AAE3B,QAAA,IAAI,CAAC;aACA,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI;aAC9B,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAElC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;QAE/C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO;AAC3C,aAAA,EAAE,CAAC,YAAY,EAAE,MAAK;AACnB,YAAA,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACpC,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC;aACtB,SAAS,CAAC,8BAA8B;aACxC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5B,QAAA,IAAI,sBAAsB,GAAG,eAAe,CAAC,KAAK;aAC7C,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,wDAAwD,CAAC;QAE5E,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAEnE,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;AACpD,YAAA,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;gBAC3D,IAAI,OAAO,EAAE;AACT,oBAAA,OAAO,EAAE;gBACb;gBACA,IAAI,CAAC,IAAI,EAAE;YACf;AACJ,QAAA,CAAC,CAAC;IACN;IAEO,IAAI,GAAA;QACP,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACnC;AACH;;ACvND,MAAM,OAAQ,SAAQ,SAAS,CAAA;AAS3B,IAAA,WAAA,CAAY,YAAY,EAAA;QACpB,KAAK,CAAC,YAAY,CAAC;IACvB;IAEO,IAAI,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QAC5C;IACJ;IAEQ,WAAW,GAAA;AACf,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,CAAC;IAClJ;IAEQ,YAAY,GAAA;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC;IACnJ;AAEQ,IAAA,aAAa,CAAC,YAAY,EAAA;;AAE9B,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAC9E,QAAA,QAAQ,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,IAAI;IACtE;AAEQ,IAAA,YAAY,CAAC,YAAY,EAAA;;AAE7B,QAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;AAChF,QAAA,QAAQ,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,YAAY,CAAC,GAAG;IACvE;AAEQ,IAAA,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAA;;AAErD,QAAwB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC;AACzE,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,GAAG,YAAY,GAAG,EAAE,GAAG,eAAe,CAAC;IAC5E;AAEQ,IAAA,WAAW,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,EAAA;;AAEjD,QAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;AAChF,QAAA,IAAI,WAAW,GAAG,IAAI,GAAG,aAAa,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QACnG,OAAO,kBAAkB,GAAG,WAAW;IAC3C;AAEO,IAAA,MAAM,CAAC,KAAK,EAAA;QACf,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,YAAA;AAC7D,YAAA,QAAQ,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACxD,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAEhB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK;AACzC,aAAA,IAAI,CAAC,OAAO,EAAE,aAAa;aAC3B,KAAK,CAAC,OAAO;aACb,IAAI,CAAC,UAAU,CAAC,EAAA;AACb,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AACvC,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK;AAC9C,iBAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;AAC1C,QAAA,CAAC,CAAC;AACN,QAAA,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;;;AAIrC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAM,EAAE,kBAAsC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAA,GAAuB,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,cAAsB,IAAI,EAAE,YAAA,GAAwB,KAAK,KAAI;YAClN,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;AACzC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAE/B,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAE9B,YAAA,IAAI,UAAU,GAAG,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;YACpE,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;AAC/C,YAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;AAE7B,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,IAAI;AAC7D,iBAAA,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAEtD,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACvE,YAAA,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;AACzE,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO;iBAC/E,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,OAAO,IAAI,YAAY,KAAK,IAAI,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;YACtF,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC;YAE3C,IAAI,UAAU,GAAG,CAAC;AAElB,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE;gBACrD,UAAU,GAAG,OAAO;YACxB;iBAAO;gBACH,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AAC1F,oBAAA,UAAU,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;gBAChD;qBAAO;AACH,oBAAA,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,CAAC;gBACxD;YACJ;AAEA,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;AAC1F,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,WAAW;AAC3D,qBAAA,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC;YAC1C;iBAAO;gBACH,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC;YACxD;AACJ,QAAA,CAAC;IACL;AAEH;;AClHD,MAAM,IAAK,SAAQ,SAAS,CAAA;AAYxB,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QALb,IAAA,CAAA,YAAY,GAAG,IAAI;IAM7B;AAEU,IAAA,gBAAgB,CAAC,MAAM,EAAA;AAC7B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;YACxE,OAAO,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEU,IAAA,iBAAiB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAA;AAC1C,QAAA,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,CAAC;IAC5F;IAEU,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAA;QAElC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AAEnC,QAAe,IAAI,CAAC,gBAAgB,CAAC;AACrC,QAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;YACb;QACJ;;AAGA,QAAA,IAAI,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,KAAI;AACvE,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,QAAQ,IAAI,CAAC;QAC7D,CAAC,EAAE,IAAI,CAAC;AAER,QAAA,IAAI,aAAa;QACjB,IAAI,kBAAkB,EAAE;AACpB,YAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,KAAI;gBAC9D,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;YACtC,CAAC,EAAE,CAAC,CAAC;AACL,YAAA,IAAI,aAAa,IAAI,CAAC,EAAE;gBACpB;YACJ;QACJ;AAEA,QAAA,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;AAChD,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,KAAI;YACjD,IAAI,YAAY,GAAG,kBAAkB,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,aAAa,KAAK,CAAC,GAAG,WAAW,CAAC;AACrG,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM;iBACjB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG;iBAC9B,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACrD,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAE5B,IAAI,WAAW,GAAG,kBAAkB,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC;AAEnF,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM;iBACjB,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,GAAG,IAAI,GAAG;iBACxC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACrD,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC5B,YAAA,OAAO,WAAW;QACtB,CAAC,EAAE,CAAC,CAAC;IACT;AAIU,IAAA,kBAAkB,CAAC,SAAS,EAAA;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,mBAAmB;AAChE,aAAA,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM;AAClC,aAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;AAChC,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,aAAA,KAAK,CAAC,IAAI,CAAC,YAAY;AACvB,aAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,QAAQ;AAChD,aAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/B,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACrC;AAGU,IAAA,gBAAgB,CAAC,KAAK,EAAA;QAC5B,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAC/D;AAEU,IAAA,kBAAkB,CAAC,QAAQ,EAAA;AACjC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC5C,YAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,QAAA,CAAC,CAAC;IACN;AAEU,IAAA,OAAO,CAAC,CAAC,EAAA;AACf,QAAA,OAAO,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IAC/D;AACH;;AC7FD,MAAM,QAAS,SAAQ,IAAI,CAAA;AAUvB,IAAA,WAAA,CAAY,YAAY,EAAA;QACpB,KAAK,CAAC,YAAY,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO;IACzC;IAEQ,YAAY,CAAC,CAAC,EAAE,CAAC,EAAA;AACrB,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU;QAChF,IAAI,UAAU,EAAE;AACZ,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE,IAAI,CAAC;QACjF;AACA,QAAA,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxB;AAEQ,IAAA,cAAc,CAAC,CAAC,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI;AAClB,aAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB;AAC7C,aAAA,OAAO,CAAC,CAAC,CAAM,KAAI;AAChB,YAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI;iBACtB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AACnG,QAAA,CAAC;AACA,aAAA,CAAC,CAAC,CAAC,CAAM,KAAI;YACV,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACvC,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,CAAC,CAAM,KAAI;AACX,YAAA,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/G,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;IAC7B;;IAGO,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,UAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAqB,EACxH,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAC1H,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,YAAY,EAAA;AACzG,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM;AACvB,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;QACpC,MAAM,eAAe,GAAG,YAAY,IAAI,OAAO,YAAY,KAAK,UAAU;AAE1E,QAAA,WAAW,GAAG,UAAU,CAAC,eAAe;AAExC,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;AAE9B,QAAA,IAAI,IAAI;AACR,QAAA,IAAI,OAAO;AACX,QAAA,IAAI,WAAW;AAGf,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO;AAErC,QAAA,IAAI,GAAG,EAAE,CAAC,WAAW,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAEzD,IAAI,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;AACvD,YAAA,IAAI,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACxE,YAAA,IAAI,iBAAiB,GAAG,EAAE,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,WAAW,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;YACjI,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AACrC,iBAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;iBACtD,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,iBAAiB,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9E;aAAO;YACH,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnB,YAAA,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB;AACA,QAAA,OAAO,GAAG,EAAE,CAAC,IAAI;AACZ,aAAA,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,qBAAqB,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB;AAC3L,aAAA,OAAO,CAAC,CAAC,CAAM,KAAI;AAChB,YAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI;iBACtB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AACnG,QAAA,CAAC;AACA,aAAA,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1C,aAAA,CAAC,CAAC,CAAC,CAAM,KAAI;AACV,YAAA,OAAO,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;AACrH,QAAA,CAAC,CAAC;AAEN,QAAA,WAAW,GAAG,EAAE,CAAC,IAAI;AAChB,aAAA,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,qBAAqB,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB;AAC3L,aAAA,OAAO,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AACzG,aAAA,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;aAC1C,EAAE,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;aACvD,EAAE,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAI7D,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;AACnF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM;QAErB,IAAI,KAAK,GAAQ,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ;AAClD,aAAA,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,YAAY,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,WAAW,CAAC,MAAM,IAAI,WAAW,KAAK,CAAC,CAAC,CAAC;AAEzG,QAAA,KAAK,GAAG,KAAK,CAAC,KAAK;aACd,MAAM,CAAC,GAAG;aACV,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,EAAS,eAAe,GAAG,CAAA,oCAAA,EAAuC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE;aAClK,KAAK,CAAC,KAAK;aACX,KAAK,CAAC,YAAY,GAAG,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,SAAS,GAAG,QAAQ,EAAE;QAEnG,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,WAAW,CAAC,OAAO,EAAE;YAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;iBAC/E,SAAS,CAAC,MAAM;AAChB,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI,EAAG,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,KAAK,WAAW,GAAG,EAAE,CAAC,CAAA,CAAC,CAAC;AAClF,iBAAA,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QAC1E;aACK;AACD,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB;AAC1D,iBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;iBAC/H,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;QAC7D;;QAGA,IAAI,eAAe,EAAE;AACjB,YAAA,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;AACnB,gBAAA,YAAY,EAAE;AAClB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,sBAAsB,CAAC,CAAA,kBAAA,EAAqB,GAAG,CAAC,QAAQ,CAAA,CAAE,CAAC,CAAC,CAAC,CAAC;YACnF,IAAI,KAAK,EAAE;AACP,gBAAA,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,MAAK;AACvB,oBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;AACpC,oBAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;AAC9D,gBAAA,CAAC,CAAC;AACF,gBAAA,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAK;AACtB,oBAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;AACvC,oBAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC;AAC/D,gBAAA,CAAC,CAAC;YACN;QACJ;AAEA,QAAA,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAErB,SAAqB;YACjB,CAAC,EAAE,IAAI,CAAC;QAIZ,IAAI,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAE/H,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW;QAE3G,IAAI,IAAI,GAAG,IAAI;QACf,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,mBAAmB;AAChE,aAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAClE,aAAa,CAAC,KAAK;aACd,MAAM,CAAC,GAAG;aACV,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,GAAG,CAAC,MAAM;aAC9C,KAAK,CAAC,aAAa;AACnB,aAAA,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,EAAA;AACtB,YAAA,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;;YAEnD,IAAI,QAAQ,GAAG,EAAE;AACjB,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AAClE,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC;AAC/E,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;AAChF,oBAAA,IAAI,QAAQ,GAAW,CAAC,GAAG,CAAC;AAC5B,oBAAA,OAAO,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,IAAI,IAAI;AACtE,wBAAA,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,EAAE;AACtD,wBAAA,QAAQ,EAAE;oBACd;AACA,oBAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;AACjD,wBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACpD;AACA,oBAAA,CAAC,GAAG,QAAQ,GAAG,CAAC;gBACpB;YACJ;AAEA,YAAA,IAAI,gBAAgB,GAAG,CAAC,CAAC,KAAI;gBACzB,IAAI,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS;AACrE,gBAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,iBAAiB,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa;AACtF,YAAA,CAAC;AAED,YAAA,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,cAAc;iBAC1E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACrB,gBAAA,CAAC,CAAC,YAAY,GAAG,IAAI;AACrB,gBAAA,OAAO,CAAC;YACZ,CAAC,CAAC,CAAC;YACP,OAAO,CAAC,KAAK;iBACR,MAAM,CAAC,MAAM;AACb,iBAAA,IAAI,CAAC,OAAO,EAAE,8BAA8B;iBAC5C,KAAK,CAAC,OAAO;AACb,iBAAA,KAAK,CAAC,YAAY,EAAE,CAAC,CAAM,KAAI;gBAC5B,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,SAAS,GAAG,QAAQ;AAC7F,YAAA,CAAC;AACA,iBAAA,UAAU;iBACV,QAAQ,CAAC,gBAAgB;AACzB,iBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,iBAAA,IAAI,CAAC,kBAAkB,EAAE,KAAK;AAC9B,iBAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAC/B,iBAAA,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;AACvB,gBAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxC,gBAAA,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;AACxB,gBAAA,OAAO,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC7C,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAClB,gBAAA,CAAC,CAAC,YAAY,GAAG,KAAK;AAC1B,YAAA,CAAC,CAAC;AAEN,YAAA,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,gBAAgB;AACzE,iBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AAChE,gBAAA,CAAC,CAAC,YAAY,GAAG,IAAI;AACrB,gBAAA,OAAO,CAAC;YACZ,CAAC,CAAC,CAAC;YAEP,IAAI,CAAC,KAAK;iBACL,MAAM,CAAC,MAAM;AACb,iBAAA,IAAI,CAAC,OAAO,EAAE,gCAAgC;iBAC9C,KAAK,CAAC,IAAI;AACV,iBAAA,KAAK,CAAC,YAAY,EAAE,CAAC,CAAM,KAAI;gBAC5B,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,SAAS,GAAG,QAAQ;AAC7F,YAAA,CAAC;AACA,iBAAA,UAAU;iBACV,QAAQ,CAAC,gBAAgB;AACzB,iBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AAC/B,iBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa;AACzC,iBAAA,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,EAAA;AACvB,gBAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACxC,gBAAA,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;AACxB,gBAAA,OAAO,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC7C,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,KAAK,EAAE,CAAC,CAAM,KAAI;AAClB,gBAAA,CAAC,CAAC,YAAY,GAAG,KAAK;AAC1B,YAAA,CAAC,CAAC;AAEN,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;AAC3F,gBAAA,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA4B,eAAe;AAC1E,qBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;oBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI;AACvH,gBAAA,CAAC,CAAC,EAAE,CAAC,CAAM,EAAE,CAAC,KAAI;AACd,oBAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAChC,gBAAA,CAAC,CAAC;gBAEN,IAAI,CAAC,KAAK;qBACL,MAAM,CAAC,QAAQ;AACf,qBAAA,IAAI,CAAC,OAAO,EAAE,+BAA+B;AAC7C,qBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;qBACX,KAAK,CAAC,IAAI;AACV,qBAAA,KAAK,CAAC,YAAY,EAAE,CAAC,CAAM,KAAI;oBAC5B,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS,GAAG,QAAQ;AAC3G,gBAAA,CAAC;AACA,qBAAA,UAAU;AACV,qBAAA,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;oBACpB,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,gBAAgB,CAAE,CAAC,GAAG,CAAC;AAClF,gBAAA,CAAC;AACA,qBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,qBAAA,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;AAC7B,qBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACnD,qBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAM,KAAI;AACnB,oBAAA,OAAO,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;AACrH,gBAAA,CAAC;AACA,qBAAA,IAAI,CAAC,YAAA;oBACF,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;AACnD,gBAAA,CAAC,CAAC;AAEN,gBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;YACxB;iBAAO;AACH,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE;YACvD;YAEA,IAAI,YAAY,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,KAAK,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;AACpK,gBAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACpH;AACA,YAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,oBAAoB;AACjF,iBAAA,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;YAEzB,QAAQ,CAAC,KAAK;iBACT,MAAM,CAAC,MAAM;AACb,iBAAA,IAAI,CAAC,OAAO,EAAE,oCAAoC;iBAClD,KAAK,CAAC,QAAQ;AACd,iBAAA,KAAK,CAAC,YAAY,EAAE,CAAC,CAAM,KAAI;gBAC5B,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,SAAS,GAAG,QAAQ;AAC7F,YAAA,CAAC;AACA,iBAAA,UAAU;iBACV,QAAQ,CAAC,gBAAgB;AACzB,iBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,iBAAA,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;AAC9B,iBAAA,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,iBAAA,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;AAE3B,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,gBAAgB;AACzE,qBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;;AAGhE,gBAAA,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE;gBACxB,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB;AACxC,qBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAChE,gBAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK;qBAClB,MAAM,CAAC,gBAAgB,CAAC;AAC7B,gBAAA,QAAQ,CAAC,KAAK,CAAC,EAAE;AACZ,qBAAA,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;AAC5F,gBAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAK,EAAG,OAAO,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAA,CAAC,CAAC,CAAC;AAClI,gBAAA,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAK,EAAG,OAAO,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAA,CAAC,CAAC,CAAC;AACrI,gBAAA,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;gBAElB,IAAI,CAAC,KAAK;qBACL,MAAM,CAAC,MAAM;AACb,qBAAA,IAAI,CAAC,OAAO,EAAE,eAAe;qBAC7B,KAAK,CAAC,IAAI;qBACV,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG;AACrC,qBAAA,KAAK,CAAC,YAAY,EAAE,CAAC,CAAM,KAAI;oBAC5B,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,SAAS,GAAG,QAAQ;AAC7F,gBAAA,CAAC;AACA,qBAAA,UAAU;qBACV,QAAQ,CAAC,gBAAgB;AACzB,qBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,qBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC7B,gBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;YACxB;AAEA,YAAA,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACpB,YAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;AAC5C,QAAA,CAAC,CAAC;AACN,QAAA,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACjC;AACH;;AClVD,MAAM,SAAS,GAAG,CAAC;AAEnB,MAAM,eAAgB,SAAQ,IAAI,CAAA;AAQ9B,IAAA,WAAA,CAAY,YAAY,EAAA;QACpB,KAAK,CAAC,YAAY,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,WAAW;IAC7C;IAEQ,WAAW,CAAC,CAAC,EAAE,SAAS,EAAA;QAC5B,IAAI,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS;AACtC,aAAA,IAAI,CAAC,GAAG,EAAE,MAAK;AACZ,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACvC,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,OAAO,EAAE,SAAS;AACvB,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,mBAAmB,CAAC;AACtE,aAAA,IAAI,CAAC,MAAM,EAAE,MAAK;YACf,OAAO,eAAe,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM;AAC5F,QAAA,CAAC,CAAC;IACV;IAEQ,UAAU,GAAA;QACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;QAC3C,IAAI,CAAC,mBAAmB,EAAE;IAC9B;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM;AACzC,iBAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B;AACxC,iBAAA,IAAI,CAAC,GAAG,EAAE,mBAAmB;iBAC7B,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7C;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QAC1B;IACJ;IAEQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;YAClC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD;QACA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IACrD;IAEQ,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAA;AACzB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACxE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ;QAC/B;aAAO;AACH,YAAA,IAAI,cAAc,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC;AAC5K,YAAA,OAAO,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC/K;IACJ;IAEO,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,UAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,OAAO,EAC1G,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EACxG,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAA;AAC3G,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,oBAAoB,GAAG,oBAAoB;AAChD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;AAC9C,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;QAClD;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;QAC3F;QAEA,IAAI,YAAY,GAAG,EAAE;AAErB,QAAA,IAAI,gBAAgB,GAAG,CAAC,CAAC,KAAI;YACzB,IAAI,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS;AACrE,YAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,iBAAiB,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa;AACtF,QAAA,CAAC;QAED,IAAI,IAAI,GAAG,IAAI;QACf,IAAI,CAAC,eAAe,EAAE;QAEtB,IAAI,MAAM,GAAkB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAEzD,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/G,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB;AAC/D,aAAA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAI;YAChB,OAAO,CAAC,CAAC,OAAO;AACpB,QAAA,CAAC,CAAC;QACN,aAAa,CAAC,KAAK;aACd,MAAM,CAAC,GAAG;aACV,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,GAAG,CAAC,MAAM;aAC9C,KAAK,CAAC,aAAa;aACnB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;YACxB,OAAO,cAAc,IAAI,mBAAmB,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;AAC9G,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,EAAA;AACtB,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AAC9D,YAAA,IAAI,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,wBAAwB;iBAC/F,IAAI,CAAC,IAAI,CAAC;AAEf,YAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAI;gBACF,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACrD,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;AACrC,YAAA,CAAC;AAED,YAAA,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,KAAK;iBACrD,MAAM,CAAC,MAAM;AACb,iBAAA,IAAI,CAAC,OAAO,EAAE,wCAAwC;iBACtD,KAAK,CAAC,kBAAkB;AACxB,iBAAA,KAAK,CAAC,YAAY,EAAE,CAAC,CAAM,KAAI;gBAC5B,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,QAAQ;AAChH,YAAA,CAAC;iBACA,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAM,KAAI;AAC/B,gBAAA,MAAM,CAAC,GAAG,yBAAyB,CAAC,KAAK,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;gBACxC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvD,gBAAA,IAAI,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3H,IAAI,eAAe,EAAE;AACjB,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvC;AACJ,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,UAAU,EAAE,MAAK;gBACjB,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,SAAS,GAAG,SAAS;iBAC5E,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAM,KAAI;AAC3B,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;oBACtC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;gBACzG;AACJ,YAAA,CAAC;AACA,iBAAA,UAAU;iBACV,QAAQ,CAAC,gBAAgB;AACzB,iBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,eAAe;AAC9B,iBAAA,IAAI,CAAC,OAAO,EAAE,QAAQ;AACtB,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAM,KAAI;AAClB,gBAAA,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACvC,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;AAChB,gBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACjD,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACnC,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI;qBACT,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,GAAG,CAAC;AAClD,YAAA,CAAC,CAAC;AACN,YAAA,kBAAkB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACtC,QAAA,CAAC,CAAC;AACN,QAAA,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;;QAG7B,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB;AAC/C,aAAA,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,KAAI;AACtB,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;AACvB,QAAA,CAAC,CAAC;AACN,QAAA,IAAI,gBAAgB,GAAG,SAAS,CAAC,KAAK;aACjC,MAAM,CAAC,gBAAgB;AACvB,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI;AACf,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM;aACjB,KAAK,CAAC,SAAS;AACf,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B;aACK,IAAI,CAAC,UAAU,CAAC,EAAA;AACb,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,CAAC,CAAC;AACN,QAAA,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IAE7B;AACH;;ACvLD,MAAM,UAAW,SAAQ,IAAI,CAAA;AAazB,IAAA,WAAA,CAAY,YAAY,EAAA;QACpB,KAAK,CAAC,YAAY,CAAC;QAHf,IAAA,CAAA,aAAa,GAAG,EAAE;AAwDlB,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,CAAM,KAAI;AAC9B,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;gBACtC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;YACzG;AACJ,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,CAAC,KAAI;AAC1B,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACZ,gBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,oBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5D;qBAAO;AACH,oBAAA,OAAO,MAAM;gBACjB;YACJ;AACA,YAAA,OAAO,MAAM;AACjB,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,WAAmB,KAAI;AACvD,YAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC3F,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAClH,QAAA,CAAC;QAEO,IAAA,CAAA,mBAAmB,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,KAAI;YACvD,IAAI,UAAU,GAAG,MAAK;gBAClB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;oBACxB,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE;wBACzB,OAAO,EAAE;oBACb;yBAAO,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE;AAChC,wBAAA,OAAO,CAAC;oBACZ;AACA,oBAAA,OAAO,CAAC;AACZ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;AAED,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AACnE,YAAA,IAAI,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC,oBAAoB;AAChD,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,CAAC;YAEvC,IAAI,IAAI,GAAG,IAAI;AACf,YAAA,IAAI,aAAa;AACjB,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7E,IAAI,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC;AAE7D,YAAA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,gBAAgB;gBAC1C,KAAK,iBAAiB,CAAC,QAAQ;AAC3B,oBAAA,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,0BAA0B,CAAC,EAAE;wBAC7E,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE;AAC1C,wBAAA,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC,oBAAoB;AAC5C,6BAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,CAAC;oBAC3C;AACA,oBAAA,aAAa,GAAG,cAAc,CAAC,KAAK;yBAC/B,MAAM,CAAC,MAAM;AACb,yBAAA,IAAI,CAAC,OAAO,EAAE,oCAAoC;yBAClD,KAAK,CAAC,cAAc;AACpB,yBAAA,OAAO,CAAC,0BAA0B,EAAE,KAAK;AACzC,yBAAA,OAAO,CAAC,2BAA2B,EAAE,IAAI;AACzC,yBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,CAAM,KAAI;AAC1B,wBAAA,OAAO,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,eAAe;AAClI,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;AAC5D,yBAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC,CAAC;AACzD,yBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa;AACjC,yBAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;oBACzB;gBACJ,KAAK,iBAAiB,CAAC,OAAO;AAC1B,oBAAA,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,OAAO,CAAC,2BAA2B,CAAC,EAAE;wBAC9E,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE;AAC1C,wBAAA,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC,oBAAoB;AAC5C,6BAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,CAAC;oBAC3C;AACA,oBAAA,aAAa,GAAG,cAAc,CAAC,KAAK;yBAC/B,MAAM,CAAC,MAAM;AACb,yBAAA,IAAI,CAAC,OAAO,EAAE,oCAAoC;yBAClD,KAAK,CAAC,cAAc;AACpB,yBAAA,OAAO,CAAC,2BAA2B,EAAE,KAAK;AAC1C,yBAAA,OAAO,CAAC,0BAA0B,EAAE,IAAI;AACxC,yBAAA,IAAI,CAAC,GAAG,EAAE,MAAM;AAChB,yBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,CAAM,KAAI;AAC1B,wBAAA,OAAO,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,gBAAgB;AACzE,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa;AAC/B,yBAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;oBAC3B;;YAER;AACK,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW;AAC9B,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW;AAC/B,iBAAA,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;gBAC/B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACvB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,YAAY,CAAC;AACrC,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,UAAU,EAAE,MAAK;gBACjB,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,CAAC;iBACA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AACtB,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACxB,YAAA,CAAC;iBACA,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AAC3B,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACxB,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,EAAE,CAAM,EAAA;AAClC,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE;AACrB,oBAAA,UAAU,EAAE;oBACZ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBAClC;AACA,gBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;AAC9C,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;gBACxB;AACJ,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,QAAQ,GAAG,IAAI;AACnE,iBAAA,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,GAAG,GAAG,IAAI;AAClE,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,GAAG,SAAS,GAAG,SAAS;AAC3E,iBAAA,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,KAAI;AACtB,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;AACtC,oBAAA,IAAI,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC;oBAChC,IAAI,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,aAAa,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG;AACrH,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;wBACrC,SAAS,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;AACrH,oBAAA,CAAC,CAAC;AACF,oBAAA,OAAO,SAAS;gBACpB;AACA,gBAAA,OAAO,IAAI;AACf,YAAA,CAAC;AACA,iBAAA,KAAK,CAAC,YAAY,EAAE,CAAC,CAAM,KAAI;AAC5B,gBAAA,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,GAAG,QAAQ;AACrH,YAAA,CAAC;AAEA,iBAAA,IAAI,CAAC,UAAU,CAAM,EAAE,CAAC,EAAA;AACrB,gBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,oBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC5D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACxC,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI;yBACT,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,KAAK,iBAAiB,CAAC,QAAQ,GAAG,QAAQ,GAAG,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,GAAG,CAAC;gBACrI;AACJ,YAAA,CAAC,CAAC;AACN,YAAA,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAClC,QAAA,CAAC;QAEO,IAAA,CAAA,kBAAkB,GAAG,MAAK;;AAE9B,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3D,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC9E,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE;AACzD,gBAAA,OAAO,IAAI;YACf;AACA,YAAA,IAAI,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;gBACxF,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI;AAC/D,YAAA,CAAC,CAAC;YACF,OAAO,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACvD,QAAA,CAAC;AA3MG,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM;IACxC;IAEQ,WAAW,CAAC,CAAC,EAAE,YAAY,EAAA;QAE/B,IAAI,IAAI,GAAG,MAAK;AACZ,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACvC,QAAA,CAAC;AAED,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5D,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,mBAAmB,IAAI,WAAW,GAAG,YAAY,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC;QAElG,IAAI,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC;QACzG,IAAI,CAAC,eAAe,EAAE;YAClB;QACJ;QAEA,IAAI,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS;AACtC,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI;AACf,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI;AACf,aAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB;aAC9B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC;AAC/B,aAAA,IAAI,CAAC,QAAQ,EAAE,MAAK;YACjB,OAAO,eAAe,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM;AAC5F,QAAA,CAAC,CAAC;IACV;IAEQ,UAAU,GAAA;QACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;QAC3C,IAAI,CAAC,sBAAsB,EAAE;IACjC;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM;AACzC,iBAAA,IAAI,CAAC,OAAO,EAAE,4BAA4B;AAC1C,iBAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB;iBAC9B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC;AAC/B,iBAAA,IAAI,CAAC,gBAAgB,EAAE,MAAM;AAC7B,iBAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QAC1B;IACJ;AAEQ,IAAA,cAAc,CAAC,kBAAkB,EAAA;AACrC,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB;QACrD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtF;IA2JO,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,UAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,OAAO,EAC1G,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EACxG,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,uBAAuB,EAAE,sBAAsB,EAAA;AACjH,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,uBAAuB,GAAG,uBAAuB;AACtD,QAAA,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;QAEpD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAElD,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;QAClD;QAEA,IAAI,CAAC,eAAe,EAAE;QAEtB,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9C,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;AAElC,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;QAC3F;QAEA,IAAI,IAAI,GAAG,IAAI;QAEf,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB;AAC/D,aAAA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAI;YAChB,OAAO,CAAC,CAAC,OAAO;AACpB,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AAEtB,QAA2B,aAAa,CAAC,KAAK;aACzC,MAAM,CAAC,GAAG;aACV,IAAI,CAAC,OAAO,EAAE,mCAAmC,GAAG,IAAI,CAAC,MAAM;aAC/D,KAAK,CAAC,aAAa;aACnB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;YACxB,OAAO,cAAc,IAAI,EAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;AAC1F,QAAA,CAAC;AACA,aAAA,IAAI,CAAC,UAAU,OAAO,EAAE,CAAC,EAAA;AACtB,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC,IAAI,CAAC,YAAA;AACJ,YAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC1D,QAAA,CAAC;AACL,QAAA,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;QAE7B,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB;aAC/C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,KAAI;AAC3B,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;AACvB,QAAA,CAAC,CAAC;AACN,QAAA,IAAI,gBAAgB,GAAG,SAAS,CAAC,KAAK;aACjC,MAAM,CAAC,gBAAgB;AACvB,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI;AACf,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM;aACjB,KAAK,CAAC,SAAS;AACf,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B;aACK,IAAI,CAAC,UAAU,CAAC,EAAA;AACb,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,CAAC,CAAC;AACN,QAAA,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IAC7B;AACH;;ACzSD,MAAM,SAAS,CAAA;AAKX,IAAA,WAAA,CAAa,QAAQ,EAAE,OAAyB,EAAE,eAAuB,EAAA;AACrE,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;IAC1C;AACH;;ACAD,MAAM,qBAAqB,GAAG,GAAG;AACjC,MAAM,mBAAmB,GAAG,EAAE;AAE9B,MAAM,MAAO,SAAQ,SAAS,CAAA;AAyB1B,IAAA,WAAA,CAAY,YAAY,EAAA;QACpB,KAAK,CAAC,YAAY,CAAC;QAVf,IAAA,CAAA,UAAU,GAAQ,EAAE;QAEpB,IAAA,CAAA,SAAS,GAAW,EAAE;QACtB,IAAA,CAAA,gBAAgB,GAAY,KAAK;QAEjC,IAAA,CAAA,cAAc,GAAY,KAAK;QAE9B,IAAA,CAAA,2BAA2B,GAAG,EAAE;AAIrC,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE;IAC5B;IAEO,OAAO,GAAA;QACV,OAAO,IAAI,CAAC,IAAI;IACpB;AAEO,IAAA,SAAS,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM;IACjC;IAEO,SAAS,GAAA;QACZ,OAAO,IAAI,CAAC,eAAe;IAC/B;;AAGO,IAAA,YAAY,CAAC,SAAiB,EAAA;AACjC,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,qBAAqB,EAAE;YAC1C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC;AAC1D,YAAA,OAAO,IAAI;QACf;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,OAAO,KAAK;IAChB;IAEO,YAAY,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;IACzB;AAEQ,IAAA,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAA;AACpD,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;AACrC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;AACvB,aAAA,IAAI,CAAC,OAAO,EAAE,2CAA2C,CAAC;QAC/D,KAAK,CAAC,iCAAiC,CAAC,KAAK,EAAE,CAAC,CAAC,aAAa,CAAC;AAC/D,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAAC,YAAY,CAAC;QACpF,IAAI,WAAW,GAAG,EAAE;AACpB,QAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,YAAA,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QACjH;AAEA,QAAA,IAAI,UAAU,GAAG;YACb,OAAO,EAAE,CAAC,CAAC,OAAO;AAClB,YAAA,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,mBAAmB,CAAC,aAAa;AACrG,YAAA,SAAS,EAAE,WAAW;SACzB;AAED,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;AAC9E,QAAA,IAAI,eAAe,GAAG,QAAQ,CAAC,KAAK;aAC/B,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,+CAA+C,CAAC;QAEnE,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,KAAK,EAAE,EAAE;AACjD,YAAA,eAAe,CAAC,MAAM,CAAC,MAAM;AACxB,iBAAA,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QACrC;AACA,QAAA,IAAI,UAAU,CAAC,SAAS,EAAE;AACtB,YAAA,eAAe,CAAC,MAAM,CAAC,MAAM;AACxB,iBAAA,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;QACvC;AACA,QAAA,IAAI,UAAU,CAAC,aAAa,EAAE;AAC1B,YAAA,eAAe,CAAC,MAAM,CAAC,MAAM;AACxB,iBAAA,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;QAC3C;AACA,QAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACxB,QAAA,KAAK,CAAC,0BAA0B,CAAC,eAAe,EAAE,KAAK,CAAC;IAC5D;AAEU,IAAA,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,aAAmC,EAAE,WAAW,GAAG,IAAI,EAAE,oBAAoB,GAAG,KAAK,EAAA;QAElH,IAAI,aAAa,GAAG,wBAAwB;;AAG5C,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACvD,iBAAA,KAAK,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;AACpC,iBAAA,KAAK,CAAC,aAAa,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;QAE3D;aAAO;YACH,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC;QAC1D;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI;AAC3C,aAAA,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/E;AAEQ,IAAA,OAAO,CAAC,CAAC,EAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;IAC5D;;IAIQ,oBAAoB,GAAA;QACxB,OAAO,IAAI,CAAC,gBAAgB;IAIhC;IAEQ,UAAU,GAAA;QACd,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,sBAAsB;AACxD,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM;AACzB,aAAA,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;YACrB,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE;AACtC,gBAAA,OAAO,CAAC;YACZ;YACA,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE;gBACtC,OAAO,EAAE;YACb;AACA,YAAA,OAAO,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE;AAC7C,QAAA,CAAC,CAAC;IACV;IAEQ,YAAY,GAAA;QAChB,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAA0B,sBAAsB;AAC9F,aAAA,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AACvC,aAAA,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK;aAC9B,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,qBAAqB;AACnC,aAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,cAAc;aACjD,KAAK,CAAC,MAAM;AACZ,aAAA,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI;AAC1E,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA,EAAA,CAAI;AAC7H,aAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;YACtB,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;AACjC,QAAA,CAAC;AACA,aAAA,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,KAAI;AAC5B,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;AACtH,QAAA,CAAC;aACA,IAAI,CAAC,UAAU,OAAO,EAAA;AACnB,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB;YACJ;AACA,YAAA,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK;AACvB,qBAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;AACpC,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK;AAC1C,qBAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;qBAC/B,EAAE,CAAC,YAAY,EAAE,YAAA;AACd,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC5D,gBAAA,CAAC,CAAC;AAEN,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK;AACxB,qBAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB;AACjC,qBAAA,EAAE,CAAC,YAAY,EAAE,MAAK;oBACnB,IAAI,CAAC,UAAU,EAAE;AACrB,gBAAA,CAAC,CAAC;AAEN,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK;AACxB,qBAAA,IAAI,CAAC,OAAO,EAAE,qBAAqB;AACnC,qBAAA,IAAI,CAAC,iBAAiB,EAAE,MAAM;AAC9B,qBAAA,IAAI,CAAC,IAAI,CAAC,SAAS;AACnB,qBAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACrB,oBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;wBACrD,KAAK,CAAC,cAAc,EAAE;wBACtB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;oBACnC;AACJ,gBAAA,CAAC;qBACA,EAAE,CAAC,OAAO,EAAE,YAAA;AACT,oBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBACvD,IAAI,OAAO,EAAE;AACT,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;oBACxC;AACJ,gBAAA,CAAC;qBACA,EAAE,CAAC,OAAO,EAAE,YAAA;AACT,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC;AAC1E,gBAAA,CAAC;qBACA,EAAE,CAAC,MAAM,EAAE,YAAA;AACR,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,4BAA4B,EAAE,KAAK,CAAC;oBACvE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACtC,gBAAA,CAAC;AACA,qBAAA,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,KAAI;oBACvB,KAAK,CAAC,eAAe,EAAE;AAC3B,gBAAA,CAAC;qBACA,EAAE,CAAC,WAAW,EAAE,YAAA;AACb,oBAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;wBAC9B,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC;wBACpF,IAAI,CAAC,UAAU,EAAE;oBACrB;AACJ,gBAAA,CAAC,CAAC;gBAEN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ;qBAC9C,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;AAClD,qBAAA,OAAO,CAAC,iBAAiB,EAAE,IAAI;qBAC/B,EAAE,CAAC,OAAO,EAAE,YAAA;AACT,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;oBAC1B,EAAE,CAAC,MAAM,CAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;AAC7E,gBAAA,CAAC,CAAC;AAEN,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK;AACxC,qBAAA,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;YAC7C;YACA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uDAAuD;AAC5E,iBAAA,IAAI,CAAC,EAAE,CAAC,IAAI;AACR,iBAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,CAAM,EAAA;AAChC,gBAAA,CAAC,CAAC,UAAU,GAAG,IAAI;AACnB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;gBAC5B,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;AAC1B,gBAAA,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;oBAChE;gBACJ;AACA,gBAAa,EAAE,CAAC,MAAM,CAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU;AAC7D,gBAAA,IAAI,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1D,gBAAA,IAAI,WAAW,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;gBAEzC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;AACnH,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC;AACpD,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,EAAE,CAAM,EAAA;AAC9B,gBAAA,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;AACjE,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC/B;AACA,gBAAA,CAAC,CAAC,UAAU,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YACjC,CAAC,CAAC,CACL;AACT,QAAA,CAAC,CAAC;AACN,QAAA,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IAC1B;AAEQ,IAAA,iBAAiB,CAAC,CAAM,EAAA;QAC5B,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3G;AAEQ,IAAA,aAAa,CAAC,CAAM,EAAA;QACxB,OAAO,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO;IAC3C;IAEQ,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAA;AACpB,QAAiB,IAAI,CAAC;AACtB,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;QACtC,IAAI,YAAY,GAAG,CAAC;AACpB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,UAAU,GAAG,YAAY,IAAI,CAAC,CAAC;QAClE,IAAI,wBAAwB,GAAG,GAAG;QAClC,IAAI,oBAAoB,GAAG,CAAC;QAE5B,IAAI,KAAK,GAAG,IAAI;AAEhB,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,EAAE;AAC/C,YAAA,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,UAAU,GAAG,YAAY,IAAI,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE;gBACb,UAAU,GAAG,CAAC,YAAY,GAAG,UAAU,IAAI,CAAC;YAChD;iBAAO;gBACH,YAAY,GAAG,CAAC,YAAY,GAAG,UAAU,IAAI,CAAC;YAClD;AACA,YAAA,IAAI,wBAAwB,GAAG,EAAE,oBAAoB,EAAE;gBACnD;YACJ;QACJ;QACA,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,QAAA,OAAO,KAAK,CAAC,CAAC,GAAG,MAAM;IAC3B;IAEQ,eAAe,CAAC,IAAY,EAAE,MAAc,EAAA;QAChD,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9B,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B;AAEQ,IAAA,yBAAyB,CAAC,MAAc,EAAE,MAAc,EAAE,OAAe,EAAE,IAAS,EAAA;AACxF,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACf,YAAA,OAAO,IAAI;QACf;AACA,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;QACnD,IAAI,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC;AAC/D,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC;AACtE,QAAA,QAAQ,CAAC,cAAc,GAAG,IAAI;AAC9B,QAAA,OAAO,QAAQ;IACnB;IAEQ,OAAO,CAAC,MAAc,EAAE,OAAe,EAAA;QAC3C,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,KAAI;AAC3F,YAAA,IAAI,CAAC,CAAC,MAAM,EAAE;AACV,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO;YACnE;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAC5B,YAAA,OAAO,IAAI;QACf;AACA,QAAA,OAAO,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnC;AAEQ,IAAA,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAA;QAClD,IAAI,QAAQ,GAAQ,EAAE;AACtB,QAAA,QAAQ,CAAC,YAAY,GAAG,MAAM;AAC9B,QAAA,QAAQ,CAAC,OAAO,GAAG,OAAO;AAC1B,QAAA,QAAQ,CAAC,QAAQ,GAAG,EAAE;AACtB,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,cAAc;AAC9F,QAAA,OAAO,QAAQ;IACnB;AAEQ,IAAA,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAA;AACvC,QAAA,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,cAAc;AAC9D,aAAA,MAAM,CAAC,CAAC,CAAM,KAAI;YACf,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;gBAC5E,QAAQ,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE;YAChF;AACA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;AACN,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI;QACf;AACA,QAAA,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7B;;IAGQ,QAAQ,CAAC,IAAS,EAAE,MAAc,EAAA;AACtC,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AAC3C,YAAA,OAAO,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI;AAC3D,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAI,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE;AACnD,YAAA,IAAI,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE;AACzE,YAAA,OAAO,MAAM,IAAI,UAAU,IAAI,MAAM,IAAI,UAAU;QACvD;AACA,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,mBAAmB,CAAC,MAAc,EAAE,OAAe,EAAE,MAAc,EAAA;QACvE,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE;AACzD,YAAA,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;QACnF;AACA,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;QACvD,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,OAAO;QAClB;aAAO;AACH,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;QACjH;IACJ;AAEQ,IAAA,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAA;AAC5C,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;AAC5D,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACf,YAAA,OAAO,IAAI;QACf;AACA,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;IACxE;AAEQ,IAAA,eAAe,CAAC,WAAW,EAAA;QAC/B,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE;AAC1H,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC/D,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxE,gBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;oBAC7E;gBACJ;gBACA,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;oBACrC,QAAQ,CAAC,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI;AACpG,gBAAA,CAAC,CAAC;gBACF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;oBACrF,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBACtC;qBAAO;AACH,oBAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC;oBAC3E,IAAI,iBAAiB,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACpD,wBAAA,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBACtC;yBAAO;AACH,wBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC;AACnF,wBAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,4BAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;wBAC9B;oBACJ;gBACJ;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,UAAU;IACrB;AAEQ,IAAA,cAAc,CAAC,WAAW,EAAA;QAC9B,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACzB,YAAA,OAAO,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,OAAO;AACzF,QAAA,CAAC,CAAC;QACF,IAAI,IAAI,GAAG,IAAI;AAEf,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAI;YACpF,OAAO,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO;AAC3C,QAAA,CAAC,CAAC;QAEF,WAAW,CAAC,KAAK;aACZ,MAAM,CAAC,KAAK;AACZ,aAAA,OAAO,CAAC,iBAAiB,EAAE,IAAI;AAC/B,aAAA,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC,cAAc;aACnD,KAAK,CAAC,WAAW;AACjB,aAAA,OAAO,CAAC,oBAAoB,EAAE,CAAC,IAAG;YAC/B,OAAO,CAAC,CAAC,cAAc;AAC3B,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;aACtD,IAAI,CAAC,UAAU,CAAM,EAAA;YAClB,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,OAAO;AAEX,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AAC7B,gBAAA,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACzC;iBAAO;gBACH,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtC,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,OAAO;YACzC;YACA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAEvC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,wBAAwB,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,KAAI;gBACvI,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC;YACzD,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;AAErE,YAAA,IAAI,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,uBAAuB;AAC5F,iBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACd,YAAA,gBAAgB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK;AAChC,iBAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB;iBACpC,KAAK,CAAC,gBAAgB;iBACtB,KAAK,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;AACvF,YAAA,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACpC,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,eAAe,GAAG,WAAW,CAAC,IAAI,EAAE;AACxC,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI;YACvB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACjD,QAAA,CAAC,CAAC;QACF,eAAe,CAAC,MAAM,EAAE;IAC5B;AAEQ,IAAA,mBAAmB,CAAC,CAAM,EAAA;QAC9B,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;IACzF;IAEQ,aAAa,GAAA;AACjB,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC3F,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IACxG;AAEQ,IAAA,YAAY,CAAC,WAAmB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB;QACJ;QACA,IAAI,MAAM,GAAe,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC;QACrE,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YAC3C;QACJ;QACA,IAAI,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ;AACnC,QAAA,IAAI,WAAW,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACpH,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;AACtB,aAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB;aAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK;AACtB,iBAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB;iBAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3C;QAEA,IAAI,UAAU,GAAW,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACrF,QAAA,IAAI,cAAc,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;AAC5F,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,GAAG,gBAAgB;QACxD,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACjD,QAAA,IAAI,gBAAgB,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAAC,2BAA2B;QACpG,IAAI,sBAAsB,GAAG,UAAU,IAAI,cAAc,GAAG,CAAC,CAAC;QAC9D,IAAI,uBAAuB,GAAG,UAAU,IAAI,cAAc,GAAG,CAAC,CAAC;QAC/D,IAAI,SAAS,GAAG,8BAA8B;AAC9C,QAAA,IAAI,sBAAsB,GAAG,eAAe,EAAE;AAC1C,YAAA,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,eAAe,CAAC,GAAG,KAAK;QAClF;AACA,QAAA,IAAI,uBAAuB,GAAG,gBAAgB,EAAE;YAC5C,SAAS,GAAG,yBAAyB,IAAI,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,MAAM;QACjG;AAEA,QAAA,IAAI,CAAC;AACA,aAAA,KAAK,CAAC,kBAAkB,EAAE,SAAS;AACnC,aAAA,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC;IACtC;IAEO,gBAAgB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;QACnC;IACJ;AAEO,IAAA,eAAe,CAAC,MAAA,GAAiB,IAAI,CAAC,eAAe,EAAA;QACxD,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;QAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1E;IAEO,aAAa,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;QACjC;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC/B;AAGO,IAAA,MAAM,CAAC,eAAuB,EAAE,YAA0B,EAAE,kBAAuB,EAAE,sBAAwM,EAAA;AAChS,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,sBAAsB,CAAC,YAAY,CAAC;AAC1E,QAAA,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,WAAW;AACrD,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,CAAC,GAAG,sBAAsB,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,sBAAsB,CAAC,UAAU;AACnD,QAAA,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,QAAQ;AAC/C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC,cAAc;AAC3D,QAAA,IAAI,sBAAsB,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC,SAAS;QACrD;AAEA,QAAA,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC,IAAI;AACvC,QAAA,IAAI,sBAAsB,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,QAAQ;QACnD;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YAC7C,IAAI,CAAC,aAAa,EAAE;YACpB;QACJ;QAEA,IAAI,CAAC,YAAY,EAAE;AAEnB,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;AAC9F,QAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;AACvC,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAChE;AAEO,IAAA,qBAAqB,CAAC,MAAc,EAAA;QACvC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;YAC/B,IAAI,CAAC,aAAa,EAAE;YACpB;QACJ;QACA,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAC/B;AACH;;AC5iBD,MAAM,SAAU,SAAQ,sBAAsB,CAAA;AAmE1C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QA3Df,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,aAAa,GAAG,CAAC;QACjB,IAAA,CAAA,qBAAqB,GAAG,EAAE;AAClC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,aAAa,EAAE;QAChC,IAAA,CAAA,oBAAoB,GAAY,KAAK;QACrC,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,aAAa,GAAQ,IAAI;QAGzB,IAAA,CAAA,qBAAqB,GAAG,qBAAqB,CAAC,IAAI,GAAG,sBAAsB,CAAC,gBAAgB;QAe5F,IAAA,CAAA,OAAO,GAAG,EAAE;QAEZ,IAAA,CAAA,kBAAkB,GAAW,IAAI;QACjC,IAAA,CAAA,aAAa,GAAQ,EAAE;QACvB,IAAA,CAAA,gBAAgB,GAAY,KAAK;QAMjC,IAAA,CAAA,kBAAkB,GAAW,IAAI;QACjC,IAAA,CAAA,gBAAgB,GAAW,IAAI;QAC/B,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,eAAe,GAAY,KAAK;AAChC,QAAA,IAAA,CAAA,qBAAqB,GAAQ,EAAE,CAAC,KAAK,EAAE;AACvC,QAAA,IAAA,CAAA,mBAAmB,GAAQ,EAAE,CAAC,KAAK,EAAE;QAGrC,IAAA,CAAA,EAAE,GAAG,IAAI;QACT,IAAA,CAAA,EAAE,GAAG,IAAI;QACT,IAAA,CAAA,aAAa,GAAW,IAAI;QAC5B,IAAA,CAAA,cAAc,GAAW,IAAI;QAE7B,IAAA,CAAA,cAAc,GAAG,EAAE;QAEnB,IAAA,CAAA,iBAAiB,GAAG,IAAI;QACxB,IAAA,CAAA,OAAO,GAAG,CAAC;AAEX,QAAA,IAAA,CAAA,gBAAgB,GAAG,EAAE,CAAC;QACtB,IAAA,CAAA,gBAAgB,GAAG,EAAE;QAmCrB,IAAA,CAAA,uBAAuB,GAAG,MAAK;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,mBAAmB;AAC1C,iBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa;AACzC,iBAAA,MAAM,CAAC,YAAA;AACJ,gBAAA,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACxD,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAE5B,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB;AAC3C,iBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AAE7B,YAAA,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AAEvF,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC9B,QAAA,CAAC;AA6CM,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,MAAc,EAAE,OAAe,KAAI;AAC1D,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC1B,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AACtD,QAAA,CAAC;QAwBO,IAAA,CAAA,sBAAsB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,sBAA+B,KAAI;AAClF,YAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE;gBAClE,IAAI,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAE7D,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;AAEtD,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,mBAAmB;AAC1C,qBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB;AACjD,qBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB;AAC3C,qBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AAE7B,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,mBAAmB;qBAC1C,MAAM,CAAC,cAAc;AACrB,qBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa;AACzC,qBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB;qBAC3C,MAAM,CAAC,cAAc;AACrB,qBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAE7B,IAAI,sBAAsB,EAAE;AACxB,oBAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,oBAAA,IAAI,CAAC,cAAc,GAAG,OAAO;gBACjC;YACJ;AACJ,QAAA,CAAC;QAEO,IAAA,CAAA,uBAAuB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC;AAChE,YAAA,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC;YAE5D,IAAI,IAAI,GAAG,CAAC;YACD,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAEpB,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAErC,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;gBAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,KAAI;oBAC/E,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC;AACjE,gBAAA,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACnB;;AAEI,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACvB,YAAA,OAAO,IAAI;AACf,QAAA,CAAC;QAEO,IAAA,CAAA,sBAAsB,GAAG,MAAK;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;YAC/F,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACvB,QAAA,CAAC;;AAUO,QAAA,IAAA,CAAA,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,KAAI;AACvD,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,OAAO,KAAK;YAChB;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC;AAChE,YAAA,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC;YAE5D,IAAI,IAAI,GAAG,CAAC;YACD,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAEpB,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAErC,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;gBAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,KAAI;AAC/E,oBAAA,CAAC,CAAC,OAAO,GAAG,OAAO;oBACnB,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC;AACjE,gBAAA,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACnB;;AAEI,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACvB,YAAA,OAAO,IAAI;AACf,QAAA,CAAC;QAEO,IAAA,CAAA,mBAAmB,GAAG,MAAK;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;YAC/F,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACvB,QAAA,CAAC;AA+BO,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAM,KAAI;;YAElC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB;gBACvD;AAEJ,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,CAAC,YAAY,CAAC;YAChF,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AACtC,YAAA,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ;AACvB,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACvC,IAAI,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;YAEzB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACjF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YAEjF,IAAI,CAAC,4BAA4B,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC;AAClH,YAAA,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AAEtE,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU;YAChF,IAAI,QAAQ,GAAG,UAAU,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,IAAI;YAE5E,IAAI,QAAQ,EAAE;AACV,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAChD,gBAAA,IAAI,CAAC;AACA,qBAAA,KAAK,CAAC,SAAS,EAAE,OAAO;qBACxB,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC;qBACzB,IAAI,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC;qBACxB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC;qBACtC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC;YAChD;iBAAO;gBACH,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;YACpD;AACA,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;gBAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,KAAI;oBAClF,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC;gBAC/D,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;YACrE;;AAEI,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAEjB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAClE,YAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC;;YAGhE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,OAAO,EAAE;AACtD,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ;qBAC/B,SAAS,CAAC,MAAM;AAChB,qBAAA,KAAK,CAAC,cAAc,EAAE,EAAE;AACxB,qBAAA,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;AACvC,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ;AAC/B,qBAAA,MAAM,CAAC,CAAC,WAAW,KAAI;AACpB,oBAAA,OAAO,WAAW,IAAI,CAAC,CAAC,YAAY;AACxC,gBAAA,CAAC;qBACA,SAAS,CAAC,MAAM;AAChB,qBAAA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,qBAAA,OAAO,CAAC,mBAAmB,EAAE,KAAK;AAClC,qBAAA,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC;YACrC;AAEA,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC;YACpE;AACA,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAC/B,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;YAClE;AAEA,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC;AAC5D,QAAA,CAAC;AAmEM,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAI;AAChD,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,YAAY,KAAK,MAAM;gBAClG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,KAAK,OAAO,EAAE;AACzD,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC;YACxC;iBAAO;AACH,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;YACtC;AACJ,QAAA,CAAC;QAEM,IAAA,CAAA,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,KAAI;AAC/C,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;gBACnF;YACJ;AACA,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI;AACpC,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAE,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;;AAEhG,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAChG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC;AACjD,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,YAAoB,EAAE,OAAA,GAAkB,IAAI,KAAI;AACpE,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;gBACzF;YACJ;AACA,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACjF,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC;gBACpD;AACJ,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG;AAClC,gBAAA,YAAY,EAAE,YAAY;AAC1B,gBAAA,OAAO,GAAG,OAAO,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO;aAC7C;AAEK,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,UAAU,eAAoB,EAAA;gBACtG,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,YAAY,MAAM,eAAe,IAAI,OAAO,CAAC;YAC/F,CAAC,CAAE,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AAE7B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAChG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;AACrD,QAAA,CAAC;QAmNO,IAAA,CAAA,kBAAkB,GAAG,MAAK;AAC9B,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;AACjF,YAAA,OAAO,EAAE,cAAc,IAAI,IAAI,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;AAClE,QAAA,CAAC;QAEM,IAAA,CAAA,SAAS,GAAG,MAAK;AACpB,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AACxB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;gBAC9B,IAAI,CAAC,wBAAwB,EAAE;YACnC;AACA,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB;AAC9C,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACxB,IAAI,CAAC,yBAAyB,EAAE;gBAChC;YACJ;AAEA,YAAA,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;YAE9C,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAC1C,YAAA,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE;YAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC;AAC3D,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAA,CAAE,CAAC;AAC1H,QAAA,CAAC;QAyQM,IAAA,CAAA,aAAa,GAAG,MAAK;AACxB,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AACvF,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,mBAAmB;AAC1C,qBAAA,MAAM,CAAC,YAAA,EAAc,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAC5E,qBAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,qBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB;AAC3C,qBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACjC;AACJ,QAAA,CAAC;AAEM,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,YAAoB,EAAE,OAAA,GAAkB,IAAI,KAAI;YACrE,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7D,QAAA,CAAC;QA2DO,IAAA,CAAA,gBAAgB,GAAG,MAAK;YAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,OAAO;AACpD,gBAAA,OAAO,QAAQ;iBACd,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,MAAM;AACxD,gBAAA,OAAO,SAAS;;AAEhB,gBAAA,OAAO,SAAS;AACxB,QAAA,CAAC;AAr+BG,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;QACnB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAqB,CAAC;IAChE;IAEA,SAAS,GAAA;IACT;;IAIO,iBAAiB,GAAA;QACpB,IAAI,OAAO,GAAG,IAAI;QAClB,IAAI,QAAQ,GAAG,IAAI;AACnB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YACzC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU;AAC1C,gBAAA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAC9D;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;YACxC,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU;AAC5C,gBAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAChE;QACA,OAAO;AACH,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,QAAQ,EAAE;SACb;IACL;IAmBQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QACnC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QAC9C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IACpD;IAEQ,eAAe,CAAC,KAAK,EAAE,CAAM,EAAA;;QAEjC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB;YACvD;QAEJ,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;QAC/F,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE;YAC9B,KAAK,CAAC,eAAe,EAAE;QAC3B;QAEA,IAAI,CAAC,uBAAuB,EAAE;;QAG9B,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,EAAE;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ;iBAC/B,SAAS,CAAC,MAAM;AAChB,iBAAA,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,iBAAA,OAAO,CAAC,mBAAmB,EAAE,KAAK;AAClC,iBAAA,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC;QACvC;IACJ;IAEQ,wBAAwB,GAAA;QAC5B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,MAAM,EAAE;AAChE,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK;AAC1B,aAAA,OAAO,CAAC,wBAAwB,EAAE,IAAI;AACtC,aAAA,IAAI,CAAC,MAAM,EAAE,OAAO;AACpB,aAAA,IAAI,CAAC,WAAW,EAAE,WAAW;AAC7B,aAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,GAAG,CAAC;IACxG;IAEQ,yBAAyB,GAAA;QAC7B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,MAAM,EAAE;IACpE;AAQQ,IAAA,oBAAoB,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,EAAA;QACtD,QAAQ,SAAS;YACb,KAAK,SAAS,CAAC,WAAW;gBACtB,OAAO,IAAI,CAAC,oBAAoB;YACpC,KAAK,SAAS,CAAC,MAAM;gBACjB,OAAO,IAAI,CAAC,uBAAuB;AACvC,YAAA;AACI,gBAAA,OAAO,MAAK,EAAG,CAAC;;IAE5B;AAEQ,IAAA,mBAAmB,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,EAAA;QACrD,QAAQ,SAAS;YACb,KAAK,SAAS,CAAC,WAAW;gBACtB,OAAO,IAAI,CAAC,mBAAmB;YACnC,KAAK,SAAS,CAAC,MAAM;gBACjB,OAAO,IAAI,CAAC,sBAAsB;AACtC,YAAA;AACI,gBAAA,OAAO,MAAK,EAAG,CAAC;;IAE5B;AAyDQ,IAAA,oBAAoB,CAAC,MAAM,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;AAC9B,YAAA,OAAO,KAAK;QAChB;QACA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,YAAY;QACzD,OAAO,UAAU,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAClD;AAiCQ,IAAA,4BAA4B,CAAC,CAAM,EAAE,IAAY,EAAE,MAAW,EAAE,WAAmB,EAAA;AACvF,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU;QAChF,IAAI,QAAQ,GAAG,UAAU,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,IAAI;AAE5E,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;AAC1B,aAAA,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,IAAI,IAAI;AACzB,aAAA,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,cAAc,KAAK;AAC/E,aAAA,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK;AAC/B,aAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;AAChC,aAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC1F,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3H,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK;AAC/B,iBAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;AAChC,iBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC1F,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjI;IAGJ;IAEQ,2BAA2B,CAAC,MAAc,EAAE,IAAI,EAAA;QACpD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;AACzC,aAAA,KAAK,CAAC,OAAO,EAAE,CAAA,GAAI,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,KAAK;AACjE,aAAA,KAAK,CAAC,SAAS,EAAE,OAAO;aACxB,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C;;AA2EQ,IAAA,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,EAAA;AACnD,QAAA,IAAI,MAAM;AACV,QAAA,IAAI,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE;YACpF,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO;QAC/D;QACA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,IAAI,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO;QACpC;QACA,IAAI,UAAU,EAAE;YACZ,IAAI,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;YACtD,IAAI,cAAc,GAAG,EAAE;AACvB,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,CAAM,KAAI;AAC9B,gBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;AACvE,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;wBAC7D,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC1C;AACA,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;wBAC7D,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC1C;AACA,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;wBAC7D,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC1C;gBACJ;qBAAO;AACH,oBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC;AACzF,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE;wBAC/E,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;oBACnD;gBACJ;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC;QACtC;aAAO;AACH,YAAA,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAM,KAAI;AAC7D,gBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC;AACzF,gBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE;AAC/E,oBAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBACrC;AACA,gBAAA,OAAO,IAAI;AACf,YAAA,CAAC,CAAC;QACN;AACA,QAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS;AAChD,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,QAAA,OAAO,MAAM;IACjB;AAEQ,IAAA,iBAAiB,CAAC,SAAS,EAAA;AAC/B,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAM,KAAI;AAC/B,YAAA,QAAQ,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI;AAC5D,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,oBAAoB,CAAC,SAAS,EAAA;QAClC,IAAI,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;QACtD,IAAI,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAM,KAAI;AACnD,YAAA,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,OAAO;AAClE,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI;AAC3C,YAAA,OAAO,eAAe;AAC1B,QAAA,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAM,KAAI;YACrC,OAAO,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,YAAY;AACrE,iBAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI;oBACzD,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC;AACrE,QAAA,CAAC,CAAC;IACN;IA6CQ,eAAe,GAAA;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IAC7E;IAEQ,YAAY,CAAC,CAAC,EAAE,CAAC,EAAA;AACrB,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU;AAChF,QAAA,IAAI,UAAU;AACV,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE,IAAI,CAAC;AACjF,QAAA,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxB;AAEO,IAAA,iBAAiB,CAAC,SAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;IACnC;AAEO,IAAA,eAAe,CAAC,OAAO,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;IAC/B;IAEO,QAAQ,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;YAC1E,IAAI,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;YAC7C,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;;AAG5C,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;YAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,MAAM,WAAW,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACzF,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC1C;YACJ;AAEA,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AAClH,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAEjH,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,YAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;AAClC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;;AAEjC,YAAA,IAAI,SAAS,GAAG,QAAQ,GAAG,CAAC,EAAE;AAC1B,gBAAA,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;oBACtD,QAAQ,IAAI,EAAE;gBAClB;qBAAO;oBACH,SAAS,IAAI,CAAC;gBAClB;YACJ;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC/D;IACJ;AAEQ,IAAA,oBAAoB,CAAC,SAAiB,EAAA;QAC1C,IAAI,OAAO,GAAG,QAAQ;AACtB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,YAAoB,EAAE,SAAc,KAAI;AAChG,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;AAClD,YAAA,IAAI,IAAI,GAAG,OAAO,EAAE;gBAChB,OAAO,GAAG,IAAI;AACd,gBAAA,OAAO,MAAM,CAAC,SAAS,CAAC;YAC5B;AACA,YAAA,OAAO,YAAY;QACvB,CAAC,EAAE,QAAQ,CAAC;IAChB;IAEQ,mBAAmB,GAAA;AACvB,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACtF,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC;AAC7H,aAAC,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACrE;IAEO,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa;AACrD,aAAA,MAAM,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,UAAU;AACvF,aAAA,GAAG,CAAC,CAAC,UAAU,KAAI,EAAG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC;QAChI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;IAChE;IAEQ,oBAAoB,CAAC,UAAkB,EAAE,MAAW,EAAA;QACxD,OAAO,CAAC,UAAU,EAAE,aAAa,EAAE,UAAA,GAAsB,IAAI,KAAI;YAC7D,IAAI,aAAa,EAAE;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,MAAM;YAC3C;iBACK,IAAI,UAAU,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;;AAGrC,gBAAA,IAAI,cAAc,GAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,MAAc,KAAI;AAClF,oBAAA,OAAO,MAAM,CAAC,eAAe,EAAE;AACnC,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,oBAAA,cAAc,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE;gBACxC;qBAAO;oBACH,IAAI,CAAC,eAAe,EAAE;gBAC1B;YACJ;YACA,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,UAAU;gBACV,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,CAAC;IACL;AAEQ,IAAA,YAAY,CAAC,MAAc,EAAE,MAAc,EAAE,QAAA,GAAgB,IAAI,EAAE,SAAA,GAAoB,IAAI,EAAE,cAAA,GAA0B,KAAK,EAAA;AAChI,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE;YAC9D,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,CAAC,EAAE,IAAI,CAAC,CAAC;AACT,YAAA,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,cAAc,GAAG,IAAI,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;YAC9G,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,IAAI,CAAC,MAAM;AACxB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,cAAc,EAAE;AACnB,SAAA,CAAC;IACN;IAEQ,WAAW,GAAA;QACf,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;AACnF,YAAA,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE;AAC/C,QAAA,CAAC,CAAC;IACN;IAEQ,8BAA8B,GAAA;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,aAAa,GAAG,CAAC,gBAAA,GAA2B,CAAC,KAAI;AACjD,gBAAA,IAAI,gBAAgB,GAAG,CAAC,EAAE;oBACtB,UAAU,CAAC,MAAK;wBACZ,IAAI,kBAAkB,GAAG,IAAI;wBAC7B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAM,KAAI;AAC7E,4BAAA,kBAAkB,GAAG,kBAAkB,IAAI,CAAC,CAAC,CAAC,YAAY;AAC9D,wBAAA,CAAC,CAAC;wBACF,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAM,KAAI;AAC/E,4BAAA,kBAAkB,GAAG,kBAAkB,IAAI,CAAC,CAAC,CAAC,YAAY;AAC9D,wBAAA,CAAC,CAAC;wBACF,IAAI,kBAAkB,EAAE;4BACpB,OAAO,CAAC,IAAI,CAAC;wBACjB;6BAAO;AACH,4BAAA,aAAa,CAAC,gBAAgB,GAAG,CAAC,CAAC;wBACvC;AACJ,oBAAA,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;gBACzC;qBAAO;AACH,oBAAA,MAAM,EAAE;gBACZ;AACJ,YAAA,CAAC;YACD,aAAa,CAAC,CAAC,CAAC;AACpB,QAAA,CAAC,CAAC;IACN;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;;YAEnE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE;AACxC,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE;AACxC,oBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACnC,gBAAA,CAAC,CAAC;YACN;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,WAAW,KAAI;gBACjE,IAAI,iBAAiB,KAAK,IAAI,IAAI,iBAAiB,KAAK,SAAS,EAAE;oBAC/D;gBACJ;gBACA,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAC1C,gBAAA,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE;AAE5B,gBAAA,IAAI,YAAY;AAChB,gBAAA,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;oBACvC,YAAY,GAAG,iBAAiB;AAChC,oBAAA,MAAM,CAAC,YAAY,CAAC,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,WAAW,GAAG,CAAC,CAAA,CAAE,CAAC;gBACzE;qBAAO;oBACH,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAA,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC;gBACvC;AACA,gBAAA,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;AAC9B,gBAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,MAAM;AAC1C,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;IAGQ,wBAAwB,GAAA;QAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;IAC3D;IAEQ,wBAAwB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;YACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAK,EAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;QACzF;IACJ;IAEQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,8BAA8B,EAAE,CAAC,IAAI,CAAC,MAAK;AAC5C,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACrC,IAAI,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC;AACtD,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC;AAC3D,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,wBAAwB,EAAE;YACnC;AACJ,QAAA,CAAC,CAAC;IACN;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;QACvE;IACJ;IA4BQ,aAAa,GAAA;QACjB,QAAQ,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC;IAC3C;AAEQ,IAAA,gBAAgB,CAAC,UAAU,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAAE;AACzD,QAAA,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;AACvB,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU;AAC3B,QAAA,IAAI,IAAI,GAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC;aAAO;YACH,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/B,YAAA,IAAI,WAAW,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAC3F,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;YACjD;QACJ;QAEA,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE;AAC5F,YAAA,IAAI,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACvF,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAChF,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;QAChF;IACJ;IAEQ,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAAE;AACzD,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;AAChD,QAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;AAClD,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,kBAAkB;AAC/E,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACxF,YAAA,IAAI,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAEvE,YAAA,IAAI,cAAc;AAClB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;YAClE;iBAAO;gBACH,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;YACtE;YAEA,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;YAElG,OAAO,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/E,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC;AACxC,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAChC;AACA,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC;IACJ;IAEQ,YAAY,CAAC,OAAO,EAAE,UAAU,EAAA;;QAEpC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB;YACvD;QAEJ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAAE;AACzD,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE;AAC9C,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;AAChD,QAAA,IAAI,IAAI,GAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;AAChD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,cAAc,KAAK,IAAI,EAAE;AAC1C,gBAAA,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvH;iBAAO;gBACH,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,KAAK,IAAI,EAAE;oBAC9C,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;AACvC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC9D;gBACJ;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAChE;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YACjC;QACJ;QAEA,IAAI,CAAC,yBAAyB,EAAE;AAChC,QAAA,IAAI,KAAK,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE;YACvD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;YACvC,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC5B;IACJ;AAEQ,IAAA,iBAAiB,CAAC,CAAC,EAAA;QACvB,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3G;AAEQ,IAAA,UAAU,CAAC,KAAK,EAAA;AACpB,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS;AAC7B,aAAA,IAAI,CAAC,QAAQ,EAAE,YAAY;AAC3B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,IAAI,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACpB;QACJ;AACA,QAAA,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE;AAC7D,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;;AAEjE,YAAA,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE;gBAC9D;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;YACrE;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,EAAE;AACnC,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;YACjC;QACJ;QACA,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE;QAEtB,IAAI,IAAI,CAAC,WAAW;AAChB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAC3B,IAAI,IAAI,CAAC,gBAAgB;AACrB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAEhC,IAAI,qBAAqB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,IAAI,mBAAmB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAClD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,kBAAkB,GAAG,qBAAqB;QACnD;AACA,QAAA,IAAI,mBAAmB,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrD,YAAA,IAAI,CAAC,gBAAgB,GAAG,mBAAmB;QAC/C;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;QAC7E;IACJ;IAEQ,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAChC;YACA;QACJ;AACA,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,CAAC,EAAE;AAC9I,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAChC;AACA,YAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;AAChD,YAAA,IAAI,IAAI,GAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;AAChD,YAAA,IAAI,eAAe,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,IAAI,MAAM,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC;AAC5F,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,eAAe,EAAE;AAC5F,gBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI;AACpC,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAE,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;;AAEhG,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAChG,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;AACvC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;gBACvE;YACJ;AAEA,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAE5B,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,eAAe,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE;AAC1G,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAChE;iBAAO;AACH,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YACjC;YACA;QACJ;AAEA,QAAA,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;AACnC,gBAAA,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1H;YACA;QACJ;AACA,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;;YAE7B,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,gBAAA,IAAI,eAAe,GAAG,CAAC,SAAS,KAAU;oBACtC,IAAI,WAAW,GAAG,IAAI;oBACtB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AAC1C,wBAAA,IAAI,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBACxD,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;AAC7C,wBAAA,IAAI,eAAe,GAAG,YAAY,EAAE;4BAChC,WAAW,GAAG,IAAI;AAClB,4BAAA,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;wBACvB;AACA,wBAAA,OAAO,IAAI;oBACf,CAAC,EAAE,QAAQ,CAAC;AACZ,oBAAA,OAAO,WAAW;AACtB,gBAAA,CAAC;gBACD,IAAI,iBAAiB,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC7D,IAAI,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3D,gBAAA,IAAI,iBAAiB,IAAI,IAAI,CAAC,cAAc,IAAI,eAAe,IAAI,IAAI,CAAC,YAAY,EAAE;AAClF,oBAAA,IAAI,CAAC,cAAc,GAAG,iBAAiB;AACvC,oBAAA,IAAI,CAAC,YAAY,GAAG,eAAe;oBACnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;oBACrD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;AACjD,oBAAA,aAAa,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5I,oBAAA,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC1E;YACJ;QACJ;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE;YAClE,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACtF,YAAA,aAAa,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAC/H,WAAW,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC;QAC/D;QACA,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,KAAK,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE;AACxG,YAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;QAChF;QACA,IAAI,IAAI,CAAC,YAAY,CAAC,uBAAuB,IAAI,IAAI,CAAC,YAAY,CAAC,2BAA2B;AAC1F,aAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE;AAChE,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,uBAAuB,IAAI,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,IAAI,CAAC;gBACnG;AACJ,YAAA,IAAI,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;;YAEvE,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;YACrE,IAAI,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1F,IAAI,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3F,YAAA,IAAI,sBAAsB,GAAG,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;AAE/E,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EACpF,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;QACzF;QACA,IAAI,aAAa,EAAE;AACf,YAAA,aAAa,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,WAAW,EAAE;AACtC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;YAChC;QACJ;IACJ;AAEQ,IAAA,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAA;AACpD,QAAA,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC;QAG3F,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,kBAAkB;aACpD,MAAM,CAAC,cAAc;AACrB,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC;AAClB,aAAA,OAAO,CAAC,gBAAgB,EAAE,IAAI;AAC9B,aAAA,IAAI,CAAC,YAAA;AACF,YAAA,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAC;AAC7F,QAAA,CAAC,CAAC;AAEN,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,YAAA;AAChE,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAM,EAAE,CAAM,EAAA;AACvE,gBAAA,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;AAC3F,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAkBQ,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE;YACrC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;gBACnF,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK;AACnD,qBAAA,IAAI,CAAC,OAAO,EAAE,wBAAwB;YAC/C;YACA,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;IAEQ,gBAAgB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3H;IAEO,gBAAgB,GAAA;AACnB,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC3C,IAAI,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;YAC7C,IAAI,CAAC,gBAAgB,EAAE;YACvB;QACJ;QAEA,IAAI,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAClG,IAAI,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,yBAAyB,CAAC;AAE7E,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa;AAEzF,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa;QAEvF;aACK,IAAI,CAAC,SAAS;aACd,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;AACtE,aAAA,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC;AAElF,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;YACzB;iBACK,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AACjD,iBAAA,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;QAChC;QAEA,IAAI,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACzE,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,WAAW,EAAE;AACnE,YAAA,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC;QACpD;aAAO;AACH,YAAA,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC;QACrD;IACJ;IAEO,gBAAgB,GAAA;QACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,MAAM,EAAE;IACjE;IAEO,WAAW,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ;IAC3C;IAWQ,UAAU,GAAA;QACd,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;QACtF,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAChC;IACJ;IAEQ,kBAAkB,GAAA;QACtB,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1G,IAAI,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9H,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,KAAI;YACtC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO;QACxD,CAAC,CAAC,CAAC,MAAM;IACb;IAEQ,kBAAkB,CAAC,mBAA2B,EAAE,aAAsC,EAAE,WAAoC,EAAE,gBAAwB,EAAE,WAAgB,EAAA;QAC5K,IAAI,gBAAgB,GAAG,mBAAmB;;QAE1C,IAAI,qBAAqB,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC;AAEzD,QAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;;AAE/F,YAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;YAClC,IAAI,UAAU,GAAG,KAAK;YACtB,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAI;AAChC,gBAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;oBAC3E,UAAU,GAAG,IAAI;oBACjB,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;gBACnE;AACJ,YAAA,CAAC,CAAC;;YAGF,IAAI,cAAc,GAAG,UAAU,GAAG,gBAAgB,GAAG,CAAC;YAGtD,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE;gBAChJ,cAAc,IAAI,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,QAAQ,CAAC;gBAC9E,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAI;AAChC,oBAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAChC,wBAAA,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBAC/G;AACJ,gBAAA,CAAC,CAAC;YACN;iBAAO;gBACH,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAI;AAChC,oBAAA,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;wBAC3E,IAAI,gBAAgB,GAAG,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC;wBACjE,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,GAAG,gBAAgB,EAAE,gBAAgB,CAAC;wBAChF,cAAc,IAAI,gBAAgB;oBACtC;AACJ,gBAAA,CAAC,CAAC;YACN;YACA,gBAAgB,IAAI,cAAc;AACtC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,qBAAqB;IAChC;AAEQ,IAAA,mBAAmB,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAA;QAC9E,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACvB,IAAI,MAAM,GAAG,EAAE;;;AAIf,YAAA,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;gBAC3E,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO;gBAC7C;YACJ;YAEA,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAI;AAClC,gBAAA,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;gBACxB,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,EAAE;oBACpC;gBACJ;gBACA,IAAI,SAAS,GAAG,EAAE;AAClB,gBAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE;AACvB,oBAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM;AACvB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxE,wBAAA,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AACrF,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EACnC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe;wBACxD,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe;AAC5D,wBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;AAClD,oBAAA,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1C,oBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM;gBAC1B;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,GAAG,OAAO;IACnC;IAEQ,gCAAgC,CAAC,WAAW,EAAE,QAAQ,EAAA;;QAE1D,IAAI,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,SAAS,KAAI;AACtD,YAAA,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC;YAC9C;AACA,YAAA,OAAO,OAAO;QAClB,CAAC,EAAE,CAAC,CAAC;AACL,QAAA,OAAO,SAAS,KAAK,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC;IACrE;;IAGQ,cAAc,GAAA;QAClB,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1G,IAAI,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;AAE9H,QAAA,IAAI,mBAAmB;QACvB,IAAI,WAAW,GAAG,EAAE;QAEpB,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AAC3B,YAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE;AACvB,gBAAA,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC;YACxB;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxB,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,CAAC;AACjG,QAAA,CAAC,CAAC;AACF,QAAA,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,QAAQ,KAAI;AAC7E,YAAA,OAAO,YAAY,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzD,CAAC,EAAE,CAAC,CAAC;QAEL,IAAI,iBAAiB,GAAG,mBAAmB;AAE3C,QAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,mBAAmB;AAC5E,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,mBAAmB;QAE1D,IAAI,iBAAiB,GAAG,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AACnC,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AACnE,gBAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC;gBAClC,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC;AACrD,gBAAA,IAAI,GAAG,CAAC,cAAc,EAAE;oBACpB,IAAI,cAAc,GAAG,IAAI,CAAC,gCAAgC,CAAC,WAAW,EAAE,QAAQ,CAAC;oBACjF,iBAAiB,IAAI,cAAc;gBACvC;AACJ,YAAA,CAAC,CAAC;QACN;AACA,QAAA,IAAI,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,KAAI;AACpE,YAAA,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE;AAC/M,gBAAA,OAAO,WAAW;YACtB;YACA,OAAO,WAAW,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrH,CAAC,EAAE,CAAC,CAAC;QACL,gBAAgB,IAAI,iBAAiB;QAErC,IAAI,gBAAgB,GAAG,CAAC,aAAa,GAAG,gBAAgB,IAAI,iBAAiB;AAE7E,QAAA,IAAI,CAAC,mBAAmB,CACpB,aAAa,EACb,WAAW,EACX,MAAM,CAAC,IAAI,CAAC,WAAW;aAClB,MAAM,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,CAAC;AAClC,aAAA,GAAG,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC,EAC5C,IAAI,CAAC,YAAY,CAAC,eAAe,CACpC;AACD,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC;IAClH;IAEQ,gBAAgB,GAAA;QACpB,IAAI,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9H,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,SAAS,KAAI;YACjD,OAAO,WAAW,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrH,CAAC,EAAE,CAAC,CAAC;IACT;AAEQ,IAAA,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAA;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;YACtI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe;gBAC5H,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe;AAC5D,gBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC;QAChD;aAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;AAC9D,YAAA,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe;gBAC7F,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe;AAC5D,gBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;QAClD;aAAO;AACH,YAAA,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB;AACA,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,cAAc,CAAC,GAAG,EAAA;QACtB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,OAAO,EAAE;AACtD,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE;AACnJ,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS;YACpE;iBAAO;gBACH,OAAO,WAAW,CAAC,MAAM;YAC7B;QACJ;AACA,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU;IACvC;IAEQ,eAAe,GAAA;QACnB,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,OAAO,EAAE;YAC7G,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC5C,gBAAA,GAAG,CAAC,QAAQ,GAAG,CAAC;AACpB,YAAA,CAAC,CAAC;;AAEF,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;gBACnC,MAAM,iBAAiB,GAAG,EAAE;AAC5B,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBAC9D,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACrD,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,EAAE;YAChI;QACJ;aAAO;AACH,YAAA,IAAI,sBAAsB,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,KAAI;gBACjF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;YAC1C,CAAC,EAAE,CAAC,CAAC;YACL,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC5C,gBAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE;AACvB,oBAAA,GAAG,CAAC,QAAQ,GAAG,EAAE,sBAAsB;gBAC3C;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEQ,kBAAkB,GAAA;QACtB,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AAC/C,YAAA,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC3E,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,uBAAuB;IACpE;IAEQ,+BAA+B,GAAA;QACnC,IAAI,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9H,MAAM,UAAU,GAAG,EAAE;QACrB,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,KAAI;YAC3C,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,OAAO,EAAE;gBACtD;YACJ;AACA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,OAAO;gBAC/D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;AAE5B,YAAA,IAAI,MAAM;AACN,gBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,KAAK,WAAW,CAAC,OAAO;AACpF,gBAAA,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC;gBACzB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;AAC3B,gBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;YACjE;AACJ,QAAA,CAAC;AACD,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxB,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,sBAAwC,KAAI;AACvE,gBAAA,UAAU,CAAC,GAAG,EAAE,sBAAsB,EAAE,UAAU,CAAC;AACvD,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,mBAAmB,GAAG,CAAC,cAAc,KAAI;AAC3C,YAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI;AAC5B,gBAAA,QAAQ,GAAG,CAAC,QAAQ,KAAK,cAAc;AAC3C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AAED,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AAC3F,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,KAAI;gBACtE,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,cAAc,CAAC;gBACzE,eAAe,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,sBAAwC,KAAI;oBACpF,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACnE,IAAI,eAAe,EAAE;AACjB,wBAAA,UAAU,CAAC,eAAe,EAAE,sBAAsB,EAAE,UAAU,CAAC;oBACnE;AACJ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;AACA,QAAA,OAAO,UAAU;IACrB;;IAGQ,uCAAuC,GAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,+BAA+B,EAAE,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC;IACjE;IAEQ,qBAAqB,GAAA;AACzB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,EAAE;QACzD,MAAM,IAAI,GAAG,IAAI;AAEjB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,uBAAuB;aAC3F,IAAI,CAAC,UAAU,CAAC;QACrB;AACK,aAAA,KAAK;aACL,MAAM,CAAC,GAAG;aACV,KAAK,CAAC,gBAAgB;AACtB,aAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB;AACpC,aAAA,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,KAAI;AAC1B,YAAA,OAAO,YAAY,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG;AACrE,QAAA,CAAC;aACA,IAAI,CAAC,UAAU,MAAM,EAAA;AAClB,YAAA,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;iBAC3B,SAAS,CAA0B,2BAA2B;AAC9D,iBAAA,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB;AACK,iBAAA,KAAK;iBACL,MAAM,CAAC,MAAM;iBACb,KAAK,CAAC,SAAS;AACf,iBAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B;AACxC,iBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU;AACzB,iBAAA,IAAI,CAAC,GAAG,EAAE,EAAE;iBACZ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AAC3B,YAAA,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAEzB,YAAA,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;iBAC3B,SAAS,CAA0B,2BAA2B;AAC9D,iBAAA,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;YACnB;AACK,iBAAA,KAAK;iBACL,MAAM,CAAC,MAAM;iBACb,KAAK,CAAC,SAAS;AACf,iBAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B;iBACxC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK;AACrC,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU;AAC1B,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAClB,YAAA,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAC7B,QAAA,CAAC,CAAC;AACN,QAAA,gBAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACpC;IAEQ,oBAAoB,CAAC,iBAAiB,EAAE,WAAW,EAAA;;QAGvD,IAAI,cAAc,GAOT,EAAE;AAEX;;;;;;;AAOE;AAEF,QAAA,MAAM,kBAAkB,GAAG,CAAC,QAAQ,KAAI;AACpC,YAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AAChC,YAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC;YACzE,IAAI,OAAO,GAAG,IAAI;AAClB,YAAA,IAAI,OAAO,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,QAAQ,CAAC,EAAE,OAAO,KAAK,UAAU,EAAE;AAC/E,gBAAA,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;YACvF;YACA,cAAc,CAAC,QAAQ,CAAC,GAAG;AACvB,gBAAA,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtC,gBAAA,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,QAAQ,CAAC,EAAE,KAAK;gBAC5D;aACH;AACL,QAAA,CAAC;;QAGD,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAG;YACvF,IAAI,EAAE,QAAQ,CAAC,QAAQ,IAAI,cAAc,CAAC,EAAE;gBACxC,kBAAkB,CAAC,QAAQ,CAAC;YAChC;AACJ,QAAA,CAAC,CAAC;;QAGF,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAG;AACvF,YAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC;YACzE,IAAI,EAAE,QAAQ,CAAC,QAAQ,IAAI,cAAc,CAAC,EAAE;gBACxC,kBAAkB,CAAC,QAAQ,CAAC;YAChC;AAAO,iBAAA;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE;AAC1E,oBAAA,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/E;YACJ;AACJ,QAAA,CAAC,CAAC;;QAGF,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;;AAG/C,QAAA,MAAM,aAAa,GAAG,CAAC,QAAqB,EAAE,IAAI,KAAI;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAC,0BAA0B,CAAC;AAClF,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,IAAI,eAAe,GAAG,QAAQ,CAAC,qBAAqB,EAAE;AACtD,gBAAA,IAAI,SAAS,GAAG,QAAQ,CAAC,WAAW;AAEpC,gBAAA,OAAO,eAAe,CAAC,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC/D,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAClC,oBAAA,QAAQ,CAAC,WAAW,GAAG,SAAS,GAAG,KAAK;AACxC,oBAAA,eAAe,GAAG,QAAQ,CAAC,qBAAqB,EAAE;gBACtD;YACJ;AACJ,QAAA,CAAC;AAED,QAAA,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,IAAY,KAAI;AACrD,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW;AAC/B,iBAAA,SAAS,CAAC,CAAA,kBAAA,EAAqB,IAAI,CAAA,CAAE;iBACrC,SAAS,CAAC,MAAM;AAChB,iBAAA,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC;AAC9C,QAAA,CAAC;AAED,QAAA,MAAM,sBAAsB,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,UAAU;;QAGrF,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YACvC,IAAI,SAAS,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACtC,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA,kBAAA,EAAqB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;YAE1F,KAAK,CAAC,KAAK;iBACN,MAAM,CAAC,MAAM;iBACb,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAA,kBAAA,EAAqB,IAAI,CAAA,mBAAA,EAAsB,sBAAsB,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,EAAE,CAAA,CAAE;iBACxH,KAAK,CAAC,KAAK;AACX,iBAAA,KAAK,CAAC,aAAa,EAAE,QAAQ;AAC7B,iBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAA,UAAA,GAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,sBAAsB,CAAC,gBAAgB,EAAC,CAAA,GAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,gBAAgB;iBACvJ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK;AACjB,iBAAA,IAAI,CAAC,UAAU,CAAC,EAAA,EAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC;iBAC5C,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AACtB,gBAAA,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE;oBAC3B,CAAC,CAAC,OAAO,EAAE;gBACf;AACJ,YAAA,CAAC;iBACA,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AAC1B,gBAAA,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE;AAC3B,oBAAA,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC7B;AACJ,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,UAAU,EAAE,MAAK;AACjB,gBAAA,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC;AAC9B,YAAA,CAAC;iBACA,MAAM,CAAC,WAAW;iBAClB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAEvB,YAAA,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACzB,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,MAAM,CAAC,IAAS,EAAE,OAAY,EAAE,0BAA+B,EAAA;AAClE,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;QACxC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,0BAA0B,CAAC;AAEvD,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YACjE,OAAO,GAAG,CAAC,QAAQ;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,eAAe;AAEtD,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,KAAK,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,uBAAuB,CAAC;AACrH,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,gBAAgB,GAAG,CAAC,IAAI,qBAAqB,CAAC,KAAK;AACxH,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;AAC/F,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,SAAS;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE;;AAE1B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE;AAE9B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG;QAChC;QAEA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,EAAE;YAC5D,IAAI,CAAC,gBAAgB,EAAE;QAC3B;QAEA,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;AACrE,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AACvC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAClC;AAEA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC;AACvD,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE;AAGhE,QAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC;AACxG,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC1C,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACxD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAChE,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAChC;QAEA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AAC9F,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QAEtC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC1G,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAC5B,IAAI,CAAC,UAAU,EAAE;QACrB;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;YAC9E,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;YAC9K,IAAI,IAAI,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ;AACvD,iBAAA,KAAK,CAAC,MAAM,EAAE,MAAM;AACpB,iBAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB;AACjC,iBAAA,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC5F,iBAAA,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACxD,iBAAA,IAAI,CAAC,MAAM,EAAE,QAAQ;iBACrB,EAAE,CAAC,OAAO,EAAE,YAAA;gBACT,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,0BAA0B,CAAC;gBACtH,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC7G,gBAAA,UAAU,CAAC,MAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAU,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC;AAClE,YAAA,CAAC,CAAC;QACV;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AACpF,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B,IAAI,CAAC,kBAAkB,EAAE;QAC7B;AAEA,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACnB,oBAAA,SAAS,EAAE,MAAM;AACjB,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;oBACtC,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,oBAAA,WAAW,EAAE;AAChB,iBAAA,CAAC,CAAC;YACH,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1F;QAEA,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;;YAG3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC3C,iBAAA,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK;AAC9C,iBAAA,IAAI,CAAC,OAAO,EAAE,+BAA+B;iBAC7C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AAC1C,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YAEhC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG;AAC/B,iBAAA,OAAO,CAAC,UAAU,EAAE,IAAI;iBACxB,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;YAEjG,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;AAE3C,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG;AACxB,qBAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAC/B,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;YACtF;iBAAO;;AAEH,gBAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YACtE;YAEA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG;AACpB,iBAAA,IAAI,CAAC,WAAW,EAAE,sBAAsB;AACxC,iBAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAE/B,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AACnB,iBAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB;AACvC,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;iBACZ,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY;AACzC,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AACnB,iBAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB;AACvC,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU;AAC1B,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAElB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;AACrB,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAEjB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;iBAChD,MAAM,CAAC,KAAK;AACZ,iBAAA,IAAI,CAAC,OAAO,EAAE,8CAA8C;AAC5D,iBAAA,KAAK,CAAC,SAAS,EAAE,MAAM;AACvB,iBAAA,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;YAEnC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;iBAC9C,MAAM,CAAC,KAAK;AACZ,iBAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB;AACpC,iBAAA,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;YAE7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AAC7C,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,OAAO,EAAE,wBAAwB;AACtC,iBAAA,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;YAE7B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACnC,gBAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;AAEvC,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5D;YAEA,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,GAAG,KAAK,EAAE,KAAK,KAAI;gBACxC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;gBAC7G,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,QAAQ,GAAG,SAAS,CAAC;gBACrF,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,QAAQ,GAAG,SAAS,CAAC;gBACjG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,QAAQ,GAAG,SAAS,CAAC;AACnG,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAChE,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;gBAChC;;gBAGA,IAAI,cAAc,GAAG,KAAK;gBAC1B,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,SAAS,KAAI;AACjD,oBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAC5E,gBAAA,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAG;AACpB,oBAAA,IAAI,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE;wBAC5D,cAAc,GAAG,IAAI;oBACzB;AACJ,gBAAA,CAAC,CAAC;gBAEF,IAAI,cAAc,EAAE;oBAChB,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,qBAAqB;gBACvD;qBAAO,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,EAAE;oBAC9D,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI;gBACvD;gBAEA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC;gBAC5F,IAAI,CAAC,YAAY,EAAE;AACf,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;gBAC1C;gBACA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC/F,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBAE9F,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;AAE9F,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;gBACtF;AAEA,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAC3D,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;AAC5D,gBAAA,IAAI,CAAC;qBACA,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI;qBACxC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAExC,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAG1D,IAAI,CAAC,YAAY,EAAE;AACf,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAClB,IAAI,CAAC,YAAY,CAAC,MAAM,EACxB,IAAI,CAAC,kBAAkB,EACvB,CAAC,MAAM,EAAE,OAAO,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAC9D,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,EAAE,MAAK;AACpB,wBAAA,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AAC3F,oBAAA,CAAC,EACD,IAAI,CAAC,YAAY,EACjB,KAAK,CAAC;gBACd;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC;AAEnE,gBAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS;AAChB,qBAAA,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7F,gBAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW;AAClB,qBAAA,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBAExJ,IAAI,SAAS,GAAQ,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,EAAE;AACxE,gBAAA,IAAI,OAAO,GAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG;gBAC5H,IAAI,iBAAiB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU;AACtD,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC7B,oBAAA,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpG;AACA,gBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AACxB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;AAGvC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;AACpC,gBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,CAAC;gBAClF,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAM,KAAI,EAAG,OAAO,CAAC,CAAC,UAAU,IAAI,IAAI,CAAA,CAAC,CAAC;qBAClG,GAAG,CAAC,CAAC,CAAM,OAAO,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAA,CAAC,CAAC,CAAC;gBAC9E,IAAI,gBAAgB,GAAG,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC;AAC1D,gBAAA,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC;gBACvC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAU,KAAI;AAC7E,oBAAA,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC;AACvB,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAC,UAAU;yBAC3D,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY;AACxC,yBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,iBAAiB,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACzE,yBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;gBACzC;AAEA,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,IAAI,GAAG,IAAI;AACf,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM;yBACjB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;wBACvF,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACpC,yBAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;wBACxB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACrD,4BAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;wBAClC;AACA,wBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AACzC,wBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS;AAC7B,6BAAA,IAAI,CAAC,QAAQ,EAAE,YAAY;AAC3B,6BAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,IAAI,CAAC;AAC/C,6BAAA,IAAI,CAAC,IAAI,EAAE,KAAK;AAChB,6BAAA,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1B,oBAAA,CAAC;AACA,yBAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;AACxB,wBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;wBACtB,IAAI,CAAC,cAAc,EAAE;AACzB,oBAAA,CAAC;AACA,yBAAA,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,EAAA;AACtB,wBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;wBAC1B,IAAI,CAAC,cAAc,EAAE;AACzB,oBAAA,CAAC,CAAC;oBACN,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC/B,IAAI,CAAC,QAAQ,EAAE;gBACnB;AAEA,gBAAA,IAAI,OAAO,GAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC;AAClF,gBAAA,IAAI,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxE,IAAI,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;AACrG,gBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAE3G,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC1B,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI;AAClB,yBAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB;AAC7C,yBAAA,OAAO,CAAC,CAAC,CAAM,KAAI;AAChB,wBAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI;6BACtB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AACnG,oBAAA,CAAC;AACA,yBAAA,CAAC,CAAC,CAAC,CAAM,KAAI;wBACV,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACvC,oBAAA,CAAC;AACA,yBAAA,EAAE,CAAC,CAAC,CAAM,KAAI;AACX,wBAAA,OAAO,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACpH,oBAAA,CAAC;AACA,yBAAA,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC7B;AAEA,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AAChC,oBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjD,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;oBAChC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE1B,oBAAA,IAAI,aAAa,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrC,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM;AACzD,yBAAA,IAAI,CAAC,OAAO,EAAE,eAAe;AAC7B,yBAAA,IAAI,CAAC,IAAI,EAAE,EAAE;yBACb,KAAK,CAAC,aAAa;yBACnB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE;yBAChC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE;yBAChC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO;AAC9C,oBAAA,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;gBACjC;AACA,gBAAA,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AACpC,oBAAA,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,SAAS,GAAG,QAAQ,EAAE;gBACxG;;gBAIA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAa,EAAE,MAAc,KAAY;oBACpH,OAAO,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpF,CAAC,EAAE,CAAC,CAAC;AAEL,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;gBAClB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;AAE9C,gBAAuB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;gBAC/H,IAAI,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC7D,oBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AACtE,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE;;AAG7C,gBAAA,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,WAAW,CAAC;gBAEzD,IAAI,cAAc,GAAG,EAAE;;AAGvB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AAEvC,gBAAA,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,eAAe;AAChF,qBAAA,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC;gBAC3C,IAAI,IAAI,GAAG,IAAI;gBAEf,IAAI,eAAe,GAAG,CAAC;gBACvB,eAAe,CAAC,KAAK;qBAChB,MAAM,CAAC,GAAG;AACV,qBAAA,OAAO,CAAC,cAAc,EAAE,IAAI;qBAC5B,KAAK,CAAC,eAAe;AACrB,qBAAA,UAAU;AACV,qBAAA,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa;AAC/D,qBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;qBACf,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAI;oBAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,GAAG,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;AAC3F,gBAAA,CAAC;AACA,qBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAA;AAClB,oBAAA,IAAI,OAAO;oBACX,IAAI,UAAU,GAAG,IAAI;oBACrB,IAAI,SAAS,GAAe,EAAE;AAC9B,oBAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM;AACvB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACxE,wBAAA,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AACrF,oBAAA,CAAC,CAAC;AAEF,oBAAA,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC;AAEtE,oBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE;wBAChF,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACvB,wBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;wBAClC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AACzB,wBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;oBACpE;AAEA,oBAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1E,oBAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oBACxE,IAAI,eAAe,GAAG,eAAe;oBACrC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,MAAM,EAAE;wBACjD,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACjD;;;AAIA,oBAAA,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC5B,wBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC;wBAC/E,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;oBACrD;;AAGA,oBAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC3B,oBAAA,IAAI,YAAY,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC;AAC/D,oBAAA,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE;AAC1B,wBAAA,eAAe,GAAG,cAAc,CAAC,QAAQ,CAAC;AAC1C,wBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,YAAY;oBAC5C;yBAAO;wBACH,eAAe,GAAG,CAAC;AACnB,wBAAA,cAAc,CAAC,QAAQ,CAAC,GAAG,YAAY;oBAC3C;AAEA,oBAAA,IAAI,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC;oBAEjF,IAAI,YAAY,GAAG,IAAI;AACvB,oBAAA,IAAI,OAAO,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,QAAQ,CAAC,EAAE,OAAO,KAAK,UAAU,EAAE;AAC/E,wBAAA,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC;oBACxF;AAEA,oBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,EACjI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EACjF,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAClI,CAAC,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,CAAC;;oBAGzD,eAAe,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9E,gBAAA,CAAC,CAAC;AACN,gBAAA,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;;AAG/B,gBAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO;qBAC3B,CAAC,CAAC,UAAU,CAAM,EAAA;oBACf,QAAQ,CAAC,CAAC,UAAU,IAAI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxH,gBAAA,CAAC;qBACA,CAAC,CAAC,UAAU,CAAM,EAAA;AACf,oBAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACZ,wBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;oBAClG;AACA,oBAAA,OAAO,IAAI;AACf,gBAAA,CAAC;AACA,qBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;;gBAG1D,IAAI,gBAAgB,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;AAEhG,gBAAA,gBAAgB,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAA;oBAC5C,IAAI,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACrC,gBAAA,CAAC;AACI,qBAAA,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;oBAC9B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;wBAAE;AACzD,oBAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;oBAC7C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;AACtC,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;oBAC9B,IAAI,IAAI,CAAC,OAAO;AACZ,wBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAC3B,gBAAA,CAAC;AACA,qBAAA,EAAE,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;AACjC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC;AACxC,gBAAA,CAAC;AACA,qBAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;AAC3B,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;AAClC,gBAAA,CAAC,CAAC;AAEN,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;wBAChF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,uBAAuB,IAAI,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,2BAA2B;4BACpJ;AACJ,wBAAA,IAAI,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;wBACrE,KAAK,CAAC,cAAc,EAAE;AACtB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EACpF,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;AAChF,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY;yBAChC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM;yBACzE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC;AAE7E,oBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AACzC,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS;yBAC7B,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM;AACvE,yBAAA,IAAI,CAAC,QAAQ,EAAE,YAAY;AAC3B,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,IAAI,CAAC,CAAC;gBACzD;;AAGA,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACvB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,MAAK;wBACrC,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,OAAO;AAAE,4BAAA,OAAO,CAAC;wBAClE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,WAAW,CAAC,MAAM;AAAE,4BAAA,OAAO,EAAE;AAClE,wBAAA,OAAO,EAAE;AACb,oBAAA,CAAC;AACI,yBAAA,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO;yBAC5D,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,OAAO;yBAC5D,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,MAAM,CAAC;gBACpE;gBAEgB,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;AAE3F,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AAC9E,oBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC;gBACtE;gBAEA,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,qBAAqB,EAAE;AAC5B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACpG,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC;AAC9E,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;AAChE,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;YACrE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;AAExC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE;AAC3C,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;oBACtB,IAAI,CAAC,gBAAgB,EAAE;gBAC3B;AACJ,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC;QACxG,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;YAC7E,IAAI,CAAC,wBAAwB,EAAE;QACnC;QAEA,IAAI,CAAC,wBAAwB,EAAE;AAE/B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACnE,IAAI,CAAC,aAAa,EAAE;QACxB;AAEA,QAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAI;YACpD,IAAI,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE;AACvG,gBAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAC9C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,MAAK;YACjF,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAA;QAC/B,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ;AAC/B,QAAA,IAAI,SAAS,KAAK,SAAS,CAAC,OAAO,EAAE;AACjC,YAAA,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC;QACjC;AAAO,aAAA,IAAI,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE;AAC5C,YAAA,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC;QACxC;AAAO,aAAA,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM,EAAE;AACvC,YAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC;QACnC;AACA,QAAA,OAAO,IAAI;IACf;AACH;;;;;;;;;;;;;;;;;;;;;ECvhED,CAAC,UAAU,IAAI,EAAE,OAAO;AACxB,EAAA;;AAGA,MAAI,IAAI,MAAM;AACd,MAAqC;AACrC;AACA;AACA,UAAQ,IAAI,EAAE,MAAM,GAAG,OAAA,CAAQ,QAAQ,CAAC,CAAC,CAAA,CAAE,CAAC,OAAO,CAAC,EAAE,CAAA;AACtD,UAAQ,MAAA,CAAA,OAAA,GAAiB,OAAO,CAAC,MAAM,CAAC;MACxC;AAYA,EAAA,CAAC,CAACA,OAAI,EAAE,UAAU,MAAM;AACxB,EAAA;;AAGA;AACA;AACA;AACA,MAAI,IAAI,SAAS,GAAG,OAAO,MAAM,KAAK,UAAU;;AAEhD,MAAI,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,gBAAgB;;AAEjD,MAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ;;AAE9B,MAAI,GAAG,GAAG,MAAM,CAAC,UAAU;;MAEvB,QAAQ,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO;MAC5C;UACI,IAAI,iBAAiB,EAAE;cACnB,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC;AACvD,UAAA,CAAS,MAAM;cACH,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC9C,UAAA;MACA,CAAK;;MAED,WAAW,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO;MAC/C;UACI,IAAI,iBAAiB,EAAE;cACnB,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC;AAC1D,UAAA,CAAS,MAAM;cACH,EAAE,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC9C,UAAA;MACA,CAAK;;MAED,IAAI,GAAG,SAAS,GAAG;MACnB;AACJ,UAAQ,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;MACnE,CAAK;;AAEL,MAAI,QAAQ,GAAG,SAAS,EAAE,EAAE,EAAE;MAC1B;UACI,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE;MACxE,CAAK;;AAEL,MAAI,QAAQ,GAAG,SAAS,EAAE,EAAE,EAAE;MAC1B;UACI,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;AAC/B,cAAY,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE;AAC/E,UAAA;MACA,CAAK;;AAEL,MAAI,WAAW,GAAG,SAAS,EAAE,EAAE,EAAE;MAC7B;UACI,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;MACpF,CAAK;;MAED,OAAO,GAAG,SAAS,GAAG;MACtB;AACJ,UAAQ,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;MAClE,CAAK;;MAED,MAAM,GAAG,SAAS,GAAG;MACrB;UACI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;MAC1F,CAAK;;MAED,SAAS,GAAG,SAAS,IAAI;MACzB;AACJ,UAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AAC/B,UAAQ,OAAO,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;MACrC,CAAK;;MAED,UAAU,GAAG,SAAS,IAAI;MAC1B;AACJ;AACA,UAAQ,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC;MACrE,CAAK;;AAEL,MAAI,cAAc,GAAG,SAAS,IAAI,EAAE,KAAK;MACrC;AACJ,UAAQ,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;MAC9F,CAAK;;MAED,eAAe,GAAG,SAAS,IAAI;MAC/B;AACJ,UAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MAChD,CAAK;;AAEL,MAAI,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC;MAC3B;AACJ;UACQ,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE;MAC1C,CAAK;;AAEL,MAAI,MAAM,GAAG,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS;MACrC;UACI,IAAI,IAAI,EAAE,OAAO;AACzB,UAAQ,KAAK,IAAI,IAAI,IAAI,EAAE;AAC3B,cAAY,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,SAAS;cAChC,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE;kBACvG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;sBACpB,IAAI,SAAS,EAAE;AACnC,0BAAwB,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACjE,sBAAA;AACA,kBAAA;uBACqB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;sBAC1B,IAAI,SAAS,EAAE;AACnC,0BAAwB,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,sBAAA;AACA,kBAAA,CAAiB,MAAM;AACvB,sBAAoB,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;AAChE,kBAAA;AACA,cAAA,CAAa,MAAM,IAAI,SAAS,IAAI,CAAC,OAAO,EAAE;kBAC9B,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AACrC,cAAA;AACA,UAAA;AACA,UAAQ,OAAO,EAAE;MACjB,CAAK;;AAEL,MAAI,SAAS,GAAG,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI;MACxC;AACJ,UAAQ,IAAI,EAAE;;AAEd,UAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE;AAClC,cAAY,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;cACvC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC;AAChD,cAAY,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;AACjC,cAAY,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;AAChC,UAAA,CAAS,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE;AAC/C,cAAY,EAAE,GAAG,QAAQ,CAAC,iBAAiB,EAAE;AAC7C,cAAY,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;cACrB,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,EAAE,EAAE,CAAC;AAC9C,UAAA;MACA,CAAK;;AAEL,MAAI,cAAc,GAAG,SAAS,QAAQ,EAAE;AACxC,UAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE;AAChC,cAAY,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACnE,cAAY,QAAQ,CAAC,KAAK,IAAI,EAAE;AAChC,UAAA;AACA,UAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE;AACjC,cAAY,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACpE,cAAY,QAAQ,CAAC,KAAK,IAAI,EAAE;AAChC,UAAA;AACA,UAAQ,OAAO,QAAQ;MACvB,CAAK;;AAEL;AACA;AACA;AACA,MAAI,QAAQ,GAAG;;AAEf;UACQ,KAAK,EAAE,IAAI;;AAEnB;UACQ,KAAK,EAAE,SAAS;;AAExB;AACA;UACQ,QAAQ,EAAE,aAAa;;AAE/B;UACQ,UAAU,EAAE,IAAI;;AAExB;UACQ,MAAM,EAAE,YAAY;;AAE5B;AACA;UACQ,QAAQ,EAAE,IAAI;;AAEtB;UACQ,KAAK,EAAE,IAAI;;AAEnB;UACQ,WAAW,EAAE,IAAI;;AAEzB;UACQ,cAAc,EAAE,KAAK;;AAE7B;UACQ,QAAQ,EAAE,CAAC;;AAEnB;UACQ,YAAY,EAAE,KAAK;;AAE3B;UACQ,OAAO,EAAE,IAAI;AACrB;UACQ,OAAO,EAAE,IAAI;;AAErB;UACQ,SAAS,EAAE,EAAE;;AAErB;UACQ,cAAc,EAAE,KAAK;;AAE7B;UACQ,aAAa,EAAE,KAAK;;AAE5B;UACQ,OAAO,EAAE,CAAC;UACV,OAAO,EAAE,IAAI;UACb,QAAQ,EAAE,SAAS;UACnB,QAAQ,EAAE,SAAS;;UAEnB,UAAU,EAAE,IAAI;UAChB,QAAQ,EAAE,IAAI;;UAEd,KAAK,EAAE,KAAK;;AAEpB;UACQ,UAAU,EAAE,EAAE;;AAEtB;UACQ,kBAAkB,EAAE,KAAK;;AAEjC;UACQ,+BAA+B,EAAE,KAAK;;AAE9C;UACQ,0CAA0C,EAAE,KAAK;;AAEzD;UACQ,cAAc,EAAE,CAAC;;AAEzB;AACA;UACQ,YAAY,EAAE,MAAM;;AAE5B;UACQ,SAAS,EAAE,SAAS;;AAE5B;UACQ,iBAAiB,GAAG,IAAI;;AAEhC;AACA,UAAQ,IAAI,EAAE;cACF,aAAa,GAAG,gBAAgB;cAChC,SAAS,OAAO,YAAY;cAC5B,MAAM,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;AAC3I,cAAY,QAAQ,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;AACpG,cAAY,aAAa,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;WAC7D;;AAET;UACQ,KAAK,EAAE,IAAI;;AAEnB;UACQ,MAAM,EAAE,EAAE;;AAElB;UACQ,QAAQ,EAAE,IAAI;UACd,MAAM,EAAE,IAAI;UACZ,OAAO,EAAE,IAAI;UACb,MAAM,EAAE,IAAI;;AAEpB;AACA,UAAQ,aAAa,EAAE;OAClB;;;AAGL;AACA;AACA;AACA,MAAI,aAAa,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE,IAAI;MACxC;AACJ,UAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ;AAC5B,UAAQ,OAAO,GAAG,IAAI,CAAC,EAAE;cACb,GAAG,IAAI,CAAC;AACpB,UAAA;AACA,UAAQ,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;MAC5E,CAAK;;MAED,SAAS,GAAG,SAAS,IAAI;MACzB;UACI,IAAI,GAAG,GAAG,EAAE;UACZ,IAAI,YAAY,GAAG,OAAO;AAClC,UAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,cAAY,IAAI,IAAI,CAAC,+BAA+B,EAAE;AACtD,kBAAgB,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC;;AAEpD,kBAAgB,GAAG,CAAC,IAAI,CAAC,0CAA0C,EAAE;AACrE,sBAAoB,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACrD,kBAAA;;AAEA,cAAA,CAAa,MAAM;AACnB,kBAAgB,OAAO,4BAA4B;AACnD,cAAA;AACA,UAAA;AACA,UAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,cAAY,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;AACnC,UAAA;AACA,UAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;AAC1B,cAAY,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AAChC,UAAA;AACA,UAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,cAAY,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;cACvB,YAAY,GAAG,MAAM;AACjC,UAAA;AACA,UAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,cAAY,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACjC,UAAA;AACA,UAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,cAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;AAClC,UAAA;AACA,UAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,cAAY,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;AACrC,UAAA;AACA,UAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,cAAY,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;AACnC,UAAA;UACQ,OAAO,gBAAgB,GAAG,IAAI,CAAC,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,mBAAmB,GAAG,YAAY,GAAG,IAAI;AACpH,mBAAiB,mEAAmE;AACpF,sBAAoB,kBAAkB,GAAG,IAAI,CAAC,IAAI,GAAG,qBAAqB,GAAG,IAAI,CAAC,KAAK,GAAG,mBAAmB,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI;0BACvG,IAAI,CAAC,GAAG;AAChC,mBAAiB,WAAW;AAC5B,iBAAe,OAAO;MACtB,CAAK;;MAED,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpC;UACQ,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtC,cAAY,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAClG,UAAQ,OAAO,wBAAwB,GAAG,OAAO,GAAG,OAAO;MAC3D,CAAK;;MAED,SAAS,GAAG,SAAS,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa;MAC9D;AACJ,UAAQ,OAAO,qBAAqB,IAAI,aAAa,GAAG,kBAAkB,GAAG,EAAE,CAAC,IAAI,aAAa,GAAG,cAAc,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO;MACpL,CAAK;;MAED,UAAU,GAAG,SAAS,IAAI;MAC1B;UACI,OAAO,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU;MACrD,CAAK;;MAED,UAAU,GAAG,SAAS,IAAI;MAC1B;AACJ,UAAQ,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE;AACvB,UAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC,cAAY,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AACjC,UAAA;UACQ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;cACpB,GAAG,CAAC,IAAI,CAAC,+BAA+B,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC;AACrI,UAAA;UACQ,OAAO,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,eAAe;MAC5F,CAAK;;AAEL,MAAI,WAAW,GAAG,SAAS,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM;MAChE;AACJ,UAAQ,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG;AACrB,cAAY,IAAI,GAAG,QAAQ,CAAC,EAAE;AAC9B,cAAY,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO;AAC7C,cAAY,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO;AAC7C,cAAY,IAAI,GAAG,WAAW,GAAG,MAAM,GAAG,uBAAuB;AACjE,cAAY,SAAS;AACrB,cAAY,QAAQ;cACR,IAAI,GAAG,IAAI;cACX,IAAI,GAAG,IAAI;;AAEvB,UAAQ,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;cAC/B,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;AACtF,mBAAiB,CAAC,KAAK,KAAK,GAAG,sBAAsB,EAAE,EAAE,CAAC;mBACzC,CAAC,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,MAAM,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,qBAAqB,GAAG,EAAE,CAAC,GAAG,GAAG;kBACzG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AAClD,UAAA;;UAEQ,SAAS,GAAG,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,wFAAwF,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,iBAAiB;;AAEtM,UAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACrC,cAAY,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;cACrB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AACrC,UAAA,CAAS,MAAM;AACf,cAAY,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS;cACzB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS;AACzC,UAAA;;AAEA,UAAQ,KAAK,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;AACxD,cAAY,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;kBACnB,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,sBAAsB,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC;AAC3H,cAAA;AACA,UAAA;AACA,UAAQ,QAAQ,GAAG,0BAA0B,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,sFAAsF,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,iBAAiB;;AAElM,UAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACrC,cAAY,IAAI,IAAI,QAAQ,GAAG,SAAS;AACxC,UAAA,CAAS,MAAM;AACf,cAAY,IAAI,IAAI,SAAS,GAAG,QAAQ;AACxC,UAAA;;AAEA,UAAQ,IAAI,SAAS,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE;cACtD,IAAI,GAAG,KAAK;AACxB,UAAA;;AAEA,UAAQ,IAAI,SAAS,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE;cACvD,IAAI,GAAG,KAAK;AACxB,UAAA;;AAEA,UAAQ,IAAI,CAAC,KAAK,CAAC,EAAE;AACrB,cAAY,IAAI,IAAI,wCAAwC,IAAI,IAAI,GAAG,EAAE,GAAG,cAAc,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,WAAW;AACxJ,UAAA;UACQ,IAAI,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG;AACrD,cAAY,IAAI,IAAI,wCAAwC,IAAI,IAAI,GAAG,EAAE,GAAG,cAAc,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,WAAW;AACpJ,UAAA;;UAEQ,OAAO,IAAI,IAAI,QAAQ;MAC/B,CAAK;;AAEL,MAAI,WAAW,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE,MAAM;MACzC;AACJ,UAAQ,OAAO,yFAAyF,GAAG,MAAM,GAAG,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU;MAC3K,CAAK;;;AAGL;AACA;AACA;MACI,OAAO,GAAG,SAAS,OAAO;MAC1B;UACI,IAAI,IAAI,GAAG,IAAI;AACvB,cAAY,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;;AAEvC,UAAQ,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;UAC9B;AACR,cAAY,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;kBACV;AAChB,cAAA;AACA,cAAY,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK;cACrB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU;cACrC,IAAI,CAAC,MAAM,EAAE;kBACT;AAChB,cAAA;;cAEY,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;kBAClC,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE;AACrI,sBAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;AAC/J,sBAAoB,IAAI,IAAI,CAAC,KAAK,EAAE;0BACZ,GAAG,CAAC,WAAW;8BACX,IAAI,CAAC,IAAI,EAAE;8BACX,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,EAAE;AACtE,kCAAgC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjD,8BAAA;0BACA,CAAyB,EAAE,GAAG,CAAC;AAC/B,sBAAA;AACA,kBAAA;AACA,uBAAqB,IAAI,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;sBACpC,IAAI,CAAC,SAAS,EAAE;AACpC,kBAAA;AACA,uBAAqB,IAAI,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;sBACpC,IAAI,CAAC,SAAS,EAAE;AACpC,kBAAA;AACA,cAAA;cACY,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;AAClD;AACA,kBAAgB,IAAI,CAAC,CAAC,cAAc,EAAE;sBAClB,CAAC,CAAC,cAAc,EAAE;AACtC,kBAAA,CAAiB,MAAM;AACvB,sBAAoB,CAAC,CAAC,WAAW,GAAG,KAAK;AACzC,sBAAoB,OAAO,KAAK;AAChC,kBAAA;AACA,cAAA,CAAa,MAAM;AACnB,kBAAgB,IAAI,CAAC,EAAE,GAAG,IAAI;AAC9B,cAAA;UACA,CAAS;;AAET,UAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;UAC3B;AACR,cAAY,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK;cACrB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU;cACrC,IAAI,CAAC,MAAM,EAAE;kBACT;AAChB,cAAA;AACA,cAAY,IAAI,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE;AACvD,kBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5C,cAAA;AACA,mBAAiB,IAAI,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE;AAC3D,kBAAgB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AAC3C,cAAA;UACA,CAAS;;AAET,UAAQ,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;UAC9B;AACR,cAAY,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK;AACjC;AACA,cAAY,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;;kBAE1D,OAAO,CAAC,CAAC,OAAO;AAChC,sBAAoB,KAAK,EAAE;AAC3B,sBAAoB,KAAK,EAAE;AAC3B,0BAAwB,IAAI,IAAI,CAAC,KAAK,EAAE;AACxC,8BAA4B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAC7C,0BAAA;0BACwB;AACxB,sBAAoB,KAAK,EAAE;0BACH,CAAC,CAAC,cAAc,EAAE;AAC1C,0BAAwB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;0BAC9B;AACxB,sBAAoB,KAAK,EAAE;AAC3B,0BAAwB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;0BAC9B;AACxB,sBAAoB,KAAK,EAAE;AAC3B,0BAAwB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;0BACzB;AACxB,sBAAoB,KAAK,EAAE;AAC3B,0BAAwB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;0BACzB;AACxB;AACA,cAAA;UACA,CAAS;;AAET,UAAQ,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;UAChC;AACR,cAAY,IAAI,IAAI;;AAEpB,cAAY,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE;kBACpB;AAChB,cAAA;AACA,cAAY,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,kBAAgB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;cAChE,CAAa,MAAM,IAAI,SAAS,EAAE;AAClC,kBAAgB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;AAC/E,kBAAgB,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI;AACtE,cAAA;mBACiB;AACjB,kBAAgB,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7D,cAAA;AACA;AACA;AACA;AACA;AACA;AACA;UACA,CAAS;;UAED,IAAI,CAAC,aAAa,GAAG;UACrB;cACI,IAAI,CAAC,IAAI,EAAE;UACvB,CAAS;;UAED,IAAI,CAAC,aAAa,GAAG;UACrB;cACI,IAAI,CAAC,IAAI,EAAE;UACvB,CAAS;;UAED,IAAI,CAAC,YAAY,GAAG;UACpB;AACR;AACA,cAAY,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa;AAC5C,cAAY,GAAG;AACf,kBAAgB,IAAI,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE;sBAC9B;AACpB,kBAAA;AACA,cAAA;AACA,sBAAoB,GAAG,GAAG,GAAG,CAAC,UAAU;;AAExC,cAAY,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;AAC1B,kBAAgB,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,WAAW;sBACrB,IAAI,CAAC,IAAI,EAAE;kBAC/B,CAAiB,EAAE,EAAE,CAAC;AACtB,cAAA;AACA,cAAY,IAAI,CAAC,EAAE,GAAG,KAAK;UAC3B,CAAS;;AAET,UAAQ,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;UAC1B;AACR,cAAY,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK;cACrB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU;kBACjC,GAAG,GAAG,MAAM;cAChB,IAAI,CAAC,MAAM,EAAE;kBACT;AAChB,cAAA;cACY,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;AACvE,kBAAgB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtC,sBAAoB,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC;sBAC1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAC9D,kBAAA;AACA,cAAA;AACA,cAAY,GAAG;AACf,kBAAgB,IAAI,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE;sBACtD;AACpB,kBAAA;AACA,cAAA;AACA,sBAAoB,GAAG,GAAG,GAAG,CAAC,UAAU;AACxC,cAAY,IAAI,IAAI,CAAC,EAAE,IAAI,MAAM,KAAK,IAAI,CAAC,OAAO,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE;kBAC5D,IAAI,CAAC,IAAI,EAAE;AAC3B,cAAA;UACA,CAAS;;UAED,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/C,UAAQ,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,aAAa,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;;AAEhH,UAAQ,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;AAC/D,UAAQ,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;UACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;;AAEnD,UAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;cACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;AAC5D,UAAA;;AAEA,UAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AACxB,cAAY,IAAI,IAAI,CAAC,SAAS,EAAE;kBAChB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACnD,cAAA,CAAa,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;kBACnB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,cAAA,CAAa,MAAM;AACnB,kBAAgB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AACnF,cAAA;cACY,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;;AAE/D,cAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;kBACnB,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACnD,sBAAoB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;AACrF,kBAAA,CAAiB,MAAM;AACvB,sBAAoB,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7E,kBAAA;AACA,kBAAgB,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1C,cAAA;AACA,UAAA;;AAEA,UAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW;;AAEtC,UAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;AAC7B,cAAY,IAAI,IAAI,CAAC,cAAc,EAAE;AACrC,kBAAgB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;AAC3C,cAAA,CAAa,MAAM;AACnB,kBAAgB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACtC,cAAA;AACA,UAAA,CAAS,MAAM;AACf,cAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;AACrC,UAAA;;AAEA,UAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;cACZ,IAAI,CAAC,IAAI,EAAE;AACvB,cAAY,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,WAAW;cAChC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;cACnD,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;cACnD,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;AAC7D,UAAA,CAAS,MAAM;cACH,IAAI,CAAC,IAAI,EAAE;AACvB,UAAA;MACA,CAAK;;;AAGL;AACA;AACA;MACI,OAAO,CAAC,SAAS,GAAG;;;AAGxB;AACA;AACA;UACQ,MAAM,EAAE,SAAS,OAAO;UACxB;AACR,cAAY,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;kBACV,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC;AACpD,cAAA;;AAEA,cAAY,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;;cAEzC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK;;AAErC,cAAY,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI;;cAEpE,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;;cAE/E,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;;cAEjF,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK;;cAElF,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe;;AAEzD,cAAY,IAAI,CAAC,YAAY,GAAG,CAAC,OAAO,IAAI,CAAC,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI;;AAEpG,cAAY,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC;cAChD,IAAI,CAAC,cAAc,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;;cAEvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACvC,kBAAgB,IAAI,CAAC,OAAO,GAAG,KAAK;AACpC,cAAA;cACY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACvC,kBAAgB,IAAI,CAAC,OAAO,GAAG,KAAK;AACpC,cAAA;AACA,cAAY,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;kBAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK;AACnD,cAAA;AACA,cAAY,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,kBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,cAAA;AACA,cAAY,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,kBAAgB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,cAAA;;AAEA,cAAY,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;kBACzB,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;AAC5D,kBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ;AAC/E,kBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ;AAC/E,cAAA,CAAa,MAAM;kBACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS;AAC7F,kBAAgB,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE;AAC1C,sBAAoB,IAAI,CAAC,SAAS,GAAG,GAAG;AACxC,kBAAA;AACA,cAAA;;AAEA,cAAY,OAAO,IAAI;UACvB,CAAS;;AAET;AACA;AACA;UACQ,QAAQ,EAAE,SAAS,MAAM;UACzB;cACI,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM;cACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAClC,kBAAgB,OAAO,EAAE;AACzB,cAAA;AACA,cAAY,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;AAClC,gBAAc,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC;AACtD,cAAA;cACY,IAAI,SAAS,EAAE;gBACb,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACnD,cAAA;AACA,cAAY,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;UACzC,CAAS;;AAET;AACA;AACA;AACA,UAAQ,SAAS,EAAE;UACX;cACI,OAAO,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI;UACrD,CAAS;;AAET;AACA;AACA;AACA,UAAQ,SAAS,EAAE,SAAS,IAAI,EAAE,eAAe;UACzC;cACI,IAAI,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;kBACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC;AAC5D,cAAA;UACA,CAAS;;AAET;AACA;AACA;AACA,UAAQ,OAAO,EAAE;UACT;AACR,cAAY,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;UACvE,CAAS;;AAET;AACA;AACA;AACA,UAAQ,OAAO,EAAE,SAAS,IAAI,EAAE,eAAe;UACvC;cACI,IAAI,CAAC,IAAI,EAAE;AACvB,kBAAgB,IAAI,CAAC,EAAE,GAAG,IAAI;;AAE9B,kBAAgB,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;sBACf,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;AAC5C,sBAAoB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzE,kBAAA;;AAEA,kBAAgB,OAAO,IAAI,CAAC,IAAI,EAAE;AAClC,cAAA;AACA,cAAY,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;kBAC1B,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,cAAA;AACA,cAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;kBACf;AAChB,cAAA;;AAEA,cAAY,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO;AACrC,kBAAgB,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO;;cAEzB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,EAAE;kBAC3B,IAAI,GAAG,GAAG;cAC1B,CAAa,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,EAAE;kBAClC,IAAI,GAAG,GAAG;AAC1B,cAAA;;cAEY,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC9C,cAAY,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AACpC,cAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;;AAElC,cAAY,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;kBACf,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AACrD,kBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrE,cAAA;AACA,cAAY,IAAI,CAAC,eAAe,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,KAAK,UAAU,EAAE;AAC5E,kBAAgB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAC3D,cAAA;UACA,CAAS;;AAET;AACA;AACA;UACQ,QAAQ,EAAE,SAAS,IAAI;UACvB;cACI,IAAI,WAAW,GAAG,IAAI;;AAElC,cAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;kBACf;AAChB,cAAA;;AAEA,cAAY,IAAI,IAAI,CAAC,SAAS,EAAE;kBAChB,IAAI,gBAAgB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACnG,sBAAoB,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC9I,sBAAoB,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE;AAChD;kBACgB,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;kBACtD,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACpE,kBAAgB,WAAW,IAAI,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,eAAe,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC;AACnH,cAAA;;cAEY,IAAI,WAAW,EAAE;AAC7B,kBAAgB,IAAI,CAAC,SAAS,GAAG,CAAC;AAClC,sBAAoB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC1C,sBAAoB,IAAI,EAAE,IAAI,CAAC,WAAW;AAC1C,mBAAiB,CAAC;kBACF,IAAI,IAAI,CAAC,EAAE,CAAC,YAAY,KAAK,OAAO,EAAE;AACtD,sBAAoB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc;AACzE,kBAAA;AACA,cAAA;;cAEY,IAAI,CAAC,eAAe,EAAE;UAClC,CAAS;;AAET,UAAQ,UAAU,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE;;cAE7B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE;AAClD,cAAY,IAAI,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI;;AAEzD,cAAY,IAAI,MAAM;;AAEtB,cAAY,IAAI,IAAI,KAAK,KAAK,EAAE;kBAChB,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC;AAC7D,cAAA,CAAa,MAAM,IAAI,IAAI,KAAK,UAAU,EAAE;kBAC5B,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC;AAC7D,cAAA;;AAEA,cAAY,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;UAChC,CAAS;;UAED,eAAe,EAAE,WAAW;AACpC,cAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjE,cAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE;kBAC7C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;sBAC/B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;sBAClC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5C,mBAAiB,CAAC;AAClB,cAAA;cACY,IAAI,CAAC,IAAI,EAAE;UACvB,CAAS;;AAET,UAAQ,SAAS,EAAE;UACX;AACR,cAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;UACrC,CAAS;;AAET;AACA;AACA;UACQ,SAAS,EAAE,SAAS,KAAK;UACzB;AACR,cAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC/B,kBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;kBAC7C,IAAI,CAAC,eAAe,EAAE;AACtC,cAAA;UACA,CAAS;;AAET,UAAQ,SAAS,EAAE;UACX;cACI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;cACzB,IAAI,CAAC,eAAe,EAAE;UAClC,CAAS;;AAET,UAAQ,SAAS,EAAE;UACX;cACI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;cACzB,IAAI,CAAC,eAAe,EAAE;UAClC,CAAS;;AAET;AACA;AACA;UACQ,QAAQ,EAAE,SAAS,IAAI;UACvB;AACR,cAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC9B,kBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;kBAC3C,IAAI,CAAC,eAAe,EAAE;AACtC,cAAA;UACA,CAAS;;AAET;AACA;AACA;UACQ,UAAU,EAAE,SAAS,KAAK;UAC1B;AACR,cAAY,GAAG,KAAK,YAAY,IAAI,EAAE;kBACtB,eAAe,CAAC,KAAK,CAAC;AACtC,kBAAgB,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK;kBACvB,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE;kBACtC,IAAI,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;AACnD,cAAA,CAAa,MAAM;kBACH,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO;kBAClC,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;kBACnC,IAAI,CAAC,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;kBACpC,IAAI,CAAC,EAAE,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU;AACxD,cAAA;;cAEY,IAAI,CAAC,IAAI,EAAE;UACvB,CAAS;;AAET;AACA;AACA;UACQ,UAAU,EAAE,SAAS,KAAK;UAC1B;AACR,cAAY,GAAG,KAAK,YAAY,IAAI,EAAE;kBACtB,eAAe,CAAC,KAAK,CAAC;AACtC,kBAAgB,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK;kBACvB,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE;kBACrC,IAAI,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE;AACnD,cAAA,CAAa,MAAM;kBACH,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO;kBAClC,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO;kBAClC,IAAI,CAAC,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;kBACpC,IAAI,CAAC,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AACpD,cAAA;;cAEY,IAAI,CAAC,IAAI,EAAE;UACvB,CAAS;;UAED,aAAa,EAAE,SAAS,KAAK;UAC7B;AACR,cAAY,IAAI,CAAC,EAAE,CAAC,UAAU,GAAG,KAAK;UACtC,CAAS;;UAED,WAAW,EAAE,SAAS,KAAK;UAC3B;AACR,cAAY,IAAI,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK;UACpC,CAAS;;AAET;AACA;AACA;UACQ,IAAI,EAAE,SAAS,KAAK;UACpB;cACI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE;kBACpB;AAChB,cAAA;AACA,cAAY,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE;AAC9B,kBAAgB,OAAO,GAAG,IAAI,CAAC,OAAO;AACtC,kBAAgB,OAAO,GAAG,IAAI,CAAC,OAAO;AACtC,kBAAgB,QAAQ,GAAG,IAAI,CAAC,QAAQ;AACxC,kBAAgB,QAAQ,GAAG,IAAI,CAAC,QAAQ;kBACxB,IAAI,GAAG,EAAE;AACzB,kBAAgB,MAAM;;AAEtB,cAAY,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE;AACpC,kBAAgB,IAAI,CAAC,EAAE,GAAG,OAAO;AACjC,kBAAgB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE;AAC5D,sBAAoB,IAAI,CAAC,EAAE,GAAG,QAAQ;AACtC,kBAAA;AACA,cAAA;AACA,cAAY,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE;AACpC,kBAAgB,IAAI,CAAC,EAAE,GAAG,OAAO;AACjC,kBAAgB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE;AAC5D,sBAAoB,IAAI,CAAC,EAAE,GAAG,QAAQ;AACtC,kBAAA;AACA,cAAA;;AAEA,cAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE;kBAC1C,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACxG,kBAAgB,IAAI,IAAI,2BAA2B,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,QAAQ;AAC7O,cAAA;;AAEA,cAAY,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI;;AAEpC,cAAY,IAAI,IAAI,CAAC,KAAK,EAAE;kBACZ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;sBAC7B,GAAG,CAAC,WAAW;AACnC,0BAAwB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;sBAC5C,CAAqB,EAAE,CAAC,CAAC;AACzB,kBAAA;AACA,cAAA;;cAEY,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,UAAU,EAAE;AACtD,kBAAgB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACpC,cAAA;;AAEA,cAAY,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B;kBACgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,mCAAmC,CAAC;AAC1F,cAAA;UACA,CAAS;;AAET,UAAQ,cAAc,EAAE;UAChB;AACR,cAAY,IAAI,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU;;AAE1G,cAAY,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;;cAEvB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;;AAE/C,cAAY,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO;cACvB,GAAG,GAAG,KAAK;AACvB,cAAY,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW;AACvC,cAAY,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY;cAC7B,aAAa,GAAG,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW;cACzE,cAAc,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY;AACxF,cAAY,SAAS,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;;AAE3G,cAAY,IAAI,OAAO,KAAK,CAAC,qBAAqB,KAAK,UAAU,EAAE;AACnE,kBAAgB,UAAU,GAAG,KAAK,CAAC,qBAAqB,EAAE;kBAC1C,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW;kBAC3C,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW;AAC5D,cAAA,CAAa,MAAM;AACnB,kBAAgB,IAAI,GAAG,GAAG,CAAC,UAAU;kBACrB,GAAG,IAAI,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,YAAY;AACvD,kBAAgB,OAAO,GAAG,GAAG,GAAG,CAAC,YAAY,GAAG;AAChD,sBAAoB,IAAI,IAAI,GAAG,CAAC,UAAU;AAC1C,sBAAoB,GAAG,KAAK,GAAG,CAAC,SAAS;AACzC,kBAAA;AACA,cAAA;;AAEA;AACA,cAAY,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,IAAI,GAAG,KAAK,GAAG,aAAa;AACnE;AACA,sBAAoB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;AAC1D,sBAAoB,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG;AACvD;gBACc;kBACE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,WAAW;AACvD,cAAA;AACA,cAAY,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,GAAG,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS;AAChF;AACA,sBAAoB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;AACxD,sBAAoB,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY,GAAG;AACxD;gBACc;kBACE,GAAG,GAAG,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY;AACvD,cAAA;;cAEY,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI;cAChC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI;UAC1C,CAAS;;AAET;AACA;AACA;AACA,UAAQ,MAAM,EAAE,SAAS,IAAI,EAAE,KAAK,EAAE,MAAM;UACpC;AACR,cAAY,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE;AAChC,kBAAgB,GAAG,MAAM,IAAI,IAAI,EAAE;AACnC,kBAAgB,IAAI,KAAK,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;AACpD,kBAAgB,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;kBAC1C,IAAI,KAAK,EAAE;kBACX,GAAG,MAAM,EAAE;cACf,eAAe,CAAC,GAAG,CAAC;AAChC,cAAY,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;AACnC,kBAAgB,MAAM,IAAI,IAAI,CAAC,QAAQ;AACvC,kBAAgB,IAAI,MAAM,GAAG,CAAC,EAAE;sBACZ,MAAM,IAAI,CAAC;AAC/B,kBAAA;AACA,cAAA;cACY,IAAI,aAAa,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;kBAC5C,SAAS,GAAG,KAAK,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;kBACxC,mBAAmB,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI;kBACnD,eAAe,GAAG,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI;AAChE,kBAAgB,mBAAmB,GAAG,cAAc,CAAC,mBAAmB,EAAE,aAAa,CAAC;AACxF,cAAY,IAAI,KAAK,GAAG,IAAI,GAAG,MAAM;kBACrB,KAAK,GAAG,KAAK;AAC7B,cAAY,MAAM,KAAK,GAAG,CAAC,EAAE;kBACb,KAAK,IAAI,CAAC;AAC1B,cAAA;AACA,cAAY,KAAK,IAAI,CAAC,GAAG,KAAK;cAClB,IAAI,cAAc,GAAG,KAAK;AACtC,cAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;cACrC;AACZ,kBAAgB,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACjE,sBAAoB,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK;AACrF,sBAAoB,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;AACpD,sBAAoB,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,GAAG,KAAK;sBACxE,OAAO,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC;AAChE,sBAAoB,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;sBAC5B,WAAW,GAAG,KAAK;sBACnB,UAAU,GAAG,IAAI;AACrC,sBAAoB,YAAY,GAAG,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AACxF,sBAAoB,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;sBAC9D,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ;sBAC5F,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO;oCAClC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;oCACnC,IAAI,CAAC,eAAe,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;oCACvC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;kBAE9D,IAAI,OAAO,EAAE;AAC7B,sBAAoB,IAAI,CAAC,GAAG,MAAM,EAAE;AACpC,0BAAwB,SAAS,GAAG,mBAAmB,GAAG,SAAS;0BAC3C,WAAW,GAAG,aAAa;0BAC3B,UAAU,GAAG,mBAAmB;AACxD,sBAAA,CAAqB,MAAM;AAC3B,0BAAwB,SAAS,GAAG,SAAS,GAAG,IAAI;0BAC5B,WAAW,GAAG,SAAS;0BACvB,UAAU,GAAG,eAAe;AACpD,sBAAA;AACA,kBAAA;;kBAEgB,IAAI,SAAS,GAAG;0BACR,GAAG,EAAE,SAAS;0BACd,KAAK,EAAE,WAAW;0BAClB,IAAI,EAAE,UAAU;0BAChB,QAAQ,EAAE,QAAQ;0BAClB,UAAU,EAAE,UAAU;0BACtB,OAAO,EAAE,OAAO;0BAChB,UAAU,EAAE,UAAU;0BACtB,OAAO,EAAE,OAAO;0BAChB,YAAY,EAAE,YAAY;0BAC1B,UAAU,EAAE,UAAU;0BACtB,SAAS,EAAE,SAAS;AAC5C,0BAAwB,+BAA+B,EAAE,IAAI,CAAC,+BAA+B;0BACrE,0CAA0C,EAAE,IAAI,CAAC;uBACpD;;AAErB,kBAAgB,IAAI,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE;sBAClC,cAAc,GAAG,IAAI;AACzC,kBAAA;;kBAEgB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;;AAE9C,kBAAgB,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;AAC/B,sBAAoB,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7C,0BAAwB,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACxE,sBAAA;AACA,sBAAoB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;sBACzE,GAAG,GAAG,EAAE;sBACR,CAAC,GAAG,CAAC;sBACL,cAAc,GAAG,KAAK;AAC1C,kBAAA;AACA,cAAA;cACY,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;UAClD,CAAS;;AAET,UAAQ,SAAS,EAAE;UACX;cACI,OAAO,IAAI,CAAC,EAAE;UAC1B,CAAS;;AAET,UAAQ,IAAI,EAAE;UACN;AACR,cAAY,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACnC,kBAAgB,IAAI,CAAC,EAAE,GAAG,IAAI;kBACd,IAAI,CAAC,IAAI,EAAE;AAC3B,kBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC;AACjD,kBAAgB,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;sBACf,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;sBAC1C,IAAI,CAAC,cAAc,EAAE;AACzC,kBAAA;kBACgB,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,UAAU,EAAE;sBACtC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C,kBAAA;AACA,cAAA;UACA,CAAS;;AAET,UAAQ,IAAI,EAAE;UACN;AACR,cAAY,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAC3B,cAAY,IAAI,CAAC,KAAK,KAAK,EAAE;AAC7B,kBAAgB,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;sBACf,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;AACjE,kBAAA;kBACgB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;kBAClC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM;kBAC3B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM;AAC1C,kBAAgB,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC;AAC9C,kBAAgB,IAAI,CAAC,EAAE,GAAG,KAAK;AAC/B,kBAAgB,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,KAAK,UAAU,EAAE;sBAC1D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9C,kBAAA;AACA,cAAA;UACA,CAAS;;AAET;AACA;AACA;AACA,UAAQ,OAAO,EAAE;UACT;AACR,cAAY,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE;;cAElB,IAAI,CAAC,IAAI,EAAE;AACvB,cAAY,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;AACtE,cAAY,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;cACzD,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAC1D,cAAY,IAAI,IAAI,CAAC,aAAa,EAAE;kBACpB,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;AACnE,cAAA;AACA,cAAY,IAAI,IAAI,CAAC,KAAK,EAAE;kBACZ,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;AACtE,kBAAgB,IAAI,IAAI,CAAC,KAAK,EAAE;sBACZ,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;sBACtD,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;sBACtD,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;AACxE,kBAAA;AACA,cAAA;AACA,cAAY,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;kBACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACvD,cAAA;AACA,UAAA;;OAEK;;AAEL,MAAI,OAAO,OAAO;AAClB,EAAA,CAAC,CAAC,EAAA;;;;;;;;ACptCF,MAAM,cAAe,SAAQ,cAAc,CAAA;AAGvC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QAFf,IAAA,CAAA,SAAS,GAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;IAGnlE;IAEQ,aAAa,GAAA;QACjB,IAAI,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAI;AACjD,YAAA,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,KAAK,CAAC;AACxD,QAAA,CAAC,CAAC;QAEF,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC5B,IAAI,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE;YACvE,IAAI,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE;AACvE,YAAA,IAAI,OAAO,GAAG,OAAO,EAAE;gBACnB,OAAO,EAAE;YACb;AACA,YAAA,IAAI,OAAO,GAAG,OAAO,EAAE;AACnB,gBAAA,OAAO,CAAC;YACZ;AACA,YAAA,OAAO,CAAC;AACZ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;IAC/D;AAEO,IAAA,MAAM,CAAC,gBAAgB,EAAE,eAAA,GAA0B,IAAI,EAAA;QAC1D,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC3C,aAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QAGxC,IAAI,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ;AACrD,aAAA,IAAI,CAAC,OAAO,EAAE,+BAA+B,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,IAAI,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,QAAQ;AAC7C,aAAA,IAAI,CAAC,IAAI,CAAC,SAAS;AACnB,aAAA,KAAK;aACL,MAAM,CAAC,QAAQ;aACf,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;aACpB,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,QAAA,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAA;YACtC,IAAI,QAAQ,GAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YACtE,gBAAgB,CAAC,QAAQ,CAAC;AAC9B,QAAA,CAAC,CAAC;QAEF,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AACpD,QAAA,IAAI,eAAe,IAAI,IAAI,EAAE;AACzB,YAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;QACtE;QACA;IACJ;AAEH;;ACnDD,MAAM,cAAe,SAAQ,cAAc,CAAA;AA2CvC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QA9Bf,IAAA,CAAA,OAAO,GAAY,IAAI;QAMvB,IAAA,CAAA,kBAAkB,GAAY,IAAI;AASlC,QAAA,IAAA,CAAA,cAAc,GAAe;AACjC,YAAA,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAChC,YAAA,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAChC,YAAA,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YAC7B,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACpC,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACpC,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACtC,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACtC,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACxC,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YAC1C,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;SAC5C;QA2DO,IAAA,CAAA,cAAc,GAAG,MAAK;AAC1B,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAClC,QAAA,CAAC;IAxDD;;IAGQ,mBAAmB,GAAA;QACvB,IAAI,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,cAAc,KAAI;AAClE,YAAA,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC,CAAC,CAAC;AACjE,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;YACpE,OAAO,EAAE;QACb;AACA,QAAA,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC;AAEO,IAAA,gBAAgB,CAAC,eAAe,EAAA;QACnC,IAAI,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,cAAc,KAAI;YAClE,QAAQ,eAAe,KAAK,cAAc,CAAC,CAAC,CAAC;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,IAAI;QACf;AACA,QAAA,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC;AAEQ,IAAA,qBAAqB,CAAC,MAAM,EAAA;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,4BAA4B,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7H;AAEQ,IAAA,YAAY,CAAC,SAAc,EAAA;AAC/B,QAAA,IAAI,cAAc,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;AAC/C,QAAA,cAAc,CAAC,OAAO,CAAC,CAAC,SAAiB,KAAI;AACzC,YAAA,IAAI,gBAAgB,GAAG,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACxE,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;YAChE,IAAI,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI;AACzG,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAE/B,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,yBAAyB,EAAE;QAEhC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEvC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AACnF,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAEnF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAE1B,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;AACvE,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;AAC9C,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC;IACnD;IAMO,MAAM,CAAC,eAAoB,EAAE,EAAE,SAAiB,EAAE,SAAiB,EACtE,UAAA,GAAqB,IAAI,EAAE,QAAA,GAAmB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAA;AACjF,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,YAAY,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE;AAClE,YAAA,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,MAAM;QACzC;AAEA,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAA,QAAQ,GAAG,IAAI,CAAC,SAAS;QAC7B;AACA,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACpB,YAAA,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,SAAS,CAAC;QACtE;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;QAC1CC,QAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC3C,aAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAE1D,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK;AACtC,aAAA,OAAO,CAAC,mBAAmB,EAAE,IAAI;AACjC,aAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;gBAC5C,KAAK,CAAC,eAAe,EAAE;YAC3B;AACA,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;gBACtD,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,cAAc,EAAE;YACzB;AACJ,QAAA,CAAC,CAAC;QAEN,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AACpC,aAAA,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;QACzC,IAAI,CAAC,oBAAoB,EAAE;QAE3B,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AAC3C,aAAA,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC;AAEhD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;AACxG,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QAC7F,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC;QAC5G,IAAI,IAAI,GAAG,IAAI;QAGE,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;aAC5G,EAAE,CAAC,OAAO,EAAE,YAAA;AACT,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClI,IAAI,CAAC,cAAc,EAAE;AACzB,QAAA,CAAC;AAEL,QAAmB,mBAAmB,CAAC,MAAM,CAAC,QAAQ;AACjD,aAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;AAChC,aAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC7B,aAAA,EAAE,CAAC,OAAO,EAAE,MAAK;YACd,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,cAAc,EAAE;AACzB,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACxE,gBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,gBAAgB;qBAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;AACxB,qBAAA,IAAI;AACJ,qBAAA,KAAK,EAAE;gBACZ,KAAK,CAAC,cAAc,EAAE;YAC1B;AACJ,QAAA,CAAC;;AAGL,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAE1B,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;QAC3E,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAE1B,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,yBAAyB,EAAE;QAEhC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAC1B;IACJ;IAEQ,wBAAwB,GAAA;QAC5B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAChC,YAAA,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;AACtD,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACpG,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,iBAAiB,CAAC,cAAc,EAAA;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;QACnD,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,yBAAyB,EAAE;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC9B;IAEQ,oBAAoB,GAAA;QACxB,IAAI,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,gBAAgB;AAC3D,aAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAI,iBAAiB,GAAG,UAAU,CAAC,KAAK;aACnC,MAAM,CAAC,QAAQ;AACf,aAAA,IAAI,CAAC,OAAO,EAAE,eAAe;aAC7B,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;YACtB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,CAAC;aACA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAChB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;;QAEnF,IAAI,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACnD,YAAA,QAAQ,CAAC,KAAK,CAAC;AACnB,QAAA,CAAC;AACI,aAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACvE,gBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBACzG,KAAK,CAAC,cAAc,EAAE;YAC1B;AACJ,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAC9B,YAAA,cAAc,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;QACjC;IACJ;AAEQ,IAAA,gBAAgB,CAAC,QAAc,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;IACzC;IAEQ,aAAa,GAAA;QACjB,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAC9G;IAEO,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QAE1B,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,yBAAyB,EAAE;QAEhC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC9B;IAEQ,oBAAoB,GAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AACvC,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,KAAK,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE;AAClF,YAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC;AACxG,YAAA,IAAI,wBAAwB,GAAG,KAAK,CAAC,IAAI,EAAE;AAC3C,YAAA,IAAI,mBAAmB,GAAG,wBAAwB,GAAG,IAAI;AACzD,YAAA,iBAAiB,CAAC,MAAM,CAAC,OAAO;AAC3B,iBAAA,OAAO,CAAC,eAAe,EAAE,IAAI;iBAC7B,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACvD,iBAAA,IAAI,CAAC,IAAI,EAAE,wBAAwB;AACnC,iBAAA,IAAI,CAAC,KAAK,EAAE,mBAAmB;iBAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACrC,YAAA,IAAI,uBAAuB,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC;YAC1G,IAAI,cAAc,GAAG,IAAI,cAAc,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;AACvE,YAAA,cAAc,CAAC,MAAM,CAAC,CAAC,SAAS,KAAI;AAChC,gBAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAClD,gBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AACxC,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,SAAS;AACpC,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,iBAAiB,KAAK,EAAE,EAAE;AAC1B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;gBAC7C;AACJ,YAAA,CAAC,GAAG,OAAO,MAAM,IAAI,QAAQ,GAAG,MAAM,GAAG,KAAK,EAAE;YAChD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,QAAQ;AACjD,iBAAA,IAAI,CAAC,iBAAiB,EAAE,wBAAwB;AAChD,iBAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACxC;IACJ;;AAGQ,IAAA,QAAQ,CAAC,CAAO,EAAA;AACpB,QAAA,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/D;IAEQ,YAAY,CAAC,CAAO,EAAE,YAAqB,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;QACvB;aACK;AACD,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE;gBACzC,IAAI,YAAY,EAAE;AACd,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACjC,oBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrB;AACA,gBAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;gBAClC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACjC,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;YACrB;iBAAO;gBACH,IAAI,YAAY,EAAE;AACd,oBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACnB,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;gBACnC;AAEA,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAChD,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU;AAC/B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;YACvB;YACA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YAC3C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC9C;IACJ;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,WAAW,GAAG;AACd,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC/C,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AACvC,YAAA,MAAM,EAAEA,QAAM,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE;AACpC,YAAA,QAAQ,EAAEA,QAAM,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE;AACxC,YAAA,aAAa,EAAEA,QAAM,CAAC,UAAU,EAAE,CAAC,WAAW;SACjD;;AAGD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC;AAC9B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC/B,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC3B,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,QAAQ,EAAE,CAAC,CAAC,KAAI;AACZ,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC;AAC1B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,kBAAkB;AAClD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YAC9B,CAAC;AACD,YAAA,MAAM,EAAE,CAAC,CAAC,KAAI;gBACV,IAAI,IAAI,CAAC,kBAAkB;oBACvB;gBACJ,IAAI,IAAI,GAAG,IAAI;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,WAAW;qBACrD,EAAE,CAAC,WAAW,EAAE,YAAA;oBACb,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAC9D,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAC/C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;wBAC1B,IAAI,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC3F,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AAC9B,4BAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;4BAC1B;wBACJ;AACA,wBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,QAAQ,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;AAC1H,4BAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AAC9B,4BAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;4BAC1B;wBACJ;oBACJ;AACJ,gBAAA,CAAC,CAAC;YACV,CAAC;YACD,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;YACnD,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;AACnD,YAAA,WAAW,EAAE,KAAK,CAAC,4BAA4B,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5E,SAAA,CAAC;IACN;IAEQ,qBAAqB,GAAA;AACzB,QAAA,IAAI,UAAU,GAAG,CAAC,IAAG;YACjB,QAAQ,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,gBAAgB;AAC1C,aAAA,OAAO,CAAC,gBAAgB,EAAE,UAAU;AACpC,aAAA,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;IACzC;AAEQ,IAAA,WAAW,CAAC,YAAkB,EAAA;QAClC,IAAI,aAAa,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtG,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QACxD,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAClD,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5F;AAEQ,IAAA,SAAS,CAAC,YAAkB,EAAA;QAChC,IAAI,WAAW,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClG,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QACtD,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAChD,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IACxF;AAEQ,IAAA,aAAa,CAAC,UAAmB,EAAA;;QAErC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,iBAAiB;AAClF,aAAA,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;AACzC,aAAA,OAAO,CAAC,oBAAoB,EAAE,CAAC,UAAU,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU;IAC7B;;AAGQ,IAAA,sBAAsB,CAAC,SAAS,EAAA;AACpC,QAAA,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;QAClC,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC/C,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;AACzD,QAAA,OAAO,QAAQ,CAAC,OAAO,EAAE;IAC7B;AAEQ,IAAA,aAAa,CAAC,MAAc,EAAA;AAChC,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC9D,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;AAC9C,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,qBAAqB,EAAE;IAChC;AAEQ,IAAA,WAAW,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;AAChE,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;AAC9C,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC;QAC/C,IAAI,CAAC,qBAAqB,EAAE;IAChC;AAEQ,IAAA,kBAAkB,CAAC,WAAW,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE;AAC/F,QAAA,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,SAAS,CAAC,oBAAoB;iBACjF,IAAI,CAAC,WAAW;AAChB,iBAAA,KAAK;iBACL,MAAM,CAAC,KAAK;AACZ,iBAAA,OAAO,CAAC,kBAAkB,EAAE,IAAI;AAChC,iBAAA,IAAI,CAAC,MAAM,EAAE,OAAO;AACpB,iBAAA,IAAI,CAAC,WAAW,EAAE,WAAW;AAC7B,iBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB;IACJ;IAEQ,YAAY,CAAC,qBAA6B,EAAE,mBAA2B,EAAA;QAC3E,IAAI,iBAAiB,GAAG,EAAE;QAC1B,IAAI,UAAU,GAAG,IAAI;AACrB,QAAA,IAAI,cAAc,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAEjF,QAAA,IAAI,KAAK,CAAC,qBAAqB,CAAC,EAAE;AAE9B,YAAA,iBAAiB,CAAC,IAAI,CAAC,0BAA0B,CAAC;YAElD,UAAU,GAAG,KAAK;QACtB;AAEA,QAAA,IAAI,KAAK,CAAC,mBAAmB,CAAC,EAAE;AAC5B,YAAA,iBAAiB,CAAC,IAAI,CAAC,wBAAwB,CAAC;YAChD,UAAU,GAAG,KAAK;QACtB;QAEA,IAAI,cAAc,EAAE;AAChB,YAAA,IAAI,qBAAqB,GAAG,mBAAmB,EAAE;AAC7C,gBAAA,iBAAiB,CAAC,IAAI,CAAC,qCAAqC,CAAC;gBAC7D,UAAU,GAAG,KAAK;YACtB;AACA,YAAA,IAAI,qBAAqB,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,gBAAA,iBAAiB,CAAC,IAAI,CAAC,6CAA6C,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;YACtH;AACA,YAAA,IAAI,qBAAqB,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,gBAAA,iBAAiB,CAAC,IAAI,CAAC,2CAA2C,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;YACpH;AACA,YAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE;AACtC,gBAAA,iBAAiB,CAAC,IAAI,CAAC,yCAAyC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;YAClH;AACA,YAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE;AACtC,gBAAA,iBAAiB,CAAC,IAAI,CAAC,2CAA2C,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;YACpH;QACJ;QACA,OAAO;AACH,YAAA,YAAY,GAAG,iBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7C,YAAA,MAAM,EAAE,iBAAiB;AACzB,YAAA,UAAU,EAAE;SACf;IACL;IAEQ,2BAA2B,CAAC,SAAS,GAAG,KAAK,EAAA;AACjD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,SAAS;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IAC7D;IAEQ,yBAAyB,CAAC,SAAS,GAAG,KAAK,EAAA;AAC/C,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,SAAS;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;IAC5D;AAEQ,IAAA,SAAS,CAAC,IAAU,EAAA;QACxB,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/E,QAAA,OAAO,QAAQ;IACnB;AAEQ,IAAA,aAAa,CAAC,IAAU,EAAA;QAC5B,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACvC,QAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC/E,QAAA,OAAO,QAAQ;IACnB;IAEQ,qBAAqB,GAAA;QACzB,IAAI,UAAU,GAAG,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACpG,IAAI,QAAQ,GAAG,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAChG,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC7D,QAAA,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;AAC9C,QAAA,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC;IACnD;IAEQ,eAAe,CAAC,OAAO,EAAE,MAAM,EAAA;QACnC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAChE;aAAO;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAC9D;IACJ;IAEQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;AAChG,QAAA,IAAI,gBAAgB,GAAG,CAAC,UAAU,KAAI;AAClC,YAAA,IAAI,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,GAAG,WAAW,EAAE,IAAI,CAAC;AACzG,YAAA,IAAI,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE;AAC/B,YAAA,IAAI,OAAO,GAAG,YAAY,GAAG,OAAO;AACpC,YAAA,IAAI,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO;AAC3C,iBAAA,OAAO,CAAC,eAAe,EAAE,IAAI;AAC7B,iBAAA,IAAI,CAAC,IAAI,EAAE,YAAY;AACvB,iBAAA,IAAI,CAAC,KAAK,EAAE,OAAO;iBACnB,IAAI,CAAC,YAAY,EAAE,CAAA,EAAG,UAAU,KAAK,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA,CAAE;iBACtH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACrC,YAAA,SAAS,CAAC,MAAM,CAAC,MAAM;AAClB,iBAAA,OAAO,CAAC,kBAAkB,EAAE,IAAI;iBAChC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC9B,YAAA,IAAI,SAAS,GAAG,UAAU,KAAK,OAAO,GAAG,WAAW,GAAG,SAAS;YAChE,IAAI,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO;AAC7C,iBAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI;AACvC,iBAAA,IAAI,CAAC,iBAAiB,EAAE,YAAY;AACpC,iBAAA,IAAI,CAAC,UAAU,EAAE,IAAI;AACrB,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,iBAAA,EAAE,CAAC,OAAO,EAAE,MAAK;AACd,gBAA2B,IAAI,CAAC,qBAAqB;AACrD,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,oBAAA,IAAI,UAAU,KAAK,OAAO,EAAE;wBACxB,IAAI,UAAU,GAAG,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACpG,wBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,wBAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC;AACtC,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;oBAC9B;yBAAO;wBACH,IAAI,QAAQ,GAAG,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAChG,wBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC1B,wBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;AACpC,wBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;oBAC9B;gBACJ;AACJ,YAAA,CAAC,CAAC;AACN,YAAA,IAAI,UAAU,IAAI,KAAK,EAAE;AACrB,gBAAA,iBAAiB,CAAC,MAAM,CAAC,QAAQ;AAC5B,qBAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B;AACxC,qBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;qBAC7B,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC5D,qBAAA,EAAE,CAAC,OAAO,EAAE,MAAK;AACd,oBAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC1B,wBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;oBACrC;AACA,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;oBAChC,IAAI,CAAC,2BAA2B,EAAE;oBAClC,IAAI,CAAC,yBAAyB,EAAE;AAChC,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC9B,gBAAA,CAAC,CAAC;YACV;AACJ,QAAA,CAAC;QACD,gBAAgB,CAAC,OAAO,CAAC;QACzB,gBAAgB,CAAC,KAAK,CAAC;IAC3B;AACH;;ACplBD,MAAM,OAAO,GAAG,MAAM;AAEtB,MAAM,mBAAoB,SAAQ,gBAAgB,CAAA;AAM9C,IAAA,WAAA,CAAY,eAAoB,EAAE,aAAkB,EAAE,YAA2B,EAAE,UAAe,EAAE,aAAA,GAAqB,IAAI,EACzH,oBAAyB,EAAE,KAAc,EAAE,WAAwB,EAAA;QACnE,KAAK,CAAC,CAAC,QAAQ,oBAAoB,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,oBAAoB,IAAI,EAAE,GAAG,oBAAoB,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAJ1R,IAAA,CAAA,iBAAiB,GAAW,EAAE;AAKjC,QAAA,IAAI,CAAC,SAAS,GAAG,eAAe;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,aAAa,CAAC,QAAQ,IAAI,cAAc,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE;IAC1K;IAEO,KAAK,CAAC,cAAuB,KAAK,EAAA;QACrC,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;AACjF,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW;AAC7D,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,WAAW;AACzD,QAAA,IAAI,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QACzE,IAAI,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,cAAc,KAAK,kBAAkB,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,cAAc;QAChI,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,cAAc,KAAK,kBAAkB,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,cAAc;QAC3H,IAAI,WAAW,EAAE;YACb,UAAU,GAAG,iBAAiB;YAC9B,QAAQ,GAAG,eAAe;QAC9B;AACA,QAAA,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE;;QAG1G,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;AACxE,cAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBAChC,IAAI,aAAa,GAAG,EAAE;gBACtB,IAAI,CAAC,IAAI,OAAO;AACZ,oBAAA,aAAa,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;;oBAE7B,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;AAC5C,gBAAA,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;AACrB,gBAAA,OAAO,CAAC;YACZ,CAAC,EAAE,EAAE,CAAC;QACV,IAAI,eAAe,GAAG,EAAE;QACxB,IAAI,eAAe,GAAG,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE;AAC5H,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;AAC5B,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,GAAG,iBAAiB,IAAI,kBAAkB,CAAC;YACvF,eAAe,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE;AACvH,YAAA,eAAe,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACrF;aACK;AACD,YAAA,eAAe,CAAC,WAAW,CAAC,GAAG,eAAe;AAC9C,YAAA,eAAe,CAAC,UAAU,CAAC,GAAG,QAAQ;QAC1C;AACA,QAAA,IAAI,UAAU,GAAG,CAAC,eAAe,CAAC;AAClC,QAAA,GAAG,CAAC,YAAY,CAAC,GAAG,UAAU;;AAG9B,QAAA,IAAI,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC;AAC3C,YAAA,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;;AAErH,YAAA,SAAS,GAAG,IAAI,CAAC,SAAS;AAC9B,QAAA,GAAG,CAAC,WAAW,CAAC,GAAG,SAAS;AAE5B,QAAA,OAAO,GAAG;IACd;AACH;;AChED,MAAM,cAAe,SAAQ,cAAc,CAAA;AAUvC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QARf,IAAA,CAAA,eAAe,GAAY,KAAK;IASxC;AAEU,IAAA,oBAAoB,CAAC,MAAM,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EACpG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAChH;IAEO,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,GAAG,IAAI,EAAA;AAE1D,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAK,EAAG,CAAC;QACtC,IAAI,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ;AAClD,iBAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QAC5C;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC/B,YAAA,IAAI,CAAC,uBAAuB,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI;AACrG,iBAAA,IAAI,CAAC,MAAM,EAAE,QAAQ;iBACrB,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;YAC1E,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QACzD;AACA,QAAA,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACxE;AACH;;ACpCD,MAAM,mBAAoB,SAAQ,cAAc,CAAA;AAK5C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;IACvB;AAEQ,IAAA,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAA;QAC7D,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;AACtD,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACvE,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,GAAG;QACxE,IAAI,CAAC,UAAU,EAAE;YACb,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA,EAAG,UAAU,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAE,CAAC;YACvD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,sEAAsE,CAAC,CAAA,CAAA,EAAI,UAAU,MAAM,QAAQ,CAAA,CAAE,CAAC;QACnK;aACK;YACD,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC;AACnE,YAAA,IAAI,IAAI,GAAG,aAAa,KAAK,IAAI,GAAG,CAAA,EAAG,aAAa,CAAA,EAAA,EAAK,UAAU,MAAM,QAAQ,CAAA,CAAA,CAAG,GAAG,CAAA,EAAG,UAAU,CAAA,GAAA,EAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA,EAAA,EAAK,QAAQ,GAAG;AAClJ,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAC,sEAAsE,CAAC,IAAI,IAAI,CAAA,CAAE,CAAC;QAC/I;IACJ;IAEQ,OAAO,GAAA;QACX,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;IACtC;IAEO,MAAM,CAAC,eAAoB,EAAE,EAAE,SAAiB,EAAE,SAAiB,EACtE,UAAA,GAAqB,IAAI,EAAE,QAAA,GAAmB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAA;QACjF,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;AACvD,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAExB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAK,EAAG,CAAC;AAE/C,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QACjF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,KAAK,SAAS,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;YACjC,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE;AAC1D,gBAAA,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB;iBACK;AACD,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI;gBACnC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;AACtD,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAC9F,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,KAAI;AAC3D,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;AAEjC,oBAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,oBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;oBAExB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,CAAC;AACtE,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,CAAC;oBACtE,IAAI,CAAC,OAAO,EAAE;gBAClB,CAAC,EACD,MAAK;oBACD,IAAI,CAAC,OAAO,EAAE;oBACd,IAAI,CAAC,QAAQ,EAAE;AACnB,gBAAA,CAAC,CACJ;YACL;AACJ,QAAA,CAAC,CAAC;IACN;AACH;;ACpED,MAAM,iBAAkB,SAAQ,cAAc,CAAA;AAkC1C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QA5Bf,IAAA,CAAA,aAAa,GAAW,CAAC;QAGzB,IAAA,CAAA,aAAa,GAAG,CAAC;AAKjB,QAAA,IAAA,CAAA,OAAO,GAAG;AACd,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE;SACV;IAkBD;;IAGQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,aAAa,GAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa;QACtH,IAAI,cAAc,GAAW,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU;QAC5D,OAAO,cAAc,GAAG,aAAa;IACzC;AAEQ,IAAA,IAAI,CAAC,KAAU,EAAE,SAAiB,EAAE,IAAY,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS;YAC3B;QACJ,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC7F,QAAA,IAAI,UAAU,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACpD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,UAAU,GAAG,UAAU,GAAG,EAAE,GAAG,KAAK;QACxC,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,UAAU,IAAI,EAAE,GAAG,KAAK;AAC/C,QAAA,IAAI,SAAS,IAAI,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;AACrF,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC;QACpF;aAAO;AACH,YAAA,IAAI,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;AACzF,YAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC;YACpF,IAAI,mBAAmB,GAAG,qBAAqB,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AACzE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,qBAAqB;AAC7C,gBAAA,IAAI,CAAC,cAAc,GAAG,mBAAmB;YAC7C;iBAAO;AACH,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,IAAI,mBAAmB,GAAG,qBAAqB,CAAC;gBACpF,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,IAAI,UAAU,GAAG,KAAK,CAAC;AACpE,gBAAA,IAAI,CAAC,cAAc,GAAG,mBAAmB,IAAI,CAAC,CAAC,GAAG,UAAU,IAAI,KAAK,CAAC;YAC1E;QACJ;QACA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC;AACrE,QAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC9B,QAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE;AACzC,QAAA,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,EAAE;IAClD;AACQ,IAAA,eAAe,CAAC,YAAY,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YACzB,GAAG,YAAY,EAAE,GAAG;AAChB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,oBAAoB,EAAE,IAAI;AAC1B,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,oBAAoB,EAAE;AACzB;AACJ,SAAA,CAAC;IACN;IACQ,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC;AACzC,QAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;QAC1K,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IACzD;;IAGQ,oBAAoB,CAAC,UAAkB,EAAE,QAAgB,EAAA;AAC7D,QAAA,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAe,EAAE,SAAiB,EAAE,CAAS,EAAE,UAAyB,KAAI;AACrK,YAAA,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE;AAClD,YAAA,IAAI,YAAY,GAAG,YAAY,GAAG,IAAI,CAAC,UAAU;YACjD,IAAI,YAAY,IAAI,UAAU,IAAI,YAAY,IAAI,QAAQ,EAAE;gBACxD,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AACrH,gBAAA,OAAO,UAAU;YACrB;YACA,IAAI,YAAY,GAAG,UAAU,IAAI,YAAY,GAAG,UAAU,EAAE;gBACxD,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AACnH,gBAAA,OAAO,UAAU;YACrB;AACA,YAAA,OAAO,UAAU;QAErB,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,IAAI,cAAc,GAAW,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;AACjF,QAAA,IAAI,gBAAgB,GAAW,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC;AAC1E,QAAA,IAAI,kBAAkB,GAAW,IAAI,CAAC,UAAU,GAAG,gBAAgB;QACnE,IAAI,SAAS,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;AAEpG,QAAA,IAAI,WAAW,GAAW,SAAS,CAAC,UAAU,CAAC;AAC/C,QAAA,IAAI,UAAU,GAAW,SAAS,CAAC,QAAQ,CAAC;QAC5C,IAAI,OAAO,GAAG,EAAE;AAChB,QAAA,KAAK,IAAI,CAAC,GAAW,WAAW,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,IAAI,kBAAkB,EAAE;AACxE,YAAA,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;QACvD;AAEA,QAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,CAAC,KAAI;AACtD,YAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;AACvC,YAAA,IAAI,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;YACrC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,gBAAgB,CAAC;AACtG,QAAA,CAAC,CAAC;QAEF,IAAI,UAAU,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE;YAC7C,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;QAClG;QACA,IAAI,QAAQ,KAAK,IAAI,IAAI,UAAU,KAAK,IAAI,EAAE;YAC1C,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;QAC/F;;AAEA,QAAA,IAAI,WAAW,GAAG,UAAU,EAAE;AAC1B,YAAA,OAAO,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;QACzD;QAEA,OAAO,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;IACrD;AACQ,IAAA,iBAAiB,CAAC,eAAe,EAAA;QACrC,IAAI,KAAK,CAAC,sBAAsB,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,eAAe,CAAC,YAAY,CAAC,EAAE;AAC5H,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;AAClE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE;YAC9D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC;QACxE;aAAO;AACH,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;IACJ;AAEO,IAAA,MAAM,CAAC,uBAA4B,EAAE,YAAiB,EAAE,kBAAuB,EAAE,EAAA;AACpF,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,uBAAuB,GAAG,uBAAuB;QACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM;QACvE,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,GAAG;AACrF,QAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC;AAEvC,QAAA,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YACnE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI;AACtF,QAAA,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI;QAEpF,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE;AACnD,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU;YACjF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;YACjD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE;QAC1C;QAEA,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,mBAAmB,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,EACxG,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAEpG,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC3C,aAAA,OAAO,CAAC,uBAAuB,EAAE,IAAI;aACrC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;aAClD,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC;AAE5E,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,oBAAoB,GAAG,IAAI;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,GAAG,IAAI;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,KAAK;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,GAAG,IAAI;AAE5C,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe;QAEvD,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,CAAC,IAAI,EAAE,EAAE,KAAI;AAC7C,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;gBAC7B,IAAI,CAAC,qBAAqB,EAAE;YAChC;YACA,IAAI,eAAe,IAAI,IAAI;AACvB,gBAAA,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;AACjC,QAAA,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC;AAErD,QAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK;AACrD,iBAAA,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC;AAC7C,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;AAClG,YAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC;AACjG,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI;AACtG,iBAAA,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACvF,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAS,CAAC;YAC5E,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAC3G,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAS,CAAC;YACrE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACtG,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC;AAC5G,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;AAC7E,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACnC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;gBAC/B,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS;oBAC3B,IAAI,CAAC,qBAAqB,EAAE;gBAChC,UAAU,CAAC,MAAK;oBACZ,IAAI,CAAC,SAAS,EAAE;gBACpB,CAAC,EAAE,GAAG,CAAC;AACX,YAAA,CAAC,CAAC;YAC8B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,8DAA8D;QAC/H;;QAGA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QAErD,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE;AACjE,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAC7E,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,0BAA0B;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AACtF,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAC9E,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,0BAA0B,GAAG,KAAK,GAAG,MAAM,CAAC;QACjK;aAAO;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAC7E,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;AACrF,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;YAC9E,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;QACzG;QAEA,IAAI,gBAAgB,GAAQ,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC;AAErE,QAAA,IAAI,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;AACpF,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC;AAE3E,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;QACjF,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE;AAC9C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ;AACnC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,kCAAkC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,kCAAkC,CAAC,GAAG,IAAI,CAAC,UAAU;AAChM,YAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtE,YAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;AACvG,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;QAClG;aAAO;AACH,YAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,kCAAkC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,kCAAkC,CAAC,GAAG,IAAI,CAAC,UAAU;AACnO,YAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ;AACpE,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACtH,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAChH,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI;gBAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;YAClJ,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC;QACjE;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;QAE9B,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;AACzE,YAAA,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI;AAC/C,YAAA,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC;AACrC,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC9B,IAAI,CAAC,gBAAgB,EAAE;QAC3B;aAAO;AACH,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAClE;QACA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC;AACrE,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC7B,IAAI,CAAC,qBAAqB,EAAE;QAChC;AACA,QAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE;IAC7C;IAEQ,gBAAgB,GAAA;QACpB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,MAAM,EAAE;AACjE,QAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACxF,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK;AAC3C,aAAA,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC;AAC7C,QAAA,UAAU,CAAC,MAAM,CAAC,QAAQ;AACrB,aAAA,IAAI,CAAC,OAAO,EAAE,iCAAiC;aAC/C,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC;aACzD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AACvC,aAAA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;YACnB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC;AACpC,QAAA,CAAC,CAAC;AACN,QAAA,UAAU,CAAC,MAAM,CAAC,QAAQ;AACrB,aAAA,IAAI,CAAC,OAAO,EAAE,kCAAkC;aAChD,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC;aAC1D,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACxC,aAAA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;YACnB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;AACrC,QAAA,CAAC,CAAC;IACV;IAEQ,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAA;AAC1C,QAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU;AACpC,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE;IAC7C;IAEQ,oBAAoB,GAAA;QACR,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI;QAChG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,IAAI;QAC1F,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,IAAI;QAClH,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,IAAI;AAC9H,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,EACxH,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,KAAI;AAC3D,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;AAEjC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,UAAU;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,gBAAgB;YAErD,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;YACrD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;AAChD,YAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC;AACzC,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAG,CAAC,KAAK,EAAE;QACvF,CAAC,EACD,MAAK;YACD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAC/C,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAG,CAAC,KAAK,EAAE;AACvF,QAAA,CAAC,CAAC;IACV;AAEQ,IAAA,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,GAAG,KAAK,EAAA;AAChE,QAAA,IAAI,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACrC,KAAK,CAAC,oBAAoB,CAAC,QAAQ;AAC9D,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC5C,IAAI,CAAC,YAAY,EAAE;YACf,IAAI,CAAC,oBAAoB,EAAE;QAC/B;IACJ;IAEQ,SAAS,GAAA;QACb,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QACnH,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AACzC,QAAA,QAAQ,CAAC,MAAM,CAAC,MAAM;AACjB,aAAA,OAAO,CAAC,WAAW,EAAE,IAAI;AACzB,aAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC9G,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,aAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAC/C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAClH,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;aAChB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,WAAW;AAC5E,aAAA,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,aAAA,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACvC;IAEQ,aAAa,GAAA;QAEjB,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QACpH,IAAI,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE;AAC1C,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM;AACjB,iBAAA,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;YAClC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE;QACzC;QACA,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC;QAE/C,IAAI,UAAU,GAAG,IAAI;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;AAClC,YAAA,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,gBAAgB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACrF,YAAA,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3H,YAAA,IAAI,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAE/E,YAAA,IAAI,gBAAgB,GAAG,cAAc,EAAE;gBACnC,UAAU,GAAG,KAAK;AAClB,gBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACpE,qBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE;qBAC/C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC;qBACvG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5L,qBAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE,GAAG,GAAG;AAC3D,qBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE;AAC3D,qBAAA,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC;YACvC;QACJ;QACA,IAAI,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,KAAK,IAAI,EAAE;AACzD,YAAA,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QACrC;aAAO;AACH,YAAA,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QACtC;IACJ;IAEQ,qBAAqB,GAAA;QACzB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE;;AAGjE,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,0BAA0B;YAC5C;QAEJ,IAAI,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE;QACjE,IAAI,YAAY,GAAG,IAAI;QACvB,IAAI,aAAa,GAAG,IAAI;AAExB,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;YAClE,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK;AAC/C,iBAAA,OAAO,CAAC,mBAAmB,EAAE,IAAI;AACjC,iBAAA,KAAK,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC,OAAO,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI;AAC/F,iBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAChL,YAAA,IAAI,oBAAoB,GAAG,IAAI,GAAG,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG;YAClG,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK;AAChD,iBAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB;iBACjC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,IAAI,IAAI,GAAG,cAAc,GAAG,cAAc,CAAC,QAAQ,GAAG,KAAK,GAAG,KAAK;AACzG,iBAAA,KAAK,CAAC,MAAM,EAAE,MAAM;AACpB,iBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CACnI,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,oBAAoB,CAAC;QACrE;AAEA,QAAA,IAAI,YAAY,IAAI,aAAa,EAAE;YAC/B,IAAI,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;YAC1H,IAAI,eAAe,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI;AACvE,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;YAC9E,IAAI,SAAS,GAAG,EAAE;YAClB,IAAI,eAAe,GAAG,eAAe,GAAG,SAAS,EAAE;gBAC/C,IAAI,UAAU,GAAG,CAAC,eAAe,GAAG,eAAe,GAAG,SAAS,IAAI,CAAC;;gBAEpE,IAAI,UAAU,GAAG,CAAC;gBAClB,IAAI,WAAW,GAAG,CAAC;gBACnB,IAAI,OAAO,GAAG,EAAE;gBAChB,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,UAAU,IAAI,OAAO,EAAE;AACjD,oBAAA,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,UAAU,CAAC;AACjF,oBAAA,WAAW,GAAG,CAAC,GAAG,UAAU;gBAChC;AACA,gBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,UAAU,KAAK,UAAU,GAAG,OAAO,CAAC,EAAE;AACjE,oBAAA,WAAW,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU,GAAG,cAAc,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,UAAU;AAC9F,oBAAA,UAAU,GAAG,CAAC,GAAG,WAAW;gBAChC;gBACA,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,QAAQ,IAAI,WAAW,GAAG,UAAU,CAAC,EAAE,GAAG,KAAK;AACnH,qBAAA,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;AAC1B,gBAAA,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,cAAc,CAAC,OAAO,IAAI,UAAU,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC;YAC3F;QACJ;IACJ;AAEQ,IAAA,SAAS,CAAC,IAAU,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACnE,QAAA,OAAO,IAAI;IACf;IAEQ,uBAAuB,GAAA;AAC3B,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC;QACpF,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB;AACtH,QAAA,IAAI,uBAAuB,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK;AACvD,aAAA,OAAO,CAAC,6BAA6B,EAAE,IAAI;AAC3C,aAAA,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;IACjF;IAEQ,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;QACtC,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,IAAI,IAAI,CAAC,mBAAmB,CAAC,UAAU,MAAM,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC;QACjJ,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,MAAM,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC;QACxI,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC;QAE3D,IAAI,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,sBAAsB;aAC7D,MAAM,CAAC,QAAQ;aACf,SAAS,CAAC,OAAO,CAAC;AACvB,QAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;YACrB,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACzB,YAAA,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,UAAU,GAAG,cAAc,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,SAAS,GAAG,YAAY,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;AAC3H,QAAA,CAAC,CAAC;IACN;IAEQ,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAA;AAC7C,QAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;QAC9B,IAAI,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC1E,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI;AAClC,QAAA,IAAI,iBAAiB,GAAG;AACpB,YAAA,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;AACd,gBAAA,UAAU,EAAE;AACR,oBAAA,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,oBAAA,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;AAC1B;AACJ;SACJ;AACD,QAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAC7F,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;IACvC;AAEO,IAAA,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,GAAG,KAAK,EAAA;QACtD,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;QACnC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC;QAC1D,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS;YAC3B,IAAI,CAAC,qBAAqB,EAAE;IACpC;AAEQ,IAAA,sBAAsB,CAAC,YAAY,EAAA;QACvC,OAAO;AACH,YAAA,YAAY,EAAE,CAAC;YACf,KAAK,EAAE,YAAY,CAAC,KAAK;AACzB,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,uBAAuB,EAAE,EAAE;AAC3B,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,KAAI;AAC1B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;YAC3D,CAAC;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,qBAAqB,EAAE,IAAI;AAC3B,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,MAAM,EAAE;SACX;IACL;AACH;;ACjiBD,MAAM,mBAAoB,SAAQ,kBAAkB,CAAA;AAYhD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;QARJ,IAAA,CAAA,mBAAmB,GAAe,EAAE;AAGpC,QAAA,IAAA,CAAA,SAAS,GAAW,CAAC,MAAM,CAAC,SAAS;AACrC,QAAA,IAAA,CAAA,SAAS,GAAW,MAAM,CAAC,SAAS;AAcnC,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,MAAM,KAAY;YAClC,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAA,EAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,MAAM,KAAY;YAClC,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAA,EAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,QAAA,CAAC;IAfD;AAEO,IAAA,oCAAoC,CAAC,IAAI,EAAE,SAAS,EAAE,0BAA0B,GAAG,IAAI,EAAA;AAC1F,QAAA,KAAK,CAAC,oCAAoC,CAAC,IAAI,EAAE,0BAA0B,CAAC;AAC5E,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,qBAAqB,EAAE;IAChC;;AAWO,IAAA,kBAAkB,CAAC,mBAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,SAAS;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,KAAI;AAEpD,YAAA,IAAI,iBAAiB;YAErB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;gBACnC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;oBACnC,IAAI,iBAAiB,GAAG,EAAE;oBAC1B,IAAI,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW,KAAI;AAC/G,wBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC7D,wBAAA,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,wBAAA,IAAI,KAAK;wBACT,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;AAChE,4BAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;;AAE7F,4BAAA,KAAK,GAAG,MAAM,CAAC,SAAS;AAC5B,wBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;4BAClB,IAAI,KAAK,GAAG,CAAC;AACT,gCAAA,KAAK,GAAG,MAAM,CAAC,SAAS;;AAExB,gCAAA,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS;wBACjC;AACA,wBAAA,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK;AAExB,wBAAA,IAAI,CAAC,CAAC,mBAAmB,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,OAAO,EAAE;AACnE,4BAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;wBACxC;AACA,wBAAA,OAAO,GAAG;oBACd,CAAC,EAAE,EAAE,CAAC;AAEN,oBAAA,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK;yBAChB,IAAI,CAAC,iBAAiB;yBACtB,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAC/B,CAAC,sBAAsB,CAAC,CAAC;oBAC9B,MAAM,CAAC,OAAO,EAAE;AAChB,oBAAA,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS;wBACpB,iBAAiB,GAAG,MAAM;AAE9B,oBAAA,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,mBAAmB,KAAK,MAAM,IAAI,SAAS,EAAE;AACvE,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;AAChE,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpE;gBACJ;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,iBAAiB;AAC/C,QAAA,CAAC,CAAC;IACN;IAEO,oBAAoB,GAAA;QACvB,IAAI,mBAAmB,GAAG,EAAE;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,IAAI,KAAI;YAClC,IAAI,OAAO,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,IAAI,MAAM;AACV,YAAA,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;AAC9B,gBAAA,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACrE,gBAAA,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;YACrC;iBAAO;gBACH,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1C,gBAAA,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;YACpC;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE;AACnC,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBACnE,MAAM,CAAC,CAAC,WAAgB,EAAE,OAAe,EAAE,QAAgB,KAAI;AAC5D,gBAAA,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE;AACzB,gBAAA,WAAW,CAAC,OAAO,CAAC,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/E,gBAAA,OAAO,WAAW;YACtB,CAAC,EAAE,EAAE,CAAC;AACd,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,qBAAqB,CAAC,MAAM,EAAA;AAC/B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AACnE,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW;AACzE,YAAA,IAAI,GAAG;AACP,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY;AAC7D,gBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;AAC1E,gBAAA,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;;gBAEhF,GAAG,GAAG,IAAI;YACd,OAAO;AACH,gBAAA,WAAW,EAAE,WAAW;AACxB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,GAAG,EAAE;aACR;AACL,QAAA,CAAC,CAAC;IACN;AACH;;AC3HD,MAAM,YAAa,SAAQ,mBAAmB,CAAA;AAI1C,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QAHJ,IAAA,CAAA,gBAAgB,GAAG,CAAC;IAI3B;AAEO,IAAA,oCAAoC,CAAC,IAAI,EAAE,SAAS,EAAE,0BAA0B,GAAG,IAAI,EAAA;AAC1F,QAAA,kBAAkB,CAAC,SAAS,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,0BAA0B,CAAC;QAC9G,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC3F,KAAK,CAAC,oBAAoB,EAAE;QAC5B,IAAI,CAAC,qBAAqB,EAAE;IAChC;AAEO,IAAA,oBAAoB,CAAC,SAAS,EAAA;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;QACzB,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAI;gBAC/E,IAAI,KAAK,GAAG,CAAC;gBACb,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,IAAI,SAAS;oBACrH,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAClH,MAAM,CAAC,IAAI,CAAC;AACR,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,QAAQ,EAAE;AACb,iBAAA,CAAC;gBACF,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;IAChC;AACH;;AClCD,MAAM,MAAO,SAAQ,SAAS,CAAA;AAgB1B,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QAhBf,IAAA,CAAA,SAAS,GAAQ,IAAI;QACtB,IAAA,CAAA,aAAa,GAAQ,IAAI;AAQxB,QAAA,IAAA,CAAA,OAAO,GAAG;AACd,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE;SACV;QACO,IAAA,CAAA,MAAM,GAAG,EAAE;QAyIX,IAAA,CAAA,iCAAiC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,KAAK,KAAI;;AAErE,YAAA,IAAI,gBAAgB,GAAG,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,MAAK,EAAG,CAAC,EAAE;AACtG,YAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AACnD,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjE,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjE,gBAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,GAAG,IAAI;YAC9C,CAAC,EAAE,gBAAgB,CAAC;YACpB,IAAI,CAAC,aAAa,GAAG,CAAC,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa;AAC7F,YAAA,OAAO,gBAAgB;AAC3B,QAAA,CAAC;QAEO,IAAA,CAAA,qBAAqB,GAAG,MAAK;YACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,MAAK;AACvC,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI;AAClF,oBAAA,IAAI,CAAC,SAAS,CAAC,+BAA+B,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC5G,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;IAtJD;IAEA,MAAM,GAAA;IACN;AAEQ,IAAA,mBAAmB,CAAC,KAAa,EAAA;QACrC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC7B;;QAEA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3F,IAAI,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;AAC7C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,gBAAA,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,WAAW,EAAE;AACxD,oBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnG;YACJ;AACA,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7D;AACA,QAAA,OAAO,CAAC;IACZ;IAEQ,+BAA+B,GAAA;AACnC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;AAC/E,QAAA,IAAI,WAAW,GAAG,IAAI,KAAK,EAAE;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1D,WAAW,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9E;AACA,QAAA,OAAO,WAAW;IACtB;IAEO,MAAM,CAAC,IAAgB,EAAE,OAAY,EAAE,KAAa,EAAE,gBAAwB,IAAI,EAAA;AACrF,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,+BAA+B,EAAE;AACpE,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;AACzD,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,YAAY;QACvC,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAChD,QAAA,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,QAAQ;AAC3C,YAAA,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAC/C,QAAA,IAAI,aAAa;AACb,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;AAEtC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,UAAU;AACtB,aAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;aAC/B,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC;QACrC,IAAI,IAAI,GAAG,IAAI;AAEf,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;YACxB,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK;AACtC,iBAAA,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;YACzC,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG;AACjC,iBAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;AACxC,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM;AACf,iBAAA,IAAI,CAAC,OAAO,EAAE,8BAA8B;AAC5C,iBAAA,MAAM,CAAC,YAAA,EAAc,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,iBAAA,IAAI,CAAC,OAAO,EAAE,sCAAsC;AACpD,iBAAA,IAAI,CAAC,EAAE,CAAC,IAAI;iBACR,EAAE,CAAC,iBAAiB,EAAE,YAAA,EAAc,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;iBACzD,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AAC3B,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACxB,YAAA,CAAC;iBACA,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAI;AACpB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC,CACL;AAEL,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAgB;AACnC,iBAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB;AACvC,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAEjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK;AAC1C,iBAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;AAC/B,iBAAA,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,iBAAA,IAAI,CAAC,YAAY,EAAE,aAAa;AAChC,iBAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACrB,gBAAA,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;oBACrB,IAAI,CAAC,QAAQ,EAAE;gBACnB;AACA,gBAAA,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;oBACrB,IAAI,CAAC,SAAS,EAAE;gBACpB;AACJ,YAAA,CAAC,CAAC;QACV;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAErD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC;QAE1C,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc;aAC5C,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAExF,QAAA,MAAM,CAAC,MAAM,CAAC,kBAAkB;AAC3B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW;AAC3B,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAClB,QAAA,MAAM,CAAC,MAAM,CAAC,yBAAyB;AAClC,aAAA,IAAI,CAAC,IAAI,EAAE,GAAG;aACd,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,EAAE;AAChC,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE;IAC5B;IAEO,MAAM,GAAA;QACT,IAAI,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;IACnC;AAEQ,IAAA,MAAM,CAAC,CAAC,EAAA;;QAEZ,IAAI,gBAAgB,GAAG,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;AACnC,YAAA,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACnD;QAEA,IAAI,CAAC,iBAAiB,EAAE;IAC5B;AAEQ,IAAA,SAAS,CAAC,CAAC,EAAA;AACf,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;YAClC,IAAI,gBAAgB,GAAG,IAAI,CAAC,iCAAiC,CAAC,CAAC,EAAE,IAAI,CAAC;AACtE,YAAA,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC;QACnD;IACJ;;IAsBQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,qBAAqB,EAAE;;AAE5B,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,CAAC;AACjF,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,eAAe,GAAG,IAAI,CAAC;IAClJ;IAEQ,QAAQ,GAAA;AACZ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;AAC1C,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK;AAC1C,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C,IAAI,CAAC,iBAAiB,EAAE;gBACxB;YACJ;QACJ;IACJ;IAEQ,SAAS,GAAA;AACb,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;AAC1C,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK;AAC1C,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1C,IAAI,CAAC,iBAAiB,EAAE;gBACxB;YACJ;QACJ;IACJ;AACH;;ACpMD,MAAM,QAAS,SAAQ,2BAA2B,CAAA;AAI9C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;AAHvB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAE;QAInC,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE;SACV;IACL;AAEA,IAAA,QAAQ,KAAK;AAEN,IAAA,MAAM,CAAC,IAAS,EAAE,OAAY,EAAE,0BAA+B,EAAA;QAClE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,0BAA0B,CAAC;AAEvD,QAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,0BAA0B,CAAC;AACrI,QAAgB,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QAE9H,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC1C,aAAA,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;AAElC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YAE3B,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK;AACzC,iBAAA,IAAI,CAAC,OAAO,EAAE,8BAA8B;iBAC5C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;AACrC,YAAA,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACvD,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;YAE7E,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,GAAG,KAAK,EAAE,KAAK,KAAI;;gBAExC,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AACrD,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;gBACjC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,SAAS,EAAE;AACvC,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE;gBAC9B;qBAAO;AACH,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE;gBAC9B;AAEA,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,gBAAA,IAAI,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM;gBACjE,IAAI,CAAC,YAAY,EAAE;AACf,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;gBAC1C;gBACA,IAAI,WAAW,GAAG,MAAM;AACxB,gBAAA,IAAI,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG;AAC5E,gBAAA,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;AACpE,gBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa;AAC7C,qBAAC,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC;oBAC5E,WAAW,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAC7D,oBAAA,CAAC;AACL,gBAAA,IAAI,CAAC;AACA,qBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU;AAC7B,qBAAA,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;AAChC,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAErH,gBAAA,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACxI,gBAAA,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,SAAS,CAAC;gBACvD,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAGrD,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;oBAC9E,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC;gBACvI;AAAO,qBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;oBACpF,IAAI,CAAC,kBAAkB,EAAE;gBAC7B;AAEA,gBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;oBACvE,IAAI,CAAC,gBAAgB,EAAE;oBACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC1F;qBAAO;oBACH,IAAI,CAAC,kBAAkB,EAAE;gBAC7B;gBAGA,IAAI,cAAc,GAAG,CAAC,MAAc,EAAE,OAAA,GAAkB,IAAI,KAAI;;AAE5D,oBAAA,IAAI,cAAc,GAAG,CAAC,CAAM,EAAE,CAAS,KAAI;wBACvC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;AACvF,oBAAA,CAAC;AAED,oBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe;yBACtC,MAAM,CAAC,cAAc;AACrB,yBAAA,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACzB,yBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AACjC,gBAAA,CAAC;AAED,gBAAA,IAAI,aAAa,GAAG,CAAC,YAAoB,EAAE,OAAe,KAAI;AAC1D,oBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe;AACtC,yBAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,yBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAChC,gBAAA,CAAC;AAED,gBAAA,SAAS,WAAW,CAAC,CAAM,EAAE,aAAa,EAAA;AACtC,oBAAA,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;AAC3B,oBAAA,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACvC,oBAAA,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AACxI,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,KAAI;AACvG,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC;oBACrG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;gBAC3B;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAClB,IAAI,CAAC,YAAY,CAAC,MAAM,EACxB,IAAI,CAAC,kBAAkB,EACvB,cAAc,EACd,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,EACjB,aAAa,EACb,IAAI,EACJ,KAAK,CAAC;AACV,gBAAA,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG;qBACX,IAAI,CAAC,IAAI;qBACT,KAAK,CAAC,UAAU,CAAM,EAAA;oBACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1B,gBAAA,CAAC,CAAC;AAEN,gBAAgB,EAAE,CAAC,GAAG;qBACjB,WAAW,CAAC,WAAW;qBACvB,WAAW,CAAC,WAAW;AAE5B,gBAAA,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc;qBAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;gBACtD,IAAI,UAAU,GAAG;AACZ,qBAAA,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG;qBAClB,KAAK,CAAC,GAAG;AACT,qBAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;gBACjC,IAAI,IAAI,GAAG,IAAI;AAEf,gBAAA,IAAI,OAAO,GAAG,EAAE,CAAC,GAAG;qBACf,WAAW,CAAC,WAAW;qBACvB,WAAW,CAAC,WAAW,CAAC;gBAE7B,SAAS,QAAQ,CAAC,CAAC,EAAA;AACf,oBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,oBAAA,OAAO,UAAU,CAAC,EAAA;AACd,wBAAA,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,oBAAA,CAAC;gBACL;gBAEA,IAAI,IAAI,GAAG,IAAI;AACf,gBAAA,SAAS,YAAY,CAAC,KAAK,EAAE,CAAM,EAAA;oBAC/B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB;wBACvD;oBACJ,OAAO,CAAC,IAAI,EAAE;AACd,oBAAA,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,oBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;gBACnG;AAEA,gBAAA,SAAS,oBAAoB,CAAC,KAAK,EAAE,CAAM,EAAA;oBACvC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB;wBACvD;AACJ,oBAAA,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;AACtB,oBAAA,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AACvC,oBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,UAAU,eAAuB,EAAA;AACzG,wBAAA,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,MAAM,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;oBACvG,CAAC,CAAE,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;AAC5B,oBAAA,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/D;gBAEA,IAAI,6BAA6B,GAAG,MAAK;oBACrC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;AACnD,gBAAA,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC,YAAA;oBACZ,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjG,oBAAkB,QAAQ,CAAC,KAAK;yBAC3B,MAAM,CAAC,MAAM;AACb,yBAAA,IAAI,CAAC,OAAO,EAAE,cAAc;AAC5B,yBAAA,IAAI,CAAC,GAAG,EAAE,OAAO;AACjB,yBAAA,EAAE,CAAC,WAAW,EAAE,oBAAoB;AACpC,yBAAA,EAAE,CAAC,WAAW,EAAE,oBAAoB;AACpC,yBAAA,EAAE,CAAC,UAAU,EAAE,YAAY;yBAC3B,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,CAAM,KAAI;AACjC,wBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,kBAAkB;AACtE,4BAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;AAC/E,4BAAA,IAAI,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAO,aAAa,CAAC,IAAI,EAAE,CAAC;4BAChE,KAAK,CAAC,cAAc,EAAE;AACtB,4BAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/E,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,EAC3E,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACpD;AACJ,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,UAAU,CAAC,EAAA,EAAU,IAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;yBAC/C,KAAK,CAAC,QAAQ;AACd,yBAAA,UAAU;AACV,yBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa;AAC3B,yBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,yBAAA,SAAS,CAAC,GAAG,EAAE,QAAQ;AACvB,yBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAM,KAAI;AACrB,wBAAA,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AACvI,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,OAAO,EAAE,cAAc;AACrC,gBAAA,CAAC,CAAC;AACF,gBAAA,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;;gBAGnB,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;AACtF,oBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,IAAG;wBAC9D,IAAI,MAAM,GAAG,MAAK;AACd,4BAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE;AAChC,4BAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,0BAA0B,CAAC;AACjG,wBAAA,CAAC;wBACD,OAAO;4BACH,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC3F,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE;yBAClI;AACL,oBAAA,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC5H,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzJ;qBACK;oBACD,MAAM,CAAC,MAAM,EAAE;AACf,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;gBACzF;AAEJ,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;AAChF,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;;YAGhE,IAAI,MAAM,GAAG,IAAI,MAAM,CAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9F,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB;oBACzC,IAAI,CAAC,IAAI,EAAE;AACnB,YAAA,CAAC,CAAC;QACN;QACA,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAI;YACpD,IAAI,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE;AACvG,gBAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAC9C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;IACnF;AACH;;AC7PD,MAAM,eAAgB,SAAQ,mBAAmB,CAAA;AAK7C,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QAJJ,IAAA,CAAA,OAAO,GAAQ,EAAE;QAChB,IAAA,CAAA,UAAU,GAAY,KAAK;IAInC;;AAGO,IAAA,UAAU,CAAC,QAAa,EAAE,UAAA,GAAsB,KAAK,EAAA;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE;;AAEhC,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;;AAEjB,YAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAM,KAAI;oBACzD,IAAI,CAAC,CAAC,CAAC,QAAQ;AACX,wBAAA,OAAO,IAAI;AACf,oBAAA,OAAO,OAAO,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI;AAC7D,gBAAA,CAAC,CACA;AACL,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QAC1B;IACJ;;AAGO,IAAA,aAAa,CAAC,QAAa,EAAA;QAC9B,IAAI,WAAW,GAAe,EAAE;QAEhC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YAC5B,IAAI,OAAO,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM;YAE7B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE;AAC3C,gBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAChD,oBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE;AAC7D,wBAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;oBAChE;AACJ,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;QAEF,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC;AAE9C,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAM,KAAI;AACtD,gBAAA,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;AAC3C,YAAA,CAAC,CACA;AACL,QAAA,CAAC,CAAC;IACN;;AAGO,IAAA,oCAAoC,CAAC,IAAI,EAAE,SAAS,EAAE,0BAA0B,GAAG,IAAI,EAAA;AAC1F,QAAA,kBAAkB,CAAC,SAAS,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,0BAA0B,CAAC;AAC9G,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACvI,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,qBAAqB,EAAE;IAChC;;AAGO,IAAA,uBAAuB,CAAC,UAAmB,EAAA;AAC9C,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAE3B,IAAI,CAAC,UAAU,EAAE;YACb,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACnC,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;gBACnB,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,CAAC,cAAc,EAAE;AACzB,YAAA,CAAC,CAAC;QACN;aAAO;YACH,IAAI,CAAC,cAAc,EAAE;QACzB;IACJ;;IAGQ,cAAc,GAAA;AAClB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAI;AAC/E,gBAAA,IAAI,QAAQ,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI;gBACrC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,IAAI,SAAS,EAAE;AACvH,oBAAA,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY;AACxE,oBAAA,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS;gBAC1E;AAEA,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxB,oBAAA,YAAY,EAAE,MAAM;AACpB,oBAAA,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;AACtE,oBAAA,OAAO,EAAE,OAAO;oBAChB,QAAQ;oBACR,SAAS;AACT,oBAAA,QAAQ,EAAE;AACb,iBAAA,CAAC;AACN,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;;IAGO,oBAAoB,GAAA;QACvB,IAAI,mBAAmB,GAAG,EAAE;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,IAAI,KAAI;YAClC,IAAI,OAAO,GAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,IAAI,MAAM;AACV,YAAA,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE;AAC9B,gBAAA,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACrE,gBAAA,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;YACrC;iBAAO;gBACH,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1C,gBAAA,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;YACpC;AACA,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,EAAE;AACnC,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;iBACnE,MAAM,CAAC,CAAC,WAAgB,EAAE,OAAe,EAAE,QAAgB,KAAI;AAC5D,gBAAA,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE;AACzB,gBAAA,WAAW,CAAC,OAAO,CAAC,CAAC,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC/E,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/C,gBAAA,OAAO,WAAW;YACtB,CAAC,EAAE,EAAE,CAAC;AACd,QAAA,CAAC,CAAC;IACN;AACH;;ACrHD,MAAM,WAAY,SAAQ,2BAA2B,CAAA;AAuCjD,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QAvCf,IAAA,CAAA,SAAS,GAAQ,IAAI;QAMrB,IAAA,CAAA,WAAW,GAAQ,IAAI;QAwBtB,IAAA,CAAA,UAAU,GAAG,IAAI;QACjB,IAAA,CAAA,eAAe,GAAG,GAAG;QACtB,IAAA,CAAA,YAAY,GAAG,GAAG;QACjB,IAAA,CAAA,cAAc,GAAG,CAAC;QAClB,IAAA,CAAA,SAAS,GAAG,GAAG;AAExB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,EAAE;;QAuKnC,IAAA,CAAA,IAAI,GAAG,CAAC,YAAY,GAAG,KAAK,EAAE,KAAW,KAAI;AAChD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;;YAG7E,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YAEnE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,QAAQ,GAAG,SAAS,CAAC;;YAGrF,IAAI,eAAe,GAAG,CAAC;AACvB,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;gBAC/D,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO;AACpD,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,IAAG;AACjF,wBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO;AACtE,4BAAA,eAAe,EAAE;AACzB,oBAAA,CAAC,CAAC;AACV,YAAA,CAAC,CAAC;YAEF,IAAI,eAAe,IAAI,CAAC;AAAE,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe;;AAElE,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACvF,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;YACjC;iBACK;AACD,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;YACjC;AAEA,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;AACpC,YAAA,IAAI,CAAC;AACA,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM;iBAC1B,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA,CAAI,CAAC;AAE9C,YAAA,IAAI,CAAC;iBACA,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;AAEjG,YAAA,IAAI,CAAC;AACA,iBAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU;AAC7B,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;AAErC,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG1D,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;gBAC9E,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC;YACvI;AAAO,iBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;gBACpF,IAAI,CAAC,kBAAkB,EAAE;YAC7B;YACA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC/D,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YAC1F;iBAAO;gBACH,IAAI,CAAC,kBAAkB,EAAE;YAC7B;;AAGA,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAC3D,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;YAC5D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU;YAE5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;AAExE,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxH,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;YAGxH,IAAI,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;YAC7E,IAAI,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;YAE9E,IAAI,OAAO,GAAG,IAAI;AAElB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACxH,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;YAC9E;;AAGA,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAAE;;AAGjC,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,WAAW;iBACvB,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3B,iBAAA,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAEvI,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,WAAW;iBACvB,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAC1B,iBAAA,MAAM,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAEvI,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,WAAW;AACvB,iBAAA,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACrD,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;;YAGzK,IAAI,CAAC,QAAQ,EAAE;;YAGf,IAAI,CAAC,cAAc,EAAE;;YAGrB,IAAI,CAAC,mBAAmB,EAAE;;YAG1B,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU;AAC/C,iBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,KAAI;AACnE,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;oBAC9B,OAAO,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ;gBAClD;qBAAO;oBACH,OAAO,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS;gBACnD;AACJ,YAAA,CAAC,CAAC;YAEN;AACK,iBAAA,KAAK;iBACL,MAAM,CAAC,QAAQ;AACf,iBAAA,IAAI,CAAC,OAAO,EAAE,SAAS;iBACvB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACvD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACxD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACxD,KAAK,CAAC,OAAO;AACb,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC;AACvF,iBAAA,UAAU;AACV,iBAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa;AAC7D,iBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;iBACf,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACvD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACxD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxD,iBAAA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAC5I,iBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAC9I,iBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc;AAC1C,iBAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe;AACzC,iBAAA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;AAEhC,YAAA,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;;YAGvB,IAAI,CAAC,WAAW,EAAE;;YAGlB,IAAI,CAAC,qBAAqB,EAAE;;AAG5B,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACvF,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;AACtF,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,IAAG;oBACnE,IAAI,MAAM,GAAG,MAAK;AACd,wBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE;AAChC,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC;AACvG,oBAAA,CAAC;oBACD,OAAO;wBACH,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EACrH,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE;qBACxG;AACL,gBAAA,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAClI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;YACzJ;iBACK;gBACD,IAAI,IAAI,CAAC,MAAM;AACX,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACxB,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;YACzF;;YAGA,IAAI,CAAC,YAAY,CAAC,IAAI,CAClB,IAAI,CAAC,YAAY,CAAC,MAAM,EACxB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAC9B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAC7B,IAAI,CAAC,YAAY,EACjB,KAAK,CAAC;AAEV,YAAA,IAAI,CAAC;AACA,iBAAA,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,EAAE,CAAA,EAAA,CAAI,CAAC;AAC3F,QAAA,CAAC;;AA2KM,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,YAAoB,EAAE,OAAA,GAAkB,IAAI,KAAI;AACnE,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;YACnF,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC;gBACpD;AAEJ,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG;AAClC,gBAAA,YAAY,EAAE,YAAY;AAC1B,gBAAA,OAAO,GAAG,OAAO,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO;aAC7C;AAEK,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,UAAU,eAAoB,EAAA;gBACtG,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,YAAY,MAAM,eAAe,IAAI,OAAO,CAAC;YAC/F,CAAC,CAAE,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AAE7B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AACtG,QAAA,CAAC;QA7gBG,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE;SACV;IACL;AAEA,IAAA,WAAW,KAAK;IACT,MAAM,CAAC,IAAS,EAAE,OAAY,EAAE,0BAA+B,EAAE,aAAsB,KAAK,EAAA;QAC/F,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,0BAA0B,CAAC;;AAEvD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YACpI,IAAI,cAAc,GAAG,wDAAwD,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;gBAC3G,yIAAyI;AACzI,gBAAA,sDAAsD;AAC1D,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC3B;QACJ;QAEA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE;AAC1E,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE;AAE1H,QAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,0BAA0B,CAAC;AACrI,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC;;AAG7E,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAAE;QAEjC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACpF,IAAI,CAAC,iBAAiB,EAAE;;AAGxB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;;;YAG3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC3C,iBAAA,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;YAErC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK;AAC9C,iBAAA,IAAI,CAAC,OAAO,EAAE,iCAAiC;iBAC/C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAC5C,iBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YAEhC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG;AAChC,iBAAA,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;YAElC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAC/B,iBAAA,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;YAErC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;AAChC,iBAAA,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC;;YAGtC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;AAElG,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;YAGxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;AACnC,iBAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;AAC/B,iBAAA,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;;YAGhC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG;AACpC,iBAAA,IAAI,CAAC,WAAW,EAAE,sBAAsB;AACxC,iBAAA,IAAI,CAAC,OAAO,EAAE,WAAW;AACzB,iBAAA,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAE7B,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AACnB,iBAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB;AACvC,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;iBACZ,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY;AACzC,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;AAEjC,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AACnB,iBAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB;AACvC,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU;AAC1B,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;YAGlB,IAAI,OAAO,GAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AACnC,iBAAA,IAAI,CAAC,OAAO,EAAE,SAAS;AACvB,iBAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM;AAC9B,iBAAA,IAAI,CAAC,WAAW,EAAE,cAAc,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;AAClG,YAAA,OAAO,CAAC,MAAM,CAAC,MAAM;AAChB,iBAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM;AAC9B,iBAAA,IAAI,CAAC,OAAO,EAAE,WAAW;AACzB,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtB,YAAA,OAAO,CAAC,MAAM,CAAC,MAAM;AAChB,iBAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM;AAC9B,iBAAA,IAAI,CAAC,OAAO,EAAE,YAAY;AAC1B,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,iBAAA,IAAI,CAAC,WAAW,EAAE,gBAAgB;iBAClC,IAAI,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC;YAE3B,IAAI,OAAO,GAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AACnC,iBAAA,IAAI,CAAC,OAAO,EAAE,SAAS;AACvB,iBAAA,IAAI,CAAC,WAAW,EAAE,cAAc,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;AAClG,YAAA,OAAO,CAAC,MAAM,CAAC,MAAM;AAChB,iBAAA,IAAI,CAAC,OAAO,EAAE,WAAW;AACzB,iBAAA,IAAI,CAAC,GAAG,EAAE,EAAE;AACZ,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtB,YAAA,OAAO,CAAC,MAAM,CAAC,MAAM;AAChB,iBAAA,IAAI,CAAC,OAAO,EAAE,YAAY;AAC1B,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,iBAAA,IAAI,CAAC,GAAG,EAAE,GAAG;iBACb,IAAI,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC;;YAG3B,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;AACxC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE;AAC3C,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;gBAC1B;AACJ,YAAA,CAAC,CAAC;;YAGF,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;;YAG/F,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;QAC/F;;QAGA,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAI;YACpD,IAAI,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE;AACvG,gBAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAC9C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC;IACpF;IAEQ,cAAc,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE;IAClF;AAEU,IAAA,aAAa,CAAC,CAAM,EAAE,IAAS,EAAE,aAAmC,EAAE,WAAgB,EAAA;QAC5F,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAC/B,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;AACtD,YAAA,IAAI,CAAC,CAAC,SAAS,EAAE;AACb,gBAAA,UAAU,CAAC,MAAM,CAAC,IAAI;AACjB,qBAAA,IAAI,CAAC,OAAO,EAAE,0CAA0C;qBACxD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAC3G;QACJ;IACJ;;IAsLQ,mBAAmB,GAAA;;AAEvB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;YACxC;QACJ;AAEA,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;QACvE,IAAI,kBAAkB,GAAG,EAAE;;AAG3B,QAAA,MAAM,yBAAyB,IAAI,KAAK,IAAG;AACvC,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,sBAAsB;AAC1F,YAAA,OAAO,OAAO,IAAI,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAG,OAAO,GAAG,IAAI;AAChE,QAAA,CAAC,CAAC;;AAGF,QAAA,OAAO,CAAC,OAAO,CAAC,KAAK,IAAG;AACpB,YAAA,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,IAAI,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM;gBAC5F,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE;gBACpE,IAAI,MAAM,GAAG,KAAK,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO;AACrD,gBAAA,IAAI,MAAM,IAAI,kBAAkB,EAAE;oBAC9B,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/C;qBAAO;oBACH,kBAAkB,CAAC,MAAM,CAAC,GAAG;wBACzB,IAAI,EAAE,CAAC,KAAK,CAAC;AACb,wBAAA,sBAAsB,EAAE,yBAAyB,CAAC,KAAK;qBAC1D;gBACL;YACJ;AACJ,QAAA,CAAC,CAAC;;QAGF,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;YAC7C,IAAI,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,sBAAsB;;YAEhE,IAAI,WAAW,EAAE;AACb,gBAAA,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACvC,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;wBAAE,OAAO,EAAE;AAChE,oBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;AAAE,wBAAA,OAAO,CAAC;AAC/D,oBAAA,OAAO,CAAC;AACZ,gBAAA,CAAC,CAAC;YACN;QACJ;AAEA,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI;AACb,aAAA,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpD,aAAA,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACpD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;;QAGpD,IAAI,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA,eAAA,CAAiB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEzG,IAAI,IAAI,GAAG,IAAI;QAEf,eAAe,CAAC,KAAK;aAChB,MAAM,CAAC,GAAG;AACV,aAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB;aAC9B,KAAK,CAAC,eAAe;aACrB,IAAI,CAAC,UAAU,UAAU,EAAA;AACtB,YAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAA0B,CAAA,SAAA,CAAW,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAEhK,YAAA,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;YAEtB;AACK,iBAAA,KAAK;iBACL,MAAM,CAAC,MAAM;AACb,iBAAA,IAAI,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU;iBACxB,KAAK,CAAC,MAAM;AACZ,iBAAA,IAAI,CAAC,MAAM,EAAE,MAAM;AACnB,iBAAA,UAAU;AACV,iBAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa;AAC7D,iBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AACpJ,iBAAA,IAAI,CAAC,cAAc,EAAE,GAAG;AACxB,iBAAA,IAAI,CAAC,iBAAiB,EAAE,OAAO;AAC/B,iBAAA,IAAI,CAAC,gBAAgB,EAAE,OAAO;AAC9B,iBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;AACxB,QAAA,CAAC,CAAC;AAEN,QAAA,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACnC;;IAGQ,mBAAmB,GAAA;QACvB,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,IAAI,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI;QACf;QACA,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,IAAG;AAC3C,YAAA,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAM,KAAI;gBAC1E,IAAI,CAAC,CAAC,CAAC,QAAQ;AACX,oBAAA,OAAO,IAAI;AACf,gBAAA,OAAO,OAAO,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI;AAC7D,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,IAAG;YACrC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAG;AAC5B,gBAAA,IAAI,EAAE,IAAI,SAAS,EAAE;AACjB,oBAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC;AAC1C,oBAAA,OAAO,KAAK;gBAChB;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACf;;IAGQ,WAAW,GAAA;AACf,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;QAChF,IAAI,IAAI,GAAG,IAAI;;AAGf,QAAA,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,GAAG,KAAI;AAClC,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;AAC5C,QAAA,CAAC;AACD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC;AAEjF,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO;aAC3B,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,EAAE;aAClE,CAAC,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,EAAE;AAClE,aAAA,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAE1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAE/C,QAAA,IAAI,CAAC;AACA,aAAA,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAA;YAC5B,IAAI,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACrC,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAA;YAC5B,IAAI,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACjC,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,IAAI,IAAI,IAAI;AACZ,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACtE,QAAA,CAAC;aACA,EAAE,CAAC,UAAU,EAAE,YAAA;YACZ,IAAI,CAAC,eAAe,EAAE;AAC1B,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;YACxB,IAAI,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AACjC,QAAA,CAAC,CAAC;IACV;;AAGQ,IAAA,YAAY,CAAC,UAAe,EAAA;AAChC,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,IAAI,IAAI,IAAI;YAAE;;AAEZ,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAE,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;QAEhG,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI,EAAE;AAC7C,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI;;AAE1C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAClG,YAAA,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACvE;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5D,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACzE;;AAqBQ,IAAA,YAAY,CAAC,IAAI,EAAA;;QAGrB,IAAI,CAAC,cAAc,EAAE;;AAErB,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,OAAO,GAAG,OAAO,GAAG,OAAO;AAC3E,QAAA,IAAI,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAE5H,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;AAErD,QAAA,IAAI,CAAC;AACA,aAAA,IAAI,CAAC,QAAQ,EAAE,cAAc;AAC7B,aAAA,IAAI,CAAC,cAAc,EAAE,KAAK;;aAE1B,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;IAExC;;AAGQ,IAAA,YAAY,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB,EAAE,SAAiB,EAAA;QACrF,OAAO,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC;IACzF;;IAGQ,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC;AACA,iBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAC9I,iBAAA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;QACpC;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACzB;;IAGQ,cAAc,CAAC,MAAc,EAAE,OAAe,EAAA;AAClD,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE;YAClE,IAAI,cAAc,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC;AAC7D,YAAA,IAAI,SAAS,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC;AAEhF,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU;iBACjC,MAAM,CAAC,cAAc;AACrB,iBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc;AAC1C,iBAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;AAE5C,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU;iBACjC,MAAM,CAAC,SAAS;AAChB,iBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS;AACrC,iBAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC;AAE1C,YAAA,IAAI,kBAAkB,GAAG,CAAC,CAAM,KAAI;AAChC,gBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO;AACpE,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW;iBAClC,MAAM,CAAC,CAAC,CAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC;AACxC,iBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC;AAEhD,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW;iBAClC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACzC,iBAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC;AAE3C,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,OAAO;QACjC;;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;;AAE1C,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;;AAGlD,QAAA,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,UAAU,eAAuB,EAAA;YACpG,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,MAAM,MAAM,eAAe,IAAI,OAAO,CAAC;QACzF,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;IAChC;;AAGQ,IAAA,gBAAgB,CAAC,UAAe,EAAA;AACpC,QAAA,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QACrD,IAAI,IAAI,IAAI,IAAI;YAAE;;AAGlB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACtB,aAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;YAAE;AAEnC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;;QAGvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACpF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;AAGpF,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU;AACvB,aAAA,IAAI,CAAC,WAAW,EAAE,cAAc,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;aACrE,MAAM,CAAC,MAAM;AACb,aAAA,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;AACvE,QAAA,IAAI,kBAAkB,GAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM;AACrE,aAAA,IAAI,EAAG,CAAC,qBAAqB,EAAE;QACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM;AACtC,aAAA,IAAI,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;aAC7C,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK,GAAG,CAAC;aAC1C,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;;AAGlD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU;AACvB,aAAA,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;aACnD,MAAM,CAAC,MAAM;AACb,aAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrE,QAAA,kBAAkB,GAAS,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM;AACjE,aAAA,IAAI,EAAG,CAAC,qBAAqB,EAAE;QACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM;aACtC,IAAI,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE;AAC1C,aAAA,IAAI,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;aAC9C,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK,GAAG,CAAC;aAC1C,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;AAElD,QAAA,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IACpF;;IAGQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACnB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,cAAc,EAAE;IACzB;;AAGQ,IAAA,cAAc,CAAC,OAAmB,EAAA;QACtC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAEvC,IAAI,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACxC,YAAA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO;AAChE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO;AACxF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI;AAAE,YAAA,OAAO,cAAc;QAEtE,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAM,KAAI;YAClD,OAAO,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,YAAY;AACrE,iBAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI;oBACzD,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC;AACrE,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,cAAc;IACzB;;AAGQ,IAAA,cAAc,CAAC,MAAc,EAAE,OAAA,GAAkB,IAAI,EAAA;;AAEpD,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;;AAG7F,QAAA,IAAI,cAAc,GAAG,CAAC,CAAM,KAAI;AAC5B,YAAA,IAAI,UAAU,GAAG,IAAI,EAAE,WAAW,GAAG,IAAI;AACzC,YAAA,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI;AAAE,gBAAA,UAAU,GAAG,CAAC,CAAC,YAAY;AACvD,YAAA,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI;AAAE,gBAAA,WAAW,GAAG,CAAC,CAAC,OAAO;YAE9C,IAAI,OAAO,IAAI,IAAI;gBACf,OAAO,UAAU,IAAI,MAAM;AAE/B,YAAA,IAAI,UAAU,IAAI,MAAM,IAAI,WAAW,IAAI,OAAO;AAC9C,gBAAA,OAAO,KAAK;AAChB,YAAA,OAAO,IAAI;AACf,QAAA,CAAC;;AAGD,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU;aACjC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AACrC,aAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc;AAC1C,aAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;;AAG5C,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU;aACjC,MAAM,CAAC,cAAc;AACrB,aAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS;AACrC,aAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC;;AAG1C,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,WAAW;aAClC,MAAM,CAAC,CAAC,CAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;AAC9E,aAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC;IAE/C;;IAGQ,aAAa,GAAA;;AAEZ,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;AAE7F,QAAA,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU;AACtB,aAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc;AAC1C,aAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe;AACzC,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAC9I,aAAA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAC5I,aAAA,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;AAEhC,QAAA,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW;AACvB,aAAA,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC;IACpD;;AAGQ,IAAA,SAAS,CAAC,IAAgB,EAAA;;;QAG9B,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YACjC,IAAI,KAAK,GAAG,IAAI;YAChB,IAAI,CAAC,YAAY,CAAC;AACb,iBAAA,OAAO,CAAC,CAAC,OAAO,KAAI;AACjB,gBAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI;oBAAE,KAAK,GAAG,KAAK;qBACpC,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;oBACnC,KAAK,GAAG,KAAK;gBACjB;AACJ,YAAA,CAAC,CAAC;AACN,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACnB;;IAGQ,iBAAiB,CAAC,YAAY,GAAG,KAAK,EAAA;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;AAC/F,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AACjF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,YAAY,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;QAC1C;IACJ;;IAGQ,QAAQ,GAAA;;QAEZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK;aACX,MAAM,CAAC,GAAG;AACV,aAAA,IAAI,CAAC,OAAO,EAAE,OAAO;AACrB,aAAA,KAAK,CAAC,IAAI,CAAC,KAAK;AAChB,aAAA,IAAI,CAAC,WAAW,EAAE,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG;AAC3D,aAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3F,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;;QAG1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK;aACX,MAAM,CAAC,GAAG;AACV,aAAA,IAAI,CAAC,OAAO,EAAE,OAAO;AACrB,aAAA,KAAK,CAAC,IAAI,CAAC,KAAK;AAChB,aAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IAC9B;;IAGQ,cAAc,GAAA;QAClB,IAAI,IAAI,GAAG,IAAI;QACf,IAAI,UAAU,EAAE,UAAU;AAE1B,QAAA,MAAM,kBAAkB,GAAG,CAAC,aAAa,EAAE,eAAuB,KAAI;AAClE,YAAA,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;gBACpE,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;AAC7D,gBAAA,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE;gBAC/B,OAAO,UAAU,GAAG,eAAe,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACxB,oBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;oBAChC,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;gBAC7D;YACJ;AACJ,QAAA,CAAC;;AAGD,QAAA,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC;AACjF,YAAA,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,EAAE;AAEtE,QAAA,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC;AACjF,YAAA,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,EAAE;AAEtE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACjF,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC;AACjB,aAAA,KAAK;aACL,MAAM,CAAC,MAAM;AACb,aAAA,IAAI,CAAC,OAAO,EAAE,8BAA8B;AAC5C,aAAA,KAAK,CAAC,IAAI,CAAC,UAAU;AACrB,aAAA,KAAK,CAAC,aAAa,EAAE,QAAQ;aAC7B,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,GAAG;aAC7F,IAAI,CAAC,IAAI,CAAC;AACf,QAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;YACvB,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3B,YAAA,KAAK,CAAC,iCAAiC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtE,QAAA,CAAC,CAAC;;QAEF,IAAI,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACzC,YAAA,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;aAC9C;AACD,YAAA,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAA;gBAC/B,IAAI,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACxC,gBAAA,kBAAkB,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAClG,YAAA,CAAC,CAAC;QACN;QACA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE/B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACjF,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC;AACjB,aAAA,KAAK;aACL,MAAM,CAAC,MAAM;AACb,aAAA,IAAI,CAAC,OAAO,EAAE,8BAA8B;AAC5C,aAAA,KAAK,CAAC,IAAI,CAAC,UAAU;AACrB,aAAA,KAAK,CAAC,aAAa,EAAE,QAAQ;aAC7B,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,eAAe;aACxF,IAAI,CAAC,IAAI,CAAC;AACf,QAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;YACvB,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3B,YAAA,KAAK,CAAC,iCAAiC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtE,QAAA,CAAC,CAAC;;QAEF,IAAI,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACzC,YAAA,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;aAC/C;AACD,YAAA,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAA;gBAC/B,IAAI,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACxC,gBAAA,kBAAkB,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACnG,YAAA,CAAC,CAAC;QACN;QACA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACnC;;IAGQ,WAAW,CAAC,CAAM,EAAE,aAAa,EAAA;AAErC,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;YAE3B,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;AAChD,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;AACxB,gBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnC;YAEA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,KAAI;AAClF,gBAAA,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI;AAC3E,gBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC;AAC1E,YAAA,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAC9I;IACJ;;IAGQ,sBAAsB,GAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW;IACzF;IAEQ,qBAAqB,GAAA;AACzB,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU;IACxF;AAEH;;ACr6BD,MAAM,eAAgB,SAAQ,2BAA2B,CAAA;AAQrD,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QALf,IAAA,CAAA,SAAS,GAAY,IAAI;QACzB,IAAA,CAAA,aAAa,GAAQ,IAAI;AACjC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,mBAAmB,EAAE;QAI1C,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE;SACV;IACL;AAEA,IAAA,eAAe,KAAK;AACb,IAAA,MAAM,CAAC,IAAS,EAAE,OAAY,EAAE,0BAA+B,EAAA;QAClE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,0BAA0B,CAAC;AACvD,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;YACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO;QAC9C;QAEA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE;QAE1E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC5F,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;AAE9F,QAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,0BAA0B,CAAC;AACxH,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,SAAS,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAEhI,QAAA,IAAI,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG;AAC3E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AAEtC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;YAC3B,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC1C,iBAAA,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;AAClC,YAAA,IAAI,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK;AACxC,iBAAA,IAAI,CAAC,OAAO,EAAE,8BAA8B;iBAC5C,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AACzC,iBAAA,KAAK,CAAC,QAAQ,EAAE,MAAM;iBACtB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC;AAC9C,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAGhC,YAAA,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG;iBAC1B,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;AAEjG,YAAA,IAAI,QAAQ,GAAQ,CAAC,CAAC,MAAM,CAAC,MAAM;AAC9B,iBAAA,OAAO,CAAC,cAAc,EAAE,IAAI;AAC5B,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAE5B,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG;AACnB,iBAAA,IAAI,CAAC,WAAW,EAAE,sBAAsB;AACxC,iBAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AAC/B,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM;AACd,iBAAA,IAAI,CAAC,OAAO,EAAE,eAAe;AAC7B,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU;AAC1B,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,iBAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAClB,YAAA,IAAI,OAAO,GAAQ,KAAK,CAAC,MAAM,CAAC,GAAG;AAC9B,iBAAA,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;AAC7B,YAAqB,OAAO,CAAC,MAAM,CAAC,MAAM;AACrC,iBAAA,IAAI,CAAC,OAAO,EAAE,WAAW;AACzB,iBAAA,IAAI,CAAC,GAAG,EAAE,EAAE;AACZ,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,iBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;AACrB,YAAsB,OAAO,CAAC,MAAM,CAAC,MAAM;AACtC,iBAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB;AACpC,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,iBAAA,IAAI,CAAC,GAAG,EAAE,GAAG;AACb,iBAAA,IAAI,CAAC,CAAC,IAAI,CAAC;AAEhB,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;AAE7E,YAAA,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAEvD,YAAiB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,KAAI;gBAC5C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9C,gBAAqB,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;AAE9E,YAAA,CAAC;YAED,IAAI,cAAc,GAAG,CAAC,MAAc,EAAE,OAAA,GAAkB,IAAI,KAAI;gBAC5D,IAAI,IAAI,GAAG,IAAI;AACf,gBAAA,YAAY,CAAC,SAAS,CAAC,mBAAmB;AACrC,qBAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,qBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;;AAE5B,gBAAA,IAAI,cAAc,GAAG,CAAC,CAAM,EAAE,CAAS,KAAI;AACvC,oBAAA,IAAI,UAAkB;AACtB,oBAAA,IAAI,WAAmB;AACvB,oBAAA,IAAI,CAAC,CAAC,MAAM,EAAE;AACV,wBAAA,UAAU,GAAG,CAAC,CAAC,MAAM;AACrB,wBAAA,WAAW,GAAG,CAAC,CAAC,OAAO;oBAC3B;AAAO,yBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;AACtB,wBAAA,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AACxB,wBAAA,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;oBAC9B;;AACI,wBAAA,OAAO,IAAI;AACf,oBAAA,OAAO,EAAE,MAAM,IAAI,UAAU,KAAK,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,WAAW,CAAC,CAAC;AACjF,gBAAA,CAAC;AAED,gBAAA,YAAY,CAAC,SAAS,CAAC,mBAAmB;qBACrC,MAAM,CAAC,cAAc;AACrB,qBAAA,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACzB,qBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AAC7B,gBAAA,IAAI,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW;AACxC,qBAAA,MAAM,CAAC,CAAC,CAAM,KAAI;oBACf,OAAO,CAAC,IAAI,MAAM;AACtB,gBAAA,CAAC;AACA,qBAAA,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpD,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEpC,gBAAA,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;gBAC5E,KAAK,CAAC,iCAAiC,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,CAAC;AAC9K,gBAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;AAChF,gBAAA,KAAK,CAAC,iCAAiC,CAAC,iBAAiB,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,CAAC;gBAEtI,iBAAiB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;AACzE,oBAAA,IAAI,CAAC,IAAI,CAAC,EAAE;AACR,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;6BACnC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,6BAAA,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI;AAC/B,6BAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;oBACtC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,yBAAyB,CAAC,YAAY,EAAE,MAAM,CAAC;AACnD,YAAA,CAAC;AAED,YAAA,IAAI,aAAa,GAAG,CAAC,YAAY,EAAE,MAAM,KAAI;gBACzC,IAAI,IAAI,GAAG,IAAI;AACf,gBAAA,IAAI,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW;qBAC3C,SAAS,CAAC,aAAa;qBACvB,SAAS,CAAC,MAAM;qBAChB,IAAI,CAAC,IAAI,CAAC;AACf,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,EAAA;oBACzB,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC1B,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE;wBAC3D,KAAK,CAAC,iCAAiC,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,CAAC;oBACzK;AACJ,gBAAA,CAAC,CAAC;gBACF,yBAAyB,CAAC,YAAY,CAAC;AAC3C,YAAA,CAAC;YAED,IAAI,eAAe,GAAG,MAAK;gBACvB,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAChG,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;AAC9D,YAAA,CAAC;YAED,IAAI,yBAAyB,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,KAAI;AAC5D,gBAAA,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;oBAChD,IAAI,MAAM,IAAI,IAAI;AACd,wBAAA,OAAO,IAAI;oBACf,OAAO,CAAC,IAAI,MAAM;AACtB,gBAAA,CAAC;AACI,qBAAA,IAAI,CAAC,YAAA;oBACF,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI;wBACnE;oBACJ,IAAI,kBAAkB,GAAS,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI;AACnF,yBAAA,qBAAqB,EAAE;AAC5B,oBAAA,IAAI,WAAW,GAAG,eAAe,EAAE;AACnC,oBAAqB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO;;AAGjD,oBAAA,IAAI,aAAa,GAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;oBAE7E,IAAI,YAAY,GAAG,CAAC,aAAa,EAAE,YAAY,GAAG,CAAC,KAAI;AACnD,wBAAA,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;4BAC5C,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;AAC7D,4BAAA,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE;AAC/B,4BAAA,OAAO,UAAU,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gCACvE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACxB,gCAAA,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gCAChC,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;4BAC7D;wBACJ;AACJ,oBAAA,CAAC;;AAGD,oBAAA,IAAI,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAA,EAAc,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;wBAC3H,YAAY,CAAC,aAAa,CAAC;yBAC1B;AACD,wBAAA,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,YAAA,EAAc,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAA;4BAChH,IAAI,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACxC,4BAAA,IAAI,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,2BAA2B,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,IAAI,EAAE;AAC1M,4BAAA,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC;AAClD,wBAAA,CAAC,CAAC;oBACN;AAEA,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM;yBAC9C,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAC5C,yBAAA,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC;AACzB,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,yBAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;AACnC,gBAAA,CAAC,CAAC;AACV,YAAA,CAAC;AAED,YAAA,IAAI,IAAI,GAAG,CAAC,YAAY,GAAG,KAAK,KAAI;gBAChC,IAAI,IAAI,GAAG,IAAI;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC5B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;AAE1F,gBAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC5J,gBAAA,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE;gBAE/C,IAAI,CAAC,YAAY,EAAE;AACf,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;gBAC1C;gBAEA,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAErD,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;oBAC9E,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC;oBAEnI,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ;AACvD,yBAAA,KAAK,CAAC,MAAM,EAAE,MAAM;yBACpB,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAA;wBAC5C,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO;wBACtD,IAAI,CAAC,IAAI,EAAE;AACf,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,MAAM,EAAE,QAAQ;yBACrB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;gBAC5D;AAAO,qBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;oBACpF,IAAI,CAAC,kBAAkB,EAAE;gBAC7B;AAEA,gBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBACpI;gBAEA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;oBAC/D,IAAI,CAAC,gBAAgB,EAAE;oBACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC1F;qBAAO;oBACH,IAAI,CAAC,kBAAkB,EAAE;gBAC7B;;gBAIA,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AACrD,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE;;AAEjC,gBAAA,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG;AACvE,gBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAEhD,gBAAA,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA,CAAI,CAAC;gBACtD,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,OAAO;oBACrF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;gBAEjF,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAEhG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG;qBAC/G,SAAS,CAAC,WAAW;AACrB,qBAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;gBACjC,IAAI,SAAS,GAAG,CAAC,CAAC,SAAS,CAAuB,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACtH,gBAAA,IAAI,iBAAiB,GAAG,eAAe,EAAE;;AAGzC,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,KAAI;AACrF,oBAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,cAAc,GAAG,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC;AACtG,oBAAA,OAAO,GAAG;gBACd,CAAC,EAAE,EAAE,CAAC;gBAEN,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,cAAc,EACpF,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC;AAEnD,gBAAA,SAAS,GAAG,SAAS,CAAC,KAAK;qBACtB,MAAM,CAAC,GAAG;AACV,qBAAA,IAAI,CAAC,OAAO,EAAE,UAAU;qBACxB,KAAK,CAAC,SAAS;AACf,qBAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,QAAQ,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC;AAC5G,qBAAA,IAAI,CAAC,YAAY,EAAE,SAAS;qBAC5B,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;oBACxB,IAAI,OAAO,CAAC,CAAC,CAAC;wBACV,OAAO,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;AAC5C,oBAAA,OAAO,EAAE;AACb,gBAAA,CAAC,CAAC;gBAEN,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC;AACjF,gBAAA,IAAI,SAAS,GAAkB,IAAI,CAAC,kBAAkB,CAAC,mBAAmB;AAC1E,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU;AAEnD,gBAAA,IAAI,MAAM,GAAG,EAAE,CAAC,WAAW;AACtB,qBAAA,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;oBAC5B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC7B,4BAAA,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;AACb,gCAAA,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE3C,gCAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACtF;6BACK;4BACD,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACtD,4BAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;wBACzF;oBACJ;yBAAO;wBACH,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzB;gBACJ;qBAAO;AACH,oBAAA,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAC7F,wBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;gBACpF;AAEA,gBAAA,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAE/E,gBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY;AACpC,gBAAA,SAAS,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,EAAA;AAC9B,oBAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;oBACjF,IAAI,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC/C,wBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO;AACjF,oBAAA,CAAC,CAAC;AAEF,oBAAA,IAAI,YAAY,GAAG,gBAAgB,CAAC,MAAM;AAC1C,oBAAA,IAAI,QAAQ,GAAG,iBAAiB,GAAG,YAAY;oBAE/C,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAuB,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;oBAEpJ,IAAI,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAuB,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9F,oBAAA,IAAI,iBAAiB,GAAG,UAAU,CAAC,KAAK;yBACnC,MAAM,CAAC,GAAG;AACV,yBAAA,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAChC,oBAAA,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC,oBAAA,IAAI,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM;AAC/C,yBAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;oBACxB,KAAK,CAAC,iCAAiC,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,CAAC;AAE/K,oBAAyB,iBAAiB,CAAC,KAAK,CAAC,UAAU;yBACtD,MAAM,CAAC,MAAM;AACb,yBAAA,IAAI,CAAC,OAAO,EAAE,mBAAmB;AACjC,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,yBAAA,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,yBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC;AAErB,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,MAAM;AAC9C,yBAAA,UAAU;AACV,yBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa;AAC3B,yBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACxC,yBAAA,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,EAAE;AAC1B,yBAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK;AACvE,yBAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAElC,oBAAA,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE1B,oBAAA,yBAAyB,CAAC,YAAY,EAAE,MAAM,CAAC;AAE/C,oBAAA,IAAI,MAAM,GAAG,EAAE,CAAC,WAAW;AACtB,yBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC;AACxB,yBAAA,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;;AAGlC,oBAAc,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,KAAI;AACpE,wBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW;wBAC5F,IAAI,UAAU,CAAC;AACf,wBAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY;4BAChF,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;;4BAElH,UAAU,GAAG,CAAC;wBAClB,OAAO,MAAM,GAAG,UAAU;oBAC9B,CAAC,EAAE,CAAC;;AAGJ,oBAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,KAAI;AACpB,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC5B,4BAAA,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AACT,gCAAA,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;AACxB,4BAAA,OAAO,MAAM,CAAC,CAAC,CAAC;wBACpB;wBACA,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AACvE,4BAAA,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChD;AACA,wBAAA,OAAO,CAAC;AACZ,oBAAA,CAAC;;oBAGD,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,KAAI;AACrC,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;4BAC5B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;gCACvB,OAAO,WAAW,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACvC,4BAAA,MAAM,GAAG,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG;4BAC1C,IAAI,MAAM,GAAG,CAAC;AACV,gCAAA,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;4BAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;wBACrC;wBACA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3D,oBAAA,CAAC;;AAGD,oBAAA,IAAI,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,KAAI;wBACpE,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC/B,wBAAA,OAAO,GAAG;oBACd,CAAC,EAAE,EAAE,CAAC;AAEN,oBAAA,IAAI,oBAAoB,GAAG,aAAa,CAAC,KAAK;yBACzC,MAAM,CAAC,GAAG;AACV,yBAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;AACtC,oBAAA,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,oBAAA,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;AAGnC,oBAAA,IAAI,oBAAoB,GAAG,CAAC,KAAK,EAAE,CAAC,KAAI;wBACpC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB;4BACvD;AACJ,wBAAA,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;wBACxB,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,UAAU,eAAuB,EAAA;4BACpG,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,eAAe,IAAI,CAAC,CAAC,OAAO,CAAC;wBAC7F,CAAC,CAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;wBAC7B,KAAK,CAAC,eAAe,EAAE;AACvB,wBAAA,YAAY,CAAC,SAAS,CAAC,mBAAmB;AACrC,6BAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,6BAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC5B,wBAAA,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;wBACrC,OAAO,CAAC,IAAI,EAAE;AAClB,oBAAA,CAAC;oBACD,IAAI,sCAAsC,GAAG,MAAK;wBAC9C,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACrE,oBAAA,CAAC;oBAED,IAAI,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAC/H,oBAAA,oBAAoB,CAAC,KAAK,CAAC,aAAa;yBACnC,MAAM,CAAc,MAAM;yBAC1B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACnB,wBAAA,OAAO,aAAa,CAAC,CAAC,CAAC;AAC3B,oBAAA,CAAC;AACA,yBAAA,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;wBAC/B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB;4BACvD;AAEJ,wBAAA,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,UAAU,eAAuB,EAAA;4BAC/F,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,eAAe,IAAI,CAAC,CAAC,OAAO,CAAC;wBAC7F,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;wBAC5B,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;AAEnC,wBAAA,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,EAAE;wBACtC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;wBACxC,IAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,wBAAA,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE;4BACX,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;wBAClC;AACA,wBAAA,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO;6BACzB,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,IAAI,GAAG,GAAG,CAAC;AAEnD,wBAAA,KAAK,CAAC,MAAM,CAAC,UAAU;6BAClB,MAAM,CAAC,MAAM;6BACb,IAAI,CAAC,MAAK;AACP,4BAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO;gCAC1B,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC;AACzC,4BAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,4BAAA,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AACT,gCAAA,IAAI,IAAI,CAAC,CAAC,GAAG;AACjB,4BAAA,OAAO,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxC,wBAAA,CAAC,CAAC;AACN,wBAAA,IAAI,kBAAkB,GAAS,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM;AAChE,6BAAA,IAAI,EAAG,CAAC,qBAAqB,EAAE;wBACpC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM;6BACjC,IAAI,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,EAAE;AAC1C,6BAAA,IAAI,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;6BAC9C,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,KAAK,GAAG,CAAC;6BAC1C,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;AAE5C,wBAAA,KAAK,CAAC,IAAI,EAAG,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5D,oBAAA,CAAC;AACA,yBAAA,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;AAC/B,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3B,4BAAA,MAAM,CAAC,GAAG,oBAAoB,CAAC,KAAK,EAAE;4BACtC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACxC,4BAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAO,CAAC,CAAC,IAAI,EAAE,CAAC;4BAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;4BACvC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,KAAI;AAC3F,gCAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,CAAC;AAChG,4BAAA,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;wBACtC;6BAAO;4BACH,OAAO,CAAC,IAAI,EAAE;wBAClB;AACJ,oBAAA,CAAC;AACA,yBAAA,EAAE,CAAC,UAAU,EAAE,oBAAoB;yBACnC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,CAAM,KAAI;wBACjC,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB;AACjE,4BAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;AAC1E,4BAAA,IAAI,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAO,aAAa,CAAC,IAAI,EAAE,CAAC;4BAChE,KAAK,CAAC,cAAc,EAAE;AACtB,4BAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,sCAAsC,EAC1E,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;wBACpD;AACJ,oBAAA,CAAC;AACA,yBAAA,UAAU;AACV,yBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa;AAC3B,yBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;AACf,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;yBAClC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACrB,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;AACrE,4BAAA,OAAO,CAAC;AACZ,wBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACxC,oBAAA,CAAC;AACA,yBAAA,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,EAAA;AACrB,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;AACzB,4BAAA,OAAO,CAAC;AACZ,wBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS;AACtC,4BAAA,OAAO,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;;AAEpC,wBAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;AACjF,wBAAA,IAAI,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC7B,wBAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;4BAChE,IAAI,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS;AAC/C,gCAAA,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC;wBACxC;AACA,wBAAA,IAAI,cAAc,CAAC,WAAW,CAAC,IAAI,SAAS;AACxC,4BAAA,OAAO,cAAc,CAAC,WAAW,CAAC,GAAG,QAAQ;AACjD,wBAAA,OAAO,CAAC;AACZ,oBAAA,CAAC;yBACA,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACpB,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;AACzB,4BAAA,OAAO,iBAAiB;AAC5B,wBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS;AACtC,4BAAA,OAAO,QAAQ;AACnB,wBAAA,OAAO,CAAC;AACZ,oBAAA,CAAC,CAAC;AAEN,oBAAA,oBAAoB,CAAC,KAAK,CAAC,aAAa;yBACnC,MAAM,CAAC,MAAM;AACb,yBAAA,OAAO,CAAC,cAAc,EAAE,IAAI;AAC5B,yBAAA,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,yBAAA,UAAU;AACV,yBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa;AAC3B,yBAAA,IAAI,CAAC,EAAE,CAAC,OAAO;yBACf,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACjB,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;AACzB,4BAAA,OAAO,CAAC;AACZ,wBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS;AACtC,4BAAA,OAAO,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;AACpC,wBAAA,OAAO,CAAC;AACZ,oBAAA,CAAC;yBACA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACjB,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO;AACzB,4BAAA,OAAO,iBAAiB;AAC5B,wBAAA,IAAI,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS;4BACtC,OAAO,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,QAAQ;AAC/C,wBAAA,OAAO,CAAC;AACZ,oBAAA,CAAC;yBACA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACjB,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC5B,4BAAA,OAAO,OAAO;wBAClB;AACA,wBAAa,CAAC,CAAC;AACf,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;AACrE,4BAAA,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,wBAAA,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5C,oBAAA,CAAC;yBACA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACjB,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AAC5B,4BAAA,OAAO,OAAO;wBAClB;AACA,wBAAa,CAAC,CAAC;AACf,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;AACrE,4BAAA,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,wBAAA,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5C,oBAAA,CAAC,CAAC;AACN,oBAAA,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACjC,gBAAA,CAAC,CAAC;AACF,gBAAA,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAEzB,gBAAA,IAAI,KAAK,GAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ;AAChC,qBAAA,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;gBACnB,KAAK,CAAC,KAAK;qBACN,MAAM,CAAC,GAAG;AACV,qBAAA,IAAI,CAAC,OAAO,EAAE,OAAO;qBACrB,KAAK,CAAC,KAAK;qBACX,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,gBAAA,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;gBAErB;AACK,qBAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,qBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU;AAC1B,qBAAA,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC;AACtB,qBAAA,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;;gBAG5B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE;qBACjE,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,OAAO;qBAC5D,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,MAAM,CAAC;;gBAGhE,IAAI,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;AACtF,oBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,IAAG;wBAC9D,IAAI,MAAM,GAAG,MAAK;AACd,4BAAA,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE;AAChC,4BAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,0BAA0B,CAAC;AACjG,wBAAA,CAAC;wBACD,OAAO;4BACH,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC3F,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE;yBAClI;AACL,oBAAA,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAC3F,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAC5F,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC/F;qBACK;oBACD,MAAM,CAAC,MAAM,EAAE;AACf,oBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;gBACzF;gBAEA,IAAI,CAAC,qBAAqB,EAAE;AAChC,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;AAC3E,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;;YAGhE,IAAI,MAAM,GAAG,IAAI,MAAM,CAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;AAE9F,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB;oBACzC,IAAI,CAAC,IAAI,EAAE;AACnB,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAI;YACpD,IAAI,IAAI,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE;AACvG,gBAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC;YAC9C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,0BAA0B,CAAC;QACxH,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;IACnF;AACH;;sBCxoBD,MAAM,aAAa,CAAA;IAef,WAAA,CAAY,IAAY,EAAE,KAAa,EAAA;QAZhC,IAAA,CAAA,QAAQ,GAAyB,EAAE;QAEnC,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,UAAU,GAAY,KAAK;QAC3B,IAAA,CAAA,MAAM,GAAY,KAAK;QACvB,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,YAAY,GAAY,KAAK;AAC7B,QAAA,IAAA,CAAA,KAAK,GAAiC,MAAM,IAAI;AAChD,QAAA,IAAA,CAAA,KAAK,GAAG,CAAC,CAAC,KAAI,EAAG,CAAC;AAClB,QAAA,IAAA,CAAA,YAAY,GAAY,KAAK,CAAC;AAIjC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IAC1B;AAEO,IAAA,MAAM,CAAC,UAAU,EAAA;QACpB,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;AACxC,QAAA,IAAI,UAAU,GAAG,CAAC,IAAI,KAAI;AACtB,YAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACjD,gBAAA,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACtB,gBAAA,OAAO,CAAC;YACZ,CAAC,EAAE,KAAK,CAAC;YACT,IAAI,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,IAAI,CAAC,UAAU,GAAG,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AAC9E,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,YAAY,IAAI,gBAAgB,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;YAC9F,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YACzD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YACjE,OAAO,gBAAgB,IAAI,YAAY;AAC3C,QAAA,CAAC;QACD,UAAU,CAAC,IAAI,CAAC;IACpB;AAEO,IAAA,QAAQ,CAAC,SAAwC,EAAA;QACpD,IAAI,SAAS,GAAG,EAAE;QAClB,IAAI,SAAS,CAAC,IAAI,CAAC;AACf,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,YAAA,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACvD,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;AAEO,IAAA,QAAQ,CAAC,EAAE,EAAA;AACd,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClD,YAAA,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM;AAC/B,YAAA,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC;IAC1C;AAEH;;ACpDD,MAAM,SAAU,SAAQ,SAAS,CAAA;AAQ7B,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QARf,IAAA,CAAA,UAAU,GAAG,EAAE;QAEf,IAAA,CAAA,eAAe,GAAY,KAAK;AAwGjC,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,IAAmB,EAAE,EAAE,EAAE,WAAW,GAAG,KAAK,EAAE,KAAW,KAAI;YACtF,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;gBAC5E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;AAC3B,gBAAA,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YAC3B;iBACK;gBACD,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,EAAE;oBAC3C,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;AAC/B,wBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,EAAE;wBAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;wBACnD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AACrD,4BAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClF,wBAAA,CAAC,CAAC;AACF,wBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;wBACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;4BACrD,IAAI,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjC,4BAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA,EAAG,WAAW,CAAA,CAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvF,wBAAA,CAAC,CAAC;wBACF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC;wBAC1D,IAAI,KAAK,EAAE;AACP,4BAAA,IAAI,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC/D,4BAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;4BAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAA,KAAA,EAAQ,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC;wBACnF;AACA,wBAAA,EAAE,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;wBACtC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK,EAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA,CAAC,CAAC,CAAC;oBAC9F;yBACK;AACD,wBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;oBAC3B;gBACJ;qBACK;oBACD,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AAC1B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAG;wBACtB,IAAI,WAAW,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,gBAAgB,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;4BACzG,IAAI,IAAI,GAAG,IAAI;AACf,4BAAA,IAAI,WAAW,GAAG,YAAA;AACd,gCAAA,IAAI,CAAC,CAAC,MAAM,EAAE;AACV,oCAAA,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM;AACrB,oCAAA,OAAO,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACxB,wCAAA,MAAM,CAAC,UAAU,GAAG,IAAI;AACxB,wCAAA,MAAM,GAAG,MAAM,CAAC,MAAM;oCAC1B;AACA,oCAAA,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU;AAC5B,oCAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oCACV,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9B,oCAAA,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;oCACpB,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC;gCAClD;qCACK;AACD,oCAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;gCAC5D;gCACA,KAAK,CAAC,eAAe,EAAE;AAC3B,4BAAA,CAAC;AAED,4BAAA,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM;iCAClD,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe;AAChE,iCAAA,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;AAEnE,4BAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,EAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAA,EAAA,CAAI,CAAC;4BAC3F,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/D,iCAAA,IAAI,CAAC,OAAO,EAAE,CAAA,cAAA,EAAiB,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI;iCAC9G,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AACxE,4BAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAEd,4BAAA,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;gCACnD,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC;4BACtD;wBACJ;AACJ,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,WAAW,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;AACzE,oBAAA,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;gBACpC;YACJ;AACJ,QAAA,CAAC;IA7KD;IAEO,MAAM,CAAC,IAAS,EAAE,OAAY,EAAA;QACjC,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;AAC/E,QAAA,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI;AAE3B,QAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAI;AACpD,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;gBAC1E,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YAC3B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,oBAAoB;AACxB,QAAA,IAAI,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;YACpJ,YAAY,CAAC,oBAAoB,CAAC;AAClC,YAAA,oBAAoB,GAAG,UAAU,CAAC,MAAK;gBACnC,IAAI,CAAC,UAAU,GAAS,IAAK,CAAC,KAAK,CAAC,IAAI,EAAE;AAC1C,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;AAC3B,oBAAA,OAAO;gBACX,IAAI,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,wBAAA,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AAC3B,4BAAA,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAC3D,4BAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAG;AACtB,gCAAA,IAAI,UAAU,GAAG,CAAC,CAAC,UAAU;gCAC7B,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACnC,gCAAA,CAAC,CAAC,UAAU,GAAG,UAAU;AAC7B,4BAAA,CAAC,CAAC;AACF,4BAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAG;gCACtB,IAAI,CAAC,CAAC,CAAC,gBAAgB;AACnB,oCAAA,CAAC,CAAC,YAAY,GAAG,KAAK;AAC9B,4BAAA,CAAC,CAAC;wBACN;oBACJ;gBACJ;gBACA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;AAC7B,gBAAA,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AACnC,gBAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;AACtF,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,KAAK;oBACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;;AAEzE,oBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;AAC1D,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;YAChD,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;QAC5E,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACnH,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAEpG,QAAA,IAAI,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;AACzE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAEzB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;YACzB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AACjC,gBAAA,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;AACpC,gBAAA,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AAC1C,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AAC5C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;AACrD,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;AAC5C,gBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACjC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;YACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AACtC,gBAAA,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AACrC,gBAAA,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;AACzC,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACb,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;AACrD,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AACjD,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AACd,oBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,YAAA;AACrG,wBAAA,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU;AAC5B,wBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC;AACrD,wBAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;wBACV,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,oBAAA,CAAC,CAAC;AACF,oBAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;AAC9D,oBAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClB,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YACjC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;IAChD;AAgFO,IAAA,SAAS,CAAC,IAAS,EAAA;AACtB,QAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAI;YAC/C,IAAI,IAAI,GAAG,IAAIC,eAAa,CAAC,GAAG,EAAE,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,gBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC5B,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAC3B,gBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC5B,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAC3B,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI;YACnC;iBACK;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG;oBACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7D,gBAAA,CAAC,CAAC;YACN;AACA,YAAA,OAAO,IAAI;AACf,QAAA,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC;IAEQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;QAC7B;AACA,QAAA,EAAE,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC;IAC5E;AACH;;ACvND,MAAM,WAAW,CAAA;IAeb,WAAA,CAAY,kBAAsC,EAAE,MAAc,EAAA;QAb3D,IAAA,CAAA,UAAU,GAAe,EAAE;QAC3B,IAAA,CAAA,UAAU,GAAgB,EAAE;QAO5B,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,OAAO,GAAW,CAAC;AAKtB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,GAAG,IAAI;QAC5C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAI;AAC/F,YAAA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC;AACjE,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC;AACjG,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7F,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC;QACzH,IAAI,CAAC,gBAAgB,EAAE;IAC3B;IAEQ,eAAe,GAAA;QACnB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1G;IAEQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;QAEnB,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,QAAA,KAAK,IAAI,QAAQ,GAAG,iBAAiB,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE;YACxI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,KAAI;gBACxF,GAAG,CAAC,OAAO,CAAC,GAAG;AACX,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE;iBACV;AACD,gBAAA,OAAO,GAAG;YACd,CAAC,EAAE,EAAE,CAAC;YACN,IAAI,IAAI,CAAC;QACb;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;QAElD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,IAAI,KAAI;YACtC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,IAAI,KAAI;AACnF,gBAAA,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE;AACtE,gBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AACpF,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;oBAC5B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,IAAI;AAC9G,oBAAA,IAAI,KAAK,CAAC,sBAAsB,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxE,wBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACjE;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AACH;;AC9DD,MAAM,aAAc,SAAQ,cAAc,CAAA;AAuBtC,IAAA,WAAA,CAAY,YAAY,EAAA;QACpB,KAAK,CAAC,YAAY,CAAC;QAbf,IAAA,CAAA,aAAa,GAAG,CAAC;QAEjB,IAAA,CAAA,aAAa,GAAW,EAAE;QAC1B,IAAA,CAAA,aAAa,GAAW,EAAE;AAW9B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;IACzB;IAEQ,WAAW,CAAC,QAAa,EAAE,SAAkB,EAAA;QACjD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AACxC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/G;QACJ;AACA,QAAA,IAAI,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE;QAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM;aACxC,MAAM,CAAC,gBAAgB;aACvB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,YAAY;AAChD,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI;AACf,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM;AACjB,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI;AACf,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAIrB,QAAA,IAAI,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACzH,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;AAC1B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC;AAExE,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM;iBACjB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;AAC5B,iBAAA,IAAI,CAAC,YAAY,EAAE,KAAK;AACxB,iBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAChC;QAEA,IAAI,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM;aAC5C,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;AAC/C,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,aAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa;AAChC,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AAC5C,aAAA,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,GAAG,GAAG,CAAC;QAE5E,IAAI,iBAAiB,GAAG,IAAI;QAC5B,IAAI,KAAK,GAAW,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAE7E,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC;AAC3F,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC;QAC3F,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7C,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;AAE7C,QAAA,IAAI,8BAA8B,GAAG,CAAC,IAAI,EAAE,IAAI,KAAI;AAChD,YAAA,IAAI,UAAU;AACd,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;gBACZ,UAAU,GAAG,EAAE;YACnB;iBAAO;AACH,gBAAA,UAAU,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;YACpH;AAEA,YAAA,iBAAiB,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU;AAEvE,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,EAAE;AACpD,iBAAA,IAAI,CAAC,GAAG,EAAE,iBAAiB;AAC3B,iBAAA,KAAK,CAAC,cAAc,EAAE,CAAC;iBACvB,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;AACpD,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW;AAC3B,iBAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB;AAC5B,iBAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB;AAC5B,iBAAA,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;AAE7B,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3G,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACjG,QAAA,CAAC;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;aACtD,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACzB,aAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;aACzD,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACtG,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;AACtD,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,aAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;aACzD,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;;AAI1F,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;AAC1F,YAAA,8BAA8B,CAAC,eAAe,EAAE,eAAe,CAAC;AAChE,YAAA,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3G,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACjG;QAEA,IAAI,IAAI,GAAG,IAAI;AAEf,QAAA,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAA;YACxC,IAAI,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEtD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,UAAU,CAAC;AAC1E,YAAA,8BAA8B,CAAC,eAAe,EAAE,eAAe,CAAC;AACpE,QAAA,CAAC;AACI,aAAA,EAAE,CAAC,YAAY,EAAE,MAAK;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AAC9G,QAAA,CAAC,CAAC;IACV;IAEQ,SAAS,GAAA;AACb,QAAA,IAAI,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QACrD,IAAI,MAAM,GAAG,SAAS;QACtB,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;AAC/B,YAAA,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACrD;AACA,QAAA,OAAO,MAAM;IACjB;AAEO,IAAA,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAA,GAA6B,IAAI,EAAE,kBAAwB,IAAI,EAAE,WAAW,EAAE,IAAY,EAAE,SAAkB,EAAA;AACpJ,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAE1B,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QACpB;QAEA,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;AAChD,QAAA,IAAI,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC;QACtF,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAEjD,IAAI,kBAAkB,IAAI,IAAI;AAC1B,YAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAChD,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;QAEtC,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;YACzD,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,EAAE;gBAClG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK;YAC1H;QACJ;AAEA,QAAA,IAAI,WAAW;AACX,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;QAElC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE;YACnC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAExC,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC;QAE/E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAC/F,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;AAEvC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;AAC9C,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAEjD,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;QACnC,IAAI,IAAI,GAAG,IAAI;QACf,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,KAAK,EAAA;YACvC,IAAI,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YACnC,IAAI,cAAc,GAAG,KAAK;YAC1B,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC1F,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAC3D,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE;AACjC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS;gBAC9B,cAAc,GAAG,IAAI;YACzB;AACA,YAAA,IAAI,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE;AACjC,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS;gBAC9B,cAAc,GAAG,IAAI;YACzB;YACA,IAAI,kBAAkB,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;AAC5D,YAAA,IAAI,cAAc,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;gBACtE,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC9C,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU;AACpD,qBAAA,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,KAAY;AACnC,oBAAA,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC;AACvE,gBAAA,CAAC,CAAC;AACN,gBAAA,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,eAAe,GAAG,SAAS;gBAChC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EACnF,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,EAClE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC;YAC/D;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AAC5I,QAAA,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,YAAA;AACd,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AAC9G,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AAEpB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACvE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;AAC3D,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;AACzD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;AAGzD,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;QAClF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW;AAC1C,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM;aAC1B,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAEvC,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK;QAE9C,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACxF;aAAO;AACH,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;iBACrD,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC;QAErC,IAAI,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,KAAY;AAC7F,YAAA,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC;AACvE,QAAA,CAAC,CAAC;QAEF,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAI;YAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,KAAI;AAClE,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AACvD,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,oBAAA,IAAI,kBAAkB,IAAI,kBAAkB,IAAI,OAAO,EAAE;wBACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;oBAC1F;yBAAO;AACH,wBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC;oBACpF;gBACJ;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IAGN;AAEQ,IAAA,cAAc,CAAC,CAAS,EAAA;QAC5B,IAAI,EAAE,GAAG,CAAC;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AAC3C,YAAA,EAAE,EAAE;QACR;QACA,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B;AAEQ,IAAA,cAAc,CAAC,CAAC,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AACnD,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC7D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa;IAChF;AAEQ,IAAA,cAAc,CAAC,CAAC,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACnG;AAEQ,IAAA,SAAS,CAAC,CAAC,EAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IAE5C;AAEQ,IAAA,aAAa,CAAC,CAAC,EAAA;AACnB,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1H;AAEQ,IAAA,SAAS,CAAC,CAAC,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACrE;AAEQ,IAAA,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAA,GAAsB,KAAK,EAAA;QACxE,IAAI,CAAC,SAAS,CAAC,IAAI;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI;QAC3B,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,aAAa;AAC/F,QAAA,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,UAAU,GAAG,EAAE,GAAG,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACtH;AAEQ,IAAA,QAAQ,CAAC,QAAa,EAAE,KAAa,EAAE,SAAkB,EAAA;AAC7D,QAAA,IAAI,KAAa;QACjB,IAAI,SAAS,EAAE;AACX,YAAA,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAClC;aAAO;YACH,MAAM,0BAA0B,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACzD,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,YAAA,QAAQ,CAAC,CAAC,GAAG,0BAA0B;AACvC,YAAA,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE;QAChC;AACA,QAAA,OAAO,KAAK;IAChB;AACH;;AC/SD,MAAM,OAAQ,SAAQ,sBAAsB,CAAA;AAWxC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QAXf,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,iBAAiB,GAAG,GAAG;QAIvB,IAAA,CAAA,UAAU,GAAQ,IAAI;QAEtB,IAAA,CAAA,gBAAgB,GAAG,EAAE;QACrB,IAAA,CAAA,WAAW,GAAG,IAAI;AA2DnB,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,aAAa,EAAE,cAAc,KAAI;YACjD,IAAI,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACxD,YAAA,IAAI,aAAa;AACb,gBAAA,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;AACxJ,QAAA,CAAC;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,SAAS,EAAE,aAAa,KAAI;YAC3C,IAAI,aAAa,GAAkB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AACvE,YAAA,IAAI,aAAa;AACb,gBAAA,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9I,QAAA,CAAC;AA8HM,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,KAAI;YACvG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE;AAC5D,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAErE,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,4CAA4C;AACpF,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,iBAAA,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;iBAC3B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAEzD,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,4CAA4C;AACpF,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO;AAClB,iBAAA,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;iBAC3B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAEzD,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG;AACpC,iBAAA,IAAI,CAAC,OAAO,EAAE,mDAAmD,CAAC;YAEvE,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;YAElC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC9G,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC;AACzH,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAC9G,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC;AACvH,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,iBAAA,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAElB,IAAI,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;AACxD,YAAA,QAAQ,CAAC,MAAM,CAAC,MAAM;AACjB,iBAAA,IAAI,CAAC,GAAG,EAAE,EAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAC1C,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC;iBACX,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,GAAG,EAAE;iBACzC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,GAAG,EAAE,CAAC;AAE7C,YAAA,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,SAAS,GAAG,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC;YACvC,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAChI,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAC7I,QAAA,CAAC;QAvOG,IAAI,CAAC,YAAY,GAAG;AAChB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE;SACV;IACL;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,EAAE;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;QACvE;IACJ;IAEQ,mBAAmB,GAAA;QACvB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;QAChH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK;AACxD,aAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC;AAC9C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IACvE;IAEQ,kBAAkB,GAAA;AACtB,QAAA,QAAQ,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB;IACjF;IAEQ,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;YACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK;AAC/C,iBAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB;iBAC9B,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB;AAChF,iBAAA,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC;QACzE;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE1B,YAAA,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnD,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM;AACzD,iBAAA,IAAI,CAAC,OAAO,EAAE,eAAe;AAC7B,iBAAA,IAAI,CAAC,IAAI,EAAE,EAAE;iBACb,KAAK,CAAC,aAAa;AACnB,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAChF,iBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;iBAChF,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE;AACpC,YAAA,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;QACjC;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,SAAS,GAAG,QAAQ,EAAE;QACtH;IACJ;AAaO,IAAA,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,0BAA0B,EAAA;QACxD,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,0BAA0B,CAAC;;AAE5D,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,EAAuB,KAAI;YAC9F,OAAO,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE;AAC9C,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;AAC1C,QAAA,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;AACtF,QAAA,IAAI,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,QAAQ;AAC3C,YAAA,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;AAE/C,QAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC;QAGxG,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;YAC/D,IAAI,CAAC,mBAAmB,EAAE;QAC9B;aAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;AACpH,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAClC;AAEA,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YACrG,IAAI,CAAC,gBAAgB,EAAE;QAC3B;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC7B,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK;AAC3C,iBAAA,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC;YAExC,IAAI,CAAC,IAAI,GAAG,CAAC,YAAY,GAAG,KAAK,KAAI;AAEjC,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3G,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE;gBAElI,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACrD,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;gBAC5B,IAAI,CAAC,YAAY,EAAE;AACf,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;gBAC1C;AAEA,gBAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS;AAChB,qBAAA,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;gBAE3C,IAAI,SAAS,GAAQ,IAAI,CAAC,kBAAkB,CAAC,yBAAyB,EAAE;AACxE,gBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;gBAExB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI;qBACzG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI;AACvC,qBAAA,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AAEzH,gBAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;oBAC3B,IAAI,CAAC,qBAAqB,EAAE;gBAChC;AAEA,gBAAA,IAAI,wBAAwB,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AAClG,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;oBACnF,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC;AACxD,gBAAA,CAAC,CAAC;gBAEF,IAAI,IAAI,GAAG,IAAI;gBACf,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,2BAA2B;AACzE,qBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3B,gBAAsB,cAAc,CAAC,KAAK;qBACrC,MAAM,CAAC,KAAK;qBACZ,KAAK,CAAC,cAAc;AACpB,qBAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B;qBACxC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI;qBACrC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI;qBAC3C,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACtB,oBAAA,OAAO,CAAC,wBAAwB,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI;AAC5E,gBAAA,CAAC;qBACA,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACnB,oBAAA,OAAO,CAAC,CAAC,wBAAwB,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;AAClF,gBAAA,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,IAAI,EAAA;AAC1B,oBAAA,IAAI,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC;AAC3C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,aAAa;oBAC7C,IAAI,mBAAmB,GAAG,MAAK;AAE3B,wBAAA,SAAS,WAAW,CAAC,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAA;4BAChF,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,MAAM,CAAC;4BACxE,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,wBAAwB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC;4BACvJ,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;4BACtD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC;wBAClD;AAEA,wBAAA,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;AAC1I,oBAAA,CAAC;AACD,oBAAA,mBAAmB,EAAE;AACzB,gBAAA,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,MAAK;oBACrB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE;AAC5D,oBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;AACxF,oBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAClC,gBAAA,CAAC;AACL,gBAAA,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE9B,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,EACpF,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC;;gBAG1D,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;gBAExI,IAAI,YAAY,EAAE;oBACd,IAAI,CAAC,aAAa,EAAE;gBACxB;AACJ,YAAA,CAAC;AACD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;QAGpF;AACA,QAAA,IAAI,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,0BAA0B,CAAC;QACxG,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE;gBAC3C,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,aAAa,EAAE;YACxB;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;IACrF;AA4CH;;AC9PD,MAAM,mBAAmB,CAAA;AAMxB,IAAA,WAAA,CAAY,IAAY,EAAE,KAAU,EAAE,OAAe,IAAI,EAAA;QAClD,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IACtB;AACH;;ACTD,MAAM,eAAe,CAAA;IAGjB,WAAA,CAAY,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,UAAA,GAAqB,IAAI,EAAE,MAAA,GAAiB,IAAI,EAAA;QAF9E,IAAA,CAAA,KAAK,GAAG,EAAE;AAIb,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACjB,IAAI,IAAI,GAAG,UAAU;AACrB,YAAA,IAAI,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1G,YAAA,QAAQ,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG;AAChC,gBAAA,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,aAAa,CAAC;AAC1F,gBAAA,IAAI,EAAE;aACT;QACL;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC1D,YAAA,IAAI,IAAyB;YAC7B,IAAI,MAAM,IAAI,iBAAiB;AAC3B,gBAAA,IAAI,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;iBAC9E;AACD,gBAAA,IAAI,GAAG,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;YACjH;AACA,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;AACxB,YAAA,OAAO,OAAO;QAClB,CAAC,EAAE,EAAE,CAAC;IACV;AACH;;ACxBD,MAAM,eAAe,CAAA;AAUjB,IAAA,WAAA,GAAA;QATO,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,MAAM,GAA2B,EAAE;QAClC,IAAA,CAAA,kBAAkB,GAAG,0BAA0B;QAC/C,IAAA,CAAA,UAAU,GAAG,IAAI;QACjB,IAAA,CAAA,iBAAiB,GAAG,EAAE;QACtB,IAAA,CAAA,eAAe,GAAG,EAAE;QACpB,IAAA,CAAA,sBAAsB,GAAuC,EAAE;IAIvE;AAEQ,IAAA,gBAAgB,CAAC,MAAM,EAAA;AAC3B,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QACvC;QACA,IAAI,eAAe,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,OAAO,MAAM,MAAM,QAAQ,EAAE;AAC9B,YAAA,eAAe,GAAG,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC;QAC1D;aAAO;AACH,YAAA,eAAe,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC;QACvD;AACA,QAAA,IAAI,UAAU,GAAG,YAAY,GAAG,eAAe;AAC/C,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,UAAU;AACzC,QAAA,OAAO,UAAU;IACrB;IAEO,cAAc,GAAA;QACjB,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1C,QAAA,IAAI,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrG,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxG,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,WAAW;QAE7C,IAAI,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,KAAI;YACjD,QAAQ,SAAS,KAAK,IAAI,CAAC,kBAAkB,IAAI,SAAS,KAAK,SAAS;AAC5E,QAAA,CAAC,CAAC;QACF,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAClD,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE;AACpC,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAE9B,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC;IAC5C;IAEO,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,GAAG,IAAI,EAAA;AACtE,QAAA,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;AACpD,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;YAC3B,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,WAAW,KAAI;oBACjE,WAAW,CAAC,WAAW,CAAC,GAAG;AACvB,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,KAAK,EAAE,QAAQ,CAAC,WAAW;qBAC9B;AACD,oBAAA,OAAO,WAAW;gBACtB,CAAC,EAAE,EAAE,CAAC;YACV;AACA,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;gBACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YACnD;YACA,IAAI,KAAK,GAAG,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE;AAC7F,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,gBAAgB,EAAE;IAC3B;IAEO,UAAU,CAAC,SAAS,EAAE,WAAW,EAAA;QACpC,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI;QAC3C,IAAI,IAAI,GAAG,CAAC;AACZ,QAAA,IAAI,IAAI,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,EAAE;YACd,IAAI,GAAG,EAAE;YACT,IAAI,GAAG,CAAC;QACZ;QACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAkB,EAAE,CAAkB,KAAI;YACxD,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE;AACpE,gBAAA,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,IAAI;AAClF,gBAAA,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,GAAG,IAAI;;gBAGlF,IAAI,UAAU,IAAI,IAAI;AAClB,oBAAA,OAAO,IAAI;gBACf,IAAI,UAAU,IAAI,IAAI;AAClB,oBAAA,OAAO,IAAI;;AAGf,gBAAA,IAAI,QAAQ,IAAI,QAAQ,EAAE;AACtB,oBAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,oBAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;gBACnC;AACK,qBAAA,IAAI,QAAQ,IAAI,UAAU,EAAE;oBAC7B,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;oBAC7C,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;gBACjD;;gBAGA,IAAI,UAAU,GAAG,UAAU;AACvB,oBAAA,OAAO,IAAI;gBACf,IAAI,UAAU,GAAG,UAAU;AACvB,oBAAA,OAAO,IAAI;AACf,gBAAA,OAAO,CAAC;YACZ;AACA,YAAA,OAAO,CAAC;AACZ,QAAA,CAAC,CAAC;IACN;IAEO,gBAAgB,GAAA;QACnB,IAAI,wBAAwB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;QAC1F,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAsB,KAAI;AAC3C,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAe,KAAI;gBACjD,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;AAChC,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;wBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,wBAAA,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;qBACrD;gBACL;qBAAO;AACH,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBACjD;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QACF,IAAI,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;QACpF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;AACxC,YAAA,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;AAC9B,gBAAA,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAI;YACxC;iBAAO;gBACH,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAAC,iBAAiB;AAC7E,gBAAA,oBAAoB,EAAE;YAC1B;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU;IAC7B;AAEO,IAAA,iBAAiB,CAAC,iBAAA,GAA6B,IAAI,EAAE,SAAiB,CAAC,EAAA;;AAE1E,QAAA,IAAI,OAAO,GAAG,CAAC,CAAS,KAAY;AAChC,YAAA,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;AAC1C,QAAA,CAAC;AACD,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,QAAA,IAAI,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,SAAS,KAAI;AAClE,YAAA,OAAO,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG;AAClF,QAAA,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAsB,KAAI;AAC3C,YAAA,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,SAAS,KAAI;gBAC7D,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,QAAQ,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;AACpK,gBAAA,OAAO,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI;oBACrH,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG;AAC5E,YAAA,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IACpB;AAEH;;AC5JD,MAAM,WAAY,SAAQ,cAAc,CAAA;AAmBpC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QAdf,IAAA,CAAA,eAAe,GAAG,GAAG;QACrB,IAAA,CAAA,WAAW,GAAG,IAAI;QAClB,IAAA,CAAA,mBAAmB,GAAG,iBAAiB;QACvC,IAAA,CAAA,UAAU,GAAG,iBAAiB;AAC9B,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAA;AAExB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,EAAE;AAEvC,QAAA,IAAA,CAAA,OAAO,GAAG;AACd,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE;SACV;IAID;IAEA,WAAW,GAAA;IACX;IAEO,mBAAmB,CAAC,aAAkB,EAAE,YAAiB,EAAA;QAC5D,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC;IAClD;AAEO,IAAA,MAAM,CAAC,MAAW,EAAE,YAAiB,EAAE,UAAmB,KAAK,EAAA;AAClE,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,YAAY,CAAC,MAAM,CAAC;QAE9G,IAAI,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC/C,aAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;QACxC,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC1D,QAAA,IAAI,cAAc;AAClB,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;AAC1B,YAAA,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK;AAC3C,iBAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;YACxC,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK;AAC1C,iBAAA,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK;AAC7C,iBAAA,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC;AACjE,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI;iBAC5E,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;AACnD,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;QACtB;aAAO;AACH,YAAA,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC;QACpE;QACA,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,UAAU,EAAE;QAEjB,cAAc,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE;AACxD,QAAA,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ;AAC9C,aAAA,IAAI,CAAC,OAAO,EAAE,sCAAsC;aACpD,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;aACpD,EAAE,CAAC,OAAO,EAAE,YAAA;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACrC,UAAU,CAAC,MAAK;AACZ,gBAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC5E,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC5C,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,CAAC,CAAC;AACN,QAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;QACpE,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;;QAI5G,IAAI,IAAI,GAAG,IAAI;AAEf,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC;AACxE,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC;AAEvE,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,GAAG,EAAA;AAC9F,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;;AAEjF,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,EAAE;AAClE,gBAAA,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe;gBAC1C,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;AAClG,gBAAA,IAAI,IAAI,CAAC,eAAe,IAAI,eAAe;oBACvC,IAAI,CAAC,UAAU,EAAE;YACzB;QACJ,CAAC,EAAE,KAAK,CAAC;IACb;IAEO,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;AAE9B,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc;AAC5C,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI;iBAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC;YACvD,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB;AACnE,iBAAA,IAAI,CAAC,YAAY,EAAE,MAAK;AACrB,gBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;gBAC7C,OAAO,cAAc,KAAK,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACjH,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,OAAO,EAAE,MAAK;gBACd,IAAI,aAAa,GAAY,KAAK;AAClC,gBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC7C,gBAAA,IAAI,cAAc,IAAI,KAAK,EAAE;oBACzB,aAAa,GAAG,IAAI;gBACxB;AACA,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;oBAC5D,IAAI,aAAa,EAAE;wBACf,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAI;oBAC1D;yBAAO;AACH,wBAAA,IAAI,SAAS,IAAI,IAAI,CAAC,mBAAmB;4BACrC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,KAAK;oBAC/D;AAEJ,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,CAAC,CAAC;AACN,YAAA,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC;AACzE,YAAA,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;YACvE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB;iBAC/D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAC5C;AACA,QAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB;aACjF,IAAI,CAAC,OAAO,CAAC;AAElB,QAAA,IAAI,0BAA0B,GAAG,mBAAmB,CAAC,KAAK;aACrD,MAAM,CAAC,IAAI;AACX,aAAA,OAAO,CAAC,kBAAkB,EAAE,IAAI;aAChC,KAAK,CAAC,mBAAmB,CAAC;QAC/B,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;AACvC,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB;AAClE,iBAAA,IAAI,CAAC,YAAY,EAAE,CAAC,CAAM,KAAK,gBAAgB,GAAG,CAAC,CAAC,GAAG;iBACvD,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAM,KAAI;AAC3B,gBAAA,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO;gBACtB,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,CAAC,CAAC;AACN,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC;AACvE,YAAA,IAAI,CAAC,CAAC,MAAM,EAAE;gBACV,IAAI,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;gBAC1F,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB;AAC9D,qBAAA,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;gBAC1E,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB;AAC9D,qBAAA,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;YAC9B;iBAAO;AACH,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB;AAC3D,qBAAA,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;YAC9B;AACA,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACpG,iBAAA,IAAI,CAAC,UAAU,EAAE,GAAG;AACpB,iBAAA,IAAI,CAAC,MAAM,EAAE,QAAQ;iBACrB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAM,KAAI;gBAC3B,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;AAC5B,oBAAA,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG;AACnB,wBAAA,MAAM,CAAC,OAAO,GAAG,IAAI;;AAErB,wBAAA,MAAM,CAAC,OAAO,GAAG,KAAK;AAC9B,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,CAAC,CAAC;AACN,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAA,CAAA,CAAG,GAAG,CAAC,CAAC,IAAI,CAAC;AAChO,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;IACvC;IACO,qBAAqB,GAAA;QACxB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,YAAA;gBAC/D,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,iBAAiB,EACzE,CAAC,CAAM,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACjC,YAAA,CAAC,CAAC;QACN;QACA,IAAI,CAAC,iBAAiB,EAAE;IAC5B;IAEO,iBAAiB,GAAA;QACpB,IAAI,cAAc,GAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAS,KAAI;AAC9F,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB;AAChC,gBAAA,OAAO,IAAI;YACf,IAAI,IAAI,IAAI,IAAI;gBACZ,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,GAAG,MAAM;YACxE,IAAI,IAAI,IAAI,MAAM;AACd,gBAAA,OAAO,MAAM;AACjB,YAAA,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM;QAClG,CAAC,EAAE,IAAI,CAAC;QAER,IAAI,cAAc,IAAI,IAAI;YACtB,cAAc,GAAG,MAAM;AAE3B,QAAA,OAAO,cAAc;IACzB;IAEO,iBAAiB,GAAA;AACpB,QAAA,IAAI,cAAc,GAAW,IAAI,CAAC,iBAAiB,EAAE;AACrD,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC;AACrF,QAAA,gBAAgB,CAAC,MAAM,CAAC,2BAA2B;aAC9C,OAAO,CAAC,iBAAiB,EAAE,MAAM,cAAc,KAAK,KAAK,CAAC;AAC/D,QAAA,gBAAgB,CAAC,MAAM,CAAC,yBAAyB;aAC5C,IAAI,CAAC,YAAY,GAAG,cAAc,KAAK,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAE;AACxI,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,yBAAyB;aAC1F,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,cAAc,IAAI,MAAM,IAAI,SAAS,GAAG,QAAQ,CAAC;IACrF;IAEQ,qBAAqB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,SAAiB,KAAI;YACtE,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO;AAC1D,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,YAAY,CAAC,kBAAkB,EAAE,aAAa,GAAG,IAAI,EAAA;AACzD,QAAA,IAAI,kBAAkB,GAAG,CAAC,WAAW,KAAI;AACrC,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI;YACjE,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,GAAG,SAAS,CAAC;AACvJ,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,mBAAmB;aAC1F,IAAI,CAAC,kBAAkB,CAAC;QAC7B,IAAI,sBAAsB,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI;AAC9I,QAAA,IAAI,oBAAoB,GAAG,aAAa,CAAC,KAAK;aACzC,MAAM,CAAC,KAAK;AACZ,aAAA,OAAO,CAAC,kBAAkB,EAAE,IAAI;AAChC,aAAA,OAAO,CAAC,0BAA0B,EAAE,sBAAsB;aAC1D,IAAI,CAAC,UAAU,CAAS,EAAA;YACrB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM;AACxB,iBAAA,OAAO,CAAC,sBAAsB,EAAE,IAAI;AACpC,iBAAA,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAM,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;iBAC7E,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,CAAA,CAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7J,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;AACzH,iBAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;AACvD,iBAAA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACjE,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;gBACxC,IAAI,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;gBAC1F,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB;AAC9D,qBAAA,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;gBAC1E,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB;AAC9D,qBAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;YAC5D;iBAAO;AACH,gBAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB;AAC5D,qBAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;YAC5D;AACA,YAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACrC,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB;iBAChE,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,iBAAiB,GAAG,KAAK;AACrD,iBAAA,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;;AAE3B,gBAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE;AACtB,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;gBACxC;qBAAO;AACH,oBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBAC5B;AACA,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;gBAEnB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;AACpD,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU;AAC3D,oBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU;AAE5E,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,UAAU,EAAE,sBAAsB,CAAC;AACjD,QAAA,CAAC,CAAC;QACN,IAAI,eAAe,GAAG,EAAE;AACxB,QAAA,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;AACjC,YAAA,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAC7E,QAAA,CAAC,CAAC;AACF,QAAA,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAE7B,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;AACxB,YAAA,IAAI,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;gBAC3D,OAAO,CAAC,KAAK,aAAa;YAC9B,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAEd,IAAI,YAAY,EAAE;gBACR,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAG,CAAC,KAAK,EAAE;YACvD;QACJ;AAEA,QAAA,OAAO,eAAe;IAC1B;AAEQ,IAAA,iBAAiB,CAAC,eAAe,EAAA;;AAErC,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE;AAC9E,QAAA,IAAI,kBAAkB,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,cAAc,CAAC,WAAW;AAClG,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,GAAG,KAAK,CAAC;QAEzG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,mBAAmB;AACtE,aAAA,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,EAAA;YACvB,IAAI,eAAe,CAAC,CAAC,CAAC;AAClB,gBAAA,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;iBACvC;gBACD,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YACzC;AACJ,QAAA,CAAC,CAAC;IACV;IAEQ,UAAU,CAAC,gBAAgB,GAAG,IAAI,EAAA;AACtC,QAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE;QACrD,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;AAC7E,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;AACzE,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI;AACtD,aAAA,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;AAClC,QAAA,IAAI,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;QACrE,aAAa,CAAC,KAAK;aACd,MAAM,CAAC,IAAI;AACX,aAAA,OAAO,CAAC,eAAe,EAAE,IAAI;AAC7B,aAAA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpF,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK;aACvB,MAAM,CAAC,IAAI;AACX,aAAA,OAAO,CAAC,cAAc,EAAE,IAAI;aAC5B,KAAK,CAAC,IAAI;aACV,IAAI,CAAC,UAAU,KAAsB,EAAA;YAClC,IAAI,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,SAAiB,KAAI;AAC5D,gBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;AACtB,oBAAA,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;gBACjC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AAC1C,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;AACnE,YAAwB,UAAU,CAAC,KAAK;iBACnC,MAAM,CAAC,IAAI;AACX,iBAAA,OAAO,CAAC,eAAe,EAAE,IAAI;AAC7B,iBAAA,KAAK,CAAC,WAAW,EAAE,CAAC,CAAsB,KAAI;AAC3C,gBAAA,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI;AAC9B,oBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;;AAE/C,oBAAA,OAAO,MAAM;AACrB,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,CAAC,CAAsB,KAAI;AAC7B,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;AAC5C,YAAA,CAAC;AACL,YAAA,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AAC9B,QAAA,CAAC,CAAC;AACN,QAAA,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA,EAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAA;AACrC,gBAAA,IAAI,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK;AACpE,gBAAA,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC;AACtG,YAAA,CAAC,CAAC;QACN;AACA,QAAA,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC;IAC3C;IAEQ,WAAW,CAAC,KAAK,EAAE,IAAI,EAAA;AAC3B,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAChC;AACA,QAAA,IAAI,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AAC9D,YAAA,OAAO,KAAK;QAChB;AACA,QAAA,IAAI,QAAQ,KAAK,CAAC,KAAK,UAAU,EAAE;YAC/B,OAAO,KAAK,EAAE;QAClB;AACA,QAAA,IAAI,kBAAkB,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAClI,QAAA,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,OAAO,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACzD;AACH;;ACrXD,MAAM,iBAAkB,SAAQ,SAAS,CAAA;AAGvC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC/B,KAAK,CAAC,YAAY,CAAC;AAHd,QAAA,IAAA,CAAA,YAAY,GAAQ,IAAI,YAAY,EAAE,CAAC;IAI9C;AAEO,IAAA,MAAM,CAAC,eAAuB,EAAE,QAAa,EAAE,YAAiB,EAAA;AACrE,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;QAC1C,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAChD,QAAA,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,OAAO,GAAG;aACX,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC;QAChD,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AACpE,QAAA,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QACzD,IAAI,KAAK,GAAG;aACT,MAAM,CAAC,OAAO;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;aAC/B,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACjE,aAAA,IAAI,CAAC,kBAAkB,EAAE,iBAAiB;AAC1C,aAAA,IAAI,CAAC,MAAM,EAAE,UAAU;AACvB,aAAA,IAAI,CAAC,WAAW,EAAE,oBAAoB;AACtC,aAAA,IAAI,CAAC,eAAe,EAAE,OAAO;AAC7B,aAAA,IAAI,CAAC,eAAe,EAAE,SAAS;AAC/B,aAAA,IAAI,CACH,aAAa,EACb,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,KAAK,CACvD;QACH,IAAI,KAAK,GAAG;aACT,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,WAAW;AACzB,aAAA,IAAI,CAAC,UAAU,EAAE,GAAG;AACpB,aAAA,IAAI,CAAC,MAAM,EAAE,QAAQ;AACrB,aAAA,IAAI,CAAC,YAAY,EAAE,cAAc;AACjC,aAAA,EAAE,CAAC,eAAe,EAAE,UAAU,KAAK,EAAA;AAClC,YAAA,IAAI,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;gBACrC;YACF;AACC,YAAA,KAAK,CAAC,IAAI,EAAU,CAAC,KAAK,GAAG,EAAE;YAChC,SAAS,GAAG,IAAI;AAChB,YAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;AACf,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;AAC7C,QAAA,CAAC,CAAC;QACJ;aACG,MAAM,CAAC,MAAM;AACb,aAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB;AAC5B,aAAA,KAAK,CAAC,SAAS,EAAE,MAAM;aACvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACxD;aACG,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,yBAAyB;AACvC,aAAA,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;AAEjC,QAAA,IAAI,WAAW,GAAI,MAAc,CAAC,WAAW;AAC7C,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACxD,IAAI,SAAS,GAAG,KAAK;QACrB,IAAI,gBAAgB,GAAG,KAAK;QAC3B,KAAK,CAAC,IAAI,EAAU,CAAC,gBAAgB,CACpC,4BAA4B,EAC5B,CAAC,KAAK,KAAI;YACR,SAAS,GAAG,IAAI;AAChB,YAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;YACf,gBAAgB,GAAG,IAAI;AACzB,QAAA,CAAC,CACF;QACD,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;YAC5B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AAC7C,QAAA,CAAC,CAAC;QAED,KAAK,CAAC,IAAI,EAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;YAC7D,IAAI,gBAAgB,EAAE;gBACpB,gBAAgB,GAAG,KAAK;gBACxB;YACF;YACA,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO;AACtC,YAAA,IAAI,GAAG,KAAK,EAAE,EAAE;gBACd,SAAS,GAAG,IAAI;AAChB,gBAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,UAAU;QACd,IAAI,IAAI,GAAG,IAAI;AAEf,QAAA,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;AAC/B,YAAA,UAAU,GAAS,IAAK,CAAC,KAAK;AAC9B,YAAA,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;iBAEzC;AACL,gBAAA,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE;YACjB;YACA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;YACxE,SAAS,GAAG,KAAK;YACjB,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC;AAC/C,QAAA,CAAC,CAAC;IACJ;AACD;;ACnGD,MAAM,WAAY,SAAQ,SAAS,CAAA;AAUjC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC/B,KAAK,CAAC,YAAY,CAAC;QALb,IAAA,CAAA,sBAAsB,GAAG,EAAE;QAE3B,IAAA,CAAA,kBAAkB,GAAG,EAAE;AA6JvB,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,GAAG,KAAI;AAC1B,YAAA,OAAO;iBACJ,KAAK,CAAC,OAAO;AACb,iBAAA,GAAG,CAAC,CAAC,CAAC,KACL;iBACG,KAAK,CAAC,QAAQ;AACd,iBAAA,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC3B,IAAI,CAAC,QAAQ,CAAC;iBAElB,IAAI,CAAC,OAAO,CAAC;AAClB,QAAA,CAAC;AAnKC,QAAA,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAI;YACtD,IACE,IAAI,CAAC,eAAe;AACpB,gBAAA,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe;gBACpC,IAAI,CAAC,WAAW,EAChB;gBACA,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC7B;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,KAAK;AAET,IAAA,MAAM,CACX,eAAuB,EACvB,QAAa,EACb,aAAkB,EAClB,YAAiB,EAAA;AAEjB,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;QAC1C,IAAI,IAAI,GAAG,IAAI;QACf,IAAI,iBAAiB,EAAE,UAAU;QACjC,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAChD,QAAA,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG;aACZ,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;AAC1C,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC;aACrB,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,6BAA6B,CAAC;AAE/C,QAAA,IAAI,mBAAmB,GAAG,CAAC,EAAE,EAAE,KAAK,KAAI;AACtC,YAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE;;AAGhC,YAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnB,UAAU,GAAG,EAAE;AACf,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;gBAC3B,gBAAgB,CAAC,IAAI,EAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;gBACvD,QAAQ,CAAC,IAAI,EAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC/C,gBAAA,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;YACpC;AAAO,iBAAA,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;gBACpD,gBAAgB,CAAC,IAAI,EAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AACvD,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,gBAAA,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;gBAClC,eAAe,CAAG,CAAC;gBACnB,UAAU,GAAG,EAAE;YACjB;AACF,QAAA,CAAC;QAED,IAAI,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAClE,QAAA,iBAAiB,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,EAAE;AAClD,YAAA,OAAO,EAAE,mBAAmB;AAC5B,YAAA,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,KAAI;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;YAC/B,CAAC;AACD,YAAA,GAAG,YAAY;AAChB,SAAA,CAAC;AACF,QAAS,iBAAiB,CAAC;AAE3B,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC;aAChB,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,wBAAwB;aACtC,EAAE,CAAC,QAAQ,EAAE,YAAA;YACZ,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,IAAI,GAAG,IAAW;YACtB,IACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,GAAG;AACvC,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAU,CAAC,YAAY;AACjD,gBAAA,UAAU,CAAC,MAAM,KAAK,CAAC,EACvB;AACA,gBAAA,eAAe,CAAC,UAAU,EAAE,iBAAiB,CAAC;YAChD;AACF,QAAA,CAAC,CAAC;QACJ,IAAI,SAAS,GAAG;aACb,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AACjC,aAAA,OAAO,CAAC,eAAe,EAAE,IAAI;AAC7B,aAAA,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,IAAI,sBAAsB,GAAG;aAC1B,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,iCAAiC,CAAC;QACnD,IAAI,CAAC,eAAe,GAAG;aACpB,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,0BAA0B,CAAC;QAC5C,IAAI,QAAQ,GAAG;aACZ,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,cAAc;aAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,KAAK;AACxC,aAAA,EAAE,CAAC,OAAO,EAAE,MAAM,eAAe,CAAC,UAAU,EAAE,iBAAiB,CAAC;AAChE,aAAA,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AAE3B,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC;aACzB,MAAM,CAAC,KAAK;AACZ,aAAA,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC;QACxC,IAAI,SAAS,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAS,CAAC;AAC7D,QAAA,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE;YAC9B,GAAG,IAAI,CAAC,YAAY;AACpB,YAAA,eAAe,EAAE,IAAI;AACtB,SAAA,CAAC;QAEF,IAAI,eAAe,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,IAAI,KAAI;YAC9C,IAAI,IAAI,GAAG,IAAI;YACf,IAAI,EAAE,KAAK,KAAK;gBAAE;AAClB,YAAA,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,EAAE;AACnD,gBAAA,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,GAAG,IAAI;YACxC;AACF,QAAA,CAAC;AAED,QAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAE1B,QAAA,CAAC,CAAC;;AAGF,QAAA,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AAE1B,QAAA,CAAC,CAAC;IACJ;IAEO,aAAa,CAAC,KAAK,EAAE,EAAE,EAAA;AAC5B,QAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;YAChB,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,yBAAyB,CAAC;AACvE,YAAA,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE;AAClB,gBAAA,IACE,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,oBAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EACpD;oBACA,IAAI,CAAC,kBAAkB,EAAE;oBACzB,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE;gBAClD;AAAO,qBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;oBAC/B,IAAI,CAAC,kBAAkB,EAAE;AACzB,oBAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,EAAE,EAAE;AACjC,wBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,wBAAA,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;oBAClB;yBAAO;wBACL,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE;oBAClD;gBACF;YACF;QACF;IACF;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;QAC3B;AACA,QAAA,EAAE,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC;IAC1E;AAcQ,IAAA,eAAe,CAAC,CAAC,EAAA;QACvB,OAAO,CAAA;;0BAEe,CAAC,CAAC,UAAU,CAAC;cAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI;cAChC,IAAI,CAAC,SAAS,CACd,CAAC,CAAC,UAAU,CAAC;kBACT,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG;kBACnC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAE3C;;;AAGoB,wBAAA,EAAA,IAAI,CAAC,SAAS,CAChC,CAAC,CAAC,UAAU,CAAC,WAAW;AACtB,YAAA,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;AACzB,cAAE,CAAC,CAAC,UAAU,CAAC;AACf,cAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CACrC;;0BAEmB,CAAC,CAAC,UAAU,CAAC;AAC/B,cAAE,UAAU;AACZ,gBAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAChC,WAAW;AACX,gBAAA,IAAI,CAAC,SAAS,CACZ,CAAC,CAAC,UAAU,CAAC;sBACT,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG;sBACnC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CACxC;gBACD;AACA,cAAE,EACJ,CAAA;0BACoB,CAAC,CAAC,UAAU,CAAC;AAC9B,aAAA,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;YAChB,IAAI,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC;YAC/C,IACE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC3B,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAC3B;AACA,gBAAA,OAAO,GAAG,CAAC,MAAM,KAAK;AACpB,sBAAE;AACF,sBAAE,UAAU;AACZ,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;wBACnB,WAAW;AACX,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACnB,wBAAA,OAAO;YACX;AACF,QAAA,CAAC;aACA,IAAI,CAAC,EAAE,CAAC;;;uBAGM;IACrB;AACD;;AC3OD,MAAM,aAAc,SAAQ,gBAAgB,CAAA;IAIxC,WAAA,CAAY,cAAmB,EAAE,cAAmB,EAAE,UAAe,EACjE,oBAAyB,EAAE,KAAc,EAAE,WAAwB,EAAA;;;;;;;;;AASnE,QAAA,IAAI,aAAa,GAAG,CAAC,QAAQ,oBAAoB,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,oBAAoB;AACrF,cAAE;AACE,gBAAA,GAAG,oBAAoB;AACvB,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;AAC3C;AACD,cAAE;AACE,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,UAAU,EAAE,UAAU;AACtB,gBAAA,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;AACzC,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,WAAW,EAAE;aAChB;QAEL,KAAK,CAAC,aAAa,CAAC;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;IACxC;IAEO,KAAK,CAAC,cAAuB,KAAK,EAAE,YAAqB,KAAK,EAAE,YAAqB,KAAK,EAAA;QAC7F,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;AACjF,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW;AAC7D,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,WAAW;QACzD,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YACzE,IAAI,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,cAAc,KAAK,kBAAkB,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,cAAc;YAChI,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,cAAc,KAAK,kBAAkB,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,cAAc;YAC3H,UAAU,GAAG,iBAAiB;YAC9B,QAAQ,GAAG,eAAe;QAC9B;AACA,QAAA,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE;QAC1G,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY;QACtD,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE;QAC7B;aAAO,IAAI,SAAS,EAAE;YAClB,GAAG,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AACnD,YAAA,GAAG,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AAC5D,YAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE;QAC7B;aAAO;AACH,YAAA,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAC3E,GAAG,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AACnD,YAAA,GAAG,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AAC5D,YAAA,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE;QACnC;IACJ;;;IAIO,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAA;AAClC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;QACtB,IAAI,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;QAClD,UAAU,IAAI,WAAW;QACzB,QAAQ,IAAI,WAAW;AACvB,QAAA,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,EAAE;AAC1H,QAAA,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,QAAQ;AAC1C,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,eAAe,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9D,IAAI,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClH,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,IAAG;AACrC,gBAAA,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBAC9D,eAAe,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAA,EAAG,CAAC,CAAA,QAAA,CAAU;AACnD,gBAAA,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;AAC9C,YAAA,CAAC,CAAC;AACF,YAAA,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,eAAe;AACxD,YAAA,GAAG,CAAC,eAAe,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;QAC5E;AACA,QAAA,OAAO,GAAG;IACd;AACH;;AChFD,MAAM,mBAAoB,SAAQ,SAAS,CAAA;AAavC,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QAVf,IAAA,CAAA,IAAI,GAAkB,EAAE;;QAEzB,IAAA,CAAA,WAAW,GAAkB,EAAE;QAC/B,IAAA,CAAA,aAAa,GAAY,IAAI;QAqJ5B,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAW,KAAI;YAErD,MAAM,aAAa,GAAG,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE;AAC1C,kBAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO;kBAC3D,EAAE;YAER,MAAM,aAAa,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE;AACrC,kBAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACjC,oBAAA,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC;AAC3I,oBAAA,OAAO,GAAG;gBACd,CAAC,EAAE,EAAE;kBACH,EAAE;YAER,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;gBAChC,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;AACjD,gBAAA,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;AAC3B,oBAAA,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/E;gBACA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC;YAChD;AAEA,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,aAAa,EAAE,EAAE,MAAM,CAAC;AACnE,QAAA,CAAC;AA2GO,QAAA,IAAA,CAAA,uBAAuB,GAAG,CAAC,KAAK,KAAI;AACxC,YAAA,OAAO,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG;AAC9D,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,QAAQ,KAAI;YAC1C,OAAO,CAAA,SAAA,EAAY,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AACvD,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,2BAA2B,GAAG,CAAC,QAAQ,KAAI;YAC/C,OAAO,QAAQ,CAAC,UAAU,EAAE,IAAI,IAAI,KAAK,CAAC,mCAAmC,CAAC,QAAQ;AAC/E,mBAAA,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC7F,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,QAAQ,KAAI;YACtC,OAAO,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AACjE,QAAA,CAAC;IA7RD;IAEO,MAAM,MAAM,CAAC,OAAiB,EAAE,mBAAA,GAA2B,EAAE,EAAE,cAA6B,EAAA;AAC/F,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO;AAE7B,QAAA,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC;AAExE,QAAA,IAAI,CAAC,WAAW,GAAG,cAAc;;;AAOjC,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAEhE,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACnE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAEtD,IAAI,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;IAG1H;AAEQ,IAAA,yBAAyB,CAAC,aAAmE,EAAA;AACjG,QAAA,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC;IACjF;AAEQ,IAAA,oBAAoB,CAAC,mBAAyE,EAAA;AAClG,QAAA,OAAO,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,+BAA+B,EAAE,IAAI,CAAC;IAC3F;AAEQ,IAAA,mBAAmB,CAAC,OAA6D,EAAA;AACrF,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK,EAAG,CAAC,CAAC;IAClH;;IAGQ,cAAc,CAAC,YAAiB,IAAI,EAAA;QACxC,MAAM,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI;AACzC,QAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;IAC9B;;IAIQ,UAAU,CAAC,IAAS,EAAE,MAAW,EAAA;QAErC,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;QAE7F,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,IAAG;YAC3B,IAAI,uBAAuB,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;AACvG,YAAA,IAAI,EAAE;YACN,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,uBAAuB,CAAC,EAAE;gBACxF,EAAE,GAAG,IAAI;YACb;iBAAO;AACH,gBAAA,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;;AAG3D,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;AAC5D,oBAAA,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;gBACpC;YACJ;AAEA,YAAA,IAAI,CAAC,EAAE;gBAAE;AAET,YAAA,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACvB,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5D,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AAEzC,YAAA,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;AACnB,gBAAA,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;AAC3C,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;YACrD;AACJ,QAAA,CAAC,CAAC;IAEN;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;AAGrG,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AACnF,QAAA,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAEzD,IAAI,KAAK,GAAG;aACP,MAAM,CAAC,OAAO;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB;aAC/B,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACjE,aAAA,IAAI,CAAC,kBAAkB,EAAE,iBAAiB;AAC1C,aAAA,IAAI,CAAC,MAAM,EAAE,UAAU;AACvB,aAAA,IAAI,CAAC,WAAW,EAAE,oBAAoB;AACtC,aAAA,IAAI,CAAC,eAAe,EAAE,OAAO;AAC7B,aAAA,IAAI,CAAC,eAAe,EAAE,SAAS;AAC/B,aAAA,IAAI,CACD,aAAa,EACb,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,GAAG,KAAK,CACzD;QAEL,IAAI,IAAI,GAAG,IAAI;QAEf,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;YAC1B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AAC/C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,UAAU;AAEd,QAAA,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,EAAA;AAC7B,YAAA,UAAU,GAAI,KAAK,CAAC,MAAc,CAAC,KAAK;AACxC,YAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;;gBAEzB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;gBAC3C,IAAI,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YAG1H;iBAAO;;AAEH,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAE/B;AACJ,QAAA,CAAC,CAAC;IAEN;IAEQ,MAAM,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,EAAE,EAAA;AAC3H,QAAA,IAAI;YACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AACjD,YAAA,IAAI,MAAM,CAAC,KAAK,EAAE;gBACd,MAAM,MAAM,CAAC,KAAK;YACtB;YACA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;QACpD;QAAE,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,+BAA+B,EAAE,2BAA2B,EAAE,GAAG,YAAY,cAAc,GAAG,GAAG,GAAG,IAAI,CAAC;YACnI,IAAI,cAAc,EAAE;AAChB,gBAAA,MAAM,GAAG;YACb;QACJ;IACJ;AA0BQ,IAAA,UAAU,CAAC,UAAU,EAAA;AACzB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YAChB,IAAI,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,SAAS;AAClD,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE;AACvD,gBAAA,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;YAC9B;iBAAO;AACH,gBAAA,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;YAC7B;AACJ,QAAA,CAAC,CACA;IAGL;;AAGQ,IAAA,mBAAmB,CAAC,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,EAAA;QAC9E,IAAI,IAAI,GAAG,EAAE;QAEb,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC9B,YAAA,IAAI,SAAS,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE,CAAC;AAEhI,YAAA,SAAS,CAAC,MAAM,GAAG,MAAK;AACpB,gBAAA,SAAS,CAAC,UAAU,GAAG,IAAI;gBAC3B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;gBAC5C,OAAO,IAAI,CAAC,yBAAyB,CAAC;AAClC,oBAAA,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE;AACzE,oBAAA,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI;AACnC,iBAAA,CAAC;AACN,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS;YAEtD,IAAI,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE;gBAC/B,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC;YAC3H;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACf;;IAGQ,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAA;QACrC,IAAI,IAAI,GAAG,IAAI;AACf,QAAA,IAAI,eAAe,GAAG,IAAI,YAAY,aAAa;AACnD,QAAA,IAAI,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI;AACrE,aAAA,IAAI,CAAC,OAAO,EAAE,CAAA,cAAA,EAAiB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI;AAClG,aAAA,IAAI,CAAC,UAAU,EAAE,CAAC;;AAElB,aAAA,IAAI,CAAC,WAAW,EAAE,eAAe,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACjE,aAAA,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC7D,aAAA,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU;AAC9D,aAAA,EAAE,CAAC,eAAe,EAAE,gBAAgB,KAAK,EAAA;AACtC,YAAA,IAAI,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;gBAAE;YAAQ;AACjD,YAAA,IAAI,CAAC,eAAe,EAAE;gBAClB,KAAK,CAAC,eAAe,EAAE;;;AAIvB,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;AACnC,oBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACxD,wBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;wBAChE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;oBAC5C;yBACK;wBACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;oBAC3C;gBACJ;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3C;iBAAO;AACH,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,QAAQ,EAAE;gBACnB;qBAAO;AACH,oBAAA,MAAM,IAAI,CAAC,MAAM,EAAE;gBACvB;YACJ;AACJ,QAAA,CAAC,CAAC;QAEN,IAAI,eAAe,EAAE;AACjB,YAAA,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA,MAAA,EAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,GAAG,EAAE,CAAA,EAAA,CAAI,CAAC;AACnH,YAAA,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpE,YAAA,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACtG,YAAA,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAG5E;aAAO;AACH,YAAA,IAAI,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;AACzE,YAAA,KAAK,CAAC,iCAAiC,CAAC,QAAQ,EAAE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC7F;AAEA,QAAA,OAAO,iBAAiB;IAC5B;AAEQ,IAAA,YAAY,CAAC,IAAI,EAAA;AACrB,QAAA,IAAI,IAAI,YAAY,aAAa,EAAE;YAC/B,OAAO,IAAI,CAAC,IAAI;QACpB;;AAGA,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC;IACxF;AAkBH;AAED,MAAM,aAAa,CAAA;IAUf,WAAA,CAAY,IAAY,EAAE,UAAoB,EAAE,KAAa,EAAE,uBAAA,GAAyC,IAAI,EAAE,EAAA,GAAoB,IAAI,EAAA;AAClI,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;QACZ,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,uBAAuB,GAAG,uBAAuB;AACtD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;IAC3B;AAEA,IAAA,MAAM,KAAK;IAEX,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;IACtC;AACH;AAED,MAAM,YAAY,CAAA;IAUd,WAAA,CAAY,IAAS,EAAE,IAAA,GAAsB,IAAI,EAAE,KAAU,EAAE,EAAA,GAAoB,IAAI,EAAE,WAAA,GAA6B,IAAI,EAAA;AACtH,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC;AACH;AAED,IAAY,wBAAyD;AAArE,CAAA,UAAY,wBAAwB,EAAA;AAAG,IAAA,wBAAA,CAAA,KAAA,CAAA,GAAA,GAAS;AAAE,IAAA,wBAAA,CAAA,YAAA,CAAA,GAAA,IAAiB;AAAC,CAAC,EAAzD,wBAAwB,KAAxB,wBAAwB,GAAA,EAAA,CAAA,CAAA;AACpC,IAAY,QAA4B;AAAxC,CAAA,UAAY,QAAQ,EAAA;AAAG,IAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AAAE,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AAAC,CAAC,EAA5B,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;AACpB,IAAY,KAAkC;AAA9C,CAAA,UAAY,KAAK,EAAA;AAAG,IAAA,KAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AAAE,IAAA,KAAA,CAAA,KAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AAAE,IAAA,KAAA,CAAA,KAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AAAC,CAAC,EAAlC,KAAK,KAAL,KAAK,GAAA,EAAA,CAAA,CAAA;;ACnWjB,MAAM,oBAAqB,SAAQ,cAAc,CAAA;AAiB7C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;QAPf,IAAA,CAAA,OAAO,GAAY,IAAI;IAQ/B;IAEO,SAAS,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM;IACtB;AAEO,IAAA,MAAM,CAAC,YAAA,GAAoB,EAAE,EAAE,SAAiB,EAAE,SAAiB,EACtE,MAAA,GAAiB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,YAAY,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE;AAEjE,YAAA,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,MAAM;QACzC;AAEA,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACjB,YAAA,MAAM,GAAG,IAAI,CAAC,SAAS;QAC3B;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;QAC1CD,QAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY;AAC3C,aAAA,OAAO,CAAC,0BAA0B,EAAE,IAAI,CAAC;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAE1D,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACvC,YAAA,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;gBAC5C,KAAK,CAAC,eAAe,EAAE;YAC3B;AACA,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;gBACtD,IAAI,CAAC,KAAK,EAAE;YAChB;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;AAC/F,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;AACpF,QAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC;QACnG,IAAI,IAAI,GAAG,IAAI;QACf,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC7G,aAAA,EAAE,CAAC,OAAO,EAAE,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC3B;AACJ,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;gBACxE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBAC7B,KAAK,CAAC,cAAc,EAAE;YAC1B;AACJ,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;QAC3E,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAC1B,IAAI,CAAC,gBAAgB,EAAE;QAEvB,IAAI,CAAC,uBAAuB,EAAE;QAE9B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;QACjC;QACA;IACJ;;AAGQ,IAAA,QAAQ,CAAC,CAAO,EAAA;AACpB,QAAA,IAAI,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACjE,QAAA,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,UAAU,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC;IACnG;AAEQ,IAAA,eAAe,CAAC,CAAO,EAAA;QAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACnG;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,WAAW,GAAG;AACd,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC/C,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AACvC,YAAA,MAAM,EAAEA,QAAM,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE;AACpC,YAAA,QAAQ,EAAEA,QAAM,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE;AACxC,YAAA,aAAa,EAAEA,QAAM,CAAC,UAAU,EAAE,CAAC,WAAW;SACjD;;AAGD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,CAAC;AAC9B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC/B,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC3B,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,QAAQ,EAAE,CAAC,CAAC,KAAI;AACZ,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;gBAC1B,IAAI,CAAC,qBAAqB,EAAE;YAChC,CAAC;AACD,YAAA,MAAM,EAAE,CAAC,CAAC,KAAI;gBAEV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACjF,CAAC;YACD,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACrG,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACrG,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACxG,SAAA,CAAC;IACN;AAEQ,IAAA,OAAO,CAAC,CAAO,EAAA;QACnB,IAAI,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAC/E,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC;IACxC;AAEQ,IAAA,UAAU,CAAC,OAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IAC1B;AAEQ,IAAA,SAAS,CAAC,MAAc,EAAE,YAAY,GAAG,IAAI,EAAA;AACjD,QAAA,IAAI,cAAc,GAAG,MAAM,IAAI,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;AACvH,QAAA,IAAI,CAAC,MAAM,GAAG,cAAc;IAChC;AAEQ,IAAA,aAAa,CAAC,WAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE;AAC/F,QAAA,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,SAAS,CAAC,oBAAoB;iBACjF,IAAI,CAAC,WAAW;AAChB,iBAAA,KAAK;iBACL,MAAM,CAAC,KAAK;AACZ,iBAAA,OAAO,CAAC,kBAAkB,EAAE,IAAI;AAChC,iBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB;IACJ;IAEQ,qBAAqB,GAAA;AACzB,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;QAChD,IAAI,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;AACnD,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC;IAC5C;AAEQ,IAAA,eAAe,CAAC,iBAAyB,EAAA;QAC7C,IAAI,iBAAiB,GAAG,EAAE;AAE1B,QAAA,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE;AAC1B,YAAA,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC9C;aAAO;YACH,IAAI,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC3F,IAAI,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC1F,YAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,gBAAA,iBAAiB,CAAC,IAAI,CAAC,qDAAqD,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;YAC7H;AACA,YAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,gBAAA,iBAAiB,CAAC,IAAI,CAAC,mDAAmD,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC;YAC1H;QACJ;QAEA,OAAO;AACH,YAAA,YAAY,GAAG,iBAAiB,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7C,YAAA,MAAM,EAAE;SACX;IACL;IAEQ,aAAa,GAAA;QACjB,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;IAC9G;IAEQ,sBAAsB,GAAA;AAC1B,QAAA,OAAO,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAC9F;AAEQ,IAAA,qBAAqB,CAAC,MAAc,EAAA;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,4BAA4B,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7H;IAEQ,uBAAuB,CAAC,YAAqB,KAAK,EAAA;QACtD,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;QAC/E,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC1F;IACJ;AAEQ,IAAA,gBAAgB,CAAC,QAAc,EAAA;AACnC,QAAiB,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AACvE,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;IACzC;;AAGQ,IAAA,cAAc,CAAC,IAAU,EAAA;AAC7B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1E;IAEQ,gBAAgB,GAAA;QAEJ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC9G,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B;AACzF,aAAA,EAAE,CAAC,OAAO,EAAE,MAAK;YACd,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAChD,gBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC;AACnC,gBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;YACtC;AACJ,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;gBACvE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;gBAC9B,KAAK,CAAC,cAAc,EAAE;YAC1B;AACJ,QAAA,CAAC,CAAC;IACV;AACH;;AChPD,MAAM,oBAAqB,SAAQ,cAAc,CAAA;AAI7C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC7B,KAAK,CAAC,YAAY,CAAC;AAQf,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,MAAA,GAAiB,IAAI,KAAI;AAC1C,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC3D,gBAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACtB;YACA,IAAI,CAAC,SAAS,EAAE;AACpB,QAAA,CAAC;IAdD;IAEQ,SAAS,GAAA;QACb,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;IACtC;AAWO,IAAA,MAAM,CAAC,YAAA,GAAoB,EAAE,EAAE,SAAiB,EAAE,SAAiB,EAAE,cAAA,GAAyB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAA;QACnH,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;AACvD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,IAAI,CAAC;AACzE,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QACvF;QAEA,IAAI,aAAa,GAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AACrD,QAA2B,CAAC,aAAa,CAAC,MAAM,CAAC,8BAA8B,CAAC,EAAE,SAAS,CAAC,GAAG;QAE/F,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAK;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI;YACnC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;AACtH,QAAA,CAAC,CAAC;IACN;AAEH;;AC5CD,MAAM,QAAQ,CAAA;IAsBV,WAAA,CAAY,IAAU,EAAE,EAAQ,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;IAChB;AAEA,IAAA,iCAAiC,CAAC,qBAA6B,EAAA;QAC3D,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtE,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC;AACpE,QAAA,IAAI,CAAC,kCAAkC,CAAC,eAAe,CAAC;IAC5D;AAEA,IAAA,kCAAkC,CAAC,qBAA6B,EAAA;QAC5D,IAAI,iBAAiB,GAAG,CAAC;QACzB,OAAO,iBAAiB,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE;YAC7E,IAAI,QAAQ,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,qBAAqB,EAAE;gBAAE;YAAO;QACtF;QAEA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC,iBAAiB,GAAG,CAAC,CAAC;IACvE;IAEA,oBAAoB,GAAA;AAChB,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;AAC1F,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;IAC5B;AAEA,IAAA,IAAI,UAAU,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IAC9B;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;IAC5B;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAChB,OAAO,IAAI,CAAC,YAAY;IAC5B;AAEA,IAAA,IAAI,aAAa,GAAA;QACb,IAAI,UAAU,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;QAChE,OAAO,CAAA,EAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAA,CAAE;IAClD;IAEA,OAAO,mBAAmB,CAAC,QAAgB,EAAA;QACvC,IAAI,KAAa,EAAE,IAAY;AAE/B,QAAA,IAAI,QAAQ,GAAG,IAAI,EAAE;YACjB,KAAK,GAAG,QAAQ;YAChB,IAAI,GAAG,IAAI;QACf;AAAO,aAAA,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAE,EAAE;YAC7B,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAClC,IAAI,GAAG,GAAG;QACd;aAAO,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE;AAClC,YAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YACzC,IAAI,GAAG,GAAG;QACd;aAAO,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;AACvC,YAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,GAAG;QACd;aAAO;AACH,YAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACnD,IAAI,GAAG,GAAG;QACd;AAEA,QAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IAC1B;;AAlFA;AACO,QAAA,CAAA,aAAa,GAAG;IACnB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;AACtH,IAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AACrE,IAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACrE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK;IACzC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;CACvC;AAEM,QAAA,CAAA,eAAe,GAAG;IACrB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AAC1D,IAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;AACrE,IAAA,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACvF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAClE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;CACpE;;ACRL,MAAe,eAAgB,SAAQ,SAAS,CAAA;AAuB9C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC/B,KAAK,CAAC,YAAY,CAAC;QAPZ,IAAA,CAAA,eAAe,GAAG,IAAI;AACtB,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAA,CAAA,0BAA0B,GAAG,KAAK,CAAC;QACnC,IAAA,CAAA,oBAAoB,GAAG,EAAE;QACzB,IAAA,CAAA,cAAc,GAAG,iCAAiC;AAIzD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;IAClC;AAMU,IAAA,eAAe,KAAW;AAE1B,IAAA,UAAU,CAClB,eAAuB,EACvB,QAA+B,EAC/B,IAA0B,EAC1B,YAAY,EAAA;AAEZ,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC;AAC1C,QAAA,IAAI,CAAC,YAAY;YACf,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,mBAAmB;IAEhE;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACjD;IACF;AAEQ,IAAA,gBAAgB,CAAC,SAAe,EAAA;QACtC,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;QAElC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,KAAI;YACvD,aAAa,CAAC,UAAU,GAAG;gBACzB,IAAI,EAAE,WAAW,CAAC,UAAU;gBAC5B,EAAE,EAAE,WAAW,CAAC,QAAQ;gBACxB,UAAU,EAAE,WAAW,CAAC,UAAU;aACnC;AACD,YAAA,OAAO,aAAa,CAAC,KAAK,EAAE;AAC9B,QAAA,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,SAAiB,KAAI;AAE/C,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,eAAe,CAAC,SAAe,EAAA;AACrC,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU;AACjD,QAAA,IAAI,aAAa,GACf,IAAI,CAAC,IAAI,CACP,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,cAAc;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACnC;YACD,IAAI,CAAC,YAAY,CAAC,gBAAgB;AAClC,YAAA,cAAc;QAEhB,OAAO;AACL,YAAA,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB;AAC9D,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa;SAC5C;IACH;IAEU,QAAQ,GAAA;AAChB,QAAA,IAAI,CAAC;aACF,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAA,EAAA,CAAI;aACnD,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,EAAA,CAAI,CAAC;AAEpD,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,EACtB,IAAI,CAAC,YAAY,CAAC,EAAE,EACpB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAChC,IAAI,CAAC,YAAY,EACjB;YACE,cAAc,EAAE,IAAI,CAAC,YAAY;AACjC,YAAA,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB;AACnD,SAAA,CACF;IACH;IAEQ,kBAAkB,CAAC,IAAU,EAAE,EAAQ,EAAA;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;AAE1C,QAAA,IACE,IAAI,CAAC,YAAY,CAAC,gBAAgB;AAClC,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,GAAG,CAAC,EACtC;YACA,IAAI,CAAC,YAAY,CAAC,kCAAkC,CAClD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CACnC;QACH;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,iCAAiC,CAAC,IAAI,CAAC,eAAe,CAAC;QAC3E;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE;IAC1C;AAGD;;AClID,MAAM,cAAe,SAAQ,eAAe,CAAA;AAE1C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC/B,KAAK,CAAC,YAAY,CAAC;AACnB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;IAClC;IAEA,MAAM,CACJ,eAAuB,EACvB,QAA+B,EAC/B,UAAkB,EAClB,IAA0B,EAC1B,YAAY,EAAA;AAEZ,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;QAC5B,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC;IAChE;IAEU,aAAa,GAAA;QACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE;AAEvB,YAAA,KAAK,CAAC,MAAM,GAAG,MAAK;AAClB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,KAAK;AACvC,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,MAAM;AAExC,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;gBAExD,OAAO,CAAC,IAAI,CAAC;AACf,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,OAAO,GAAG,CAAC,YAAY,KAAI;AAC/B,gBAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;gBACzB,MAAM,CAAC,YAAY,CAAC;AACtB,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU;AAC7B,QAAA,CAAC,CAAC;IACJ;IAEU,IAAI,GAAA;AACZ,QAAA,IAAI,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW;QACzD,IAAI,sBAAsB,GACxB,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB;AAE5D,QAAA,IAAI,CAAC;AACF,aAAA,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,qBAAqB,IAAI;AAC3C,aAAA,KAAK,CAAC,QAAQ,EAAE,GAAG,sBAAsB,CAAA,EAAA,CAAI,CAAC;AAEjD,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAClD,qBAAqB,EACrB,sBAAsB,EACtB,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,qBAAqB,CAC3B;AAED,QAAA,IAAI,CAAC;aACF,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,eAAe,CAAC,KAAK,IAAI;aAC3C,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAG,eAAe,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;QAEjD,IAAI,CAAC,QAAQ,EAAE;IACjB;AAEQ,IAAA,yBAAyB,CAC/B,cAAsB,EACtB,eAAuB,EACvB,UAAkB,EAClB,WAAmB,EAAA;QAEnB,IAAI,cAAc,IAAI,UAAU,IAAI,eAAe,IAAI,WAAW,EAAE;YAClE,OAAO;AACL,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,MAAM,EAAE,WAAW;aACpB;QACH;;;;;AAMA,QAAA,IAAI,WAAW,GAAG,cAAc,GAAG,UAAU;AAC7C,QAAA,IAAI,YAAY,GAAG,eAAe,GAAG,WAAW;QAChD,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;QAEtD,OAAO;YACL,KAAK,EAAE,UAAU,GAAG,YAAY;YAChC,MAAM,EAAE,WAAW,GAAG,YAAY;SACnC;IACH;AAEU,IAAA,aAAa,CAAC,OAAwC,EAAA;AAC9D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC1B,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAA8B;gBAC9D,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,KAAK,GACP,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK;sBACzB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAM,CAAC,KAAK;sBAC9C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;gBAClC,OAAO;oBACL,KAAK;oBACL,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK;oBACnC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;oBACnC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;AACnC,oBAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;oBACpC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc;iBAC/C;AACH,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;QACpC;IACF;AACU,IAAA,iBAAiB,CAAC,aAA8C,EAAA;AACxE,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC;aACrB,SAAS,CAA0B,KAAK;aACxC,IAAI,CAAC,aAAa,CAAC;QAEtB,IAAI,WAAW,GAAG;AACf,aAAA,KAAK;aACL,MAAM,CAAC,KAAK;AACZ,aAAA,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC;AAE7C,QAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;AAEhD,QAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;QAEhD;aACG,KAAK,CAAC,YAAY;AAClB,aAAA,OAAO,CAAC,UAAU,EAAE,KAAK;AACzB,aAAA,OAAO,CAAC,WAAW,EAAE,KAAK;AAC1B,aAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI;AACrD,aAAA,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAA,EAAG,IAAI,CAAC,CAAC,GAAG;AACpC,aAAA,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,CAAA,EAAG,IAAI,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;;QAGvC,MAAM,iBAAiB,GAAG,qBAAqB;AAE/C,QAAA,IAAI,CAAC;aACF,SAAS,CAAC,4BAA4B;aACtC,IAAI,CAAC,aAAa;AAClB,aAAA,OAAO,CAAC,iBAAiB,EAAE,IAAI;AAC/B,aAAA,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,KAAK,IAAI;aACpD,EAAE,CAAC,cAAc,EAAE,YAAA;AAClB,YAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;AACnD,QAAA,CAAC;aACA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAI;AAC3B,YAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;gBACtC,IAAI,CAAC,OAAO,CAAC;AACX,oBAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,gBAAgB;oBACjD,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,CAAC;aACF,SAAS,CAAC,QAAQ;aAClB,IAAI,CAAC,aAAa;AAClB,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AAEnC,QAAA,IAAI,CAAC;aACF,SAAS,CAAC,QAAQ;aAClB,IAAI,CAAC,aAAa;aAClB,IAAI,CAAC,CAAC,IAAI,KACT,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;AAEjE,aAAA,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;IACzC;AAEU,IAAA,gBAAgB,CAAC,QAAQ,EAAA;AACjC,QAAA,OAAO,QAAQ;AACb,YAAA,QAAQ,CAAC,UAAU;AACnB,YAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACtB,YAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;cACrB,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;cAC/B,IAAI;IACV;AAEU,IAAA,iBAAiB,CAAC,GAAG,EAAA;AAC7B,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACjD,QAAA,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACzB,YAAA,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACzC,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,SAAS;IAClB;AACD;;ACrLD,MAAM,gBAAiB,SAAQ,SAAS,CAAA;IAoBtC,WAAA,CAAY,YAAqB,EAAE,gBAAA,GAAyB,IAAI,EAAA;QAC9D,KAAK,CAAC,YAAY,CAAC;QAJZ,IAAA,CAAA,YAAY,GAAW,CAAC;AACxB,QAAA,IAAA,CAAA,uBAAuB,GAAW,IAAI,CAAC;AAI9C,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,gBAAgB;IAC3C;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,iBAAiB;IAC/B;IAEA,MAAM,CACJ,KAAW,EACX,GAAS,EACT,iBAAkC,EAClC,OAAO,EACP,gBAAmC,EAAA;AACnC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,uBAAuB,GAAG,iBAAiB;AAChD,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAEtJ,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QAChD,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAErD,QAAA,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AAEtB,QAAA,IAAI,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK;AAC7C,aAAA,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC;QAEzC,IAAI,oBAAoB,GAAS,eAAe,CAAC,IAAI,EAAG,CAAC,WAAW;QACpE,IAAI,qBAAqB,GAAS,eAAe,CAAC,IAAI,EAAG,CAAC,YAAY;QACtE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,UAAU,GAAG,oBAAoB,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAEhE,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,SAAS;AACpC,aAAA,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9B,QAAA,IAAI,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK;AACjD,aAAA,OAAO,CAAC,mBAAmB,EAAE,IAAI;aACjC,KAAK,CAAC,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA,EAAA,CAAI;aACzC,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,YAAY,IAAI;aACtC,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC;QAEzC,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAU,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC9D,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC;QAE5D,IAAI,QAAQ,GAAG;aACZ,MAAM,CAAC,KAAK;aACZ,MAAM,CAAC,GAAG,CAAC;AAEd,QAAA,eAAe,CAAC,MAAM,CAAC,KAAK;AACzB,aAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI;aAClC,KAAK,CAAC,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,YAAY,IAAI;aACtC,KAAK,CAAC,OAAO,EAAE,CAAA,EAAG,IAAI,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC;QAEzC,IAAI,CAAC,KAAK,GAAG;aACV,MAAM,CAAC,GAAG;AACV,aAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC;AAEtC,QAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;aAClB,SAAS,CAAM,eAAe,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE;AACnE,aAAA,EAAE,CAAC,iBAAiB,EAAE,MAAK,EAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACrD,aAAA,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,KAAI;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtB,QAAA,CAAC;AACA,aAAA,EAAE,CAAC,KAAK,EAAE,MAAK;YACd,IAAI,CAAC,SAAS,EAAE;QAClB,CAAC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AACrB,aAAA,OAAO,CAAC,oBAAoB,EAAE,IAAI;AAClC,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY;AAC5B,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AACrB,aAAA,OAAO,CAAC,qBAAqB,EAAE,IAAI;AACnC,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY;AAC5B,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;QAEhC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ;AAC1C,aAAA,OAAO,CAAC,qBAAqB,EAAE,IAAI;AACnC,aAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY;AAC3B,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;QAEhC,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK;AAChD,aAAA,OAAO,CAAC,sBAAsB,EAAE,IAAI,CAAC;QAExC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ;aACrD,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,KAAK,IAAI;aACzD,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,KAAK,IAAI;AAC1D,aAAA,EAAE,CAAC,OAAO,EAAE,MAAK;AAChB,YAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;gBAClC,IAAI,CAAC,IAAI,EAAE;YACb;iBAAO;gBACL,IAAI,CAAC,KAAK,EAAE;YACd;AACF,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM;AACjC,aAAA,OAAO,CAAC,wBAAwB,EAAE,IAAI;aACtC,KAAK,CAAC,QAAQ,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,YAAY,CAAA,EAAA,CAAI,CAAC;QAE9C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,KAAK;QACxD,IAAI,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC9D;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;;;YAGlC,IAAI,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,CAAC;YAErI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC;AACpF,YAAA,IAAI,CAAC;AACF,iBAAA,OAAO,CAAC,iBAAiB,EAAE,KAAK;AAChC,iBAAA,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC;QACtC;IACF;IAEA,KAAK,GAAA;;;AAGH,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE;AAClC,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC3C,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,YAAA,IAAI,CAAC;AACF,iBAAA,OAAO,CAAC,iBAAiB,EAAE,IAAI;AAC/B,iBAAA,OAAO,CAAC,kBAAkB,EAAE,KAAK,CAAC;QACvC;IACF;IAEA,IAAI,GAAA;;;AAGF,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE;YAC3D;QACF;AAEA,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc;AACtF,QAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC,iBAAiB,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;QAE3C,IAAI,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAE5D,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACtD;AAEQ,IAAA,KAAK,CAAC,MAAc,EAAE,GAAW,EAAE,GAAW,EAAA;QACpD,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;IAC/B;AAEQ,IAAA,MAAM,CAAC,SAAiB,EAAA;AAC9B,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB;AAC7D,aAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE;AAEZ,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;QAC9D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC;QAExE,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC9D;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACpD,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAClC,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;QACxC;IACF;IAEQ,eAAe,CAAC,eAAuB,EAAE,SAAe,EAAA;AAC9D,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB;AACpC,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY;aAC5B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;AAElD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB;aACrC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,GAAG,eAAe;aAC9C,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;AAElD,QAAA,IAAI,CAAC;aACF,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;AAElD,QAAA,IAAI,CAAC;aACF,MAAM,CAAC,yBAAyB;aAChC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACxC;AACD;AAED,MAAM,QAAS,SAAQ,sBAAsB,CAAA;AAE3C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC/B,KAAK,CAAC,YAAY,CAAC;IACrB;IAEA,MAAM,CAAC,OAAO,EAAE,SAAuC,EAAA;AACrD,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,CAAC,GAAG,SAAS;AAElB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YAAE;QAAQ;QAE7C,IAAI,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAChD,QAAA,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QAEtB,IAAI,CAAC,UAAU,GAAa,aAAa,CAAC,IAAI,EAAG,CAAC,WAAW;QAE7D,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK;AACpC,aAAA,OAAO,CAAC,OAAO,EAAE,IAAI;AACrB,aAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjB,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAC/B;AACD;;AC5OD,MAAM,WAAY,SAAQ,SAAS,CAAA;AAM/B,IAAA,WAAA,CAAY,YAAqB,EAAE,WAAA,GAAsB,KAAK,CAAC,IAAI,EAAE,EAAA;QACjE,KAAK,CAAC,YAAY,CAAC;QAuEhB,IAAA,CAAA,qBAAqB,GAAG,MAAK;YAChC,OAAO,IAAI,CAAC,aAAa;AAC7B,QAAA,CAAC;QAEO,IAAA,CAAA,aAAa,GAAG,MAAK;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AACtE,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AACnE,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC;AACrF,QAAA,CAAC;AAEM,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,2BAAA,GAAuC,KAAK,KAAI;AACpE,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;AACtE,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC;YAClF,IAAI,2BAA2B,EAAE;AAC7B,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;YACxE;AACJ,QAAA,CAAC;AAEO,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAI;AAC1C,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC;AAC/E,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC;AACjF,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjE,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AACzF,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC;AACvF,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AACvL,YAAA,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;AACtC,YAAA,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC;AACpC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC7B,QAAA,CAAC;QAEM,IAAA,CAAA,kBAAkB,GAAG,MAAK;YAC7B,OAAO,IAAI,CAAC,eAAe;AAC/B,QAAA,CAAC;AAxGG,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC;IAEO,MAAM,CAAC,UAA8B,EAAE,EAAA;AAC1C,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY;AACnD,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE;YAC7D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACrD;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;AACpF,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7B,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAG5D,QAAA,IAAI,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI;aAC9F,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAC5C,aAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;aAChI,IAAI,CAAC,eAAe,EAAE,CAAA,cAAA,EAAiB,IAAI,CAAC,WAAW,EAAE;AACzD,aAAA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAC5B;iBAAO;AACH,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,aAAa,EAAE;YAC1D;AACJ,QAAA,CAAC,CAAC;AACN,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC;QACpH;aAAO;AACH,YAAA,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QACnG;QAEA,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,kBAAkB;aAC1H,IAAI,CAAC,IAAI,EAAE,CAAA,uBAAA,EAA0B,IAAI,CAAC,WAAW,EAAE;aACvD,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;;AAG/E,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA,cAAA,EAAiB,IAAI,CAAC,WAAW,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;QAC1J,IAAI,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACxG,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;YACxC,IAAI,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,CAAC,aAAa;AACxH,iBAAA,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,iBAAA,IAAI,CAAC,MAAM,EAAE,UAAU;AACvB,iBAAA,IAAI,CAAC,YAAY,EAAE,CAAC;iBACpB,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,IAAI,CAAC,aAAa;AAC9C,iBAAA,KAAK,CAAC,kBAAkB,EAAE,CAAC;AAC3B,iBAAA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;gBACnB,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAAE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC/F,YAAA,CAAC;AACA,iBAAA,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI;gBACrB,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClG,KAAK,CAAC,cAAc,EAAE;AACtB,oBAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;gBACvE;qBAAO,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,KAAK,EAAE;oBACzC,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,oBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7B,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACxB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC;gBACtC;qBAAO,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,GAAG,EAAE;oBACvC,KAAK,CAAC,cAAc,EAAE;oBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,CAAC,CAAC;AACV,QAAA,CAAC,CAAC;IACN;AAqCH;;ACjID;AAKA,MAAM,iBAAkB,SAAQ,eAAe,CAAA;;AAe7C,IAAA,WAAA,CAAY,YAAqB,EAAA;QAC/B,KAAK,CAAC,YAAY,CAAC;AACnB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;IAClC;AAEA,IAAA,MAAM,CACJ,eAAuB,EACvB,QAA+B,EAC/B,IAA0B,EAC1B,YAAY,EAAA;AAEZ,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,QAAQ;AACrC,QAAA,IAAI,CAAC,wBAAwB,GAAG,YAAY,CAAC,eAAe;AAC5D,QAAA,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;QAC/B,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC;IAChE;IAEU,aAAa,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,IAAI;AACtD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CtE,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE;IAC1B;IAEU,IAAI,GAAA;QACZ,IAAI,CAAC,QAAQ,EAAE;IACjB;AAEU,IAAA,aAAa,CAAC,OAA2C,EAAA;;;;;IAKnE;AAEU,IAAA,gBAAgB,CAAC,QAAQ,EAAA;QACjC,IAAI,cAAc,GAAG,EAAE;AACvB,QAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE;AACnC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,gBAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACpB,oBAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;AAC3B,oBAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,uBAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBAC5C,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;sBAChC,IAAI;YACV;QACF;AACA,QAAA,OAAO,cAAc;IACvB;AAEU,IAAA,iBAAiB,CAAC,UAAsB,EAAA;AAChD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAU,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,qBAAqB;AACpE,YAAU,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,qBAAqB;;;;;;;;;QAUtE;IACF;IAEU,WAAW,CAAC,YAAY,EAAE,GAAG,EAAA;QACrC,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QACjD,aAAa,CAAC,SAAS,GAAG,qBAAqB,GAAG,IAAI,CAAC,KAAK;QAE5D,IAAI,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACtD,QAAA,kBAAkB,CAAC,SAAS,GAAG,qBAAqB;QAEpD,IAAI,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACtD,QAAA,kBAAkB,CAAC,SAAS,GAAG,qBAAqB;AAEpD,QAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACnE,QAAA,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC;QAErC,IAAI,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACrD,QAAA,eAAe,CAAC,SAAS,GAAG,sBAAsB;AAClD,QAAA,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAEpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACzC,YAAA,MAAM,CAAC,SAAS,GAAG,oBAAoB;AACvC,YAAA,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC;YAEnC,IAAI,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;YAErD,IAAI,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AACpD,YAAA,iBAAiB,CAAC,SAAS,GAAG,mBAAmB;AACjD,YAAA,IAAI,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,YAAA,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC;AACxC,YAAA,kBAAkB,CAAC,WAAW,CAAC,iBAAiB,CAAC;YAEjD,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;AAC/C,YAAA,YAAY,CAAC,SAAS,GAAG,kBAAkB;AAC3C,YAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrE,YAAA,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC;AAClC,YAAA,kBAAkB,CAAC,WAAW,CAAC,YAAY,CAAC;AAE5C,YAAA,eAAe,CAAC,WAAW,CAAC,kBAAkB,CAAC;QACjD;AACA,QAAA,kBAAkB,CAAC,WAAW,CAAC,kBAAkB,CAAC;AAClD,QAAA,kBAAkB,CAAC,WAAW,CAAC,eAAe,CAAC;AAC/C,QAAA,aAAa,CAAC,WAAW,CAAC,kBAAkB,CAAC;AAC7C,QAAA,OAAO,aAAa;IACtB;AACD;;ACtJD,MAAM,QAAQ,CAAA;AAAd,IAAA,WAAA,GAAA;;;QAMW,IAAA,CAAA,cAAc,GAA0B,cAAc;QACtD,IAAA,CAAA,QAAQ,GAAoB,QAAQ;QACpC,IAAA,CAAA,WAAW,GAAuB,WAAW;QAC7C,IAAA,CAAA,QAAQ,GAA2B,eAAe;QAClD,IAAA,CAAA,SAAS,GAAqB,SAAS;QACvC,IAAA,CAAA,iBAAiB,GAA6B,iBAAiB;QAC/D,IAAA,CAAA,IAAI,GAAgB,IAAI;QACxB,IAAA,CAAA,MAAM,GAAkB,MAAM;QAC9B,IAAA,CAAA,SAAS,GAAqB,SAAS;QACvC,IAAA,CAAA,mBAAmB,GAA+B,mBAAmB;QACrE,IAAA,CAAA,aAAa,GAAyB,aAAa;QACnD,IAAA,CAAA,OAAO,GAAmB,OAAO;QACjC,IAAA,CAAA,WAAW,GAAuB,WAAW;QAC7C,IAAA,CAAA,WAAW,GAAuB,WAAW;QAC7C,IAAA,CAAA,iBAAiB,GAA6B,iBAAiB;QAC/D,IAAA,CAAA,mBAAmB,GAA+B,mBAAmB;QACrE,IAAA,CAAA,cAAc,GAA0B,cAAc;QACtD,IAAA,CAAA,YAAY,GAAwB,YAAY;QAChD,IAAA,CAAA,oBAAoB,GAAgC,oBAAoB;QACxE,IAAA,CAAA,oBAAoB,GAAgC,oBAAoB;QACxE,IAAA,CAAA,mBAAmB,GAA+B,mBAAmB;QACrE,IAAA,CAAA,cAAc,GAA0B,cAAc;QACtD,IAAA,CAAA,gBAAgB,GAA4B,gBAAgB;QAC5D,IAAA,CAAA,WAAW,GAAuB,WAAW;QAC7C,IAAA,CAAA,iBAAiB,GAA6B,iBAAiB;IAkL1E;IA/MI,QAAQ,GAAA;IACR;IA8BO,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAA;AAC5C,QAAA,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,CAAC;QACxE,IAAI,IAAI,GAAU,EAAE;QACpB,IAAI,qBAAqB,GAAG,EAAE;QAC9B,IAAI,sBAAsB,GAAG,EAAE;QAC/B,IAAI,uBAAuB,GAAG,EAAE;AAChC,QAAA,KAAK,IAAI,QAAQ,IAAI,MAAM,EAAE;AACzB,YAAA,IAAI,aAAa;YACjB,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AAC3C,gBAAA,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;gBACvD,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,IAAI,EAAA;AAC7H,oBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/C,oBAAA,OAAO,IAAI;gBACf,CAAC,EAAE,EAAE,CAAC;gBACN,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBACpG,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG;YAC/C;iBAAO;AACH,gBAAA,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS;YAC9C;YAEA,IAAI,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AACvI,YAAA,IAAI,KAAK,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE;;YAG5C,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI;YACpE,IAAI,GAAG,EAAE;gBACL,KAAK,CAAC,yBAAyB,CAAC,GAAG;oBAC/B,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AAC5B,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,IAAI,EAAE;iBACT;YACL;YAEA,KAAK,CAAC,wBAAwB,CAAC,GAAG;AAC9B,gBAAA,KAAK,EAAE,qBAAqB,CAAC,aAAa,CAAC,CAAC,eAAe;AAC3D,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,IAAI,EAAE;aACT;YACD,KAAK,IAAI,OAAO,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE;AACpE,gBAAA,IAAI,IAAI,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI;AAC3E,gBAAA,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,IAAI,CAAC;oBAC5C,sBAAsB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;AAC7D,gBAAA,IAAI,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC;AAC/C,gBAAA,IAAI,IAAI,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI;AAC3E,gBAAA,IAAI,iBAAiB,GAAG,YAAY,GAAG,GAAG,GAAG,IAAI;AACjD,gBAAA,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACjF,oBAAA,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACtI,gBAAA,IAAI,WAAW,GAAG;AACd,oBAAA,KAAK,EAAE,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACxE,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,IAAI,EAAE;iBACT;AACD,gBAAA,KAAK,CAAC,iBAAiB,CAAC,GAAG,WAAW;YAC1C;YACA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBACxC,IAAI,WAAW,GAAG,QAAQ;AAC1B,gBAAA,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;oBAC5C,IAAI,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;AACtD,oBAAA,IAAI,mBAAmB,GAAG,cAAc,GAAG,SAAS;oBACpD,KAAK,CAAC,mBAAmB,CAAC,GAAG;AACzB,wBAAA,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC;AAC9B,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,IAAI,EAAE;qBACT;AACL,gBAAA,CAAC,CAAC;YACN;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,aAAa,CAAC,QAAQ,EAAA;AAC1B,QAAA,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG;IACpD;;AAGO,IAAA,qCAAqC,CAAC,eAAoB,EAAA;QAC7D,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/C,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC;QAEtE,IAAI,OAAO,GAAG,EAAE;QAChB,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC;AACxF,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;;AAGpG,QAAA,IAAI,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE;AAC9D,YAAA,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvE,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE;AAEzC,QAAA,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AACpD,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACpD,YAAA,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AACxE,QAAA,CAAC,CAAC;;QAGF,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC;;AAGrF,QAAA,IAAI,WAAW,IAAI,UAAU,EAAE;AAC3B,YAAA,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,WAAW,GAAG,aAAa,EAAE,CAAC,KAAK,aAAa,GAAG,EAAE,CAAC,EAAE;AACnF,gBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;AACrD,oBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;YAC/D;;AAEA,YAAA,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAC/B,gBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;YACrE;QACJ;QACA,OAAO,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;IACrD;IAEO,mCAAmC,CAAC,UAAsB,EAAE,OAAO,EAAA;QACtE,IAAI,MAAM,GAAU,EAAE;QACtB,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;YAC1B,IAAI,oBAAoB,GAAG,EAAE;YAC7B,IAAI,gBAAgB,GAAG,EAAE;YACzB,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,gBAAgB;AAEzD,YAAA,IAAI,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;AAClC,gBAAA,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE;AAC5B,iBAAA,IAAI,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;gBACtC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;oBAC3B,IAAI,qBAAqB,GAAG,EAAE;AAC9B,oBAAA,gBAAgB,CAAC,CAAC,CAAC,GAAG,qBAAqB;AAC3C,oBAAA,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;wBACtC,IAAI,cAAc,GAAG,EAAE;AACvB,wBAAA,qBAAqB,CAAC,EAAE,CAAC,GAAG,cAAc;AAC1C,wBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;4BACrC,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;AACjF,gCAAA,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS;AACvF,gCAAA,cAAc,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEnD,gCAAA,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;AAChC,wBAAA,CAAC,CAAC;AACN,oBAAA,CAAC,CAAC;AACN,gBAAA,CAAC,CAAC;YACN;iBACK;gBACD,IAAI,qBAAqB,GAAG,EAAE;AAC9B,gBAAA,gBAAgB,CAAC,EAAE,CAAC,GAAG,qBAAqB;gBAC5C,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;oBAC5B,IAAI,cAAc,GAAG,EAAE;AACvB,oBAAA,qBAAqB,CAAC,EAAE,CAAC,GAAG,cAAc;AAC1C,oBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACrC,wBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,oBAAA,CAAC,CAAC;AACN,gBAAA,CAAC,CAAC;YACN;AAEA,YAAA,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACrC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACjB;;AAGO,IAAA,eAAe,CAAC,OAAe,EAAE,QAAA,GAAmB,CAAC,EAAA;QACxD,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC;IACnD;AAEO,IAAA,gCAAgC,CAAC,OAAO,EAAA;QAC3C,IAAI,gBAAgB,GAAU,EAAE;AAChC,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,IAAG;YACnB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,KAAI;gBAChC,IAAI,KAAK,GAAG,EAAE;AACd,gBAAA,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;AACxB,oBAAA,KAAK,CAAC,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AACvF,gBAAA,CAAC,CAAC;AACF,gBAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QACF,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5I;AACH;;;;"}