{"version":3,"file":"typeahead.jquery.min.js","sources":["typeahead.jquery.js"],"sourcesContent":["/*!\r\n * typeahead.js 0.11.1\r\n * https://github.com/twitter/typeahead.js\r\n * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT\r\n */\r\n\r\n(function(root, factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n define(\"typeahead\", [ \"jquery\" ], function(a0) {\r\n return factory(a0);\r\n });\r\n } else if (typeof exports === \"object\") {\r\n module.exports = factory(require(\"jquery\"));\r\n } else {\r\n factory(jQuery);\r\n }\r\n})(this, function($) {\r\n var _ = function() {\r\n \"use strict\";\r\n return {\r\n isMsie: function() {\r\n return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\r\n },\r\n isBlankString: function(str) {\r\n return !str || /^\\s*$/.test(str);\r\n },\r\n escapeRegExChars: function(str) {\r\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n },\r\n isString: function(obj) {\r\n return typeof obj === \"string\";\r\n },\r\n isNumber: function(obj) {\r\n return typeof obj === \"number\";\r\n },\r\n isArray: $.isArray,\r\n isFunction: $.isFunction,\r\n isObject: $.isPlainObject,\r\n isUndefined: function(obj) {\r\n return typeof obj === \"undefined\";\r\n },\r\n isElement: function(obj) {\r\n return !!(obj && obj.nodeType === 1);\r\n },\r\n isJQuery: function(obj) {\r\n return obj instanceof $;\r\n },\r\n toStr: function toStr(s) {\r\n return _.isUndefined(s) || s === null ? \"\" : s + \"\";\r\n },\r\n bind: $.proxy,\r\n each: function(collection, cb) {\r\n $.each(collection, reverseArgs);\r\n function reverseArgs(index, value) {\r\n return cb(value, index);\r\n }\r\n },\r\n map: $.map,\r\n filter: $.grep,\r\n every: function(obj, test) {\r\n var result = true;\r\n if (!obj) {\r\n return result;\r\n }\r\n $.each(obj, function(key, val) {\r\n if (!(result = test.call(null, val, key, obj))) {\r\n return false;\r\n }\r\n });\r\n return !!result;\r\n },\r\n some: function(obj, test) {\r\n var result = false;\r\n if (!obj) {\r\n return result;\r\n }\r\n $.each(obj, function(key, val) {\r\n if (result = test.call(null, val, key, obj)) {\r\n return false;\r\n }\r\n });\r\n return !!result;\r\n },\r\n mixin: $.extend,\r\n identity: function(x) {\r\n return x;\r\n },\r\n clone: function(obj) {\r\n return $.extend(true, {}, obj);\r\n },\r\n getIdGenerator: function() {\r\n var counter = 0;\r\n return function() {\r\n return counter++;\r\n };\r\n },\r\n templatify: function templatify(obj) {\r\n return $.isFunction(obj) ? obj : template;\r\n function template() {\r\n return String(obj);\r\n }\r\n },\r\n defer: function(fn) {\r\n setTimeout(fn, 0);\r\n },\r\n debounce: function(func, wait, immediate) {\r\n var timeout, result;\r\n return function() {\r\n var context = this, args = arguments, later, callNow;\r\n later = function() {\r\n timeout = null;\r\n if (!immediate) {\r\n result = func.apply(context, args);\r\n }\r\n };\r\n callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) {\r\n result = func.apply(context, args);\r\n }\r\n return result;\r\n };\r\n },\r\n throttle: function(func, wait) {\r\n var context, args, timeout, result, previous, later;\r\n previous = 0;\r\n later = function() {\r\n previous = new Date();\r\n timeout = null;\r\n result = func.apply(context, args);\r\n };\r\n return function() {\r\n var now = new Date(), remaining = wait - (now - previous);\r\n context = this;\r\n args = arguments;\r\n if (remaining <= 0) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n previous = now;\r\n result = func.apply(context, args);\r\n } else if (!timeout) {\r\n timeout = setTimeout(later, remaining);\r\n }\r\n return result;\r\n };\r\n },\r\n stringify: function(val) {\r\n return _.isString(val) ? val : JSON.stringify(val);\r\n },\r\n noop: function() {}\r\n };\r\n }();\r\n var WWW = function() {\r\n \"use strict\";\r\n var defaultClassNames = {\r\n wrapper: \"twitter-typeahead\",\r\n input: \"tt-input\",\r\n hint: \"tt-hint\",\r\n menu: \"tt-menu\",\r\n dataset: \"tt-dataset\",\r\n suggestion: \"tt-suggestion\",\r\n selectable: \"tt-selectable\",\r\n empty: \"tt-empty\",\r\n open: \"tt-open\",\r\n cursor: \"tt-cursor\",\r\n highlight: \"tt-highlight\"\r\n };\r\n return build;\r\n function build(o) {\r\n var www, classes;\r\n classes = _.mixin({}, defaultClassNames, o);\r\n www = {\r\n css: buildCss(),\r\n classes: classes,\r\n html: buildHtml(classes),\r\n selectors: buildSelectors(classes)\r\n };\r\n return {\r\n css: www.css,\r\n html: www.html,\r\n classes: www.classes,\r\n selectors: www.selectors,\r\n mixin: function(o) {\r\n _.mixin(o, www);\r\n }\r\n };\r\n }\r\n function buildHtml(c) {\r\n return {\r\n wrapper: '',\r\n menu: '
'\r\n };\r\n }\r\n function buildSelectors(classes) {\r\n var selectors = {};\r\n _.each(classes, function(v, k) {\r\n selectors[k] = \".\" + v;\r\n });\r\n return selectors;\r\n }\r\n function buildCss() {\r\n var css = {\r\n wrapper: {\r\n position: \"relative\",\r\n display: \"inline-block\"\r\n },\r\n hint: {\r\n position: \"absolute\",\r\n top: \"0\",\r\n left: \"0\",\r\n borderColor: \"transparent\",\r\n boxShadow: \"none\",\r\n opacity: \"1\"\r\n },\r\n input: {\r\n position: \"relative\",\r\n verticalAlign: \"top\",\r\n backgroundColor: \"transparent\"\r\n },\r\n inputWithNoHint: {\r\n position: \"relative\",\r\n verticalAlign: \"top\"\r\n },\r\n menu: {\r\n position: \"absolute\",\r\n top: \"100%\",\r\n left: \"0\",\r\n zIndex: \"100\",\r\n display: \"none\"\r\n },\r\n ltr: {\r\n left: \"0\",\r\n right: \"auto\"\r\n },\r\n rtl: {\r\n left: \"auto\",\r\n right: \" 0\"\r\n }\r\n };\r\n if (_.isMsie()) {\r\n _.mixin(css.input, {\r\n backgroundImage: \"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)\"\r\n });\r\n }\r\n return css;\r\n }\r\n }();\r\n var EventBus = function() {\r\n \"use strict\";\r\n var namespace, deprecationMap;\r\n namespace = \"typeahead:\";\r\n deprecationMap = {\r\n render: \"rendered\",\r\n cursorchange: \"cursorchanged\",\r\n select: \"selected\",\r\n autocomplete: \"autocompleted\"\r\n };\r\n function EventBus(o) {\r\n if (!o || !o.el) {\r\n $.error(\"EventBus initialized without el\");\r\n }\r\n this.$el = $(o.el);\r\n }\r\n _.mixin(EventBus.prototype, {\r\n _trigger: function(type, args) {\r\n var $e;\r\n $e = $.Event(namespace + type);\r\n (args = args || []).unshift($e);\r\n this.$el.trigger.apply(this.$el, args);\r\n return $e;\r\n },\r\n before: function(type) {\r\n var args, $e;\r\n args = [].slice.call(arguments, 1);\r\n $e = this._trigger(\"before\" + type, args);\r\n return $e.isDefaultPrevented();\r\n },\r\n trigger: function(type) {\r\n var deprecatedType;\r\n this._trigger(type, [].slice.call(arguments, 1));\r\n if (deprecatedType = deprecationMap[type]) {\r\n this._trigger(deprecatedType, [].slice.call(arguments, 1));\r\n }\r\n }\r\n });\r\n return EventBus;\r\n }();\r\n var EventEmitter = function() {\r\n \"use strict\";\r\n var splitter = /\\s+/, nextTick = getNextTick();\r\n return {\r\n onSync: onSync,\r\n onAsync: onAsync,\r\n off: off,\r\n trigger: trigger\r\n };\r\n function on(method, types, cb, context) {\r\n var type;\r\n if (!cb) {\r\n return this;\r\n }\r\n types = types.split(splitter);\r\n cb = context ? bindContext(cb, context) : cb;\r\n this._callbacks = this._callbacks || {};\r\n while (type = types.shift()) {\r\n this._callbacks[type] = this._callbacks[type] || {\r\n sync: [],\r\n async: []\r\n };\r\n this._callbacks[type][method].push(cb);\r\n }\r\n return this;\r\n }\r\n function onAsync(types, cb, context) {\r\n return on.call(this, \"async\", types, cb, context);\r\n }\r\n function onSync(types, cb, context) {\r\n return on.call(this, \"sync\", types, cb, context);\r\n }\r\n function off(types) {\r\n var type;\r\n if (!this._callbacks) {\r\n return this;\r\n }\r\n types = types.split(splitter);\r\n while (type = types.shift()) {\r\n delete this._callbacks[type];\r\n }\r\n return this;\r\n }\r\n function trigger(types) {\r\n var type, callbacks, args, syncFlush, asyncFlush;\r\n if (!this._callbacks) {\r\n return this;\r\n }\r\n types = types.split(splitter);\r\n args = [].slice.call(arguments, 1);\r\n while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\r\n syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));\r\n asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));\r\n syncFlush() && nextTick(asyncFlush);\r\n }\r\n return this;\r\n }\r\n function getFlush(callbacks, context, args) {\r\n return flush;\r\n function flush() {\r\n var cancelled;\r\n for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\r\n cancelled = callbacks[i].apply(context, args) === false;\r\n }\r\n return !cancelled;\r\n }\r\n }\r\n function getNextTick() {\r\n var nextTickFn;\r\n if (window.setImmediate) {\r\n nextTickFn = function nextTickSetImmediate(fn) {\r\n setImmediate(function() {\r\n fn();\r\n });\r\n };\r\n } else {\r\n nextTickFn = function nextTickSetTimeout(fn) {\r\n setTimeout(function() {\r\n fn();\r\n }, 0);\r\n };\r\n }\r\n return nextTickFn;\r\n }\r\n function bindContext(fn, context) {\r\n return fn.bind ? fn.bind(context) : function() {\r\n fn.apply(context, [].slice.call(arguments, 0));\r\n };\r\n }\r\n }();\r\n var highlight = function(doc) {\r\n \"use strict\";\r\n var defaults = {\r\n node: null,\r\n pattern: null,\r\n tagName: \"strong\",\r\n className: null,\r\n wordsOnly: false,\r\n caseSensitive: false\r\n };\r\n return function hightlight(o) {\r\n var regex;\r\n o = _.mixin({}, defaults, o);\r\n if (!o.node || !o.pattern) {\r\n return;\r\n }\r\n o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];\r\n regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);\r\n traverse(o.node, hightlightTextNode);\r\n function hightlightTextNode(textNode) {\r\n var match, patternNode, wrapperNode;\r\n if (match = regex.exec(textNode.data)) {\r\n wrapperNode = doc.createElement(o.tagName);\r\n o.className && (wrapperNode.className = o.className);\r\n patternNode = textNode.splitText(match.index);\r\n patternNode.splitText(match[0].length);\r\n wrapperNode.appendChild(patternNode.cloneNode(true));\r\n textNode.parentNode.replaceChild(wrapperNode, patternNode);\r\n }\r\n return !!match;\r\n }\r\n function traverse(el, hightlightTextNode) {\r\n var childNode, TEXT_NODE_TYPE = 3;\r\n for (var i = 0; i < el.childNodes.length; i++) {\r\n childNode = el.childNodes[i];\r\n if (childNode.nodeType === TEXT_NODE_TYPE) {\r\n i += hightlightTextNode(childNode) ? 1 : 0;\r\n } else {\r\n traverse(childNode, hightlightTextNode);\r\n }\r\n }\r\n }\r\n };\r\n function getRegex(patterns, caseSensitive, wordsOnly) {\r\n var escapedPatterns = [], regexStr;\r\n for (var i = 0, len = patterns.length; i < len; i++) {\r\n escapedPatterns.push(_.escapeRegExChars(patterns[i]));\r\n }\r\n regexStr = wordsOnly ? \"\\\\b(\" + escapedPatterns.join(\"|\") + \")\\\\b\" : \"(\" + escapedPatterns.join(\"|\") + \")\";\r\n return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, \"i\");\r\n }\r\n }(window.document);\r\n var Input = function() {\r\n \"use strict\";\r\n var specialKeyCodeMap;\r\n specialKeyCodeMap = {\r\n 9: \"tab\",\r\n 27: \"esc\",\r\n 37: \"left\",\r\n 39: \"right\",\r\n 13: \"enter\",\r\n 38: \"up\",\r\n 40: \"down\"\r\n };\r\n function Input(o, www) {\r\n o = o || {};\r\n if (!o.input) {\r\n $.error(\"input is missing\");\r\n }\r\n www.mixin(this);\r\n this.$hint = $(o.hint);\r\n this.$input = $(o.input);\r\n this.query = this.$input.val();\r\n this.queryWhenFocused = this.hasFocus() ? this.query : null;\r\n this.$overflowHelper = buildOverflowHelper(this.$input);\r\n this._checkLanguageDirection();\r\n if (this.$hint.length === 0) {\r\n this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\r\n }\r\n }\r\n Input.normalizeQuery = function(str) {\r\n return _.toStr(str).replace(/^\\s*/g, \"\").replace(/\\s{2,}/g, \" \");\r\n };\r\n _.mixin(Input.prototype, EventEmitter, {\r\n _onBlur: function onBlur() {\r\n this.resetInputValue();\r\n this.trigger(\"blurred\");\r\n },\r\n _onFocus: function onFocus() {\r\n this.queryWhenFocused = this.query;\r\n this.trigger(\"focused\");\r\n },\r\n _onKeydown: function onKeydown($e) {\r\n var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\r\n this._managePreventDefault(keyName, $e);\r\n if (keyName && this._shouldTrigger(keyName, $e)) {\r\n this.trigger(keyName + \"Keyed\", $e);\r\n }\r\n },\r\n _onInput: function onInput() {\r\n this._setQuery(this.getInputValue());\r\n this.clearHintIfInvalid();\r\n this._checkLanguageDirection();\r\n },\r\n _managePreventDefault: function managePreventDefault(keyName, $e) {\r\n var preventDefault;\r\n switch (keyName) {\r\n case \"up\":\r\n case \"down\":\r\n preventDefault = !withModifier($e);\r\n break;\r\n\r\n default:\r\n preventDefault = false;\r\n }\r\n preventDefault && $e.preventDefault();\r\n },\r\n _shouldTrigger: function shouldTrigger(keyName, $e) {\r\n var trigger;\r\n switch (keyName) {\r\n case \"tab\":\r\n trigger = !withModifier($e);\r\n break;\r\n\r\n default:\r\n trigger = true;\r\n }\r\n return trigger;\r\n },\r\n _checkLanguageDirection: function checkLanguageDirection() {\r\n var dir = (this.$input.css(\"direction\") || \"ltr\").toLowerCase();\r\n if (this.dir !== dir) {\r\n this.dir = dir;\r\n this.$hint.attr(\"dir\", dir);\r\n this.trigger(\"langDirChanged\", dir);\r\n }\r\n },\r\n _setQuery: function setQuery(val, silent) {\r\n var areEquivalent, hasDifferentWhitespace;\r\n areEquivalent = areQueriesEquivalent(val, this.query);\r\n hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;\r\n this.query = val;\r\n if (!silent && !areEquivalent) {\r\n this.trigger(\"queryChanged\", this.query);\r\n } else if (!silent && hasDifferentWhitespace) {\r\n this.trigger(\"whitespaceChanged\", this.query);\r\n }\r\n },\r\n bind: function() {\r\n var that = this, onBlur, onFocus, onKeydown, onInput;\r\n onBlur = _.bind(this._onBlur, this);\r\n onFocus = _.bind(this._onFocus, this);\r\n onKeydown = _.bind(this._onKeydown, this);\r\n onInput = _.bind(this._onInput, this);\r\n this.$input.on(\"blur.tt\", onBlur).on(\"focus.tt\", onFocus).on(\"keydown.tt\", onKeydown);\r\n if (!_.isMsie() || _.isMsie() > 9) {\r\n this.$input.on(\"input.tt\", onInput);\r\n } else {\r\n this.$input.on(\"keydown.tt keypress.tt cut.tt paste.tt\", function($e) {\r\n if (specialKeyCodeMap[$e.which || $e.keyCode]) {\r\n return;\r\n }\r\n _.defer(_.bind(that._onInput, that, $e));\r\n });\r\n }\r\n return this;\r\n },\r\n focus: function focus() {\r\n this.$input.focus();\r\n },\r\n blur: function blur() {\r\n this.$input.blur();\r\n },\r\n getLangDir: function getLangDir() {\r\n return this.dir;\r\n },\r\n getQuery: function getQuery() {\r\n return this.query || \"\";\r\n },\r\n setQuery: function setQuery(val, silent) {\r\n this.setInputValue(val);\r\n this._setQuery(val, silent);\r\n },\r\n hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {\r\n return this.query !== this.queryWhenFocused;\r\n },\r\n getInputValue: function getInputValue() {\r\n return this.$input.val();\r\n },\r\n setInputValue: function setInputValue(value) {\r\n this.$input.val(value);\r\n this.clearHintIfInvalid();\r\n this._checkLanguageDirection();\r\n },\r\n resetInputValue: function resetInputValue() {\r\n this.setInputValue(this.query);\r\n },\r\n getHint: function getHint() {\r\n return this.$hint.val();\r\n },\r\n setHint: function setHint(value) {\r\n this.$hint.val(value);\r\n },\r\n clearHint: function clearHint() {\r\n this.setHint(\"\");\r\n },\r\n clearHintIfInvalid: function clearHintIfInvalid() {\r\n var val, hint, valIsPrefixOfHint, isValid;\r\n val = this.getInputValue();\r\n hint = this.getHint();\r\n valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\r\n isValid = val !== \"\" && valIsPrefixOfHint && !this.hasOverflow();\r\n !isValid && this.clearHint();\r\n },\r\n hasFocus: function hasFocus() {\r\n return this.$input.is(\":focus\");\r\n },\r\n hasOverflow: function hasOverflow() {\r\n var constraint = this.$input.width() - 2;\r\n this.$overflowHelper.text(this.getInputValue());\r\n return this.$overflowHelper.width() >= constraint;\r\n },\r\n isCursorAtEnd: function() {\r\n var valueLength, selectionStart, range;\r\n valueLength = this.$input.val().length;\r\n selectionStart = this.$input[0].selectionStart;\r\n if (_.isNumber(selectionStart)) {\r\n return selectionStart === valueLength;\r\n } else if (document.selection) {\r\n range = document.selection.createRange();\r\n range.moveStart(\"character\", -valueLength);\r\n return valueLength === range.text.length;\r\n }\r\n return true;\r\n },\r\n destroy: function destroy() {\r\n this.$hint.off(\".tt\");\r\n this.$input.off(\".tt\");\r\n this.$overflowHelper.remove();\r\n this.$hint = this.$input = this.$overflowHelper = $(\"
\");\r\n }\r\n });\r\n return Input;\r\n function buildOverflowHelper($input) {\r\n return $('
').css({\r\n                position: \"absolute\",\r\n                visibility: \"hidden\",\r\n                whiteSpace: \"pre\",\r\n                fontFamily: $input.css(\"font-family\"),\r\n                fontSize: $input.css(\"font-size\"),\r\n                fontStyle: $input.css(\"font-style\"),\r\n                fontVariant: $input.css(\"font-variant\"),\r\n                fontWeight: $input.css(\"font-weight\"),\r\n                wordSpacing: $input.css(\"word-spacing\"),\r\n                letterSpacing: $input.css(\"letter-spacing\"),\r\n                textIndent: $input.css(\"text-indent\"),\r\n                textRendering: $input.css(\"text-rendering\"),\r\n                textTransform: $input.css(\"text-transform\")\r\n            }).insertAfter($input);\r\n        }\r\n        function areQueriesEquivalent(a, b) {\r\n            return Input.normalizeQuery(a) === Input.normalizeQuery(b);\r\n        }\r\n        function withModifier($e) {\r\n            return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\r\n        }\r\n    }();\r\n    var Dataset = function() {\r\n        \"use strict\";\r\n        var keys, nameGenerator;\r\n        keys = {\r\n            val: \"tt-selectable-display\",\r\n            obj: \"tt-selectable-object\"\r\n        };\r\n        nameGenerator = _.getIdGenerator();\r\n        function Dataset(o, www) {\r\n            o = o || {};\r\n            o.templates = o.templates || {};\r\n            o.templates.notFound = o.templates.notFound || o.templates.empty;\r\n            if (!o.source) {\r\n                $.error(\"missing source\");\r\n            }\r\n            if (!o.node) {\r\n                $.error(\"missing node\");\r\n            }\r\n            if (o.name && !isValidName(o.name)) {\r\n                $.error(\"invalid dataset name: \" + o.name);\r\n            }\r\n            www.mixin(this);\r\n            this.highlight = !!o.highlight;\r\n            this.name = o.name || nameGenerator();\r\n            this.limit = o.limit || 5;\r\n            this.displayFn = getDisplayFn(o.display || o.displayKey);\r\n            this.templates = getTemplates(o.templates, this.displayFn);\r\n            this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;\r\n            this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;\r\n            this._resetLastSuggestion();\r\n            this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + \"-\" + this.name);\r\n        }\r\n        Dataset.extractData = function extractData(el) {\r\n            var $el = $(el);\r\n            if ($el.data(keys.obj)) {\r\n                return {\r\n                    val: $el.data(keys.val) || \"\",\r\n                    obj: $el.data(keys.obj) || null\r\n                };\r\n            }\r\n            return null;\r\n        };\r\n        _.mixin(Dataset.prototype, EventEmitter, {\r\n            _overwrite: function overwrite(query, suggestions) {\r\n                suggestions = suggestions || [];\r\n                if (suggestions.length) {\r\n                    this._renderSuggestions(query, suggestions);\r\n                } else if (this.async && this.templates.pending) {\r\n                    this._renderPending(query);\r\n                } else if (!this.async && this.templates.notFound) {\r\n                    this._renderNotFound(query);\r\n                } else {\r\n                    this._empty();\r\n                }\r\n                this.trigger(\"rendered\", this.name, suggestions, false);\r\n            },\r\n            _append: function append(query, suggestions) {\r\n                suggestions = suggestions || [];\r\n                if (suggestions.length && this.$lastSuggestion.length) {\r\n                    this._appendSuggestions(query, suggestions);\r\n                } else if (suggestions.length) {\r\n                    this._renderSuggestions(query, suggestions);\r\n                } else if (!this.$lastSuggestion.length && this.templates.notFound) {\r\n                    this._renderNotFound(query);\r\n                }\r\n                this.trigger(\"rendered\", this.name, suggestions, true);\r\n            },\r\n            _renderSuggestions: function renderSuggestions(query, suggestions) {\r\n                var $fragment;\r\n                $fragment = this._getSuggestionsFragment(query, suggestions);\r\n                this.$lastSuggestion = $fragment.children().last();\r\n                this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));\r\n            },\r\n            _appendSuggestions: function appendSuggestions(query, suggestions) {\r\n                var $fragment, $lastSuggestion;\r\n                $fragment = this._getSuggestionsFragment(query, suggestions);\r\n                $lastSuggestion = $fragment.children().last();\r\n                this.$lastSuggestion.after($fragment);\r\n                this.$lastSuggestion = $lastSuggestion;\r\n            },\r\n            _renderPending: function renderPending(query) {\r\n                var template = this.templates.pending;\r\n                this._resetLastSuggestion();\r\n                template && this.$el.html(template({\r\n                    query: query,\r\n                    dataset: this.name\r\n                }));\r\n            },\r\n            _renderNotFound: function renderNotFound(query) {\r\n                var template = this.templates.notFound;\r\n                this._resetLastSuggestion();\r\n                template && this.$el.html(template({\r\n                    query: query,\r\n                    dataset: this.name\r\n                }));\r\n            },\r\n            _empty: function empty() {\r\n                this.$el.empty();\r\n                this._resetLastSuggestion();\r\n            },\r\n            _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {\r\n                var that = this, fragment;\r\n                fragment = document.createDocumentFragment();\r\n                _.each(suggestions, function getSuggestionNode(suggestion) {\r\n                    var $el, context;\r\n                    context = that._injectQuery(query, suggestion);\r\n                    $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + \" \" + that.classes.selectable);\r\n                    fragment.appendChild($el[0]);\r\n                });\r\n                this.highlight && highlight({\r\n                    className: this.classes.highlight,\r\n                    node: fragment,\r\n                    pattern: query\r\n                });\r\n                return $(fragment);\r\n            },\r\n            _getFooter: function getFooter(query, suggestions) {\r\n                return this.templates.footer ? this.templates.footer({\r\n                    query: query,\r\n                    suggestions: suggestions,\r\n                    dataset: this.name\r\n                }) : null;\r\n            },\r\n            _getHeader: function getHeader(query, suggestions) {\r\n                return this.templates.header ? this.templates.header({\r\n                    query: query,\r\n                    suggestions: suggestions,\r\n                    dataset: this.name\r\n                }) : null;\r\n            },\r\n            _resetLastSuggestion: function resetLastSuggestion() {\r\n                this.$lastSuggestion = $();\r\n            },\r\n            _injectQuery: function injectQuery(query, obj) {\r\n                return _.isObject(obj) ? _.mixin({\r\n                    _query: query\r\n                }, obj) : obj;\r\n            },\r\n            update: function update(query) {\r\n                var that = this, canceled = false, syncCalled = false, rendered = 0;\r\n                this.cancel();\r\n                this.cancel = function cancel() {\r\n                    canceled = true;\r\n                    that.cancel = $.noop;\r\n                    that.async && that.trigger(\"asyncCanceled\", query);\r\n                };\r\n                this.source(query, sync, async);\r\n                !syncCalled && sync([]);\r\n                function sync(suggestions) {\r\n                    if (syncCalled) {\r\n                        return;\r\n                    }\r\n                    syncCalled = true;\r\n                    suggestions = (suggestions || []).slice(0, that.limit);\r\n                    rendered = suggestions.length;\r\n                    that._overwrite(query, suggestions);\r\n                    if (rendered < that.limit && that.async) {\r\n                        that.trigger(\"asyncRequested\", query);\r\n                    }\r\n                }\r\n                function async(suggestions) {\r\n                    suggestions = suggestions || [];\r\n                    if (!canceled && rendered < that.limit) {\r\n                        that.cancel = $.noop;\r\n                        rendered += suggestions.length;\r\n                        that._append(query, suggestions.slice(0, that.limit - rendered));\r\n                        that.async && that.trigger(\"asyncReceived\", query);\r\n                    }\r\n                }\r\n            },\r\n            cancel: $.noop,\r\n            clear: function clear() {\r\n                this._empty();\r\n                this.cancel();\r\n                this.trigger(\"cleared\");\r\n            },\r\n            isEmpty: function isEmpty() {\r\n                return this.$el.is(\":empty\");\r\n            },\r\n            destroy: function destroy() {\r\n                this.$el = $(\"
\");\r\n }\r\n });\r\n return Dataset;\r\n function getDisplayFn(display) {\r\n display = display || _.stringify;\r\n return _.isFunction(display) ? display : displayFn;\r\n function displayFn(obj) {\r\n return obj[display];\r\n }\r\n }\r\n function getTemplates(templates, displayFn) {\r\n return {\r\n notFound: templates.notFound && _.templatify(templates.notFound),\r\n pending: templates.pending && _.templatify(templates.pending),\r\n header: templates.header && _.templatify(templates.header),\r\n footer: templates.footer && _.templatify(templates.footer),\r\n suggestion: templates.suggestion || suggestionTemplate\r\n };\r\n function suggestionTemplate(context) {\r\n return $(\"
\").text(displayFn(context));\r\n }\r\n }\r\n function isValidName(str) {\r\n return /^[_a-zA-Z0-9-]+$/.test(str);\r\n }\r\n }();\r\n var Menu = function() {\r\n \"use strict\";\r\n function Menu(o, www) {\r\n var that = this;\r\n o = o || {};\r\n if (!o.node) {\r\n $.error(\"node is required\");\r\n }\r\n www.mixin(this);\r\n this.$node = $(o.node);\r\n this.query = null;\r\n this.datasets = _.map(o.datasets, initializeDataset);\r\n function initializeDataset(oDataset) {\r\n var node = that.$node.find(oDataset.node).first();\r\n oDataset.node = node.length ? node : $(\"
\").appendTo(that.$node);\r\n return new Dataset(oDataset, www);\r\n }\r\n }\r\n _.mixin(Menu.prototype, EventEmitter, {\r\n _onSelectableClick: function onSelectableClick($e) {\r\n this.trigger(\"selectableClicked\", $($e.currentTarget));\r\n },\r\n _onRendered: function onRendered(type, dataset, suggestions, async) {\r\n this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\r\n this.trigger(\"datasetRendered\", dataset, suggestions, async);\r\n },\r\n _onCleared: function onCleared() {\r\n this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\r\n this.trigger(\"datasetCleared\");\r\n },\r\n _propagate: function propagate() {\r\n this.trigger.apply(this, arguments);\r\n },\r\n _allDatasetsEmpty: function allDatasetsEmpty() {\r\n return _.every(this.datasets, isDatasetEmpty);\r\n function isDatasetEmpty(dataset) {\r\n return dataset.isEmpty();\r\n }\r\n },\r\n _getSelectables: function getSelectables() {\r\n return this.$node.find(this.selectors.selectable);\r\n },\r\n _removeCursor: function _removeCursor() {\r\n var $selectable = this.getActiveSelectable();\r\n $selectable && $selectable.removeClass(this.classes.cursor);\r\n },\r\n _ensureVisible: function ensureVisible($el) {\r\n var elTop, elBottom, nodeScrollTop, nodeHeight;\r\n elTop = $el.position().top;\r\n elBottom = elTop + $el.outerHeight(true);\r\n nodeScrollTop = this.$node.scrollTop();\r\n nodeHeight = this.$node.height() + parseInt(this.$node.css(\"paddingTop\"), 10) + parseInt(this.$node.css(\"paddingBottom\"), 10);\r\n if (elTop < 0) {\r\n this.$node.scrollTop(nodeScrollTop + elTop);\r\n } else if (nodeHeight < elBottom) {\r\n this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));\r\n }\r\n },\r\n bind: function() {\r\n var that = this, onSelectableClick;\r\n onSelectableClick = _.bind(this._onSelectableClick, this);\r\n this.$node.on(\"click.tt\", this.selectors.selectable, onSelectableClick);\r\n _.each(this.datasets, function(dataset) {\r\n dataset.onSync(\"asyncRequested\", that._propagate, that).onSync(\"asyncCanceled\", that._propagate, that).onSync(\"asyncReceived\", that._propagate, that).onSync(\"rendered\", that._onRendered, that).onSync(\"cleared\", that._onCleared, that);\r\n });\r\n return this;\r\n },\r\n isOpen: function isOpen() {\r\n return this.$node.hasClass(this.classes.open);\r\n },\r\n open: function open() {\r\n this.$node.addClass(this.classes.open);\r\n },\r\n close: function close() {\r\n this.$node.removeClass(this.classes.open);\r\n this._removeCursor();\r\n },\r\n setLanguageDirection: function setLanguageDirection(dir) {\r\n this.$node.attr(\"dir\", dir);\r\n },\r\n selectableRelativeToCursor: function selectableRelativeToCursor(delta) {\r\n var $selectables, $oldCursor, oldIndex, newIndex;\r\n $oldCursor = this.getActiveSelectable();\r\n $selectables = this._getSelectables();\r\n oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;\r\n newIndex = oldIndex + delta;\r\n newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;\r\n newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;\r\n return newIndex === -1 ? null : $selectables.eq(newIndex);\r\n },\r\n setCursor: function setCursor($selectable) {\r\n this._removeCursor();\r\n if ($selectable = $selectable && $selectable.first()) {\r\n $selectable.addClass(this.classes.cursor);\r\n this._ensureVisible($selectable);\r\n }\r\n },\r\n getSelectableData: function getSelectableData($el) {\r\n return $el && $el.length ? Dataset.extractData($el) : null;\r\n },\r\n getActiveSelectable: function getActiveSelectable() {\r\n var $selectable = this._getSelectables().filter(this.selectors.cursor).first();\r\n return $selectable.length ? $selectable : null;\r\n },\r\n getTopSelectable: function getTopSelectable() {\r\n var $selectable = this._getSelectables().first();\r\n return $selectable.length ? $selectable : null;\r\n },\r\n update: function update(query) {\r\n var isValidUpdate = query !== this.query;\r\n if (isValidUpdate) {\r\n this.query = query;\r\n _.each(this.datasets, updateDataset);\r\n }\r\n return isValidUpdate;\r\n function updateDataset(dataset) {\r\n dataset.update(query);\r\n }\r\n },\r\n empty: function empty() {\r\n _.each(this.datasets, clearDataset);\r\n this.query = null;\r\n this.$node.addClass(this.classes.empty);\r\n function clearDataset(dataset) {\r\n dataset.clear();\r\n }\r\n },\r\n destroy: function destroy() {\r\n this.$node.off(\".tt\");\r\n this.$node = $(\"
\");\r\n _.each(this.datasets, destroyDataset);\r\n function destroyDataset(dataset) {\r\n dataset.destroy();\r\n }\r\n }\r\n });\r\n return Menu;\r\n }();\r\n var DefaultMenu = function() {\r\n \"use strict\";\r\n var s = Menu.prototype;\r\n function DefaultMenu() {\r\n Menu.apply(this, [].slice.call(arguments, 0));\r\n }\r\n _.mixin(DefaultMenu.prototype, Menu.prototype, {\r\n open: function open() {\r\n !this._allDatasetsEmpty() && this._show();\r\n return s.open.apply(this, [].slice.call(arguments, 0));\r\n },\r\n close: function close() {\r\n this._hide();\r\n return s.close.apply(this, [].slice.call(arguments, 0));\r\n },\r\n _onRendered: function onRendered() {\r\n if (this._allDatasetsEmpty()) {\r\n this._hide();\r\n } else {\r\n this.isOpen() && this._show();\r\n }\r\n return s._onRendered.apply(this, [].slice.call(arguments, 0));\r\n },\r\n _onCleared: function onCleared() {\r\n if (this._allDatasetsEmpty()) {\r\n this._hide();\r\n } else {\r\n this.isOpen() && this._show();\r\n }\r\n return s._onCleared.apply(this, [].slice.call(arguments, 0));\r\n },\r\n setLanguageDirection: function setLanguageDirection(dir) {\r\n this.$node.css(dir === \"ltr\" ? this.css.ltr : this.css.rtl);\r\n return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));\r\n },\r\n _hide: function hide() {\r\n this.$node.hide();\r\n },\r\n _show: function show() {\r\n this.$node.css(\"display\", \"block\");\r\n }\r\n });\r\n return DefaultMenu;\r\n }();\r\n var Typeahead = function() {\r\n \"use strict\";\r\n function Typeahead(o, www) {\r\n var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;\r\n o = o || {};\r\n if (!o.input) {\r\n $.error(\"missing input\");\r\n }\r\n if (!o.menu) {\r\n $.error(\"missing menu\");\r\n }\r\n if (!o.eventBus) {\r\n $.error(\"missing event bus\");\r\n }\r\n www.mixin(this);\r\n this.eventBus = o.eventBus;\r\n this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\r\n this.input = o.input;\r\n this.menu = o.menu;\r\n this.enabled = true;\r\n this.active = false;\r\n this.input.hasFocus() && this.activate();\r\n this.dir = this.input.getLangDir();\r\n this._hacks();\r\n this.menu.bind().onSync(\"selectableClicked\", this._onSelectableClicked, this).onSync(\"asyncRequested\", this._onAsyncRequested, this).onSync(\"asyncCanceled\", this._onAsyncCanceled, this).onSync(\"asyncReceived\", this._onAsyncReceived, this).onSync(\"datasetRendered\", this._onDatasetRendered, this).onSync(\"datasetCleared\", this._onDatasetCleared, this);\r\n onFocused = c(this, \"activate\", \"open\", \"_onFocused\");\r\n onBlurred = c(this, \"deactivate\", \"_onBlurred\");\r\n onEnterKeyed = c(this, \"isActive\", \"isOpen\", \"_onEnterKeyed\");\r\n onTabKeyed = c(this, \"isActive\", \"isOpen\", \"_onTabKeyed\");\r\n onEscKeyed = c(this, \"isActive\", \"_onEscKeyed\");\r\n onUpKeyed = c(this, \"isActive\", \"open\", \"_onUpKeyed\");\r\n onDownKeyed = c(this, \"isActive\", \"open\", \"_onDownKeyed\");\r\n onLeftKeyed = c(this, \"isActive\", \"isOpen\", \"_onLeftKeyed\");\r\n onRightKeyed = c(this, \"isActive\", \"isOpen\", \"_onRightKeyed\");\r\n onQueryChanged = c(this, \"_openIfActive\", \"_onQueryChanged\");\r\n onWhitespaceChanged = c(this, \"_openIfActive\", \"_onWhitespaceChanged\");\r\n this.input.bind().onSync(\"focused\", onFocused, this).onSync(\"blurred\", onBlurred, this).onSync(\"enterKeyed\", onEnterKeyed, this).onSync(\"tabKeyed\", onTabKeyed, this).onSync(\"escKeyed\", onEscKeyed, this).onSync(\"upKeyed\", onUpKeyed, this).onSync(\"downKeyed\", onDownKeyed, this).onSync(\"leftKeyed\", onLeftKeyed, this).onSync(\"rightKeyed\", onRightKeyed, this).onSync(\"queryChanged\", onQueryChanged, this).onSync(\"whitespaceChanged\", onWhitespaceChanged, this).onSync(\"langDirChanged\", this._onLangDirChanged, this);\r\n }\r\n _.mixin(Typeahead.prototype, {\r\n _hacks: function hacks() {\r\n var $input, $menu;\r\n $input = this.input.$input || $(\"
\");\r\n $menu = this.menu.$node || $(\"
\");\r\n $input.on(\"blur.tt\", function($e) {\r\n var active, isActive, hasActive;\r\n active = document.activeElement;\r\n isActive = $menu.is(active);\r\n hasActive = $menu.has(active).length > 0;\r\n if (_.isMsie() && (isActive || hasActive)) {\r\n $e.preventDefault();\r\n $e.stopImmediatePropagation();\r\n _.defer(function() {\r\n $input.focus();\r\n });\r\n }\r\n });\r\n $menu.on(\"mousedown.tt\", function($e) {\r\n $e.preventDefault();\r\n });\r\n },\r\n _onSelectableClicked: function onSelectableClicked(type, $el) {\r\n this.select($el);\r\n },\r\n _onDatasetCleared: function onDatasetCleared() {\r\n this._updateHint();\r\n },\r\n _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {\r\n this._updateHint();\r\n this.eventBus.trigger(\"render\", suggestions, async, dataset);\r\n },\r\n _onAsyncRequested: function onAsyncRequested(type, dataset, query) {\r\n this.eventBus.trigger(\"asyncrequest\", query, dataset);\r\n },\r\n _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {\r\n this.eventBus.trigger(\"asynccancel\", query, dataset);\r\n },\r\n _onAsyncReceived: function onAsyncReceived(type, dataset, query) {\r\n this.eventBus.trigger(\"asyncreceive\", query, dataset);\r\n },\r\n _onFocused: function onFocused() {\r\n this._minLengthMet() && this.menu.update(this.input.getQuery());\r\n },\r\n _onBlurred: function onBlurred() {\r\n if (this.input.hasQueryChangedSinceLastFocus()) {\r\n this.eventBus.trigger(\"change\", this.input.getQuery());\r\n }\r\n },\r\n _onEnterKeyed: function onEnterKeyed(type, $e) {\r\n var $selectable;\r\n if ($selectable = this.menu.getActiveSelectable()) {\r\n this.select($selectable) && $e.preventDefault();\r\n }\r\n },\r\n _onTabKeyed: function onTabKeyed(type, $e) {\r\n var $selectable;\r\n if ($selectable = this.menu.getActiveSelectable()) {\r\n this.select($selectable) && $e.preventDefault();\r\n } else if ($selectable = this.menu.getTopSelectable()) {\r\n this.autocomplete($selectable) && $e.preventDefault();\r\n }\r\n },\r\n _onEscKeyed: function onEscKeyed() {\r\n this.close();\r\n },\r\n _onUpKeyed: function onUpKeyed() {\r\n this.moveCursor(-1);\r\n },\r\n _onDownKeyed: function onDownKeyed() {\r\n this.moveCursor(+1);\r\n },\r\n _onLeftKeyed: function onLeftKeyed() {\r\n if (this.dir === \"rtl\" && this.input.isCursorAtEnd()) {\r\n this.autocomplete(this.menu.getTopSelectable());\r\n }\r\n },\r\n _onRightKeyed: function onRightKeyed() {\r\n if (this.dir === \"ltr\" && this.input.isCursorAtEnd()) {\r\n this.autocomplete(this.menu.getTopSelectable());\r\n }\r\n },\r\n _onQueryChanged: function onQueryChanged(e, query) {\r\n this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();\r\n },\r\n _onWhitespaceChanged: function onWhitespaceChanged() {\r\n this._updateHint();\r\n },\r\n _onLangDirChanged: function onLangDirChanged(e, dir) {\r\n if (this.dir !== dir) {\r\n this.dir = dir;\r\n this.menu.setLanguageDirection(dir);\r\n }\r\n },\r\n _openIfActive: function openIfActive() {\r\n this.isActive() && this.open();\r\n },\r\n _minLengthMet: function minLengthMet(query) {\r\n query = _.isString(query) ? query : this.input.getQuery() || \"\";\r\n return query.length >= this.minLength;\r\n },\r\n _updateHint: function updateHint() {\r\n var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;\r\n $selectable = this.menu.getTopSelectable();\r\n data = this.menu.getSelectableData($selectable);\r\n val = this.input.getInputValue();\r\n if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {\r\n query = Input.normalizeQuery(val);\r\n escapedQuery = _.escapeRegExChars(query);\r\n frontMatchRegEx = new RegExp(\"^(?:\" + escapedQuery + \")(.+$)\", \"i\");\r\n match = frontMatchRegEx.exec(data.val);\r\n match && this.input.setHint(val + match[1]);\r\n } else {\r\n this.input.clearHint();\r\n }\r\n },\r\n isEnabled: function isEnabled() {\r\n return this.enabled;\r\n },\r\n enable: function enable() {\r\n this.enabled = true;\r\n },\r\n disable: function disable() {\r\n this.enabled = false;\r\n },\r\n isActive: function isActive() {\r\n return this.active;\r\n },\r\n activate: function activate() {\r\n if (this.isActive()) {\r\n return true;\r\n } else if (!this.isEnabled() || this.eventBus.before(\"active\")) {\r\n return false;\r\n } else {\r\n this.active = true;\r\n this.eventBus.trigger(\"active\");\r\n return true;\r\n }\r\n },\r\n deactivate: function deactivate() {\r\n if (!this.isActive()) {\r\n return true;\r\n } else if (this.eventBus.before(\"idle\")) {\r\n return false;\r\n } else {\r\n this.active = false;\r\n this.close();\r\n this.eventBus.trigger(\"idle\");\r\n return true;\r\n }\r\n },\r\n isOpen: function isOpen() {\r\n return this.menu.isOpen();\r\n },\r\n open: function open() {\r\n if (!this.isOpen() && !this.eventBus.before(\"open\")) {\r\n this.menu.open();\r\n this._updateHint();\r\n this.eventBus.trigger(\"open\");\r\n }\r\n return this.isOpen();\r\n },\r\n close: function close() {\r\n if (this.isOpen() && !this.eventBus.before(\"close\")) {\r\n this.menu.close();\r\n this.input.clearHint();\r\n this.input.resetInputValue();\r\n this.eventBus.trigger(\"close\");\r\n }\r\n return !this.isOpen();\r\n },\r\n setVal: function setVal(val) {\r\n this.input.setQuery(_.toStr(val));\r\n },\r\n getVal: function getVal() {\r\n return this.input.getQuery();\r\n },\r\n select: function select($selectable) {\r\n var data = this.menu.getSelectableData($selectable);\r\n if (data && !this.eventBus.before(\"select\", data.obj)) {\r\n this.input.setQuery(data.val, true);\r\n this.eventBus.trigger(\"select\", data.obj);\r\n this.close();\r\n return true;\r\n }\r\n return false;\r\n },\r\n autocomplete: function autocomplete($selectable) {\r\n var query, data, isValid;\r\n query = this.input.getQuery();\r\n data = this.menu.getSelectableData($selectable);\r\n isValid = data && query !== data.val;\r\n if (isValid && !this.eventBus.before(\"autocomplete\", data.obj)) {\r\n this.input.setQuery(data.val);\r\n this.eventBus.trigger(\"autocomplete\", data.obj);\r\n return true;\r\n }\r\n return false;\r\n },\r\n moveCursor: function moveCursor(delta) {\r\n var query, $candidate, data, payload, cancelMove;\r\n query = this.input.getQuery();\r\n $candidate = this.menu.selectableRelativeToCursor(delta);\r\n data = this.menu.getSelectableData($candidate);\r\n payload = data ? data.obj : null;\r\n cancelMove = this._minLengthMet() && this.menu.update(query);\r\n if (!cancelMove && !this.eventBus.before(\"cursorchange\", payload)) {\r\n this.menu.setCursor($candidate);\r\n if (data) {\r\n this.input.setInputValue(data.val);\r\n } else {\r\n this.input.resetInputValue();\r\n this._updateHint();\r\n }\r\n this.eventBus.trigger(\"cursorchange\", payload);\r\n return true;\r\n }\r\n return false;\r\n },\r\n destroy: function destroy() {\r\n this.input.destroy();\r\n this.menu.destroy();\r\n }\r\n });\r\n return Typeahead;\r\n function c(ctx) {\r\n var methods = [].slice.call(arguments, 1);\r\n return function() {\r\n var args = [].slice.call(arguments);\r\n _.each(methods, function(method) {\r\n return ctx[method].apply(ctx, args);\r\n });\r\n };\r\n }\r\n }();\r\n (function() {\r\n \"use strict\";\r\n var old, keys, methods;\r\n old = $.fn.typeahead;\r\n keys = {\r\n www: \"tt-www\",\r\n attrs: \"tt-attrs\",\r\n typeahead: \"tt-typeahead\"\r\n };\r\n methods = {\r\n initialize: function initialize(o, datasets) {\r\n var www;\r\n datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);\r\n o = o || {};\r\n www = WWW(o.classNames);\r\n return this.each(attach);\r\n function attach() {\r\n var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;\r\n _.each(datasets, function(d) {\r\n d.highlight = !!o.highlight;\r\n });\r\n $input = $(this);\r\n $wrapper = $(www.html.wrapper);\r\n $hint = $elOrNull(o.hint);\r\n $menu = $elOrNull(o.menu);\r\n defaultHint = o.hint !== false && !$hint;\r\n defaultMenu = o.menu !== false && !$menu;\r\n defaultHint && ($hint = buildHintFromInput($input, www));\r\n defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));\r\n $hint && $hint.val(\"\");\r\n $input = prepInput($input, www);\r\n if (defaultHint || defaultMenu) {\r\n $wrapper.css(www.css.wrapper);\r\n $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);\r\n $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);\r\n }\r\n MenuConstructor = defaultMenu ? DefaultMenu : Menu;\r\n eventBus = new EventBus({\r\n el: $input\r\n });\r\n input = new Input({\r\n hint: $hint,\r\n input: $input\r\n }, www);\r\n menu = new MenuConstructor({\r\n node: $menu,\r\n datasets: datasets\r\n }, www);\r\n typeahead = new Typeahead({\r\n input: input,\r\n menu: menu,\r\n eventBus: eventBus,\r\n minLength: o.minLength\r\n }, www);\r\n $input.data(keys.www, www);\r\n $input.data(keys.typeahead, typeahead);\r\n }\r\n },\r\n isEnabled: function isEnabled() {\r\n var enabled;\r\n ttEach(this.first(), function(t) {\r\n enabled = t.isEnabled();\r\n });\r\n return enabled;\r\n },\r\n enable: function enable() {\r\n ttEach(this, function(t) {\r\n t.enable();\r\n });\r\n return this;\r\n },\r\n disable: function disable() {\r\n ttEach(this, function(t) {\r\n t.disable();\r\n });\r\n return this;\r\n },\r\n isActive: function isActive() {\r\n var active;\r\n ttEach(this.first(), function(t) {\r\n active = t.isActive();\r\n });\r\n return active;\r\n },\r\n activate: function activate() {\r\n ttEach(this, function(t) {\r\n t.activate();\r\n });\r\n return this;\r\n },\r\n deactivate: function deactivate() {\r\n ttEach(this, function(t) {\r\n t.deactivate();\r\n });\r\n return this;\r\n },\r\n isOpen: function isOpen() {\r\n var open;\r\n ttEach(this.first(), function(t) {\r\n open = t.isOpen();\r\n });\r\n return open;\r\n },\r\n open: function open() {\r\n ttEach(this, function(t) {\r\n t.open();\r\n });\r\n return this;\r\n },\r\n close: function close() {\r\n ttEach(this, function(t) {\r\n t.close();\r\n });\r\n return this;\r\n },\r\n select: function select(el) {\r\n var success = false, $el = $(el);\r\n ttEach(this.first(), function(t) {\r\n success = t.select($el);\r\n });\r\n return success;\r\n },\r\n autocomplete: function autocomplete(el) {\r\n var success = false, $el = $(el);\r\n ttEach(this.first(), function(t) {\r\n success = t.autocomplete($el);\r\n });\r\n return success;\r\n },\r\n moveCursor: function moveCursoe(delta) {\r\n var success = false;\r\n ttEach(this.first(), function(t) {\r\n success = t.moveCursor(delta);\r\n });\r\n return success;\r\n },\r\n val: function val(newVal) {\r\n var query;\r\n if (!arguments.length) {\r\n ttEach(this.first(), function(t) {\r\n query = t.getVal();\r\n });\r\n return query;\r\n } else {\r\n ttEach(this, function(t) {\r\n t.setVal(newVal);\r\n });\r\n return this;\r\n }\r\n },\r\n destroy: function destroy() {\r\n ttEach(this, function(typeahead, $input) {\r\n revert($input);\r\n typeahead.destroy();\r\n });\r\n return this;\r\n }\r\n };\r\n $.fn.typeahead = function(method) {\r\n if (methods[method]) {\r\n return methods[method].apply(this, [].slice.call(arguments, 1));\r\n } else {\r\n return methods.initialize.apply(this, arguments);\r\n }\r\n };\r\n $.fn.typeahead.noConflict = function noConflict() {\r\n $.fn.typeahead = old;\r\n return this;\r\n };\r\n function ttEach($els, fn) {\r\n $els.each(function() {\r\n var $input = $(this), typeahead;\r\n (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);\r\n });\r\n }\r\n function buildHintFromInput($input, www) {\r\n return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop(\"readonly\", true).removeAttr(\"id name placeholder required\").attr({\r\n autocomplete: \"off\",\r\n spellcheck: \"false\",\r\n tabindex: -1\r\n });\r\n }\r\n function prepInput($input, www) {\r\n $input.data(keys.attrs, {\r\n dir: $input.attr(\"dir\"),\r\n autocomplete: $input.attr(\"autocomplete\"),\r\n spellcheck: $input.attr(\"spellcheck\"),\r\n style: $input.attr(\"style\")\r\n });\r\n $input.addClass(www.classes.input).attr({\r\n autocomplete: \"off\",\r\n spellcheck: false\r\n });\r\n try {\r\n !$input.attr(\"dir\") && $input.attr(\"dir\", \"auto\");\r\n } catch (e) {}\r\n return $input;\r\n }\r\n function getBackgroundStyles($el) {\r\n return {\r\n backgroundAttachment: $el.css(\"background-attachment\"),\r\n backgroundClip: $el.css(\"background-clip\"),\r\n backgroundColor: $el.css(\"background-color\"),\r\n backgroundImage: $el.css(\"background-image\"),\r\n backgroundOrigin: $el.css(\"background-origin\"),\r\n backgroundPosition: $el.css(\"background-position\"),\r\n backgroundRepeat: $el.css(\"background-repeat\"),\r\n backgroundSize: $el.css(\"background-size\")\r\n };\r\n }\r\n function revert($input) {\r\n var www, $wrapper;\r\n www = $input.data(keys.www);\r\n $wrapper = $input.parent().filter(www.selectors.wrapper);\r\n _.each($input.data(keys.attrs), function(val, key) {\r\n _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);\r\n });\r\n $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);\r\n if ($wrapper.length) {\r\n $input.detach().insertAfter($wrapper);\r\n $wrapper.remove();\r\n }\r\n }\r\n function $elOrNull(obj) {\r\n var isValid, $el;\r\n isValid = _.isJQuery(obj) || _.isElement(obj);\r\n $el = isValid ? $(obj).first() : [];\r\n return $el.length ? $el : null;\r\n }\r\n })();\r\n});"],"names":["factory","define","amd","exports","module","require","jQuery","$","_","isMsie","test","navigator","userAgent","match","isBlankString","str","escapeRegExChars","replace","isString","obj","isNumber","isArray","isFunction","isObject","isPlainObject","isUndefined","isElement","nodeType","isJQuery","toStr","s","bind","proxy","each","collection","cb","index","value","map","filter","grep","every","result","key","val","call","some","mixin","extend","identity","x","clone","getIdGenerator","counter","templatify","String","defer","fn","setTimeout","debounce","func","wait","immediate","timeout","context","this","args","arguments","later","apply","callNow","clearTimeout","throttle","previous","Date","now","remaining","stringify","JSON","noop","WWW","defaultClassNames","wrapper","input","hint","menu","dataset","suggestion","selectable","empty","open","cursor","highlight","o","www","classes","css","position","display","top","left","borderColor","boxShadow","opacity","verticalAlign","backgroundColor","inputWithNoHint","zIndex","ltr","right","rtl","backgroundImage","html","c","selectors","v","k","EventBus","deprecationMap","el","error","$el","render","cursorchange","select","autocomplete","prototype","_trigger","type","$e","Event","unshift","trigger","before","slice","isDefaultPrevented","deprecatedType","EventEmitter","splitter","nextTick","nextTickFn","window","setImmediate","onSync","types","on","onAsync","off","_callbacks","split","shift","callbacks","syncFlush","asyncFlush","getFlush","sync","concat","async","method","push","cancelled","i","len","length","doc","defaults","node","pattern","tagName","className","wordsOnly","caseSensitive","regex","patterns","escapedPatterns","regexStr","join","RegExp","traverse","hightlightTextNode","childNode","childNodes","textNode","patternNode","wrapperNode","exec","data","createElement","splitText","appendChild","cloneNode","parentNode","replaceChild","document","Input","specialKeyCodeMap","$hint","$input","query","queryWhenFocused","hasFocus","$overflowHelper","visibility","whiteSpace","fontFamily","fontSize","fontStyle","fontVariant","fontWeight","wordSpacing","letterSpacing","textIndent","textRendering","textTransform","insertAfter","_checkLanguageDirection","setHint","getHint","clearHint","clearHintIfInvalid","9","27","37","39","13","38","40","normalizeQuery","_onBlur","resetInputValue","_onFocus","_onKeydown","keyName","which","keyCode","_managePreventDefault","_shouldTrigger","_onInput","_setQuery","getInputValue","preventDefault","withModifier","dir","toLowerCase","attr","silent","a","b","hasDifferentWhitespace","areEquivalent","that","onBlur","onFocus","onKeydown","onInput","focus","blur","getLangDir","getQuery","setQuery","setInputValue","hasQueryChangedSinceLastFocus","valIsPrefixOfHint","indexOf","hasOverflow","is","constraint","width","text","isCursorAtEnd","valueLength","selectionStart","selection","range","createRange","moveStart","destroy","remove","altKey","ctrlKey","metaKey","shiftKey","Dataset","keys","nameGenerator","displayFn","templates","notFound","source","name","limit","displayKey","pending","header","footer","__ttAdapter","_resetLastSuggestion","addClass","extractData","_overwrite","suggestions","_renderSuggestions","_renderPending","_renderNotFound","_empty","_append","$lastSuggestion","_appendSuggestions","$fragment","_getSuggestionsFragment","children","last","prepend","_getHeader","append","_getFooter","after","template","fragment","createDocumentFragment","_injectQuery","_query","update","canceled","syncCalled","rendered","cancel","clear","isEmpty","Menu","$node","datasets","oDataset","find","first","appendTo","_onSelectableClick","currentTarget","_onRendered","toggleClass","_allDatasetsEmpty","_onCleared","_propagate","_getSelectables","_removeCursor","$selectable","getActiveSelectable","removeClass","_ensureVisible","elTop","elBottom","outerHeight","nodeScrollTop","scrollTop","nodeHeight","height","parseInt","onSelectableClick","isOpen","hasClass","close","setLanguageDirection","selectableRelativeToCursor","delta","$oldCursor","$selectables","newIndex","eq","setCursor","getSelectableData","getTopSelectable","isValidUpdate","DefaultMenu","_show","_hide","hide","Typeahead","onEnterKeyed","onTabKeyed","onEscKeyed","onUpKeyed","onDownKeyed","onLeftKeyed","onRightKeyed","onQueryChanged","onWhitespaceChanged","eventBus","minLength","enabled","active","activate","_hacks","_onSelectableClicked","_onAsyncRequested","_onAsyncCanceled","_onAsyncReceived","_onDatasetRendered","_onDatasetCleared","onFocused","onBlurred","_onLangDirChanged","$menu","activeElement","isActive","hasActive","has","stopImmediatePropagation","_updateHint","_onFocused","_minLengthMet","_onBlurred","_onEnterKeyed","_onTabKeyed","_onEscKeyed","_onUpKeyed","moveCursor","_onDownKeyed","_onLeftKeyed","_onRightKeyed","_onQueryChanged","e","_onWhitespaceChanged","_openIfActive","escapedQuery","isEnabled","enable","disable","deactivate","setVal","getVal","$candidate","payload","ctx","methods","old","ttEach","$els","typeahead","$elOrNull","attrs","initialize","classNames","MenuConstructor","d","$wrapper","defaultHint","defaultMenu","removeData","backgroundAttachment","backgroundClip","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","prop","removeAttr","spellcheck","tabindex","style","wrap","parent","t","success","newVal","detach","noConflict"],"mappings":"AAMA,CAAA,SAAgBA,GACU,YAAlB,OAAOC,QAAyBA,OAAOC,IACvCD,OAAO,YAAa,CAAE,UACXD,CACV,EACyB,UAAnB,OAAOG,QACdC,OAAOD,QAAUH,EAAQK,QAAQ,QAAQ,CAAC,EAE1CL,EAAQM,MAAM,CAErB,EAAQ,SAASC,GACd,IAAIC,EAAI,WACJ,aACA,MAAO,CACHC,OAAQ,WACJ,MAAO,CAAA,CAAA,kBAAkBC,KAAKC,UAAUC,SAAS,GAAID,UAAUC,UAAUC,MAAM,0BAA0B,EAAE,EAC/G,EACAC,cAAe,SAASC,GACpB,MAAO,CAACA,GAAO,QAAQL,KAAKK,CAAG,CACnC,EACAC,iBAAkB,SAASD,GACvB,OAAOA,EAAIE,QAAQ,sCAAuC,MAAM,CACpE,EACAC,SAAU,SAASC,GACf,MAAsB,UAAf,OAAOA,CAClB,EACAC,SAAU,SAASD,GACf,MAAsB,UAAf,OAAOA,CAClB,EACAE,QAASd,EAAEc,QACXC,WAAYf,EAAEe,WACdC,SAAUhB,EAAEiB,cACZC,YAAa,SAASN,GAClB,OAAsB,KAAA,IAARA,CAClB,EACAO,UAAW,SAASP,GAChB,MAAO,EAAGA,CAAAA,GAAwB,IAAjBA,EAAIQ,SACzB,EACAC,SAAU,SAAST,GACf,OAAOA,aAAeZ,CAC1B,EACAsB,MAAO,SAAeC,GAClB,OAAOtB,EAAEiB,YAAYK,CAAC,GAAW,OAANA,EAAa,GAAKA,EAAI,EACrD,EACAC,KAAMxB,EAAEyB,MACRC,KAAM,SAASC,EAAYC,GACvB5B,EAAE0B,KAAKC,EACP,SAAqBE,EAAOC,GACxB,OAAOF,EAAGE,EAAOD,CAAK,CAC1B,CAH8B,CAIlC,EACAE,IAAK/B,EAAE+B,IACPC,OAAQhC,EAAEiC,KACVC,MAAO,SAAStB,EAAKT,GACjB,IAAIgC,EAAS,CAAA,EACb,OAAKvB,GAGLZ,EAAE0B,KAAKd,EAAK,SAASwB,EAAKC,GACtB,GAAI,EAAEF,EAAShC,EAAKmC,KAAK,KAAMD,EAAKD,EAAKxB,CAAG,GACxC,MAAO,CAAA,CAEf,CAAC,EACM,CAAC,CAACuB,GAPEA,CAQf,EACAI,KAAM,SAAS3B,EAAKT,GAChB,IAAIgC,EAAS,CAAA,EACb,OAAKvB,GAGLZ,EAAE0B,KAAKd,EAAK,SAASwB,EAAKC,GACtB,GAAIF,EAAShC,EAAKmC,KAAK,KAAMD,EAAKD,EAAKxB,CAAG,EACtC,MAAO,CAAA,CAEf,CAAC,EACM,CAAC,CAACuB,GAPEA,CAQf,EACAK,MAAOxC,EAAEyC,OACTC,SAAU,SAASC,GACf,OAAOA,CACX,EACAC,MAAO,SAAShC,GACZ,OAAOZ,EAAEyC,OAAO,CAAA,EAAM,GAAI7B,CAAG,CACjC,EACAiC,eAAgB,WACZ,IAAIC,EAAU,EACd,OAAO,WACH,OAAOA,CAAO,EAClB,CACJ,EACAC,WAAY,SAAoBnC,GAC5B,OAAOZ,EAAEe,WAAWH,CAAG,EAAIA,EAC3B,WACI,OAAOoC,OAAOpC,CAAG,CACrB,CACJ,EACAqC,MAAO,SAASC,GACZC,WAAWD,EAAI,CAAC,CACpB,EACAE,SAAU,SAASC,EAAMC,EAAMC,GAC3B,IAAIC,EAASrB,EACb,OAAO,WACH,IAAIsB,EAAUC,KAAMC,EAAOC,UAC3BC,EAAQ,WACJL,EAAU,KACLD,IACDpB,EAASkB,EAAKS,MAAML,EAASE,CAAI,EAEzC,EACAI,EAAUR,GAAa,CAACC,EAMxB,OALAQ,aAAaR,CAAO,EACpBA,EAAUL,WAAWU,EAAOP,CAAI,EAE5BnB,EADA4B,EACSV,EAAKS,MAAML,EAASE,CAAI,EAE9BxB,CACX,CACJ,EACA8B,SAAU,SAASZ,EAAMC,GACrB,IAAIG,EAASE,EAAMH,EAASrB,EAC5B+B,EAAW,EACXL,EAAQ,WACJK,EAAW,IAAIC,KACfX,EAAU,KACVrB,EAASkB,EAAKS,MAAML,EAASE,CAAI,CACrC,EACA,OAAO,WACH,IAAIS,EAAM,IAAID,KAAQE,EAAYf,GAAQc,EAAMF,GAWhD,OAVAT,EAAUC,KACVC,EAAOC,UACHS,GAAa,GACbL,aAAaR,CAAO,EACpBA,EAAU,KACVU,EAAWE,EACXjC,EAASkB,EAAKS,MAAML,EAASE,CAAI,GACzBH,EAAAA,GACEL,WAAWU,EAAOQ,CAAS,EAElClC,CACX,CACJ,EACAmC,UAAW,SAASjC,GAChB,OAAOpC,EAAEU,SAAS0B,CAAG,EAAIA,EAAMkC,KAAKD,UAAUjC,CAAG,CACrD,EACAmC,KAAM,YACV,CACJ,EAAE,EACEC,EAAM,WACN,aACA,IAAIC,EAAoB,CACpBC,QAAS,oBACTC,MAAO,WACPC,KAAM,UACNC,KAAM,UACNC,QAAS,aACTC,WAAY,gBACZC,WAAY,gBACZC,MAAO,WACPC,KAAM,UACNC,OAAQ,YACRC,UAAW,cACf,EACA,OACA,SAAeC,GACX,IAAIC,EAQJ,OAPAC,EAAUvF,EAAEuC,MAAM,GAAIkC,EAAmBY,CAAC,EAOnC,CACHG,KAPJF,EAAM,CACFE,IA4BR,WACI,IAAIA,EAAM,CACNd,QAAS,CACLe,SAAU,WACVC,QAAS,cACb,EACAd,KAAM,CACFa,SAAU,WACVE,IAAK,IACLC,KAAM,IACNC,YAAa,cACbC,UAAW,OACXC,QAAS,GACb,EACApB,MAAO,CACHc,SAAU,WACVO,cAAe,MACfC,gBAAiB,aACrB,EACAC,gBAAiB,CACbT,SAAU,WACVO,cAAe,KACnB,EACAnB,KAAM,CACFY,SAAU,WACVE,IAAK,OACLC,KAAM,IACNO,OAAQ,MACRT,QAAS,MACb,EACAU,IAAK,CACDR,KAAM,IACNS,MAAO,MACX,EACAC,IAAK,CACDV,KAAM,OACNS,MAAO,IACX,CACJ,EACIrG,EAAEC,OAAO,GACTD,EAAEuC,MAAMiD,EAAIb,MAAO,CACf4B,gBAAiB,qFACrB,CAAC,EAEL,OAAOf,CACX,EAzEsB,EACdD,QAASA,EACTiB,KAaR,SAAmBC,GACf,MAAO,CACH/B,QAAS,gBAAkB+B,EAAE/B,QAAU,YACvCG,KAAM,eAAiB4B,EAAE5B,KAAO,UACpC,CACJ,EAlBwBU,CAAO,EACvBmB,UAkBR,SAAwBnB,GACpB,IAAImB,EAAY,GAIhB,OAHA1G,EAAEyB,KAAK8D,EAAS,SAASoB,EAAGC,GACxBF,EAAUE,GAAK,IAAMD,CACzB,CAAC,EACMD,CACX,EAxBkCnB,CAAO,CACrC,GAEaC,IACTgB,KAAMlB,EAAIkB,KACVjB,QAASD,EAAIC,QACbmB,UAAWpB,EAAIoB,UACfnE,MAAO,SAAS8C,GACZrF,EAAEuC,MAAM8C,EAAGC,CAAG,CAClB,CACJ,CACJ,CA4DJ,EAAE,EACEuB,EAAW,WACX,aACA,IAAeC,EAQf,SAASD,EAASxB,GACTA,GAAMA,EAAE0B,IACThH,EAAEiH,MAAM,iCAAiC,EAE7CvD,KAAKwD,IAAMlH,EAAEsF,EAAE0B,EAAE,CACrB,CAuBA,OAlCAD,EAAiB,CACbI,OAAQ,WACRC,aAAc,gBACdC,OAAQ,WACRC,aAAc,eAClB,EAOArH,EAAEuC,MAAMsE,EAASS,UAAW,CACxBC,SAAU,SAASC,EAAM9D,GAErB+D,EAAK1H,EAAE2H,MAhBH,aAgBqBF,CAAI,EAG7B,OAFC9D,EAAOA,GAAQ,IAAIiE,QAAQF,CAAE,EAC9BhE,KAAKwD,IAAIW,QAAQ/D,MAAMJ,KAAKwD,IAAKvD,CAAI,EAC9B+D,CACX,EACAI,OAAQ,SAASL,GACb,IACA9D,EAAO,GAAGoE,MAAMzF,KAAKsB,UAAW,CAAC,EAEjC,OADKF,KAAK8D,SAAS,SAAWC,EAAM9D,CAAI,EAC9BqE,mBAAmB,CACjC,EACAH,QAAS,SAASJ,GAEd/D,KAAK8D,SAASC,EAAM,GAAGM,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,GAC3CqE,EAAiBlB,EAAeU,KAChC/D,KAAK8D,SAASS,EAAgB,GAAGF,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,CAEjE,CACJ,CAAC,EACMkD,CACX,EAAE,EACEoB,EAAe,WACf,aACA,IAAIC,EAAW,MAAOC,EAiEtB,WACI,IAAIC,EAEAA,EADAC,OAAOC,aACM,SAA8BrF,GACvCqF,aAAa,WACTrF,EAAG,CACP,CAAC,CACL,EAEa,SAA4BA,GACrCC,WAAW,WACPD,EAAG,CACP,EAAG,CAAC,CACR,EAEJ,OAAOmF,CACX,EAjF6C,EAC7C,MAAO,CACHG,OAyBJ,SAAgBC,EAAO7G,EAAI6B,GACvB,OAAOiF,EAAGpG,KAAKoB,KAAM,OAAQ+E,EAAO7G,EAAI6B,CAAO,CACnD,EA1BIkF,QAqBJ,SAAiBF,EAAO7G,EAAI6B,GACxB,OAAOiF,EAAGpG,KAAKoB,KAAM,QAAS+E,EAAO7G,EAAI6B,CAAO,CACpD,EAtBImF,IA0BJ,SAAaH,GACT,IAAIhB,EACJ,GAAK/D,KAAKmF,WAIV,IADAJ,EAAQA,EAAMK,MAAMX,CAAQ,EACrBV,EAAOgB,EAAMM,MAAM,GACtB,OAAOrF,KAAKmF,WAAWpB,GAE3B,OAAO/D,IACX,EAnCImE,QAoCJ,SAAiBY,GACb,IAAUO,EAAWrF,EAAMsF,EAAWC,EACtC,GAAKxF,KAAKmF,WAKV,IAFAJ,EAAQA,EAAMK,MAAMX,CAAQ,EAC5BxE,EAAO,GAAGoE,MAAMzF,KAAKsB,UAAW,CAAC,GACzB6D,EAAOgB,EAAMM,MAAM,KAAOC,EAAYtF,KAAKmF,WAAWpB,KAC1DwB,EAAYE,EAASH,EAAUI,KAAM1F,KAAM,CAAE+D,GAAO4B,OAAO1F,CAAI,CAAC,EAChEuF,EAAaC,EAASH,EAAUM,MAAO5F,KAAM,CAAE+D,GAAO4B,OAAO1F,CAAI,CAAC,EAClEsF,EAAU,GAAKb,EAASc,CAAU,EAEtC,OAAOxF,IACX,CAhDA,EACA,SAASgF,EAAGa,EAAQd,EAAO7G,EAAI6B,GAC3B,IAAIgE,EA0EavE,EAAIO,EAzErB,GAAK7B,EAML,IAHA6G,EAAQA,EAAMK,MAAMX,CAAQ,EAC5BvG,EAAK6B,GAqEgBA,EArEUA,GAqEdP,EArEUtB,GAsEjBJ,KAAO0B,EAAG1B,KAAKiC,CAAO,EAAI,WAChCP,EAAGY,MAAML,EAAS,GAAGsE,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,CACjD,GAxE0ChC,EAC1C8B,KAAKmF,WAAanF,KAAKmF,YAAc,GAC9BpB,EAAOgB,EAAMM,MAAM,GACtBrF,KAAKmF,WAAWpB,GAAQ/D,KAAKmF,WAAWpB,IAAS,CAC7C2B,KAAM,GACNE,MAAO,EACX,EACA5F,KAAKmF,WAAWpB,GAAM8B,GAAQC,KAAK5H,CAAE,EAEzC,OAAO8B,IACX,CAgCA,SAASyF,EAASH,EAAWvF,EAASE,GAClC,OACA,WAEI,IADA,IAAI8F,EACKC,EAAI,EAAGC,EAAMX,EAAUY,OAAQ,CAACH,GAAaC,EAAIC,EAAKD,GAAK,EAChED,EAAkD,CAAA,IAAtCT,EAAUU,GAAG5F,MAAML,EAASE,CAAI,EAEhD,MAAO,CAAC8F,CACZ,CACJ,CAuBJ,EAAE,EACEpE,EAAY,SAASwE,GACrB,aACA,IAAIC,EAAW,CACXC,KAAM,KACNC,QAAS,KACTC,QAAS,SACTC,UAAW,KACXC,UAAW,CAAA,EACXC,cAAe,CAAA,CACnB,EACA,OAAO,SAAoB9E,GACvB,IAAI+E,GACJ/E,EAAIrF,EAAEuC,MAAM,GAAIsH,EAAUxE,CAAC,GACpByE,MAASzE,EAAE0E,UAGlB1E,EAAE0E,QAAU/J,EAAEa,QAAQwE,EAAE0E,OAAO,EAAI1E,EAAE0E,QAAU,CAAE1E,EAAE0E,SACnDK,EA0BJ,SAAkBC,EAAUF,EAAeD,GAEvC,IADA,IAAII,EAAkB,GACbb,EAAI,EAAGC,EAAMW,EAASV,OAAQF,EAAIC,EAAKD,CAAC,GAC7Ca,EAAgBf,KAAKvJ,EAAEQ,iBAAiB6J,EAASZ,EAAE,CAAC,EAGxD,OADAc,EAAWL,EAAY,OAASI,EAAgBE,KAAK,GAAG,EAAI,OAAS,IAAMF,EAAgBE,KAAK,GAAG,EAAI,IAChGL,EAAgB,IAAIM,OAAOF,CAAQ,EAAI,IAAIE,OAAOF,EAAU,GAAG,CAC1E,EAjCqBlF,EAAE0E,QAAS1E,EAAE8E,cAAe9E,EAAE6E,SAAS,EAcxD,SAASQ,EAAS3D,EAAI4D,GAClB,IAAIC,EACJ,IAAK,IAAInB,EAAI,EAAGA,EAAI1C,EAAG8D,WAAWlB,OAAQF,CAAC,GADX,KAE5BmB,EAAY7D,EAAG8D,WAAWpB,IACZtI,SACVsI,GAAKkB,EAAmBC,CAAS,EAAI,EAAI,EAEzCF,EAASE,EAAWD,CAAkB,CAGlD,EAvBStF,EAAEyE,KACX,SAA4BgB,GACxB,IAAIzK,EAAO0K,EAAaC,GACpB3K,EAAQ+J,EAAMa,KAAKH,EAASI,IAAI,KAChCF,EAAcpB,EAAIuB,cAAc9F,EAAE2E,OAAO,EACzC3E,EAAE4E,YAAce,EAAYf,UAAY5E,EAAE4E,YAC1Cc,EAAcD,EAASM,UAAU/K,EAAMuB,KAAK,GAChCwJ,UAAU/K,EAAM,GAAGsJ,MAAM,EACrCqB,EAAYK,YAAYN,EAAYO,UAAU,CAAA,CAAI,CAAC,EACnDR,EAASS,WAAWC,aAAaR,EAAaD,CAAW,GAE7D,MAAO,CAAC,CAAC1K,CACb,CAZmC,EAwBvC,CASJ,EAAEgI,OAAOoD,QAAQ,EACbC,EAAQ,WACR,aACA,IAAIC,EAUJ,SAASD,EAAMrG,EAAGC,IACdD,EAAIA,GAAK,IACFV,OACH5E,EAAEiH,MAAM,kBAAkB,EAE9B1B,EAAI/C,MAAMkB,IAAI,EACdA,KAAKmI,MAAQ7L,EAAEsF,EAAET,IAAI,EACrBnB,KAAKoI,OAAS9L,EAAEsF,EAAEV,KAAK,EACvBlB,KAAKqI,MAAQrI,KAAKoI,OAAOzJ,IAAI,EAC7BqB,KAAKsI,iBAAmBtI,KAAKuI,SAAS,EAAIvI,KAAKqI,MAAQ,KACvDrI,KAAKwI,iBAyKoBJ,EAzKkBpI,KAAKoI,OA0KzC9L,EAAE,gCAAgC,EAAEyF,IAAI,CAC3CC,SAAU,WACVyG,WAAY,SACZC,WAAY,MACZC,WAAYP,EAAOrG,IAAI,aAAa,EACpC6G,SAAUR,EAAOrG,IAAI,WAAW,EAChC8G,UAAWT,EAAOrG,IAAI,YAAY,EAClC+G,YAAaV,EAAOrG,IAAI,cAAc,EACtCgH,WAAYX,EAAOrG,IAAI,aAAa,EACpCiH,YAAaZ,EAAOrG,IAAI,cAAc,EACtCkH,cAAeb,EAAOrG,IAAI,gBAAgB,EAC1CmH,WAAYd,EAAOrG,IAAI,aAAa,EACpCoH,cAAef,EAAOrG,IAAI,gBAAgB,EAC1CqH,cAAehB,EAAOrG,IAAI,gBAAgB,CAC9C,CAAC,EAAEsH,YAAYjB,CAAM,GAvLrBpI,KAAKsJ,wBAAwB,EACH,IAAtBtJ,KAAKmI,MAAMjC,SACXlG,KAAKuJ,QAAUvJ,KAAKwJ,QAAUxJ,KAAKyJ,UAAYzJ,KAAK0J,mBAAqBnN,EAAEuE,KAEnF,CAmKA,OA3LAoH,EAAoB,CAChByB,EAAG,MACHC,GAAI,MACJC,GAAI,OACJC,GAAI,QACJC,GAAI,QACJC,GAAI,KACJC,GAAI,MACR,EAiBAhC,EAAMiC,eAAiB,SAASpN,GAC5B,OAAOP,EAAEqB,MAAMd,CAAG,EAAEE,QAAQ,QAAS,EAAE,EAAEA,QAAQ,UAAW,GAAG,CACnE,EACAT,EAAEuC,MAAMmJ,EAAMpE,UAAWW,EAAc,CACnC2F,QAAS,WACLnK,KAAKoK,gBAAgB,EACrBpK,KAAKmE,QAAQ,SAAS,CAC1B,EACAkG,SAAU,WACNrK,KAAKsI,iBAAmBtI,KAAKqI,MAC7BrI,KAAKmE,QAAQ,SAAS,CAC1B,EACAmG,WAAY,SAAmBtG,GAC3B,IAAIuG,EAAUrC,EAAkBlE,EAAGwG,OAASxG,EAAGyG,SAC/CzK,KAAK0K,sBAAsBH,EAASvG,CAAE,EAClCuG,GAAWvK,KAAK2K,eAAeJ,EAASvG,CAAE,GAC1ChE,KAAKmE,QAAQoG,EAAU,QAASvG,CAAE,CAE1C,EACA4G,SAAU,WACN5K,KAAK6K,UAAU7K,KAAK8K,cAAc,CAAC,EACnC9K,KAAK0J,mBAAmB,EACxB1J,KAAKsJ,wBAAwB,CACjC,EACAoB,sBAAuB,SAA8BH,EAASvG,GAC1D,IAAI+G,EACJ,OAAQR,GACN,IAAK,KACL,IAAK,OACHQ,EAAiB,CAACC,EAAahH,CAAE,EACjC,MAEF,QACE+G,EAAiB,CAAA,CACrB,CACAA,GAAkB/G,EAAG+G,eAAe,CACxC,EACAJ,eAAgB,SAAuBJ,EAASvG,GAIxCG,EADG,QADCoG,GAEM,CAACS,EAAahH,CAAE,EAM9B,OAAOG,CACX,EACAmF,wBAAyB,WACrB,IAAI2B,GAAOjL,KAAKoI,OAAOrG,IAAI,WAAW,GAAK,OAAOmJ,YAAY,EAC1DlL,KAAKiL,MAAQA,IACbjL,KAAKiL,IAAMA,EACXjL,KAAKmI,MAAMgD,KAAK,MAAOF,CAAG,EAC1BjL,KAAKmE,QAAQ,iBAAkB8G,CAAG,EAE1C,EACAJ,UAAW,SAAkBlM,EAAKyM,GAC9B,IA0HsBC,EAAGC,EAAHD,EAzHe1M,EAyHZ2M,EAzHiBtL,KAAKqI,MAC/CkD,GADAC,EA0HGvD,EAAMiC,eAAemB,CAAC,IAAMpD,EAAMiC,eAAeoB,CAAC,IAzHZtL,KAAKqI,MAAMnC,SAAWvH,EAAIuH,OACnElG,KAAKqI,MAAQ1J,EACRyM,GAAWI,EAEL,CAACJ,GAAUG,GAClBvL,KAAKmE,QAAQ,oBAAqBnE,KAAKqI,KAAK,EAF5CrI,KAAKmE,QAAQ,eAAgBnE,KAAKqI,KAAK,CAI/C,EACAvK,KAAM,WACF,IAAI2N,EAAOzL,KACX0L,EAASnP,EAAEuB,KAAKkC,KAAKmK,QAASnK,IAAI,EAClC2L,EAAUpP,EAAEuB,KAAKkC,KAAKqK,SAAUrK,IAAI,EACpC4L,EAAYrP,EAAEuB,KAAKkC,KAAKsK,WAAYtK,IAAI,EACxC6L,EAAUtP,EAAEuB,KAAKkC,KAAK4K,SAAU5K,IAAI,EAYpC,OAXAA,KAAKoI,OAAOpD,GAAG,UAAW0G,CAAM,EAAE1G,GAAG,WAAY2G,CAAO,EAAE3G,GAAG,aAAc4G,CAAS,EAChF,CAACrP,EAAEC,OAAO,GAAkB,EAAbD,EAAEC,OAAO,EACxBwD,KAAKoI,OAAOpD,GAAG,WAAY6G,CAAO,EAElC7L,KAAKoI,OAAOpD,GAAG,yCAA0C,SAAShB,GAC1DkE,EAAkBlE,EAAGwG,OAASxG,EAAGyG,UAGrClO,EAAEgD,MAAMhD,EAAEuB,KAAK2N,EAAKb,SAAUa,EAAMzH,CAAE,CAAC,CAC3C,CAAC,EAEEhE,IACX,EACA8L,MAAO,WACH9L,KAAKoI,OAAO0D,MAAM,CACtB,EACAC,KAAM,WACF/L,KAAKoI,OAAO2D,KAAK,CACrB,EACAC,WAAY,WACR,OAAOhM,KAAKiL,GAChB,EACAgB,SAAU,WACN,OAAOjM,KAAKqI,OAAS,EACzB,EACA6D,SAAU,SAAkBvN,EAAKyM,GAC7BpL,KAAKmM,cAAcxN,CAAG,EACtBqB,KAAK6K,UAAUlM,EAAKyM,CAAM,CAC9B,EACAgB,8BAA+B,WAC3B,OAAOpM,KAAKqI,QAAUrI,KAAKsI,gBAC/B,EACAwC,cAAe,WACX,OAAO9K,KAAKoI,OAAOzJ,IAAI,CAC3B,EACAwN,cAAe,SAAuB/N,GAClC4B,KAAKoI,OAAOzJ,IAAIP,CAAK,EACrB4B,KAAK0J,mBAAmB,EACxB1J,KAAKsJ,wBAAwB,CACjC,EACAc,gBAAiB,WACbpK,KAAKmM,cAAcnM,KAAKqI,KAAK,CACjC,EACAmB,QAAS,WACL,OAAOxJ,KAAKmI,MAAMxJ,IAAI,CAC1B,EACA4K,QAAS,SAAiBnL,GACtB4B,KAAKmI,MAAMxJ,IAAIP,CAAK,CACxB,EACAqL,UAAW,WACPzJ,KAAKuJ,QAAQ,EAAE,CACnB,EACAG,mBAAoB,WAChB,IACA/K,EAAMqB,KAAK8K,cAAc,EACzB3J,EAAOnB,KAAKwJ,QAAQ,EACpB6C,EAAoB1N,IAAQwC,GAA8B,IAAtBA,EAAKmL,QAAQ3N,CAAG,EAClC,KAARA,GAAc0N,GAAqB,CAACrM,KAAKuM,YAAY,GACnDvM,KAAKyJ,UAAU,CAC/B,EACAlB,SAAU,WACN,OAAOvI,KAAKoI,OAAOoE,GAAG,QAAQ,CAClC,EACAD,YAAa,WACT,IAAIE,EAAazM,KAAKoI,OAAOsE,MAAM,EAAI,EAEvC,OADA1M,KAAKwI,gBAAgBmE,KAAK3M,KAAK8K,cAAc,CAAC,EACvC9K,KAAKwI,gBAAgBkE,MAAM,GAAKD,CAC3C,EACAG,cAAe,WACX,IACAC,EAAc7M,KAAKoI,OAAOzJ,IAAI,EAAEuH,OAChC4G,EAAiB9M,KAAKoI,OAAO,GAAG0E,eAChC,OAAIvQ,EAAEY,SAAS2P,CAAc,EAClBA,IAAmBD,EACnB7E,CAAAA,SAAS+E,aAChBC,EAAQhF,SAAS+E,UAAUE,YAAY,GACjCC,UAAU,YAAa,CAACL,CAAW,EAClCA,IAAgBG,EAAML,KAAKzG,OAG1C,EACAiH,QAAS,WACLnN,KAAKmI,MAAMjD,IAAI,KAAK,EACpBlF,KAAKoI,OAAOlD,IAAI,KAAK,EACrBlF,KAAKwI,gBAAgB4E,OAAO,EAC5BpN,KAAKmI,MAAQnI,KAAKoI,OAASpI,KAAKwI,gBAAkBlM,EAAE,OAAO,CAC/D,CACJ,CAAC,EACM2L,EAqBP,SAAS+C,EAAahH,GAClB,OAAOA,EAAGqJ,QAAUrJ,EAAGsJ,SAAWtJ,EAAGuJ,SAAWvJ,EAAGwJ,QACvD,CACJ,EAAE,EACEC,EAAU,WACV,aACA,IAAIC,EAAMC,EAMV,SAASF,EAAQ7L,EAAGC,GAgLpB,IAAsBI,EAOW2L,GAtL7BhM,EAAIA,GAAK,IACPiM,UAAYjM,EAAEiM,WAAa,GAC7BjM,EAAEiM,UAAUC,SAAWlM,EAAEiM,UAAUC,UAAYlM,EAAEiM,UAAUrM,MACtDI,EAAEmM,QACHzR,EAAEiH,MAAM,gBAAgB,EAEvB3B,EAAEyE,MACH/J,EAAEiH,MAAM,cAAc,EAEtB3B,EAAEoM,MAAQ,CA0LP,mBAAmBvR,KA1LCmF,EAAEoM,IA0LK,GAzL9B1R,EAAEiH,MAAM,yBAA2B3B,EAAEoM,IAAI,EAE7CnM,EAAI/C,MAAMkB,IAAI,EACdA,KAAK2B,UAAY,CAAC,CAACC,EAAED,UACrB3B,KAAKgO,KAAOpM,EAAEoM,MAAQL,EAAc,EACpC3N,KAAKiO,MAAQrM,EAAEqM,OAAS,EACxBjO,KAAK4N,WAgKL3L,GADkBA,EA/JYL,EAAEK,SAAWL,EAAEsM,aAgKxB3R,EAAEqE,UAChBrE,EAAEc,WAAW4E,CAAO,EAAIA,EAC/B,SAAmB/E,GACf,OAAOA,EAAI+E,EACf,GAnKAjC,KAAK6N,WAqKaA,EArKYjM,EAAEiM,UAqKHD,EArKc5N,KAAK4N,UAsKzC,CACHE,SAAUD,EAAUC,UAAYvR,EAAE8C,WAAWwO,EAAUC,QAAQ,EAC/DK,QAASN,EAAUM,SAAW5R,EAAE8C,WAAWwO,EAAUM,OAAO,EAC5DC,OAAQP,EAAUO,QAAU7R,EAAE8C,WAAWwO,EAAUO,MAAM,EACzDC,OAAQR,EAAUQ,QAAU9R,EAAE8C,WAAWwO,EAAUQ,MAAM,EACzD/M,WAAYuM,EAAUvM,YAE1B,SAA4BvB,GACxB,OAAOzD,EAAE,OAAO,EAAEqQ,KAAKiB,EAAU7N,CAAO,CAAC,CAC7C,CAHA,GA3KAC,KAAK+N,OAASnM,EAAEmM,OAAOO,YAAc1M,EAAEmM,OAAOO,YAAY,EAAI1M,EAAEmM,OAChE/N,KAAK4F,MAAQrJ,EAAEiB,YAAYoE,EAAEgE,KAAK,EAAyB,EAArB5F,KAAK+N,OAAO7H,OAAa,CAAC,CAACtE,EAAEgE,MACnE5F,KAAKuO,qBAAqB,EAC1BvO,KAAKwD,IAAMlH,EAAEsF,EAAEyE,IAAI,EAAEmI,SAASxO,KAAK8B,QAAQT,OAAO,EAAEmN,SAASxO,KAAK8B,QAAQT,QAAU,IAAMrB,KAAKgO,IAAI,CACvG,CAwJA,OApLAN,EAAO,CACH/O,IAAK,wBACLzB,IAAK,sBACT,EACAyQ,EAAgBpR,EAAE4C,eAAe,EAyBjCsO,EAAQgB,YAAc,SAAqBnL,GACnCE,EAAMlH,EAAEgH,CAAE,EACd,OAAIE,EAAIiE,KAAKiG,EAAKxQ,GAAG,EACV,CACHyB,IAAK6E,EAAIiE,KAAKiG,EAAK/O,GAAG,GAAK,GAC3BzB,IAAKsG,EAAIiE,KAAKiG,EAAKxQ,GAAG,GAAK,IAC/B,EAEG,IACX,EACAX,EAAEuC,MAAM2O,EAAQ5J,UAAWW,EAAc,CACrCkK,WAAY,SAAmBrG,EAAOsG,IAClCA,EAAcA,GAAe,IACbzI,OACZlG,KAAK4O,mBAAmBvG,EAAOsG,CAAW,EACnC3O,KAAK4F,OAAS5F,KAAK6N,UAAUM,QACpCnO,KAAK6O,eAAexG,CAAK,EAClB,CAACrI,KAAK4F,OAAS5F,KAAK6N,UAAUC,SACrC9N,KAAK8O,gBAAgBzG,CAAK,EAE1BrI,KAAK+O,OAAO,EAEhB/O,KAAKmE,QAAQ,WAAYnE,KAAKgO,KAAMW,EAAa,CAAA,CAAK,CAC1D,EACAK,QAAS,SAAgB3G,EAAOsG,IAC5BA,EAAcA,GAAe,IACbzI,QAAUlG,KAAKiP,gBAAgB/I,OAC3ClG,KAAKkP,mBAAmB7G,EAAOsG,CAAW,EACnCA,EAAYzI,OACnBlG,KAAK4O,mBAAmBvG,EAAOsG,CAAW,EACnC,CAAC3O,KAAKiP,gBAAgB/I,QAAUlG,KAAK6N,UAAUC,UACtD9N,KAAK8O,gBAAgBzG,CAAK,EAE9BrI,KAAKmE,QAAQ,WAAYnE,KAAKgO,KAAMW,EAAa,CAAA,CAAI,CACzD,EACAC,mBAAoB,SAA2BvG,EAAOsG,GAClD,IACAQ,EAAYnP,KAAKoP,wBAAwB/G,EAAOsG,CAAW,EAC3D3O,KAAKiP,gBAAkBE,EAAUE,SAAS,EAAEC,KAAK,EACjDtP,KAAKwD,IAAIT,KAAKoM,CAAS,EAAEI,QAAQvP,KAAKwP,WAAWnH,EAAOsG,CAAW,CAAC,EAAEc,OAAOzP,KAAK0P,WAAWrH,EAAOsG,CAAW,CAAC,CACpH,EACAO,mBAAoB,SAA2B7G,EAAOsG,GAElDQ,EAAYnP,KAAKoP,wBAAwB/G,EAAOsG,CAAW,EAC3DM,EAAkBE,EAAUE,SAAS,EAAEC,KAAK,EAC5CtP,KAAKiP,gBAAgBU,MAAMR,CAAS,EACpCnP,KAAKiP,gBAAkBA,CAC3B,EACAJ,eAAgB,SAAuBxG,GACnC,IAAIuH,EAAW5P,KAAK6N,UAAUM,QAC9BnO,KAAKuO,qBAAqB,EAC1BqB,GAAY5P,KAAKwD,IAAIT,KAAK6M,EAAS,CAC/BvH,MAAOA,EACPhH,QAASrB,KAAKgO,IAClB,CAAC,CAAC,CACN,EACAc,gBAAiB,SAAwBzG,GACrC,IAAIuH,EAAW5P,KAAK6N,UAAUC,SAC9B9N,KAAKuO,qBAAqB,EAC1BqB,GAAY5P,KAAKwD,IAAIT,KAAK6M,EAAS,CAC/BvH,MAAOA,EACPhH,QAASrB,KAAKgO,IAClB,CAAC,CAAC,CACN,EACAe,OAAQ,WACJ/O,KAAKwD,IAAIhC,MAAM,EACfxB,KAAKuO,qBAAqB,CAC9B,EACAa,wBAAyB,SAAgC/G,EAAOsG,GAC5D,IAAIlD,EAAOzL,KACX6P,EAAW7H,SAAS8H,uBAAuB,EAY3C,OAXAvT,EAAEyB,KAAK2Q,EAAa,SAA2BrN,GAC3C,IACAvB,EAAU0L,EAAKsE,aAAa1H,EAAO/G,CAAU,EAC7CkC,EAAMlH,EAAEmP,EAAKoC,UAAUvM,WAAWvB,CAAO,CAAC,EAAE0H,KAAKiG,EAAKxQ,IAAKoE,CAAU,EAAEmG,KAAKiG,EAAK/O,IAAK8M,EAAKmC,UAAUtM,CAAU,CAAC,EAAEkN,SAAS/C,EAAK3J,QAAQR,WAAa,IAAMmK,EAAK3J,QAAQP,UAAU,EAClLsO,EAASjI,YAAYpE,EAAI,EAAE,CAC/B,CAAC,EACDxD,KAAK2B,WAAaA,EAAU,CACxB6E,UAAWxG,KAAK8B,QAAQH,UACxB0E,KAAMwJ,EACNvJ,QAAS+B,CACb,CAAC,EACM/L,EAAEuT,CAAQ,CACrB,EACAH,WAAY,SAAmBrH,EAAOsG,GAClC,OAAO3O,KAAK6N,UAAUQ,OAASrO,KAAK6N,UAAUQ,OAAO,CACjDhG,MAAOA,EACPsG,YAAaA,EACbtN,QAASrB,KAAKgO,IAClB,CAAC,EAAI,IACT,EACAwB,WAAY,SAAmBnH,EAAOsG,GAClC,OAAO3O,KAAK6N,UAAUO,OAASpO,KAAK6N,UAAUO,OAAO,CACjD/F,MAAOA,EACPsG,YAAaA,EACbtN,QAASrB,KAAKgO,IAClB,CAAC,EAAI,IACT,EACAO,qBAAsB,WAClBvO,KAAKiP,gBAAkB3S,EAAE,CAC7B,EACAyT,aAAc,SAAqB1H,EAAOnL,GACtC,OAAOX,EAAEe,SAASJ,CAAG,EAAIX,EAAEuC,MAAM,CAC7BkR,OAAQ3H,CACZ,EAAGnL,CAAG,EAAIA,CACd,EACA+S,OAAQ,SAAgB5H,GACpB,IAAIoD,EAAOzL,KAAMkQ,EAAW,CAAA,EAAOC,EAAa,CAAA,EAAOC,EAAW,EASlE,SAAS1K,EAAKiJ,GACNwB,IAGJA,EAAa,CAAA,EACbxB,GAAeA,GAAe,IAAItK,MAAM,EAAGoH,EAAKwC,KAAK,EACrDmC,EAAWzB,EAAYzI,OACvBuF,EAAKiD,WAAWrG,EAAOsG,CAAW,EAC9ByB,EAAW3E,EAAKwC,OAASxC,EAAK7F,OAC9B6F,EAAKtH,QAAQ,iBAAkBkE,CAAK,EAE5C,CAnBArI,KAAKqQ,OAAO,EACZrQ,KAAKqQ,OAAS,WACVH,EAAW,CAAA,EACXzE,EAAK4E,OAAS/T,EAAEwE,KAChB2K,EAAK7F,OAAS6F,EAAKtH,QAAQ,gBAAiBkE,CAAK,CACrD,EACArI,KAAK+N,OAAO1F,EAAO3C,EAcnB,SAAeiJ,GACXA,EAAcA,GAAe,GACzB,CAACuB,GAAYE,EAAW3E,EAAKwC,QAC7BxC,EAAK4E,OAAS/T,EAAEwE,KAChBsP,GAAYzB,EAAYzI,OACxBuF,EAAKuD,QAAQ3G,EAAOsG,EAAYtK,MAAM,EAAGoH,EAAKwC,MAAQmC,CAAQ,CAAC,EAC/D3E,EAAK7F,QAAS6F,EAAKtH,QAAQ,gBAAiBkE,CAAK,CAEzD,CAtB8B,EAC7B8H,GAAczK,EAAK,EAAE,CAsB1B,EACA2K,OAAQ/T,EAAEwE,KACVwP,MAAO,WACHtQ,KAAK+O,OAAO,EACZ/O,KAAKqQ,OAAO,EACZrQ,KAAKmE,QAAQ,SAAS,CAC1B,EACAoM,QAAS,WACL,OAAOvQ,KAAKwD,IAAIgJ,GAAG,QAAQ,CAC/B,EACAW,QAAS,WACLnN,KAAKwD,IAAMlH,EAAE,OAAO,CACxB,CACJ,CAAC,EACMmR,CAuBX,EAAE,EACE+C,EAAO,WACP,aACA,SAASA,EAAK5O,EAAGC,GACb,IAAI4J,EAAOzL,MACX4B,EAAIA,GAAK,IACFyE,MACH/J,EAAEiH,MAAM,kBAAkB,EAE9B1B,EAAI/C,MAAMkB,IAAI,EACdA,KAAKyQ,MAAQnU,EAAEsF,EAAEyE,IAAI,EACrBrG,KAAKqI,MAAQ,KACbrI,KAAK0Q,SAAWnU,EAAE8B,IAAIuD,EAAE8O,SACxB,SAA2BC,GACvB,IAAItK,EAAOoF,EAAKgF,MAAMG,KAAKD,EAAStK,IAAI,EAAEwK,MAAM,EAEhD,OADAF,EAAStK,KAAOA,EAAKH,OAASG,EAAO/J,EAAE,OAAO,EAAEwU,SAASrF,EAAKgF,KAAK,EAC5D,IAAIhD,EAAQkD,EAAU9O,CAAG,CACpC,CALmD,CAMvD,CAuHA,OAtHAtF,EAAEuC,MAAM0R,EAAK3M,UAAWW,EAAc,CAClCuM,mBAAoB,SAA2B/M,GAC3ChE,KAAKmE,QAAQ,oBAAqB7H,EAAE0H,EAAGgN,aAAa,CAAC,CACzD,EACAC,YAAa,SAAoBlN,EAAM1C,EAASsN,EAAa/I,GACzD5F,KAAKyQ,MAAMS,YAAYlR,KAAK8B,QAAQN,MAAOxB,KAAKmR,kBAAkB,CAAC,EACnEnR,KAAKmE,QAAQ,kBAAmB9C,EAASsN,EAAa/I,CAAK,CAC/D,EACAwL,WAAY,WACRpR,KAAKyQ,MAAMS,YAAYlR,KAAK8B,QAAQN,MAAOxB,KAAKmR,kBAAkB,CAAC,EACnEnR,KAAKmE,QAAQ,gBAAgB,CACjC,EACAkN,WAAY,WACRrR,KAAKmE,QAAQ/D,MAAMJ,KAAME,SAAS,CACtC,EACAiR,kBAAmB,WACf,OAAO5U,EAAEiC,MAAMwB,KAAK0Q,SACpB,SAAwBrP,GACpB,OAAOA,EAAQkP,QAAQ,CAC3B,CAH4C,CAIhD,EACAe,gBAAiB,WACb,OAAOtR,KAAKyQ,MAAMG,KAAK5Q,KAAKiD,UAAU1B,UAAU,CACpD,EACAgQ,cAAe,WACX,IAAIC,EAAcxR,KAAKyR,oBAAoB,EAC3CD,GAAeA,EAAYE,YAAY1R,KAAK8B,QAAQJ,MAAM,CAC9D,EACAiQ,eAAgB,SAAuBnO,GACnC,IACAoO,EAAQpO,EAAIxB,SAAS,EAAEE,IACvB2P,EAAWD,EAAQpO,EAAIsO,YAAY,CAAA,CAAI,EACvCC,EAAgB/R,KAAKyQ,MAAMuB,UAAU,EACrCC,EAAajS,KAAKyQ,MAAMyB,OAAO,EAAIC,SAASnS,KAAKyQ,MAAM1O,IAAI,YAAY,EAAG,EAAE,EAAIoQ,SAASnS,KAAKyQ,MAAM1O,IAAI,eAAe,EAAG,EAAE,EACxH6P,EAAQ,EACR5R,KAAKyQ,MAAMuB,UAAUD,EAAgBH,CAAK,EACnCK,EAAaJ,GACpB7R,KAAKyQ,MAAMuB,UAAUD,GAAiBF,EAAWI,EAAW,CAEpE,EACAnU,KAAM,WACF,IAAI2N,EAAOzL,KACXoS,EAAoB7V,EAAEuB,KAAKkC,KAAK+Q,mBAAoB/Q,IAAI,EAKxD,OAJAA,KAAKyQ,MAAMzL,GAAG,WAAYhF,KAAKiD,UAAU1B,WAAY6Q,CAAiB,EACtE7V,EAAEyB,KAAKgC,KAAK0Q,SAAU,SAASrP,GAC3BA,EAAQyD,OAAO,iBAAkB2G,EAAK4F,WAAY5F,CAAI,EAAE3G,OAAO,gBAAiB2G,EAAK4F,WAAY5F,CAAI,EAAE3G,OAAO,gBAAiB2G,EAAK4F,WAAY5F,CAAI,EAAE3G,OAAO,WAAY2G,EAAKwF,YAAaxF,CAAI,EAAE3G,OAAO,UAAW2G,EAAK2F,WAAY3F,CAAI,CAC5O,CAAC,EACMzL,IACX,EACAqS,OAAQ,WACJ,OAAOrS,KAAKyQ,MAAM6B,SAAStS,KAAK8B,QAAQL,IAAI,CAChD,EACAA,KAAM,WACFzB,KAAKyQ,MAAMjC,SAASxO,KAAK8B,QAAQL,IAAI,CACzC,EACA8Q,MAAO,WACHvS,KAAKyQ,MAAMiB,YAAY1R,KAAK8B,QAAQL,IAAI,EACxCzB,KAAKuR,cAAc,CACvB,EACAiB,qBAAsB,SAA8BvH,GAChDjL,KAAKyQ,MAAMtF,KAAK,MAAOF,CAAG,CAC9B,EACAwH,2BAA4B,SAAoCC,GAC5D,IACAC,EAAa3S,KAAKyR,oBAAoB,EACtCmB,EAAe5S,KAAKsR,gBAAgB,EAEpCuB,GADWF,EAAaC,EAAazU,MAAMwU,CAAU,EAAI,CAAC,GACpCD,EAGtB,MAAoB,CAAC,IADrBG,GADAA,GAAYA,EAAW,IAAMD,EAAa1M,OAAS,GAAK,GAClC,CAAC,EAAI0M,EAAa1M,OAAS,EAAI2M,GAC5B,KAAOD,EAAaE,GAAGD,CAAQ,CAC5D,EACAE,UAAW,SAAmBvB,GAC1BxR,KAAKuR,cAAc,GACfC,EAAcA,GAAeA,EAAYX,MAAM,KAC/CW,EAAYhD,SAASxO,KAAK8B,QAAQJ,MAAM,EACxC1B,KAAK2R,eAAeH,CAAW,EAEvC,EACAwB,kBAAmB,SAA2BxP,GAC1C,OAAOA,GAAOA,EAAI0C,OAASuH,EAAQgB,YAAYjL,CAAG,EAAI,IAC1D,EACAiO,oBAAqB,WACjB,IAAID,EAAcxR,KAAKsR,gBAAgB,EAAEhT,OAAO0B,KAAKiD,UAAUvB,MAAM,EAAEmP,MAAM,EAC7E,OAAOW,EAAYtL,OAASsL,EAAc,IAC9C,EACAyB,iBAAkB,WACd,IAAIzB,EAAcxR,KAAKsR,gBAAgB,EAAET,MAAM,EAC/C,OAAOW,EAAYtL,OAASsL,EAAc,IAC9C,EACAvB,OAAQ,SAAgB5H,GACpB,IAAI6K,EAAgB7K,IAAUrI,KAAKqI,MAKnC,OAJI6K,IACAlT,KAAKqI,MAAQA,EACb9L,EAAEyB,KAAKgC,KAAK0Q,SAGhB,SAAuBrP,GACnBA,EAAQ4O,OAAO5H,CAAK,CACxB,CALuC,GAEhC6K,CAIX,EACA1R,MAAO,WACHjF,EAAEyB,KAAKgC,KAAK0Q,SAGZ,SAAsBrP,GAClBA,EAAQiP,MAAM,CAClB,CALkC,EAClCtQ,KAAKqI,MAAQ,KACbrI,KAAKyQ,MAAMjC,SAASxO,KAAK8B,QAAQN,KAAK,CAI1C,EACA2L,QAAS,WACLnN,KAAKyQ,MAAMvL,IAAI,KAAK,EACpBlF,KAAKyQ,MAAQnU,EAAE,OAAO,EACtBC,EAAEyB,KAAKgC,KAAK0Q,SACZ,SAAwBrP,GACpBA,EAAQ8L,QAAQ,CACpB,CAHoC,CAIxC,CACJ,CAAC,EACMqD,CACX,EAAE,EACE2C,EAAc,WACd,aACA,IAAItV,EAAI2S,EAAK3M,UACb,SAASsP,IACL3C,EAAKpQ,MAAMJ,KAAM,GAAGqE,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,CAChD,CAqCA,OApCA3D,EAAEuC,MAAMqU,EAAYtP,UAAW2M,EAAK3M,UAAW,CAC3CpC,KAAM,WAEF,OADCzB,KAAKmR,kBAAkB,GAAKnR,KAAKoT,MAAM,EACjCvV,EAAE4D,KAAKrB,MAAMJ,KAAM,GAAGqE,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,CACzD,EACAqS,MAAO,WAEH,OADAvS,KAAKqT,MAAM,EACJxV,EAAE0U,MAAMnS,MAAMJ,KAAM,GAAGqE,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,CAC1D,EACA+Q,YAAa,WAMT,OALIjR,KAAKmR,kBAAkB,EACvBnR,KAAKqT,MAAM,EAEXrT,KAAKqS,OAAO,GAAKrS,KAAKoT,MAAM,EAEzBvV,EAAEoT,YAAY7Q,MAAMJ,KAAM,GAAGqE,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,CAChE,EACAkR,WAAY,WAMR,OALIpR,KAAKmR,kBAAkB,EACvBnR,KAAKqT,MAAM,EAEXrT,KAAKqS,OAAO,GAAKrS,KAAKoT,MAAM,EAEzBvV,EAAEuT,WAAWhR,MAAMJ,KAAM,GAAGqE,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,CAC/D,EACAsS,qBAAsB,SAA8BvH,GAEhD,OADAjL,KAAKyQ,MAAM1O,IAAY,QAARkJ,EAAgBjL,KAAK+B,IAAIY,IAAM3C,KAAK+B,IAAIc,GAAG,EACnDhF,EAAE2U,qBAAqBpS,MAAMJ,KAAM,GAAGqE,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,CACzE,EACAmT,MAAO,WACHrT,KAAKyQ,MAAM6C,KAAK,CACpB,EACAF,MAAO,WACHpT,KAAKyQ,MAAM1O,IAAI,UAAW,OAAO,CACrC,CACJ,CAAC,EACMoR,CACX,EAAE,EACEI,EAAY,WACZ,aACA,SAASA,EAAU3R,EAAGC,GAClB,IAA0B2R,EAAcC,EAAYC,EAAYC,EAAWC,EAAaC,EAAaC,EAAcC,EAAgBC,GACnIpS,EAAIA,GAAK,IACFV,OACH5E,EAAEiH,MAAM,eAAe,EAEtB3B,EAAER,MACH9E,EAAEiH,MAAM,cAAc,EAErB3B,EAAEqS,UACH3X,EAAEiH,MAAM,mBAAmB,EAE/B1B,EAAI/C,MAAMkB,IAAI,EACdA,KAAKiU,SAAWrS,EAAEqS,SAClBjU,KAAKkU,UAAY3X,EAAEY,SAASyE,EAAEsS,SAAS,EAAItS,EAAEsS,UAAY,EACzDlU,KAAKkB,MAAQU,EAAEV,MACflB,KAAKoB,KAAOQ,EAAER,KACdpB,KAAKmU,QAAU,CAAA,EACfnU,KAAKoU,OAAS,CAAA,EACdpU,KAAKkB,MAAMqH,SAAS,GAAKvI,KAAKqU,SAAS,EACvCrU,KAAKiL,IAAMjL,KAAKkB,MAAM8K,WAAW,EACjChM,KAAKsU,OAAO,EACZtU,KAAKoB,KAAKtD,KAAK,EAAEgH,OAAO,oBAAqB9E,KAAKuU,qBAAsBvU,IAAI,EAAE8E,OAAO,iBAAkB9E,KAAKwU,kBAAmBxU,IAAI,EAAE8E,OAAO,gBAAiB9E,KAAKyU,iBAAkBzU,IAAI,EAAE8E,OAAO,gBAAiB9E,KAAK0U,iBAAkB1U,IAAI,EAAE8E,OAAO,kBAAmB9E,KAAK2U,mBAAoB3U,IAAI,EAAE8E,OAAO,iBAAkB9E,KAAK4U,kBAAmB5U,IAAI,EAC7V6U,EAAY7R,EAAEhD,KAAM,WAAY,OAAQ,YAAY,EACpD8U,EAAY9R,EAAEhD,KAAM,aAAc,YAAY,EAC9CwT,EAAexQ,EAAEhD,KAAM,WAAY,SAAU,eAAe,EAC5DyT,EAAazQ,EAAEhD,KAAM,WAAY,SAAU,aAAa,EACxD0T,EAAa1Q,EAAEhD,KAAM,WAAY,aAAa,EAC9C2T,EAAY3Q,EAAEhD,KAAM,WAAY,OAAQ,YAAY,EACpD4T,EAAc5Q,EAAEhD,KAAM,WAAY,OAAQ,cAAc,EACxD6T,EAAc7Q,EAAEhD,KAAM,WAAY,SAAU,cAAc,EAC1D8T,EAAe9Q,EAAEhD,KAAM,WAAY,SAAU,eAAe,EAC5D+T,EAAiB/Q,EAAEhD,KAAM,gBAAiB,iBAAiB,EAC3DgU,EAAsBhR,EAAEhD,KAAM,gBAAiB,sBAAsB,EACrEA,KAAKkB,MAAMpD,KAAK,EAAEgH,OAAO,UAAW+P,EAAW7U,IAAI,EAAE8E,OAAO,UAAWgQ,EAAW9U,IAAI,EAAE8E,OAAO,aAAc0O,EAAcxT,IAAI,EAAE8E,OAAO,WAAY2O,EAAYzT,IAAI,EAAE8E,OAAO,WAAY4O,EAAY1T,IAAI,EAAE8E,OAAO,UAAW6O,EAAW3T,IAAI,EAAE8E,OAAO,YAAa8O,EAAa5T,IAAI,EAAE8E,OAAO,YAAa+O,EAAa7T,IAAI,EAAE8E,OAAO,aAAcgP,EAAc9T,IAAI,EAAE8E,OAAO,eAAgBiP,EAAgB/T,IAAI,EAAE8E,OAAO,oBAAqBkP,EAAqBhU,IAAI,EAAE8E,OAAO,iBAAkB9E,KAAK+U,kBAAmB/U,IAAI,CAClgB,CAiOA,OAhOAzD,EAAEuC,MAAMyU,EAAU1P,UAAW,CACzByQ,OAAQ,WACJ,IACAlM,EAASpI,KAAKkB,MAAMkH,QAAU9L,EAAE,OAAO,EACvC0Y,EAAQhV,KAAKoB,KAAKqP,OAASnU,EAAE,OAAO,EACpC8L,EAAOpD,GAAG,UAAW,SAAShB,GAC1B,IACAoQ,EAASpM,SAASiN,cAClBC,EAAWF,EAAMxI,GAAG4H,CAAM,EAC1Be,EAAuC,EAA3BH,EAAMI,IAAIhB,CAAM,EAAElO,OAC1B3J,EAAEC,OAAO,IAAM0Y,GAAYC,KAC3BnR,EAAG+G,eAAe,EAClB/G,EAAGqR,yBAAyB,EAC5B9Y,EAAEgD,MAAM,WACJ6I,EAAO0D,MAAM,CACjB,CAAC,EAET,CAAC,EACDkJ,EAAMhQ,GAAG,eAAgB,SAAShB,GAC9BA,EAAG+G,eAAe,CACtB,CAAC,CACL,EACAwJ,qBAAsB,SAA6BxQ,EAAMP,GACrDxD,KAAK2D,OAAOH,CAAG,CACnB,EACAoR,kBAAmB,WACf5U,KAAKsV,YAAY,CACrB,EACAX,mBAAoB,SAA2B5Q,EAAM1C,EAASsN,EAAa/I,GACvE5F,KAAKsV,YAAY,EACjBtV,KAAKiU,SAAS9P,QAAQ,SAAUwK,EAAa/I,EAAOvE,CAAO,CAC/D,EACAmT,kBAAmB,SAA0BzQ,EAAM1C,EAASgH,GACxDrI,KAAKiU,SAAS9P,QAAQ,eAAgBkE,EAAOhH,CAAO,CACxD,EACAoT,iBAAkB,SAAyB1Q,EAAM1C,EAASgH,GACtDrI,KAAKiU,SAAS9P,QAAQ,cAAekE,EAAOhH,CAAO,CACvD,EACAqT,iBAAkB,SAAyB3Q,EAAM1C,EAASgH,GACtDrI,KAAKiU,SAAS9P,QAAQ,eAAgBkE,EAAOhH,CAAO,CACxD,EACAkU,WAAY,WACRvV,KAAKwV,cAAc,GAAKxV,KAAKoB,KAAK6O,OAAOjQ,KAAKkB,MAAM+K,SAAS,CAAC,CAClE,EACAwJ,WAAY,WACJzV,KAAKkB,MAAMkL,8BAA8B,GACzCpM,KAAKiU,SAAS9P,QAAQ,SAAUnE,KAAKkB,MAAM+K,SAAS,CAAC,CAE7D,EACAyJ,cAAe,SAAsB3R,EAAMC,GACvC,IAAIwN,GACAA,EAAcxR,KAAKoB,KAAKqQ,oBAAoB,IAC5CzR,KAAK2D,OAAO6N,CAAW,GAAKxN,EAAG+G,eAAe,CAEtD,EACA4K,YAAa,SAAoB5R,EAAMC,GACnC,IAAIwN,GACAA,EAAcxR,KAAKoB,KAAKqQ,oBAAoB,GAC5CzR,KAAK2D,OAAO6N,CAAW,GAAKxN,EAAG+G,eAAe,GACvCyG,EAAcxR,KAAKoB,KAAK6R,iBAAiB,IAChDjT,KAAK4D,aAAa4N,CAAW,GAAKxN,EAAG+G,eAAe,CAE5D,EACA6K,YAAa,WACT5V,KAAKuS,MAAM,CACf,EACAsD,WAAY,WACR7V,KAAK8V,WAAW,CAAC,CAAC,CACtB,EACAC,aAAc,WACV/V,KAAK8V,WAAY,CAAC,CACtB,EACAE,aAAc,WACO,QAAbhW,KAAKiL,KAAiBjL,KAAKkB,MAAM0L,cAAc,GAC/C5M,KAAK4D,aAAa5D,KAAKoB,KAAK6R,iBAAiB,CAAC,CAEtD,EACAgD,cAAe,WACM,QAAbjW,KAAKiL,KAAiBjL,KAAKkB,MAAM0L,cAAc,GAC/C5M,KAAK4D,aAAa5D,KAAKoB,KAAK6R,iBAAiB,CAAC,CAEtD,EACAiD,gBAAiB,SAAwBC,EAAG9N,GACxCrI,KAAKwV,cAAcnN,CAAK,EAAIrI,KAAKoB,KAAK6O,OAAO5H,CAAK,EAAIrI,KAAKoB,KAAKI,MAAM,CAC1E,EACA4U,qBAAsB,WAClBpW,KAAKsV,YAAY,CACrB,EACAP,kBAAmB,SAA0BoB,EAAGlL,GACxCjL,KAAKiL,MAAQA,IACbjL,KAAKiL,IAAMA,EACXjL,KAAKoB,KAAKoR,qBAAqBvH,CAAG,EAE1C,EACAoL,cAAe,WACXrW,KAAKkV,SAAS,GAAKlV,KAAKyB,KAAK,CACjC,EACA+T,cAAe,SAAsBnN,GAEjC,OADAA,EAAQ9L,EAAEU,SAASoL,CAAK,EAAIA,EAAQrI,KAAKkB,MAAM+K,SAAS,GAAK,IAChD/F,QAAUlG,KAAKkU,SAChC,EACAoB,YAAa,WACT,IAAkE1Y,EAClE4U,EAAcxR,KAAKoB,KAAK6R,iBAAiB,EACzCxL,EAAOzH,KAAKoB,KAAK4R,kBAAkBxB,CAAW,EAC9C7S,EAAMqB,KAAKkB,MAAM4J,cAAc,EAC3BrD,CAAAA,GAASlL,EAAEM,cAAc8B,CAAG,GAAMqB,KAAKkB,MAAMqL,YAAY,EAOzDvM,KAAKkB,MAAMuI,UAAU,GANrBpB,EAAQJ,EAAMiC,eAAevL,CAAG,EAChC2X,EAAe/Z,EAAEQ,iBAAiBsL,CAAK,GAEvCzL,EADkB,IAAIoK,OAAO,OAASsP,EAAe,SAAU,GAAG,EAC1C9O,KAAKC,EAAK9I,GAAG,IAC5BqB,KAAKkB,MAAMqI,QAAQ5K,EAAM/B,EAAM,EAAE,EAIlD,EACA2Z,UAAW,WACP,OAAOvW,KAAKmU,OAChB,EACAqC,OAAQ,WACJxW,KAAKmU,QAAU,CAAA,CACnB,EACAsC,QAAS,WACLzW,KAAKmU,QAAU,CAAA,CACnB,EACAe,SAAU,WACN,OAAOlV,KAAKoU,MAChB,EACAC,SAAU,WACN,MAAIrU,CAAAA,CAAAA,KAAKkV,SAAS,GAEX,EAAKlV,CAAAA,KAAKuW,UAAU,GAAKvW,KAAKiU,SAAS7P,OAAO,QAAQ,IAGzDpE,KAAKoU,OAAS,CAAA,EACdpU,KAAKiU,SAAS9P,QAAQ,QAAQ,EACvB,GAEf,EACAuS,WAAY,WACR,MAAK1W,CAAAA,KAAKkV,SAAS,GAERlV,CAAAA,KAAKiU,SAAS7P,OAAO,MAAM,IAGlCpE,KAAKoU,OAAS,CAAA,EACdpU,KAAKuS,MAAM,EACXvS,KAAKiU,SAAS9P,QAAQ,MAAM,EACrB,CAAA,EAEf,EACAkO,OAAQ,WACJ,OAAOrS,KAAKoB,KAAKiR,OAAO,CAC5B,EACA5Q,KAAM,WAMF,OALKzB,KAAKqS,OAAO,GAAMrS,KAAKiU,SAAS7P,OAAO,MAAM,IAC9CpE,KAAKoB,KAAKK,KAAK,EACfzB,KAAKsV,YAAY,EACjBtV,KAAKiU,SAAS9P,QAAQ,MAAM,GAEzBnE,KAAKqS,OAAO,CACvB,EACAE,MAAO,WAOH,OANIvS,KAAKqS,OAAO,GAAK,CAACrS,KAAKiU,SAAS7P,OAAO,OAAO,IAC9CpE,KAAKoB,KAAKmR,MAAM,EAChBvS,KAAKkB,MAAMuI,UAAU,EACrBzJ,KAAKkB,MAAMkJ,gBAAgB,EAC3BpK,KAAKiU,SAAS9P,QAAQ,OAAO,GAE1B,CAACnE,KAAKqS,OAAO,CACxB,EACAsE,OAAQ,SAAgBhY,GACpBqB,KAAKkB,MAAMgL,SAAS3P,EAAEqB,MAAMe,CAAG,CAAC,CACpC,EACAiY,OAAQ,WACJ,OAAO5W,KAAKkB,MAAM+K,SAAS,CAC/B,EACAtI,OAAQ,SAAgB6N,GAChB/J,EAAOzH,KAAKoB,KAAK4R,kBAAkBxB,CAAW,EAClD,MAAA,EAAI/J,CAAAA,GAASzH,KAAKiU,SAAS7P,OAAO,SAAUqD,EAAKvK,GAAG,IAChD8C,KAAKkB,MAAMgL,SAASzE,EAAK9I,IAAK,CAAA,CAAI,EAClCqB,KAAKiU,SAAS9P,QAAQ,SAAUsD,EAAKvK,GAAG,EACxC8C,KAAKuS,MAAM,EACJ,GAGf,EACA3O,aAAc,SAAsB4N,GAChC,IACAnJ,EAAQrI,KAAKkB,MAAM+K,SAAS,EAC5BxE,EAAOzH,KAAKoB,KAAK4R,kBAAkBxB,CAAW,EAE9C,MAAA,EADU/J,CAAAA,GAAQY,IAAUZ,EAAK9I,KACjBqB,KAAKiU,SAAS7P,OAAO,eAAgBqD,EAAKvK,GAAG,IACzD8C,KAAKkB,MAAMgL,SAASzE,EAAK9I,GAAG,EAC5BqB,KAAKiU,SAAS9P,QAAQ,eAAgBsD,EAAKvK,GAAG,EACvC,GAGf,EACA4Y,WAAY,SAAoBpD,GAC5B,IACArK,EAAQrI,KAAKkB,MAAM+K,SAAS,EAC5B4K,EAAa7W,KAAKoB,KAAKqR,2BAA2BC,CAAK,EACvDjL,EAAOzH,KAAKoB,KAAK4R,kBAAkB6D,CAAU,EAC7CC,EAAUrP,EAAOA,EAAKvK,IAAM,KAE5B,MAAA,EADa8C,KAAKwV,cAAc,GAAKxV,KAAKoB,KAAK6O,OAAO5H,CAAK,GACvCrI,KAAKiU,SAAS7P,OAAO,eAAgB0S,CAAO,IAC5D9W,KAAKoB,KAAK2R,UAAU8D,CAAU,EAC1BpP,EACAzH,KAAKkB,MAAMiL,cAAc1E,EAAK9I,GAAG,GAEjCqB,KAAKkB,MAAMkJ,gBAAgB,EAC3BpK,KAAKsV,YAAY,GAErBtV,KAAKiU,SAAS9P,QAAQ,eAAgB2S,CAAO,EACtC,GAGf,EACA3J,QAAS,WACLnN,KAAKkB,MAAMiM,QAAQ,EACnBnN,KAAKoB,KAAK+L,QAAQ,CACtB,CACJ,CAAC,EACMoG,EACP,SAASvQ,EAAE+T,GACP,IAAIC,EAAU,GAAG3S,MAAMzF,KAAKsB,UAAW,CAAC,EACxC,OAAO,WACH,IAAID,EAAO,GAAGoE,MAAMzF,KAAKsB,SAAS,EAClC3D,EAAEyB,KAAKgZ,EAAS,SAASnR,GACrB,OAAOkR,EAAIlR,GAAQzF,MAAM2W,EAAK9W,CAAI,CACtC,CAAC,CACL,CACJ,CACJ,EAAE,EACF,CAAA,WACI,aACA,IAAIgX,EAAKvJ,EAAMsJ,EAuKf,SAASE,EAAOC,EAAM3X,GAClB2X,EAAKnZ,KAAK,WACN,IAAsBoZ,EAAlBhP,EAAS9L,EAAE0D,IAAI,GAClBoX,EAAYhP,EAAOX,KAAKiG,EAAK0J,SAAS,IAAM5X,EAAG4X,EAAWhP,CAAM,CACrE,CAAC,CACL,CAiDA,SAASiP,EAAUna,GAGfsG,EADUjH,EAAEoB,SAAST,CAAG,GAAKX,EAAEkB,UAAUP,CAAG,EAC5BZ,EAAEY,CAAG,EAAE2T,MAAM,EAAI,GACjC,OAAOrN,EAAI0C,OAAS1C,EAAM,IAC9B,CAjOAyT,EAAM3a,EAAEkD,GAAG4X,UACX1J,EAAO,CACH7L,IAAK,SACLyV,MAAO,WACPF,UAAW,cACf,EACAJ,EAAU,CACNO,WAAY,SAAoB3V,EAAG8O,GAC/B,IAAI7O,EAIJ,OAHA6O,EAAWnU,EAAEa,QAAQsT,CAAQ,EAAIA,EAAW,GAAGrM,MAAMzF,KAAKsB,UAAW,CAAC,EAEtE2B,EAAMd,GADNa,EAAIA,GAAK,IACG4V,UAAU,EACfxX,KAAKhC,KACZ,WACI,IAAIoK,EAAyB4M,EAAiCf,EAAU/S,EAAOE,EAAiBqW,EAChGlb,EAAEyB,KAAK0S,EAAU,SAASgH,GACtBA,EAAE/V,UAAY,CAAC,CAACC,EAAED,SACtB,CAAC,EACDyG,EAAS9L,EAAE0D,IAAI,EACf2X,EAAWrb,EAAEuF,EAAIkB,KAAK9B,OAAO,EAC7BkH,EAAQkP,EAAUzV,EAAET,IAAI,EACxB6T,EAAQqC,EAAUzV,EAAER,IAAI,EACxBwW,EAAyB,CAAA,IAAXhW,EAAET,MAAkB,CAACgH,EACnC0P,EAAyB,CAAA,IAAXjW,EAAER,MAAkB,CAAC4T,EACnC4C,IAAgBzP,EAoJ5B,SAA4BC,EAAQvG,GAChC,OAAOuG,EAAOlJ,MAAM,EAAEsP,SAAS3M,EAAIC,QAAQX,IAAI,EAAE2W,WAAW,EAAE/V,IAAIF,EAAIE,IAAIZ,IAAI,EAAEY,IAsBpF,SAA6ByB,GACzB,MAAO,CACHuU,qBAAsBvU,EAAIzB,IAAI,uBAAuB,EACrDiW,eAAgBxU,EAAIzB,IAAI,iBAAiB,EACzCS,gBAAiBgB,EAAIzB,IAAI,kBAAkB,EAC3Ce,gBAAiBU,EAAIzB,IAAI,kBAAkB,EAC3CkW,iBAAkBzU,EAAIzB,IAAI,mBAAmB,EAC7CmW,mBAAoB1U,EAAIzB,IAAI,qBAAqB,EACjDoW,iBAAkB3U,EAAIzB,IAAI,mBAAmB,EAC7CqW,eAAgB5U,EAAIzB,IAAI,iBAAiB,CAC7C,CACJ,EAjC4GqG,CAAM,CAAC,EAAEiQ,KAAK,WAAY,CAAA,CAAI,EAAEC,WAAW,8BAA8B,EAAEnN,KAAK,CACpLvH,aAAc,MACd2U,WAAY,QACZC,SAAU,CAAC,CACf,CAAC,CACL,EA1JuDpQ,EAAQvG,CAAG,GACtDgW,IAAgB7C,EAAQ1Y,EAAEuF,EAAIkB,KAAK3B,IAAI,EAAEW,IAAIF,EAAIE,IAAIX,IAAI,GACzD+G,GAASA,EAAMxJ,IAAI,EAAE,EACrByJ,EAwJZ,SAAmBA,EAAQvG,GACvBuG,EAAOX,KAAKiG,EAAK4J,MAAO,CACpBrM,IAAK7C,EAAO+C,KAAK,KAAK,EACtBvH,aAAcwE,EAAO+C,KAAK,cAAc,EACxCoN,WAAYnQ,EAAO+C,KAAK,YAAY,EACpCsN,MAAOrQ,EAAO+C,KAAK,OAAO,CAC9B,CAAC,EACD/C,EAAOoG,SAAS3M,EAAIC,QAAQZ,KAAK,EAAEiK,KAAK,CACpCvH,aAAc,MACd2U,WAAY,CAAA,CAChB,CAAC,EACD,IACKnQ,EAAO+C,KAAK,KAAK,GAAK/C,EAAO+C,KAAK,MAAO,MAAM,CACvC,CAAX,MAAOgL,IACT,OAAO/N,CACX,EAvK+BA,EAAQvG,CAAG,GAC1B+V,GAAeC,KACfF,EAAS5V,IAAIF,EAAIE,IAAId,OAAO,EAC5BmH,EAAOrG,IAAI6V,EAAc/V,EAAIE,IAAIb,MAAQW,EAAIE,IAAIU,eAAe,EAChE2F,EAAOsQ,KAAKf,CAAQ,EAAEgB,OAAO,EAAEpJ,QAAQqI,EAAczP,EAAQ,IAAI,EAAEsH,OAAOoI,EAAc7C,EAAQ,IAAI,GAExGyC,EAAkBI,EAAc1E,EAAc3C,EAC9CyD,EAAW,IAAI7Q,EAAS,CACpBE,GAAI8E,CACR,CAAC,EACDlH,EAAQ,IAAI+G,EAAM,CACd9G,KAAMgH,EACNjH,MAAOkH,CACX,EAAGvG,CAAG,EACNT,EAAO,IAAIqW,EAAgB,CACvBpR,KAAM2O,EACNtE,SAAUA,CACd,EAAG7O,CAAG,EACNuV,EAAY,IAAI7D,EAAU,CACtBrS,MAAOA,EACPE,KAAMA,EACN6S,SAAUA,EACVC,UAAWtS,EAAEsS,SACjB,EAAGrS,CAAG,EACNuG,EAAOX,KAAKiG,EAAK7L,IAAKA,CAAG,EACzBuG,EAAOX,KAAKiG,EAAK0J,UAAWA,CAAS,CACzC,CAzCuB,CA0C3B,EACAb,UAAW,WACP,IAAIpC,EAIJ,OAHA+C,EAAOlX,KAAK6Q,MAAM,EAAG,SAAS+H,GAC1BzE,EAAUyE,EAAErC,UAAU,CAC1B,CAAC,EACMpC,CACX,EACAqC,OAAQ,WAIJ,OAHAU,EAAOlX,KAAM,SAAS4Y,GAClBA,EAAEpC,OAAO,CACb,CAAC,EACMxW,IACX,EACAyW,QAAS,WAIL,OAHAS,EAAOlX,KAAM,SAAS4Y,GAClBA,EAAEnC,QAAQ,CACd,CAAC,EACMzW,IACX,EACAkV,SAAU,WACN,IAAId,EAIJ,OAHA8C,EAAOlX,KAAK6Q,MAAM,EAAG,SAAS+H,GAC1BxE,EAASwE,EAAE1D,SAAS,CACxB,CAAC,EACMd,CACX,EACAC,SAAU,WAIN,OAHA6C,EAAOlX,KAAM,SAAS4Y,GAClBA,EAAEvE,SAAS,CACf,CAAC,EACMrU,IACX,EACA0W,WAAY,WAIR,OAHAQ,EAAOlX,KAAM,SAAS4Y,GAClBA,EAAElC,WAAW,CACjB,CAAC,EACM1W,IACX,EACAqS,OAAQ,WACJ,IAAI5Q,EAIJ,OAHAyV,EAAOlX,KAAK6Q,MAAM,EAAG,SAAS+H,GAC1BnX,EAAOmX,EAAEvG,OAAO,CACpB,CAAC,EACM5Q,CACX,EACAA,KAAM,WAIF,OAHAyV,EAAOlX,KAAM,SAAS4Y,GAClBA,EAAEnX,KAAK,CACX,CAAC,EACMzB,IACX,EACAuS,MAAO,WAIH,OAHA2E,EAAOlX,KAAM,SAAS4Y,GAClBA,EAAErG,MAAM,CACZ,CAAC,EACMvS,IACX,EACA2D,OAAQ,SAAgBL,GACpB,IAAIuV,EAAU,CAAA,EAAOrV,EAAMlH,EAAEgH,CAAE,EAI/B,OAHA4T,EAAOlX,KAAK6Q,MAAM,EAAG,SAAS+H,GAC1BC,EAAUD,EAAEjV,OAAOH,CAAG,CAC1B,CAAC,EACMqV,CACX,EACAjV,aAAc,SAAsBN,GAChC,IAAIuV,EAAU,CAAA,EAAOrV,EAAMlH,EAAEgH,CAAE,EAI/B,OAHA4T,EAAOlX,KAAK6Q,MAAM,EAAG,SAAS+H,GAC1BC,EAAUD,EAAEhV,aAAaJ,CAAG,CAChC,CAAC,EACMqV,CACX,EACA/C,WAAY,SAAoBpD,GAC5B,IAAImG,EAAU,CAAA,EAId,OAHA3B,EAAOlX,KAAK6Q,MAAM,EAAG,SAAS+H,GAC1BC,EAAUD,EAAE9C,WAAWpD,CAAK,CAChC,CAAC,EACMmG,CACX,EACAla,IAAK,SAAama,GACd,IAAIzQ,EACJ,OAAKnI,UAAUgG,QAMXgR,EAAOlX,KAAM,SAAS4Y,GAClBA,EAAEjC,OAAOmC,CAAM,CACnB,CAAC,EACM9Y,OARPkX,EAAOlX,KAAK6Q,MAAM,EAAG,SAAS+H,GAC1BvQ,EAAQuQ,EAAEhC,OAAO,CACrB,CAAC,EACMvO,EAOf,EACA8E,QAAS,WAKL,OAJA+J,EAAOlX,KAAM,SAASoX,EAAWhP,GA2DzC,IAAgBA,EACHuP,EACT9V,GAFYuG,EA1DGA,GA4DFX,KAAKiG,EAAK7L,GAAG,EAC1B8V,EAAWvP,EAAOuQ,OAAO,EAAEra,OAAOuD,EAAIoB,UAAUhC,OAAO,EACvD1E,EAAEyB,KAAKoK,EAAOX,KAAKiG,EAAK4J,KAAK,EAAG,SAAS3Y,EAAKD,GAC1CnC,EAAEiB,YAAYmB,CAAG,EAAIyJ,EAAOkQ,WAAW5Z,CAAG,EAAI0J,EAAO+C,KAAKzM,EAAKC,CAAG,CACtE,CAAC,EACDyJ,EAAO0P,WAAWpK,EAAK0J,SAAS,EAAEU,WAAWpK,EAAK7L,GAAG,EAAEiW,WAAWpK,EAAKvC,IAAI,EAAEuG,YAAY7P,EAAIC,QAAQZ,KAAK,EACtGyW,EAASzR,SACTkC,EAAO2Q,OAAO,EAAE1P,YAAYsO,CAAQ,EACpCA,EAASvK,OAAO,GAnEZgK,EAAUjK,QAAQ,CACtB,CAAC,EACMnN,IACX,CACJ,EACA1D,EAAEkD,GAAG4X,UAAY,SAASvR,GACtB,OAAImR,EAAQnR,GACDmR,EAAQnR,GAAQzF,MAAMJ,KAAM,GAAGqE,MAAMzF,KAAKsB,UAAW,CAAC,CAAC,EAEvD8W,EAAQO,WAAWnX,MAAMJ,KAAME,SAAS,CAEvD,EACA5D,EAAEkD,GAAG4X,UAAU4B,WAAa,WAExB,OADA1c,EAAEkD,GAAG4X,UAAYH,EACVjX,IACX,CA6DH,EAAE,CACP,CAAC"}