{"version":3,"file":"main.bundle.js","sources":["../../../Static/src/js/polyfill-forEach.js","../../../Static/src/js/polyfill-promise.js","../../../Static/src/js/polyfill-remove.js","../../../Static/src/js/polyfill-classlist.js","../../../Static/src/js/jquery.waypoints.js","../../../Static/src/js/inview.js","../../../Static/src/js/balast-water.js","../../../Static/src/js/nav.js","../../../Static/src/js/map.js","../../../Static/src/js/expanding-contact.js","../../../Static/src/js/course-datepicker.js","../../../Static/src/js/add-links.js","../../../Static/src/js/favourite-list.js","../../../Static/src/js/course-list.js","../../../Static/src/js/scroll-to.js","../../../Static/src/js/set-select.js","../../../Static/src/js/latest-visits.js","../../../Static/src/js/process.js","../../../Static/src/js/easter.js","../../../Static/src/js/filter-js.js","../../../Static/src/js/active-filters-front-page.js","../../../Static/src/js/bg-video.js","../../../Static/src/js/bg-video-stream.js","../../../Static/src/js/captchaToken.js","../../../Static/src/js/helpers.js","../../../Static/src/js/hero-video.js","../../../Static/src/js/sticky-anchor-link.js","../../../Static/src/js/cl-jump-to.js","../../../Static/src/js/tabs.js","../../../Static/src/js/download-list.js","../../../Static/src/js/copy-to-clipboard.js","../../../Static/src/js/obfuscator.js","../../../Static/src/js/articleList__item.js","../../../Static/src/js/ww-expand-block.js","../../../Static/src/js/scroll-animation.js","../../../Static/src/js/teaser-gallery.js","../../../Static/src/js/mega-list.js","../../../Static/src/js/custom-select.js","../../../Static/src/js/catalogue-download.js","../../../Static/src/js/product-page.js","../../../Static/src/js/language-switcher.js","../../../Static/src/js/image-gallery.js","../../../Static/src/js/imo2020.js","../../../Static/src/js/accordion.js","../../../Static/src/js/tabs-block.js","../../../Static/src/js/insurance-block.js","../../../Static/src/js/recaptcha-links.js","../../../Static/src/js/refrigerant-calculator-helpers.js","../../../Static/src/js/refrigerant-calculator.js"],"sourcesContent":["(function() {\r\n if (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n }\r\n}());","// UMD header\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(factory);\r\n } else if (typeof exports === 'object') {\r\n module.exports = factory();\r\n } else {\r\n root.ayepromise = factory();\r\n }\r\n}(this, function () {\r\n 'use strict';\r\n\r\n var ayepromise = {};\r\n\r\n /* Wrap an arbitrary number of functions and allow only one of them to be\r\n executed and only once */\r\n var once = function () {\r\n var wasCalled = false;\r\n\r\n return function wrapper(wrappedFunction) {\r\n return function () {\r\n if (wasCalled) {\r\n return;\r\n }\r\n wasCalled = true;\r\n wrappedFunction.apply(null, arguments);\r\n };\r\n };\r\n };\r\n\r\n var getThenableIfExists = function (obj) {\r\n // Make sure we only access the accessor once as required by the spec\r\n var then = obj && obj.then;\r\n\r\n if (typeof obj === \"object\" && typeof then === \"function\") {\r\n // Bind function back to it's object (so lousy 'this' will work)\r\n return function() { return then.apply(obj, arguments); };\r\n }\r\n };\r\n\r\n var aThenHandler = function (onFulfilled, onRejected) {\r\n var defer = ayepromise.defer();\r\n\r\n var doHandlerCall = function (func, value) {\r\n setTimeout(function () {\r\n var returnValue;\r\n try {\r\n returnValue = func(value);\r\n } catch (e) {\r\n defer.reject(e);\r\n return;\r\n }\r\n\r\n if (returnValue === defer.promise) {\r\n defer.reject(new TypeError('Cannot resolve promise with itself'));\r\n } else {\r\n defer.resolve(returnValue);\r\n }\r\n }, 1);\r\n };\r\n\r\n var callFulfilled = function (value) {\r\n if (onFulfilled && onFulfilled.call) {\r\n doHandlerCall(onFulfilled, value);\r\n } else {\r\n defer.resolve(value);\r\n }\r\n };\r\n\r\n var callRejected = function (value) {\r\n if (onRejected && onRejected.call) {\r\n doHandlerCall(onRejected, value);\r\n } else {\r\n defer.reject(value);\r\n }\r\n };\r\n\r\n return {\r\n promise: defer.promise,\r\n handle: function (state, value) {\r\n if (state === FULFILLED) {\r\n callFulfilled(value);\r\n } else {\r\n callRejected(value);\r\n }\r\n }\r\n };\r\n };\r\n\r\n // States\r\n var PENDING = 0,\r\n FULFILLED = 1,\r\n REJECTED = 2;\r\n\r\n ayepromise.defer = function () {\r\n var state = PENDING,\r\n outcome,\r\n thenHandlers = [];\r\n\r\n var doSettle = function (settledState, value) {\r\n state = settledState;\r\n // Persist for handlers registered after settling\r\n outcome = value;\r\n\r\n thenHandlers.forEach(function (then) {\r\n then.handle(state, outcome);\r\n });\r\n\r\n // Discard all references to handlers to be garbage collected\r\n thenHandlers = null;\r\n };\r\n\r\n var doFulfill = function (value) {\r\n doSettle(FULFILLED, value);\r\n };\r\n\r\n var doReject = function (error) {\r\n doSettle(REJECTED, error);\r\n };\r\n\r\n var registerThenHandler = function (onFulfilled, onRejected) {\r\n var thenHandler = aThenHandler(onFulfilled, onRejected);\r\n\r\n if (state === PENDING) {\r\n thenHandlers.push(thenHandler);\r\n } else {\r\n thenHandler.handle(state, outcome);\r\n }\r\n\r\n // Allow chaining of calls: something().then(...).then(...)\r\n return thenHandler.promise;\r\n };\r\n\r\n var safelyResolveThenable = function (thenable) {\r\n // Either fulfill, reject or reject with error\r\n var onceWrapper = once();\r\n try {\r\n thenable(\r\n onceWrapper(transparentlyResolveThenablesAndSettle),\r\n onceWrapper(doReject)\r\n );\r\n } catch (e) {\r\n onceWrapper(doReject)(e);\r\n }\r\n };\r\n\r\n var transparentlyResolveThenablesAndSettle = function (value) {\r\n var thenable;\r\n\r\n try {\r\n thenable = getThenableIfExists(value);\r\n } catch (e) {\r\n doReject(e);\r\n return;\r\n }\r\n\r\n if (thenable) {\r\n safelyResolveThenable(thenable);\r\n } else {\r\n doFulfill(value);\r\n }\r\n };\r\n\r\n var onceWrapper = once();\r\n return {\r\n resolve: onceWrapper(transparentlyResolveThenablesAndSettle),\r\n reject: onceWrapper(doReject),\r\n promise: {\r\n then: registerThenHandler,\r\n fail: function (onRejected) {\r\n return registerThenHandler(null, onRejected);\r\n }\r\n }\r\n };\r\n };\r\n\r\n return ayepromise;\r\n}));","(function (arr) {\r\n arr.forEach(function (item) {\r\n if (item.hasOwnProperty('remove')) {\r\n return;\r\n }\r\n Object.defineProperty(item, 'remove', {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true,\r\n value: function remove() {\r\n this.parentNode.removeChild(this);\r\n }\r\n });\r\n });\r\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);","(function() {\r\n var regExp = function(name) {\r\n return new RegExp('(^| )'+ name +'( |$)');\r\n };\r\n var forEach = function(list, fn, scope) {\r\n for (var i = 0; i < list.length; i++) {\r\n fn.call(scope, list[i]);\r\n }\r\n };\r\n\r\n function ClassList(element) {\r\n this.element = element;\r\n }\r\n\r\n ClassList.prototype = {\r\n add: function() {\r\n forEach(arguments, function(name) {\r\n if (!this.contains(name)) {\r\n this.element.className += this.element.className.length > 0 ? ' ' + name : name;\r\n }\r\n }, this);\r\n },\r\n remove: function() {\r\n forEach(arguments, function(name) {\r\n this.element.className =\r\n this.element.className.replace(regExp(name), '');\r\n }, this);\r\n },\r\n toggle: function(name) {\r\n return this.contains(name)\r\n ? (this.remove(name), false) : (this.add(name), true);\r\n },\r\n contains: function(name) {\r\n return regExp(name).test(this.element.className);\r\n },\r\n replace: function(oldName, newName) {\r\n this.remove(oldName), this.add(newName);\r\n }\r\n };\r\n\r\n if (!('classList' in Element.prototype)) {\r\n Object.defineProperty(Element.prototype, 'classList', {\r\n get: function() {\r\n return new ClassList(this);\r\n }\r\n });\r\n }\r\n\r\n if (window.DOMTokenList && DOMTokenList.prototype.replace == null) {\r\n DOMTokenList.prototype.replace = ClassList.prototype.replace;\r\n }\r\n})();","/*!\r\nWaypoints - 4.0.1\r\nCopyright © 2011-2016 Caleb Troughton\r\nLicensed under the MIT license.\r\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\r\n*/\r\n(function() {\r\n 'use strict'\r\n\r\n var keyCounter = 0\r\n var allWaypoints = {}\r\n\r\n /* http://imakewebthings.com/waypoints/api/waypoint */\r\n function Waypoint(options) {\r\n if (!options) {\r\n throw new Error('No options passed to Waypoint constructor')\r\n }\r\n if (!options.element) {\r\n throw new Error('No element option passed to Waypoint constructor')\r\n }\r\n if (!options.handler) {\r\n throw new Error('No handler option passed to Waypoint constructor')\r\n }\r\n\r\n this.key = 'waypoint-' + keyCounter\r\n this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)\r\n this.element = this.options.element\r\n this.adapter = new Waypoint.Adapter(this.element)\r\n this.callback = options.handler\r\n this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\r\n this.enabled = this.options.enabled\r\n this.triggerPoint = null\r\n this.group = Waypoint.Group.findOrCreate({\r\n name: this.options.group,\r\n axis: this.axis\r\n })\r\n this.context = Waypoint.Context.findOrCreateByElement(this.options.context)\r\n\r\n if (Waypoint.offsetAliases[this.options.offset]) {\r\n this.options.offset = Waypoint.offsetAliases[this.options.offset]\r\n }\r\n this.group.add(this)\r\n this.context.add(this)\r\n allWaypoints[this.key] = this\r\n keyCounter += 1\r\n }\r\n\r\n /* Private */\r\n Waypoint.prototype.queueTrigger = function(direction) {\r\n this.group.queueTrigger(this, direction)\r\n }\r\n\r\n /* Private */\r\n Waypoint.prototype.trigger = function(args) {\r\n if (!this.enabled) {\r\n return\r\n }\r\n if (this.callback) {\r\n this.callback.apply(this, args)\r\n }\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/destroy */\r\n Waypoint.prototype.destroy = function() {\r\n this.context.remove(this)\r\n this.group.remove(this)\r\n delete allWaypoints[this.key]\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/disable */\r\n Waypoint.prototype.disable = function() {\r\n this.enabled = false\r\n return this\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/enable */\r\n Waypoint.prototype.enable = function() {\r\n this.context.refresh()\r\n this.enabled = true\r\n return this\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/next */\r\n Waypoint.prototype.next = function() {\r\n return this.group.next(this)\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/previous */\r\n Waypoint.prototype.previous = function() {\r\n return this.group.previous(this)\r\n }\r\n\r\n /* Private */\r\n Waypoint.invokeAll = function(method) {\r\n var allWaypointsArray = []\r\n for (var waypointKey in allWaypoints) {\r\n allWaypointsArray.push(allWaypoints[waypointKey])\r\n }\r\n for (var i = 0, end = allWaypointsArray.length; i < end; i++) {\r\n allWaypointsArray[i][method]()\r\n }\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/destroy-all */\r\n Waypoint.destroyAll = function() {\r\n Waypoint.invokeAll('destroy')\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/disable-all */\r\n Waypoint.disableAll = function() {\r\n Waypoint.invokeAll('disable')\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/enable-all */\r\n Waypoint.enableAll = function() {\r\n Waypoint.Context.refreshAll()\r\n for (var waypointKey in allWaypoints) {\r\n allWaypoints[waypointKey].enabled = true\r\n }\r\n return this\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/refresh-all */\r\n Waypoint.refreshAll = function() {\r\n Waypoint.Context.refreshAll()\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/viewport-height */\r\n Waypoint.viewportHeight = function() {\r\n return window.innerHeight || document.documentElement.clientHeight\r\n }\r\n\r\n /* Public */\r\n /* http://imakewebthings.com/waypoints/api/viewport-width */\r\n Waypoint.viewportWidth = function() {\r\n return document.documentElement.clientWidth\r\n }\r\n\r\n Waypoint.adapters = []\r\n\r\n Waypoint.defaults = {\r\n context: window,\r\n continuous: true,\r\n enabled: true,\r\n group: 'default',\r\n horizontal: false,\r\n offset: 0\r\n }\r\n\r\n Waypoint.offsetAliases = {\r\n 'bottom-in-view': function() {\r\n return this.context.innerHeight() - this.adapter.outerHeight()\r\n },\r\n 'right-in-view': function() {\r\n return this.context.innerWidth() - this.adapter.outerWidth()\r\n }\r\n }\r\n\r\n window.Waypoint = Waypoint\r\n}())","(function() {\r\n function noop() {}\r\n\r\n var Waypoint = window.Waypoint\r\n\r\n /* http://imakewebthings.com/waypoints/shortcuts/inview */\r\n function Inview(options) {\r\n this.options = Waypoint.Adapter.extend({}, Inview.defaults, options)\r\n this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\r\n this.waypoints = []\r\n this.element = this.options.element\r\n this.createWaypoints()\r\n }\r\n\r\n /* Private */\r\n Inview.prototype.createWaypoints = function() {\r\n var configs = {\r\n vertical: [{\r\n down: 'enter',\r\n up: 'exited',\r\n offset: '100%'\r\n }, {\r\n down: 'entered',\r\n up: 'exit',\r\n offset: 'bottom-in-view'\r\n }, {\r\n down: 'exit',\r\n up: 'entered',\r\n offset: 0\r\n }, {\r\n down: 'exited',\r\n up: 'enter',\r\n offset: function() {\r\n return -this.adapter.outerHeight()\r\n }\r\n }],\r\n horizontal: [{\r\n right: 'enter',\r\n left: 'exited',\r\n offset: '100%'\r\n }, {\r\n right: 'entered',\r\n left: 'exit',\r\n offset: 'right-in-view'\r\n }, {\r\n right: 'exit',\r\n left: 'entered',\r\n offset: 0\r\n }, {\r\n right: 'exited',\r\n left: 'enter',\r\n offset: function() {\r\n return -this.adapter.outerWidth()\r\n }\r\n }]\r\n }\r\n\r\n for (var i = 0, end = configs[this.axis].length; i < end; i++) {\r\n var config = configs[this.axis][i]\r\n this.createWaypoint(config)\r\n }\r\n }\r\n\r\n /* Private */\r\n Inview.prototype.createWaypoint = function(config) {\r\n var self = this\r\n this.waypoints.push(new Waypoint({\r\n context: this.options.context,\r\n element: this.options.element,\r\n enabled: this.options.enabled,\r\n handler: (function(config) {\r\n return function(direction) {\r\n self.options[config[direction]].call(self, direction)\r\n }\r\n }(config)),\r\n offset: config.offset,\r\n horizontal: this.options.horizontal\r\n }))\r\n }\r\n\r\n /* Public */\r\n Inview.prototype.destroy = function() {\r\n for (var i = 0, end = this.waypoints.length; i < end; i++) {\r\n this.waypoints[i].destroy()\r\n }\r\n this.waypoints = []\r\n }\r\n\r\n Inview.prototype.disable = function() {\r\n for (var i = 0, end = this.waypoints.length; i < end; i++) {\r\n this.waypoints[i].disable()\r\n }\r\n }\r\n\r\n Inview.prototype.enable = function() {\r\n for (var i = 0, end = this.waypoints.length; i < end; i++) {\r\n this.waypoints[i].enable()\r\n }\r\n }\r\n\r\n Inview.defaults = {\r\n context: window,\r\n enabled: true,\r\n enter: noop,\r\n entered: noop,\r\n exit: noop,\r\n exited: noop\r\n }\r\n\r\n Waypoint.Inview = Inview\r\n}())\r\n","(function() {\r\n let listElement = document.querySelector(\".balast-water__header-anchor\");\r\n let scrollLinkClass = \"scroll-to\";\r\n let links = [\r\n {\r\n text: \"Clean and Monitor\",\r\n id: \"clean-and-monitor\",\r\n selector: \".steps-block\"\r\n },\r\n {\r\n text: \"Contact us\",\r\n id: \"contact\",\r\n selector: \".one, .editorial\"\r\n },\r\n {\r\n text: \"Expert knowledge\",\r\n id: \"expert-knowledge\",\r\n selector: \".benefits-block ~ .teaser-list\"\r\n },\r\n {\r\n text: \"Related articles\",\r\n id: \"related-articles\",\r\n selector: \".external-links, .preview-block\"\r\n }\r\n ];\r\n\r\n if(listElement) {\r\n links.forEach(link => {\r\n let element = document.querySelector(link.selector);\r\n\r\n if (element) {\r\n let li = document.createElement(\"li\");\r\n let a = document.createElement(\"a\");\r\n\r\n element.id = link.id;\r\n\r\n a.classList.add(scrollLinkClass);\r\n a.href = \"#\" + link.id;\r\n a.innerText = link.text;\r\n\r\n li.classList.add(\"balast-water__header-anchor-item\");\r\n\r\n li.appendChild(a);\r\n listElement.appendChild(li);\r\n }\r\n });\r\n }\r\n}());","(function() {\r\n const form = document.querySelector(\".header__top-column form\");\r\n let isFormActive = false;\r\n let html = document.querySelector('html');\r\n let input = null;\r\n let button = null;\r\n let buttonMobile = null;\r\n\r\n if(form) {\r\n form.setAttribute(\"role\", \"search\");\r\n\r\n input = form.querySelector(\"input\");\r\n button = form.querySelector(\"button\");\r\n buttonMobile = document.querySelector(\".header__top-button--mobile\");\r\n\r\n button.addEventListener(\"click\", handleClick);\r\n buttonMobile ? buttonMobile.addEventListener(\"click\", handleClick) : null;\r\n input.addEventListener(\"blur\", handleBlur);\r\n input.addEventListener(\"focus\", handleFocus);\r\n }\r\n\r\n function handleClick(e) {\r\n e.stopPropagation();\r\n\r\n if(e.target != buttonMobile) {\r\n if(isFormActive) {\r\n form.submit();\r\n } else {\r\n isFormActive = true;\r\n input.setAttribute(\"aria-hidden\", !isFormActive);\r\n form.classList.add(\"active\");\r\n input.focus();\r\n document.querySelector(\".header__bottom-list-item\").classList.remove(\"active\");\r\n }\r\n } else {\r\n form.classList.toggle(\"active\");\r\n html.classList.remove(\"menu_open\");\r\n }\r\n }\r\n\r\n function handleBlur(e) {\r\n if(e.relatedTarget !== button) {\r\n form.classList.remove(\"active\");\r\n form.classList.remove(\"has-focus\");\r\n isFormActive = false;\r\n input.setAttribute(\"aria-hidden\", !isFormActive);\r\n }\r\n }\r\n\r\n function handleFocus(e) {\r\n form.classList.add(\"has-focus\");\r\n }\r\n}());","/*\r\n* Old C&L and event info page\r\n*/\r\nwindow.GoogleMapsApp = (function (window, document, undefined) {\r\n\r\n // Include Google Maps API\r\n function includeGoogleMapsAPI() {\r\n var js,\r\n fjs = document.getElementsByTagName('script')[0];\r\n\r\n if (!document.getElementById('gmap-api')) {\r\n js = document.createElement('script');\r\n js.id = 'gmap-api';\r\n js.setAttribute('async', '');\r\n js.src = \"//maps.googleapis.com/maps/api/js?key=AIzaSyAURrPQGSKNcWhRPaO8UVq4A5EZ3V6QAXw&callback=window.GoogleMapsApp.startMapping\";\r\n fjs.parentNode.insertBefore(js, fjs);\r\n }\r\n };\r\n\r\n var $mapCanvas = $('.wilhelmsen-map');\r\n if ($mapCanvas.length) {\r\n includeGoogleMapsAPI();\r\n }\r\n\r\n var startMapping = function () {\r\n $mapCanvas.each(function (i) {\r\n initMap($mapCanvas[i]);\r\n })\r\n }\r\n\r\n var wilhelmsenMapStyles = {\r\n simple: [\r\n {\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#d1dde0\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.icon\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#616161\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f5f5f5\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.land_parcel\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#bdbdbd\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.neighborhood\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#eeeeee\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#757575\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.park\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#e5e5e5\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.park\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#9e9e9e\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"labels.icon\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.arterial\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#757575\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#dadada\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#616161\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.local\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#9e9e9e\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.line\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#e5e5e5\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.station\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#eeeeee\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f3f6f7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#9e9e9e\"\r\n }\r\n ]\r\n }\r\n ],\r\n detailed: [\r\n {\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#d1dde0\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.icon\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"on\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#666666\"\r\n }\r\n ]\r\n },\r\n {\r\n \"elementType\": \"labels.text.stroke\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.land_parcel\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.land_parcel\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#bdbdbd\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"administrative.neighborhood\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#bbd2d7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"labels.text\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#757575\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.park\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#bbd2d7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.park\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#9e9e9e\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#ffffff\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.arterial\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#34525a\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#abc0c5\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#666666\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.local\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#abc0c5\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.line\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#abc0c5\"\r\n }\r\n ]\r\n },\r\n\r\n {\r\n \"featureType\": \"transit.station\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#bbd2d7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"geometry\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f3f6f7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels.text\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels.text.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#9e9e9e\"\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n\r\n function initMap(mapCanvas) {\r\n var markers = new Array();\r\n\r\n var dotColor = \"#e15f55\"; // DA3A2F\r\n var dotColorActive = \"#29588C\";\r\n\r\n // get data from the html attr\r\n var mapType = $(mapCanvas).data('maptype');\r\n var mapLocations = $(mapCanvas).data('locations');\r\n var showBoxList = $(mapCanvas).data('show-box-list') || false;\r\n var appendMarkersToID = $(mapCanvas).data('append-markers-to-id') || \"markers\";\r\n var useClustering = $(mapCanvas).data('use-clustering') || false;\r\n\r\n\r\n var map = new google.maps.Map(mapCanvas, {\r\n center: { lat: 0, lng: 0 },\r\n zoom: 2,\r\n mapTypeControl: false,\r\n disableDefaultUI: true,\r\n backgroundColor: 'none',\r\n styles: wilhelmsenMapStyles[mapType]\r\n });\r\n\r\n var bounds = new google.maps.LatLngBounds();\r\n\r\n var infowindow = new google.maps.InfoWindow({\r\n maxWidth: 300\r\n });\r\n\r\n var locations = mapLocations;\r\n\r\n var icon = {\r\n // path: \"M 12, 12 m -9, 0 a 9,9 0 1,0 18,0 a 9,9 0 1,0 -18,0\",\r\n path: \"M13.7,2.3C12.1,0.8,10.3,0,8,0S3.9,0.8,2.3,2.3C0.7,3.8,0,5.7,0,7.9c0,1.3,0.7,3.5,2,6.6s2.7,5.9,4,8.4 s2,3.8,2,3.7c0.2-0.4,0.5-0.9,0.9-1.6s1-1.9,1.9-3.7c0.9-1.8,1.7-3.5,2.4-5c0.7-1.5,1.3-3.1,1.9-4.7S16,8.7,16,7.9 C16,5.7,15.2,3.9,13.7,2.3z M9.7,9.6c-0.5,0.5-1.1,0.7-1.7,0.7s-1.3-0.2-1.7-0.7S5.6,8.5,5.6,7.9s0.2-1.2,0.7-1.7S7.4,5.5,8,5.5 c0.6,0,1.3,0.2,1.7,0.7c0.5,0.5,0.7,1,0.7,1.7S10.2,9.1,9.7,9.6z\",\r\n fillColor: dotColor,\r\n fillOpacity: 1,\r\n scale: 1.25,\r\n strokeColor: '#ffffff',\r\n strokeWeight: 2,\r\n anchor: new google.maps.Point(8, 26.6)\r\n\r\n }\r\n\r\n /*\r\n If show box list is set to true\r\n */\r\n if (showBoxList == true) {\r\n for (var i = 0; i < locations.length; i++) {\r\n // Append a link to the markers DIV for each marker\r\n // The links are now done from EPI, so we dont need this any more.\r\n //$(\"#\" + appendMarkersToID).append('
  • ' + locations[i][2] + '
  • ');\r\n\r\n var marker = new google.maps.Marker({\r\n position: new google.maps.LatLng(locations[i][0], locations[i][1]),\r\n map: map,\r\n title: locations[i][2],\r\n icon: icon\r\n });\r\n\r\n // Register a click event listener on the marker to display the corresponding infowindow content\r\n google.maps.event.addListener(marker, 'click', (function (marker, i) {\r\n return function () {\r\n\r\n var infowindowContent = \"

    \" + locations[i][2] + \"

    \" +\r\n \"

    \" + locations[i][3] + \"

    \" +\r\n\r\n \"

    \" + locations[i][4] + \"

    \" +\r\n \"Go to office\";\r\n infowindow.setContent(infowindowContent);\r\n infowindow.open(map, marker);\r\n\r\n for (var j = 0; j < markers.length; j++) {\r\n var symbol = markers[j].getIcon();\r\n symbol.fillColor = dotColor;\r\n markers[j].setIcon(symbol);\r\n }\r\n\r\n var symbol = this.getIcon();\r\n symbol.fillColor = dotColorActive;\r\n marker.setIcon(symbol);\r\n\r\n }\r\n })(marker, i));\r\n\r\n // Add marker to markers array\r\n markers.push(marker);\r\n }\r\n\r\n for (var i = 0; i < markers.length; i++) {\r\n bounds.extend(markers[i].getPosition());\r\n }\r\n map.setCenter(bounds.getCenter());\r\n map.fitBounds(bounds);\r\n\r\n if (useClustering) {\r\n // https://googlemaps.github.io/js-marker-clusterer/docs/reference.html\r\n\r\n var clusterStyles = [\r\n {\r\n textColor: 'white',\r\n\t\t\t\t\t\turl: '/Static/prod/images/markerclusterer1.png',\r\n height: 50,\r\n width: 50\r\n },\r\n {\r\n textColor: 'white',\r\n\t\t\t\t\t\turl: '/Static/prod/images/markerclusterer2.png',\r\n height: 50,\r\n width: 50\r\n },\r\n {\r\n textColor: 'white',\r\n\t\t\t\t\t\turl: '/Static/prod/images/markerclusterer3.png',\r\n height: 50,\r\n width: 50\r\n }\r\n ];\r\n\r\n var mcOptions = {\r\n styles: clusterStyles\r\n };\r\n\r\n var markerCluster = new MarkerClusterer(map, markers, mcOptions);\r\n }\r\n\r\n // remove one zoom level to ensure no marker is on the edge.\r\n map.setZoom(map.getZoom() - 1);\r\n\r\n // Trigger a click event on each marker when the corresponding marker link is clicked\r\n\r\n if ($(window).width() > 700) {\r\n $('.marker-link').hover(function () {\r\n google.maps.event.trigger(markers[$(this).data('markerid')], 'click');\r\n });\r\n }\r\n\r\n }\r\n\r\n else {\r\n for (var i = 0; i < locations.length; i++) {\r\n var marker = new google.maps.Marker({\r\n position: new google.maps.LatLng(locations[i][0], locations[i][1]),\r\n map: map,\r\n title: locations[i][2],\r\n icon: icon\r\n\r\n });\r\n\r\n google.maps.event.addListener(marker, 'click', (function (marker, i) {\r\n return function () {\r\n\r\n var infowindowContent = \"

    \" + locations[i][2] + \"

    \" +\r\n\r\n \"Get directions\";\r\n\r\n\r\n infowindow.setContent(infowindowContent);\r\n infowindow.open(map, marker);\r\n }\r\n })(marker, i));\r\n\r\n markers.push(marker);\r\n }\r\n\r\n if (markers.length == 1) {\r\n map.setZoom(12);\r\n map.setCenter(marker.getPosition());\r\n } else {\r\n for (var i = 0; i < markers.length; i++) {\r\n bounds.extend(markers[i].getPosition());\r\n }\r\n map.setCenter(bounds.getCenter());\r\n map.fitBounds(bounds);\r\n map.setZoom(map.getZoom() - 1);\r\n }\r\n }\r\n }\r\n\r\n\r\n // Make startMapping() public so we can pass it to\r\n // the Google Maps API callback param\r\n return {\r\n startMapping: startMapping\r\n };\r\n\r\n})(window, document);\r\n\r\n\r\n","/*\r\n * Expanding contact\r\n * Old C&L\r\n */\r\n\r\n$(document).ready(function () {\r\n var expanders = $('.expanding-contact');\r\n if (expanders.length > 0) {\r\n expanders.each(function (i) {\r\n var expander = expanders[i];\r\n\r\n $(expander).on('click', '.expanding-contact-btn', function (e) {\r\n e.preventDefault();\r\n $(this).toggleClass('show');\r\n $(this).next('.expanding-contact-wrapper').toggleClass('show');\r\n });\r\n })\r\n }\r\n})","jQuery(document).ready(function () {\r\n jQuery(function () {\r\n var dateFormat = \"dd. M y\",\r\n from = jQuery(\"#from\")\r\n .datepicker({\r\n numberOfMonths: 1,\r\n dateFormat: dateFormat,\r\n minDate: 0,\r\n showWeek: true,\r\n firstDay: 1\r\n })\r\n .on(\"change\", function () {\r\n to.datepicker(\"option\", \"minDate\", getDate(this));\r\n }),\r\n\r\n to = jQuery(\"#to\")\r\n .datepicker({\r\n numberOfMonths: 1,\r\n dateFormat: dateFormat,\r\n minDate: 0,\r\n showWeek: true,\r\n firstDay: 1\r\n })\r\n .on(\"change\", function () {\r\n from.datepicker(\"option\", \"maxDate\", getDate(this));\r\n });\r\n\r\n function getDate(element) {\r\n var date;\r\n try {\r\n date = jQuery.datepicker.parseDate(dateFormat, element.value);\r\n } catch (error) {\r\n date = null;\r\n }\r\n\r\n return date;\r\n }\r\n });\r\n});","// @ts-check\r\n/* Add links */\r\n$(document).ready(function () {\r\n var addLinks = $('.add-links');\r\n var listContents = [];\r\n var removeText = \"Remove from shortcuts\";\r\n var addText = \"Add to shortcuts\";\r\n var animationDelay = 250;\r\n \r\n listContents = JSON.parse(localStorage.getItem('wlist'));\r\n \r\n if (addLinks.length > 0) {\r\n addLinks.each(function (i) {\r\n var addLink = addLinks[i];\r\n /* \r\n ON DOCUMENT READY:\r\n Check if the current link is in the local storage array:\r\n - if so give it the .added class and change the text\r\n */\r\n var currentLinkID = $(addLink).find('.wlist').data('localid');\r\n if($(listContents).length > 0){\r\n $(listContents).each(function(j){\r\n if(listContents[j][\"localId\"] === currentLinkID){\r\n $(addLink).find('.wlist')\r\n .removeClass('loading')\r\n .addClass('added')\r\n .html(removeText);\r\n }\r\n }); \r\n } \r\n /*\r\n ON CLICK:\r\n When someone clicks on a link\r\n */\r\n $(addLink).on('click', 'a.wlist', function (e) {\r\n e.preventDefault();\r\n var wlistLocal = localStorage.getItem('wlist');\r\n var self = $(this);\r\n var localId = self.data('localid');\r\n var localTitle = self.data('title'); \r\n \r\n /*\r\n REMOVE FROM LIST AND LOCAL STORAGE (If the link is in the list allready)\r\n */\r\n if(self.hasClass('added')){\r\n self.removeClass('added').addClass('loading');\r\n \r\n if(wlistLocal !== null){\r\n listContents = JSON.parse(localStorage.getItem('wlist'));\r\n listContents = listContents.filter(function(el) {\r\n return el.localId !== localId;\r\n });\r\n localStorage.setItem(\"wlist\",JSON.stringify(listContents));\r\n }\r\n removeFromFavList(localId);\r\n\r\n setTimeout(function(){\r\n $(self)\r\n .removeClass('loading')\r\n .removeClass('pin')\r\n .html(addText);\r\n }, animationDelay);\r\n }\r\n /* ADD TO LIST AND LOCAL STORAGE */\r\n else{\r\n if(wlistLocal !== null){\r\n // get list from local storage \r\n listContents = JSON.parse(localStorage.getItem('wlist')); \r\n // Check if list is shorter than 5 items\r\n if(listContents.length < 5){\r\n self.addClass('loading');\r\n listContents.push({localId:localId, localTitle:localTitle});\r\n\r\n localStorage.setItem(\"wlist\",JSON.stringify(listContents));\r\n } else{\r\n alert(\"You can only add 5 items to your list\");\r\n return;\r\n }\r\n\r\n } else {\r\n listContents = [];\r\n listContents.push({localId:localId, localTitle:localTitle});\r\n localStorage.setItem(\"wlist\",JSON.stringify(listContents));\r\n }\r\n\r\n addToFavList(localId, localTitle);\r\n\r\n setTimeout(function(){\r\n $(self)\r\n .removeClass('loading')\r\n .addClass('added')\r\n .html(removeText);\r\n }, animationDelay);\r\n }\r\n }) // click\r\n\r\n })\r\n }\r\n\r\n /* If we are on a page that has the favourite list - Add or remove link from list*/\r\n function removeFromFavList(listItem){\r\n if($('.favourite-list').length > 0){\r\n $(\".favourite-list\")\r\n .find(\".favourite-list-item[data-localid='\" + listItem + \"']\")\r\n .animate({\r\n opacity: 0,\r\n padding: 0,\r\n height: 0\r\n }, 350, function () {\r\n $(this).remove();\r\n }); \r\n\r\n }\r\n }\r\n\r\n function addToFavList(listItem, title){\r\n if($('.favourite-list').length > 0){ \r\n // Remove the no favourites list item\r\n $(\".favourite-list .no-favourites\").remove();\r\n $(\".favourite-list\")\r\n .append(\r\n '
  • ' +\r\n '' +\r\n '' +\r\n 'Remove' +\r\n title +\r\n ''+\r\n '
  • '\r\n );\r\n\r\n }\r\n }\r\n});","/*Favourite list*/\r\n$(document).ready(function () {\r\n // check if anything is in localStorage\r\n var listContents = JSON.parse(localStorage.getItem('wlist'));\r\n if(listContents != null && listContents.length > 0){\r\n // Populate fav list\r\n $(listContents).each(function (i){ \r\n $('.favourite-list')\r\n .append(\r\n '
  • ' +\r\n '' +\r\n '' +\r\n 'Remove' +\r\n listContents[i][\"localTitle\"] +\r\n ''+\r\n '
  • '\r\n );\r\n }) \r\n } else{\r\n $('.favourite-list')\r\n .append(\r\n '
  • You have no favourites.
  • '\r\n );\r\n }\r\n\r\n var favItems = $('.favourite-list-item');\r\n var editBtn = $('.edit-btn');\r\n\r\n // Click on the edit button to activate deleting links from list\r\n editBtn.on('click', function () {\r\n $(this).next('.favourite-list').toggleClass('edit');\r\n if($(this).hasClass('editing')){\r\n $(this).html(\"Edit\").removeClass('editing');\r\n \r\n } else{\r\n $(this).html(\"Close edit mode\").addClass('editing');\r\n }\r\n \r\n // When list is in edit mode, prevent normal link behaviour\r\n /*$('.favourite-list.edit .favourite-list-item').on('click','a', function(e){\r\n e.preventDefault();\r\n })*/\r\n \r\n // Click on the remove button removes link from the list and local storage\r\n $('.favourite-list-item').on('click', '.remove', function (e) {\r\n e.preventDefault();\r\n \r\n // Hide the remove button\r\n $(this).hide();\r\n\r\n // Get the localID from the list item surounding the remove button\r\n var localId = $(this).parent().parent().data('localid');\r\n \r\n removeAddedClass(localId);\r\n\r\n // Get latest list\r\n listContents = JSON.parse(localStorage.getItem('wlist'));\r\n \r\n // Filter away the list item clicked\r\n listContents = listContents.filter(function(el) {\r\n return el.localId !== localId;\r\n });\r\n // Save to local storage\r\n localStorage.setItem(\"wlist\",JSON.stringify(listContents));\r\n \r\n // Animate/hide the list item\r\n $(this).parent().parent().animate({\r\n opacity: 0,\r\n padding: 0,\r\n height: 0\r\n }, 350, function () {\r\n // After animation is done, remove the item from the DOM\r\n $(this).remove();\r\n \r\n // Get the latest list to check if it has links\r\n var theList = JSON.parse(localStorage.getItem('wlist'));\r\n \r\n // If the list has no links, remove edit class and append no fav text\r\n if(theList.length < 1){\r\n $('.favourite-list')\r\n .removeClass('edit')\r\n .append('
  • You have no favourites.
  • ');\r\n $(editBtn).html(\"Edit\").removeClass('editing');\r\n }\r\n\r\n });\r\n });\r\n })\r\n\r\n /* */\r\n function removeAddedClass(listItem){\r\n $(\".add-links a.wlist[data-localid='\" + listItem + \"']\").removeClass('added').html(\"Add to shortcuts\");\r\n }\r\n})","$(document).ready(function () {\r\n $('.course-list-item-show-dates').on('click', function (e) {\r\n var content = $(this).parent().next('.course-list-item-content');\r\n content.toggleClass('open');\r\n \r\n if($(this).hasClass('open')){\r\n $(this).html(\"Show dates\").removeClass('open');\r\n \r\n } else{\r\n $(this).html(\"Hide dates\").addClass('open');\r\n }\r\n })\r\n\r\n $('.course-date-list-item .show-more').on('click', function (e) {\r\n e.preventDefault();\r\n $(this).remove();\r\n $('.course-date-list-item').each(function(){\r\n $(this).removeClass('hidden');\r\n });\r\n })\r\n\r\n $('.course-list-item').each(function () {\r\n var $content = $(this).find('.course-list-item-content');\r\n if (!$content.length) {\r\n $(this).find('.course-list-item-show-dates').addClass('hide');\r\n }\r\n })\r\n})","$(document).ready(function () {\r\n $('.scroll-to').on('click', function (e) {\r\n e.preventDefault();\r\n var elementID = $(this).attr('href');\r\n $('html, body').animate({\r\n scrollTop: $(elementID).offset().top - 40\r\n }, 500);\r\n })\r\n})","$(document).ready(function () {\r\n $('.set-select').on('click', function (e) {\r\n e.preventDefault();\r\n var selectID = $(this).data('select-id');\r\n var selectValue = $(this).data('value');\r\n $('#'+selectID).val(selectValue).focus();\r\n })\r\n});","/*\r\n* Old C&L\r\n*/\r\n$(document).ready(function () {\r\n var latestVisitsList = $('.latest-visits-list');\r\n // Get the local storage item and parse it to JSON\r\n var latestVisitsArray = JSON.parse(localStorage.getItem('wlatestvisits'));\r\n var maxNumberOfItemsInList = 5;\r\n /********************************\r\n * Populate the list on the front page\r\n *********************************/\r\n \r\n if (latestVisitsArray != null && latestVisitsArray.length > 0) {\r\n // Populate latest visists list\r\n $(latestVisitsArray).each(function (i) {\r\n $(latestVisitsList)\r\n .append(\r\n '
  • ' +\r\n '' +\r\n latestVisitsArray[i][\"pageTitle\"] +\r\n '' +\r\n '
  • '\r\n );\r\n })\r\n } else {\r\n // If there are no items in the local storage\r\n $(latestVisitsList)\r\n .append(\r\n '
  • You have not visited any pages yet.
  • '\r\n );\r\n }\r\n \r\n\r\n /********************************\r\n * Saving to the local storage list\r\n *********************************/\r\n\r\n // check if the location is contacts and locations (and not the front page of c&l)\r\n if (window.location.href.indexOf(\"contacts-and-locations/locations/\") > -1 || window.location.href.indexOf(\"contacts-and-locations/contacts/\") > -1) {\r\n // Get the page title of the page (and trim white space from start and end)\r\n var pageTitle = $('.cl-page-main-title').html().trim();\r\n if($('.type').length >0){\r\n var pageType = $('.type').html().trim();\r\n pageTitle = pageTitle + \" (\" + pageType + \")\";\r\n }\r\n // Get page url\r\n var pageUrl = $(location).attr('href');\r\n\r\n // Check if the array has content\r\n if ($(latestVisitsArray).length > 0) {\r\n // If the visited page is in the array, remove it before adding it to the start of the array.\r\n latestVisitsArray = latestVisitsArray.filter(function (el) {\r\n return el.pageUrl !== pageUrl;\r\n });\r\n \r\n // add the page to the start of the array\r\n latestVisitsArray.unshift({ pageTitle:pageTitle, pageUrl:pageUrl });\r\n // Make sure there are not more than max num of items in the list. Remove from end of array.\r\n if($(latestVisitsArray).length > maxNumberOfItemsInList){\r\n latestVisitsArray.pop();\r\n }\r\n // Stringify and save the array to local storage\r\n localStorage.setItem(\"wlatestvisits\", JSON.stringify(latestVisitsArray));\r\n } else {\r\n // The list has no content\r\n latestVisitsArray = [];\r\n // add the page to the start of the array\r\n latestVisitsArray.unshift({ pageTitle:pageTitle, pageUrl:pageUrl });\r\n // Stringify and save the array to local storage\r\n localStorage.setItem(\"wlatestvisits\", JSON.stringify(latestVisitsArray));\r\n }\r\n }\r\n});","$(document).ready(function () {\r\n $('.process-expand').on('click', function (e) {\r\n e.preventDefault();\r\n $(this).toggleClass('open');\r\n $(this).parent().parent().next('.process-list-item-content').toggleClass('open');\r\n })\r\n\r\n var processListItems = $('.process-list-item');\r\n processListItems.each(function (i) {\r\n var processListItem = processListItems[i];\r\n var waypoint = new Waypoint({\r\n element: processListItem,\r\n handler: function (direction) {\r\n $(processListItem).addClass('in-view');\r\n this.destroy();\r\n },\r\n offset: '95%'\r\n });\r\n })\r\n\r\n});\r\n\r\n","var secret = \"38384040373937396665\"; // konami\r\n//var secret = \"6665\"; // konami\r\nvar input = \"\";\r\nvar timer;\r\nvar mode = false;\r\nvar esc = \"27\";\r\n\r\n$(document).keyup(function(e) { \r\n input += e.which; \r\n clearTimeout(timer);\r\n timer = setTimeout(function() { input = \"\"; }, 750);\r\n \r\n check_input();\r\n});\r\n\r\nfunction check_input() {\r\n if(input == secret) {\r\n // the secret code\r\n $('body').append('
    ')\r\n }\r\n\r\n if(input == esc) {\r\n $('.boat-wrapper').remove();\r\n }\r\n}","/*\r\n * Filter stream\r\n * Old C&L\r\n */\r\n\r\n$(document).ready(function () {\r\n // get the filter-list from local storage:\r\n var filterList = JSON.parse(localStorage.getItem('filterlist'));\r\n \r\n // counter is used to check if there are any visible results based on active filters\r\n var counter = 0;\r\n \r\n // empty all the checkboxes to avoid confusion:\r\n $('.filter-js input:checkbox').removeAttr('checked');\r\n\r\n // Check if the filter exists and is bigger than 0\r\n if(filterList != null && filterList.length > 0 ){\r\n counter = 0;\r\n $('.filter-row').hide();\r\n $('#clear-filter').show();\r\n // loop through the list - check the boxes and show the rows that are checked\r\n $(filterList).each(function (i){\r\n // Check the boxes\r\n $(\":checkbox[value=\" + filterList[i]['filterID'] + \"]\").prop(\"checked\",\"true\");\r\n // Show the boxes that are in the list.\r\n $('.filter-row').each(function () {\r\n if($(this).data(\"filter-id\") == filterList[i]['filterID']){\r\n $(this).fadeIn(500);\r\n counter += 1;\r\n }\r\n });\r\n });\r\n showOrHideFilterMessage(counter);\r\n } else{\r\n // If the local storage list is empty -> Show everything\r\n $('.filter-row').fadeIn(500);\r\n $('#clear-filter').hide();\r\n }\r\n\r\n // when the apply filter button is clicked\r\n $('#apply-filter').on('click', function () {\r\n $('.filter-row').hide();\r\n // Find number of checked boxes:\r\n var checkedBoxes = $('.filter-js').find('input:checked').length;\r\n // empty the filter list\r\n filterList = [];\r\n // Check if there is one or more checked boxes:\r\n if(checkedBoxes > 0){\r\n counter = 0; \r\n // Loop through all the boxes:\r\n $('.filter-js').find('input:checked').each(function () {\r\n // Grab the name of the current stream name from the value\r\n var filterID = $(this).val();\r\n var filterName = $(this).data('filter-name');\r\n filterList.push({filterID:filterID,filterName:filterName});\r\n localStorage.setItem(\"filterlist\",JSON.stringify(filterList));\r\n \r\n // Loop through filter rows and show the row if it matches the current filter name:\r\n $('.filter-row').each(function () {\r\n if($(this).data(\"filter-id\") == filterID){\r\n $(this).fadeIn(500);\r\n counter += 1;\r\n }\r\n });\r\n \r\n });\r\n\r\n showOrHideFilterMessage(counter);\r\n\r\n $('#clear-filter').fadeIn(500);\r\n \r\n // If there are no boxes checked -> show all\r\n } else{\r\n localStorage.setItem(\"filterlist\",JSON.stringify(filterList));\r\n $('.filter-row').fadeIn(500);\r\n $('#clear-filter').hide();\r\n }\r\n });\r\n\r\n // when the CLEAR filter button is clicked\r\n $('#clear-filter').on('click', function () {\r\n // show all .filter-row\r\n $('.filter-row').fadeIn(500);\r\n showOrHideFilterMessage(1);\r\n \r\n // uncheck all the boxes\r\n $(\".filter-js\").find(\"input[type='checkbox']\").each(function(){\r\n $(this).prop(\"checked\",false);\r\n })\r\n \r\n // Set local storage to empty\r\n filterList = [];\r\n localStorage.setItem(\"filterlist\",JSON.stringify(filterList));\r\n \r\n // hide the button\r\n $(this).hide();\r\n });\r\n\r\n // helper function for showing or hiding the filter message\r\n function showOrHideFilterMessage(counter){\r\n if(counter == 0){\r\n $('.filter-message').fadeIn(500); \r\n } else{\r\n $('.filter-message').fadeOut(500);\r\n }\r\n }\r\n});","$(document).ready(function () {\r\n var filterList = JSON.parse(localStorage.getItem('filterlist'));\r\n var $activeFiltersList = $('.active-filters-list');\r\n\r\n if(filterList != null && filterList.length > 0 ){\r\n if($activeFiltersList.length > 0){\r\n $(filterList).each(function (i){\r\n addToActiveFilterList(filterList[i]['filterName']);\r\n })\r\n }\r\n } else{\r\n $activeFiltersList.prepend('
  • No active filters
  • '); \r\n $('#clear-active-filters').remove();\r\n }\r\n\r\n function addToActiveFilterList(title){\r\n $activeFiltersList.prepend('
  • '+title +'
  • '); \r\n }\r\n\r\n $('#clear-active-filters').on('click','a', function () {\r\n // Clear the local storage\r\n filterList = [];\r\n localStorage.setItem(\"filterlist\",JSON.stringify(filterList));\r\n // Hide the button\r\n $(this).hide();\r\n // Remove all list items\r\n $('.active-filters-list-item').remove();\r\n // Show the no active filters info\r\n $activeFiltersList.prepend('
  • No active filters
  • '); \r\n \r\n });\r\n\r\n});","$(document).ready(function () {\r\n // Check if there is a hero present\r\n var $hero = $('.hero');\r\n if ($hero.length > 0) {\r\n // Check if the video should be used\r\n if($hero.data(\"video-src\")){\r\n // Check if the viewport is bigger than 900\r\n var viewportWidth = $(window).width();\r\n if(viewportWidth > 900 || $hero.data(\"video-on-mobile\")){\r\n var videoSrc = $hero.data(\"video-src\");\r\n var video = \"
    \" +\r\n \"
    \";\r\n $hero.prepend(video);\r\n }\r\n }\r\n };\r\n});\r\n","$(document).ready(function () {\r\n // Check if there is a oversize present\r\n var $oversize = $('.oversize');\r\n if ($oversize.length > 0) { \r\n // Check if the video should be used \r\n if($oversize.data(\"video-src\")){\r\n // Check if the viewport is bigger than 900\r\n var viewportWidth = $(window).width();\r\n if(viewportWidth > 900){\r\n var videoSrc = $oversize.data(\"video-src\");\r\n var video = \"\";\r\n $oversize.find('.crop').prepend(video);\r\n }\r\n }\r\n };\r\n});","const prodCaptcha = \"6LdF2H0oAAAAAO0YXBHwTHkaU1FjTK5Y55AvchBW\";\r\nconst devCaptcha = process.env.RECAPTCHA_PUBLIC_KEY;\r\n\r\nexport const captchaKey = devCaptcha !== undefined ? devCaptcha : prodCaptcha;","const { captchaKey } = require(\"./captchaToken\");\r\n\r\nfunction getQueryVariable(variable) {\r\n var query = window.location.search.substring(1),\r\n vars = query.split(\"&\");\r\n for (var i = 0; i < vars.length; i++) {\r\n var pair = vars[i].split(\"=\");\r\n if (pair[0] == variable) {\r\n return pair[1];\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction documentReady(fn) {\r\n if (document.readyState != \"loading\") {\r\n fn();\r\n } else {\r\n document.addEventListener(\"DOMContentLoaded\", fn);\r\n }\r\n}\r\n\r\nfunction addRecaptchaScript() {\r\n return new Promise((resolve) => {\r\n const scriptEl = document.getElementById(\"grecaptcha\");\r\n if (scriptEl) return resolve(true);\r\n\r\n const script = document.createElement(\"script\");\r\n script.src = `https://www.google.com/recaptcha/api.js?render=${captchaKey}`;\r\n script.setAttribute(\"id\", \"grecaptcha\");\r\n document.body.appendChild(script);\r\n\r\n script.addEventListener(\"load\", function () {\r\n resolve(true);\r\n });\r\n });\r\n}\r\n\r\nfunction getRecaptchaToken() {\r\n return new Promise((resolve) => {\r\n addRecaptchaScript().then(() => {\r\n resolve(\r\n new Promise((resolve) => {\r\n grecaptcha.ready(function () {\r\n grecaptcha\r\n .execute(`${captchaKey}`, {\r\n action: \"submit\",\r\n })\r\n .then(function (token) {\r\n resolve(token);\r\n });\r\n });\r\n })\r\n );\r\n });\r\n });\r\n}\r\n\r\nfunction checkRecaptcha() {\r\n const endpointUrl = \"/api/recaptcha/isValid/\";\r\n return new Promise((resolve) => {\r\n getRecaptchaToken().then((token) => {\r\n fetch(endpointUrl, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify({\r\n token: token,\r\n }),\r\n })\r\n .then((res) => res.json())\r\n .then((res) => resolve(res));\r\n });\r\n });\r\n}\r\n\r\nexports.getQueryVariable = getQueryVariable;\r\nexports.getRecaptchaToken = getRecaptchaToken;\r\nexports.checkRecaptcha = checkRecaptcha;\r\nexports.documentReady = documentReady;\r\n","const { documentReady, checkRecaptcha } = require('./helpers');\r\n\r\nfunction heroVideo() {\r\n let videoWrappers = document.querySelectorAll('.heroVideo');\r\n\r\n videoWrappers.forEach((wrapper) => {\r\n let video = wrapper.querySelector('video');\r\n let button = wrapper.querySelector('button');\r\n let cover = wrapper.querySelector('.video__cover');\r\n\r\n if (button) {\r\n button.addEventListener('click', function () {\r\n checkRecaptcha().then((isValidated) => {\r\n if (isValidated) {\r\n cover.addEventListener('transitionend', function () {\r\n cover.classList.add('hidden');\r\n });\r\n cover.classList.add('hiding');\r\n wrapper.classList.remove('paused');\r\n\r\n video.play();\r\n }\r\n });\r\n });\r\n }\r\n });\r\n}\r\n\r\ndocumentReady(heroVideo);\r\n","/*\r\n * Old C&L\r\n */\r\n$(document).ready(function () {\r\n if ($('.sticky-anchor-link').length) {\r\n var distance = $('.cl-find-block').offset().top - 200;\r\n var $window = $(window);\r\n $window.on('scroll', function () { \r\n if($window.scrollTop() > 600 && $window.scrollTop() < distance) {\r\n $('.sticky-anchor-link').addClass('show');\r\n }\r\n else {\r\n $('.sticky-anchor-link').removeClass('show');\r\n }\t\t\t\r\n });\r\n }\r\n\r\n $('.sticky-anchor-link').on('click', function(){\r\n var $self = $(this);\r\n $('html,body').animate({\r\n scrollTop: $('.cl-find-block').offset().top\r\n }, 500);\r\n setTimeout(function() {\r\n $self.removeClass('show');\r\n $('.cl-find-block #search').focus();\r\n }, 600);\r\n\r\n return false;\r\n })\r\n});","//specific jump to link for CL pages\r\n// ON click check if there are offices, then ports. If none, do nothing\r\n// Old C&L\r\n\r\n$(document).ready(function(){\r\n var $jumpButton = $('#cl-jump-to');\r\n var $offices = $('#offices');\r\n var $ports = $('#ports');\r\n \r\n if($jumpButton.length){\r\n $jumpButton.on('click', function(){\r\n if($offices.length){\r\n $('html,body').animate({\r\n scrollTop: $offices.offset().top\r\n }, 500);\r\n } else if($ports.length){\r\n $('html,body').animate({\r\n scrollTop: $ports.offset().top\r\n }, 500);\r\n }\r\n })\r\n }\r\n});","// Using jquery ui to create tabs functionality.\r\n// The tabs need to have a wrapper with class .tabs and a unique ID\r\n\r\n$(document).ready(function () {\r\n var $tabs = $('.tabs');\r\n\r\n $tabs.each(function(i){\r\n var tab = $($tabs[i]);\r\n var tabID = \"#\"+ tab.attr('id');\r\n\r\n $(tabID).tabs({\r\n create: function( event, ui ) {\r\n }\r\n });\r\n })\r\n });","$(document).ready(function () {\r\n $(\"input[name='accept-guidelines']\").change(function(){\r\n $(this).parent().next('.download-list').find('.download-list__link ').toggleClass('disabled');\r\n })\r\n\r\n $(\".download-list__link\").on('click', function(e){\r\n if ( $( this ).hasClass( \"disabled\" ) ) {\r\n e.preventDefault();\r\n }\r\n })\r\n});","import Clipboard from 'clipboard'\r\n\r\n$(document).ready(function () {\r\n var clipboard = new Clipboard('.clipboard');\r\n clipboard.on('success', function(e) {\r\n showTooltip(e.trigger, 'Copied!');\r\n });\r\n clipboard.on('error', function(e) {\r\n });\r\n});\r\n\r\nfunction showTooltip(elem, msg) {\r\n elem.setAttribute('class', 'clipboard tooltipped');\r\n elem.setAttribute('aria-label', msg);\r\n setTimeout(removeTooltip, 1000, elem);\r\n}\r\n\r\nfunction removeTooltip(elem) {\r\n\r\n elem.setAttribute('class', 'clipboard');\r\n}","$(document).ready(function(){\r\n\r\n var $obfuscators = $('.obfuscator');\r\n\r\n if($obfuscators.length){\r\n $obfuscators.each(function(i){\r\n var $obfuscator = $($obfuscators[i]);\r\n var beforeAlpha = $obfuscator.data('contact-name');\r\n var afterAlpha = \"wilhelmsen.com\";\r\n if ($obfuscator.data('contact-company')) {\r\n afterAlpha = $obfuscator.data('contact-company');\r\n }\r\n var concat = beforeAlpha + \"@\" + afterAlpha;\r\n var wmarkup = '' + concat + '';\r\n $($obfuscator).html(wmarkup);\r\n })\r\n }\r\n\r\n});","$(document).ready(function () {\r\n\r\n $('.articleList__item.collapsable').on('click','.articleList__view-more', function(){\r\n $(this).parent().removeClass('collapsed');\r\n $(this).remove();\r\n })\r\n\r\n})","/*Expanding contact*/\r\n$(document).ready(function () {\r\n var wwExpandBlocks = $('.ww-expand-block');\r\n if (wwExpandBlocks.length > 0) {\r\n wwExpandBlocks.each(function (i) {\r\n var wwExpandBlock = wwExpandBlocks[i];\r\n\r\n $(wwExpandBlock).on('click', '.ww-expand-block__link', function (e) {\r\n e.preventDefault();\r\n $(this).toggleClass('ww-expand-block__link--active');\r\n $(this).next('.ww-expand-block__content').toggleClass('ww-expand-block__content--collapsed');\r\n });\r\n })\r\n }\r\n})\r\n\r\n","(function() {\r\n /*\r\n * Adds animation to an element\r\n *\r\n * params:\r\n * element\r\n * options\r\n */\r\n function addScrollAnimation(element, options) {\r\n\r\n let offsetTop;\r\n let timer;\r\n\r\n if(!element) {\r\n return;\r\n } else {\r\n offsetTop = getElementOffsetTop(element);\r\n }\r\n\r\n setTransform(element, options, offsetTop);\r\n\r\n window.addEventListener(\"scroll\", function() {\r\n if(timer) {\r\n window.clearTimeout(timer);\r\n }\r\n\r\n timer = window.setTimeout(function() {\r\n setTransform(element, options, offsetTop);\r\n }, 10);\r\n }, false);\r\n }\r\n\r\n function getElementOffsetTop(element) {\r\n let top = 0;\r\n\r\n do {\r\n top += element.offsetTop || 0;\r\n element = element.offsetParent;\r\n } while (element);\r\n\r\n return top;\r\n }\r\n\r\n function setTransform(element, options, offsetTop) {\r\n let scroll = window.scrollY - offsetTop;\r\n let translate = scroll + window.innerHeight;\r\n let transform = [];\r\n\r\n options.forEach(o => {\r\n transform.push(`${o.transform}(${(translate + o.offset) * o.speed}${o.unit})`);\r\n })\r\n\r\n\r\n element.style.transform = transform.join(' ');\r\n }\r\n\r\n document.querySelectorAll(\"[data-scroll-animation]\").forEach(element => {\r\n let options = JSON.parse(element.dataset.scrollAnimation);\r\n addScrollAnimation(element, options);\r\n });\r\n\r\n}());","(function() {\r\n let galleryItems;\r\n\r\n window.addEventListener(\"load\", (event) => {\r\n galleryItems = document.querySelectorAll(\".teaser-gallery__item\");\r\n\r\n createObserver();\r\n }, false);\r\n\r\n function createObserver() {\r\n let observer;\r\n\r\n let options = {\r\n root: null,\r\n rootMargin: \"0px\",\r\n threshold: 0\r\n };\r\n\r\n if ('IntersectionObserver' in window) {\r\n observer = new IntersectionObserver(handleIntersect, options);\r\n galleryItems.forEach(element => {\r\n observer.observe(element);\r\n });\r\n } else {\r\n galleryItems.forEach(element => {\r\n element.classList.add(\"visible\");\r\n })\r\n }\r\n }\r\n\r\n function handleIntersect(entries, observer) {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n entry.target.classList.add(\"visible\");\r\n }\r\n });\r\n }\r\n})();","$(document).ready(function () {\r\n const mainNavItems = $('.has-mega-menu > ul > li:not(.hide-menu-on-desktop)');\r\n let isMobile = isViewportMobile();\r\n let megaMenuItems = $(filterMegaMenuItems(mainNavItems));\r\n let megaWrapper = $('.header__bottom')[0];\r\n\r\n if(megaMenuItems) {\r\n megaMenuItems.each(function () {\r\n setUpMegaMenuBehaviour($(this), isMobile, megaMenuItems);\r\n });\r\n\r\n if(isMobile) {\r\n addScrollbar(megaWrapper);\r\n };\r\n\r\n window.addEventListener(\"resize\", function () {\r\n let isMobileAfterResize = isViewportMobile();\r\n\r\n if(isMobile != isMobileAfterResize) {\r\n isMobile = isMobileAfterResize;\r\n\r\n clearMegaMenuSetup();\r\n\r\n megaMenuItems.each(function () {\r\n setUpMegaMenuBehaviour($(this), isMobile, megaMenuItems);\r\n });\r\n\r\n if(isMobile && !megaWrapper.scrollbar) {\r\n addScrollbar(megaWrapper);\r\n };\r\n }\r\n });\r\n }\r\n});\r\n\r\nfunction clearMegaMenuSetup() {\r\n $(\"html\").removeClass(\"menu_open\");\r\n $(\"header.global .active\").each(function() {\r\n this.classList.remove(\"active\");\r\n });\r\n $(\"header.global .ps, header.global .ps--active-y\").each(function() {\r\n removeScrollbar(this);\r\n });\r\n}\r\n\r\nfunction isViewportMobile() {\r\n return window.innerWidth < 900;\r\n};\r\n\r\nfunction filterMegaMenuItems(collection) {\r\n let items = [];\r\n collection.each(function () {\r\n if (!hasMegaMenu(this)) {\r\n $(this).addClass('no-dropdown');\r\n } else {\r\n items.push(this);\r\n }\r\n });\r\n return items;\r\n}\r\n\r\nfunction hasMegaMenu(parent) {\r\n return $(parent).children('.mega').length > 0;\r\n}\r\n\r\nfunction addScrollbar(element) {\r\n if(element) {\r\n element.scrollbar = new PerfectScrollbar(element, {\r\n wheelPropagation: false,\r\n minScrollbarLength: 150,\r\n maxScrollbarLength: 150,\r\n suppressScrollX: true,\r\n swipeEasing: true\r\n });\r\n }\r\n}\r\n\r\nfunction removeScrollbar(element) {\r\n if(element) {\r\n element.scrollTop = 0;\r\n element.scrollbar.destroy();\r\n element.scrollbar = null;\r\n $(element).children('.ps__rail-x, .ps__rail-y').remove();\r\n }\r\n}\r\n\r\nfunction setUpMegaMenuBehaviour($mainNavItem, isMobile, megaMenuItems) {\r\n const\r\n delay = 100,\r\n $fullMenu = $mainNavItem.children('.mega').eq(0),\r\n $fullMenuBack = $fullMenu.children('.mega__back'),\r\n $megaList = $fullMenu.children('.mega__list'),\r\n $megaHeader = $fullMenu.children('.mega__header--primary'),\r\n $megaIntro = $fullMenu.children('.mega__intro'),\r\n $firstLevelItems = $megaList.children().children(':first-child'),\r\n $firstLevelItemsParents = $firstLevelItems.parent(),\r\n $firstLevelBackBtn = $firstLevelItemsParents.children().children('.mega__back'),\r\n $firstItemFirstLevel = $firstLevelItems.eq(0),\r\n $secondLevelItems = $firstLevelItems.siblings('.mega__sublist').children().children(':first-child'),\r\n $secondLevelItemsParents = $secondLevelItems.parent(),\r\n\r\n $isProductCatalogue = $('.mega--product').length,\r\n $prodCat1stLvlBackBtn = $fullMenu.children('.mega__list').children('.mega__back'),\r\n $prodCatItems = $fullMenu.find('.mega__list--pc').children('li'),\r\n $prodCatBackBtns = $fullMenu.find('.mega__list--pc').find('.mega__back'),\r\n\r\n $megaWrapper = $('.header__bottom')[0];\r\n\r\n let isHoverable = $mainNavItem.hasClass(\"no-delay\");\r\n let btn = $mainNavItem.find(\".header__bottom-list-button\");\r\n let timer;\r\n\r\n /* VIEWPORT IS DESKTOP */\r\n if (!isMobile) {\r\n $firstItemFirstLevel.parent().addClass('active');\r\n\r\n if($isProductCatalogue) {\r\n $prodCat1stLvlBackBtn.unbind(\"click\");\r\n $prodCatItems.unbind(\"click\");\r\n $prodCatBackBtns.unbind(\"click\");\r\n\r\n $mainNavItem.hover(function () {\r\n $prodCatItems.removeClass('active');\r\n $megaIntro.addClass('active');\r\n });\r\n\r\n $prodCatItems.on('mouseenter', function () {\r\n const _this = this;\r\n timer = setTimeout(function () {\r\n if($(_this).parent().parent().parent().hasClass(\"mega--product\")) {\r\n $(_this).children().children().find(\".active\").removeClass(\"active\");\r\n }\r\n $(_this).siblings().removeClass('active');\r\n $megaIntro.removeClass('active');\r\n $(_this).addClass('active');\r\n }, delay);\r\n }).on('mouseleave', function () {\r\n clearTimeout(timer);\r\n });\r\n\r\n $megaHeader.hover(function () {\r\n $prodCatItems.removeClass('active');\r\n $megaIntro.addClass('active');\r\n });\r\n } else {\r\n $fullMenuBack.unbind(\"click\");\r\n $firstLevelItems.unbind(\"click\");\r\n $firstLevelBackBtn.unbind(\"click\");\r\n\r\n if(isHoverable) {\r\n $mainNavItem.hover(handleNavItemHover);\r\n } else {\r\n btn.click(handleButtonClick);\r\n }\r\n\r\n $megaHeader.hover(function () {\r\n $firstLevelItemsParents.removeClass('active');\r\n $secondLevelItemsParents.removeClass('active');\r\n $megaIntro.addClass('active');\r\n });\r\n\r\n $firstLevelItems.on('mouseenter', function () {\r\n const _this = this;\r\n timer = setTimeout(function () {\r\n $firstLevelItemsParents.removeClass('active');\r\n $secondLevelItemsParents.removeClass('active');\r\n $megaIntro.removeClass('active');\r\n $(_this).parent().addClass('active');\r\n }, delay);\r\n }).on('mouseleave', function () {\r\n clearTimeout(timer);\r\n });\r\n\r\n $secondLevelItems.on('mouseenter', function (event) {\r\n const _this = this;\r\n timer = setTimeout(function () {\r\n $secondLevelItemsParents.removeClass('active');\r\n $(_this).parent().addClass('active');\r\n event.stopPropagation();\r\n }, delay);\r\n }).on('mouseleave', function () {\r\n clearTimeout(timer);\r\n });\r\n }\r\n /* VIEWPORT IS MOBILE */\r\n } else {\r\n $mainNavItem.unbind(\"hover\");\r\n $megaHeader.unbind(\"hover\");\r\n\r\n $mainNavItem.click(function () {\r\n $mainNavItem.addClass('active');\r\n $mainNavItem.focus();\r\n removeScrollbar($(this).closest('.ps, .ps--active-y')[0]);\r\n addScrollbar($(this).children('.mega')[0]);\r\n event.stopPropagation();\r\n });\r\n\r\n if($isProductCatalogue) {\r\n $prodCatItems.unbind(\"hover\");\r\n\r\n $prodCat1stLvlBackBtn.click(function () {\r\n $mainNavItem.removeClass('active');\r\n removeScrollbar($mainNavItem.children('.ps, .ps--active-y')[0]);\r\n addScrollbar($megaWrapper);\r\n event.stopPropagation();\r\n });\r\n\r\n $prodCatItems.click(function () {\r\n $(this).addClass('active');\r\n $(this).focus();\r\n removeScrollbar($(this).closest('.ps, .ps--active-y')[0]);\r\n addScrollbar($(this).children('.mega__sublist')[0]);\r\n event.stopPropagation();\r\n });\r\n\r\n $prodCatBackBtns.click(function () {\r\n let scrollbar = $(this).closest('.ps, .ps--active-y');\r\n $(this).parent().parent().removeClass('active');\r\n addScrollbar(scrollbar.parent().closest('.mega__sublist, .mega')[0]);\r\n removeScrollbar(scrollbar[0]);\r\n event.stopPropagation();\r\n });\r\n } else {\r\n $firstLevelItems.unbind(\"hover\");\r\n $secondLevelItems.unbind(\"hover\");\r\n\r\n $fullMenuBack.click(function () {\r\n $mainNavItem.removeClass('active');\r\n removeScrollbar($mainNavItem.children('.ps, .ps--active-y')[0]);\r\n addScrollbar($megaWrapper);\r\n event.stopPropagation();\r\n });\r\n\r\n $firstLevelItems.click(function () {\r\n $(this).parent().addClass('active');\r\n $(this).parent().focus();\r\n removeScrollbar($(this).parent().closest('.ps, .ps--active-y')[0]);\r\n addScrollbar($(this).siblings('.mega__sublist')[0]);\r\n event.stopPropagation();\r\n });\r\n\r\n $firstLevelBackBtn.click(function() {\r\n $firstLevelItemsParents.removeClass('active');\r\n removeScrollbar($(this).closest('.ps, .ps--active-y')[0]);\r\n addScrollbar($(this).closest('.mega')[0]);\r\n event.stopPropagation();\r\n });\r\n }\r\n }\r\n\r\n function handleNavItemHover() {\r\n $firstLevelItemsParents.removeClass('active');\r\n $secondLevelItemsParents.removeClass('active');\r\n $megaIntro.addClass('active');\r\n }\r\n\r\n function handleButtonClick() {\r\n if($mainNavItem.hasClass('active')) {\r\n $mainNavItem.removeClass('active');\r\n } else {\r\n megaMenuItems.removeClass('active');\r\n $firstLevelItemsParents.removeClass('active');\r\n $secondLevelItemsParents.removeClass('active');\r\n $megaIntro.addClass('active');\r\n $mainNavItem.addClass('active');\r\n }\r\n }\r\n}","var getQueryVariable = require('./helpers').getQueryVariable;\r\n\r\n$(document).ready(function () {\r\n var customSelect = $('.js-custom-select'),\r\n selectBtn = customSelect.find('.custom-select__btn'),\r\n url = window.location.href;\r\n\r\n if (customSelect.length > 0) {\r\n selectBtn.on('click', function () {\r\n var btn = $(this);\r\n toggleOptList(btn);\r\n });\r\n\r\n selectBtn.on('blur', function () {\r\n var btn = $(this);\r\n deactivateSelect(btn);\r\n });\r\n\r\n customSelect.each(function (i, select) {\r\n var selectOptions = $(select).find('.custom-select__item'),\r\n nativeSelectWidget = $(select).find('.custom-select__fallback-select'),\r\n selectIndex = getIndex(select);\r\n\r\n updateValue(select, selectIndex);\r\n nativeSelectWidget.attr('tabindex', -1);\r\n\r\n selectOptions.each(function (i, option) {\r\n $(option).on('mousedown', function () {\r\n updateValue(select, i);\r\n })\r\n });\r\n $(select).on('keydown', function (e) {\r\n var length = selectOptions.length,\r\n index = getIndex(select);\r\n\r\n if (e.keyCode === 40 && index < length - 1) {\r\n e.preventDefault();\r\n index++;\r\n }\r\n\r\n if (e.keyCode === 38 && index > 0) {\r\n e.preventDefault();\r\n index--;\r\n }\r\n\r\n updateValue(select, index);\r\n });\r\n });\r\n\r\n // if on search page\r\n if ( url.indexOf('search') >= 0 ) {\r\n var select = $('.products-search').find('.custom-select'),\r\n categoryId = getQueryVariable('categoryId').toString();\r\n\r\n select.each(function (i, select) {\r\n var selectOptions = $(select).find('.custom-select__item');\r\n\r\n selectOptions.each(function (i, option) {\r\n if ($(option).attr('data-category-id') === categoryId)\r\n updateValue(select, i);\r\n });\r\n });\r\n }\r\n }\r\n\r\n function toggleOptList(btn) {\r\n btn.focus();\r\n btn.parent().toggleClass('custom-select__widget--open');\r\n }\r\n\r\n function deactivateSelect(btn) {\r\n var customSelectWidget = btn.parent();\r\n if (!customSelectWidget.hasClass('custom-select__widget--open')) return;\r\n\r\n customSelectWidget.removeClass('custom-select__widget--open');\r\n }\r\n\r\n function getIndex(select) {\r\n var nativeSelect = $(select).find('.custom-select__fallback-select')[0];\r\n return nativeSelect.selectedIndex;\r\n }\r\n\r\n function updateValue(select, index) {\r\n var customSelect = $(select),\r\n nativeSelect = customSelect.find('.custom-select__fallback-select')[0],\r\n previousSelectedIndex = nativeSelect.selectedIndex,\r\n selectedValue = customSelect.find('.custom-select__label'),\r\n selectOptions = customSelect.find('.custom-select__item'),\r\n selectedOptionText = $(selectOptions[index]).text();\r\n\r\n selectOptions.each(function (i, option) {\r\n $(option).attr('aria-selected', 'false');\r\n });\r\n $(selectOptions[index]).attr('aria-selected', 'true');\r\n nativeSelect.selectedIndex = index;\r\n if (previousSelectedIndex !== index) {\r\n $(nativeSelect).trigger('onchange');\r\n }\r\n\r\n selectedValue.html(selectedOptionText);\r\n highlightOption(select, selectOptions[index]);\r\n\r\n }\r\n\r\n function highlightOption(select, option) {\r\n var selectOptions = customSelect.find('.custom-select__item'),\r\n hasHighlightedOption = false;\r\n\r\n if ($(select).find('.custom-select__list').children('.custom-select__item--highlighted').length > 0) {\r\n hasHighlightedOption = true;\r\n } else {\r\n hasHighlightedOption = false;\r\n }\r\n\r\n if (hasHighlightedOption) {\r\n selectOptions.removeClass('custom-select__item--highlighted');\r\n }\r\n $(option).addClass('custom-select__item--highlighted');\r\n }\r\n});","$(document).ready(function () {\r\n if ($('.js-catalogue-download').length > 0) {\r\n var globalHeader = $('header.global'),\r\n mainNavigationList = $('nav.top');\r\n\r\n positionCatalogueDownload();\r\n $(window).resize(function () {\r\n positionCatalogueDownload();\r\n });\r\n }\r\n\r\n function positionCatalogueDownload() {\r\n var $catalogueDownload = $('.js-catalogue-download'),\r\n windowWidth = $(window).width();\r\n\r\n if (windowWidth <= 900) {\r\n $catalogueDownload.insertAfter(globalHeader);\r\n } else if (windowWidth > 900) {\r\n $catalogueDownload.appendTo(mainNavigationList);\r\n }\r\n }\r\n});","// The script provides smooth scrolling.\r\n// It supports accessibility in a way that if you click a link, the focus will be changed on the element matching ID of the link.\r\n\r\n// Source:\r\n// https://css-tricks.com/smooth-scrolling-accessibility/\r\n\r\n\r\n\r\nconst _debounce = require('lodash.debounce');\r\n\r\n\r\n///////////////////////////////////////////////StickyMenuManager/////////////////////////////////////////////\r\n\r\nfunction StickyMenuManager($stickyElement, menuClass) {\r\n this.$stickyElement = $stickyElement;\r\n this.$clonedStickyElement = this.$stickyElement.clone().addClass(\"cloned-sticky-element\").insertAfter(this.$stickyElement).css('visibility', 'hidden');\r\n this.$originalMenu = this.$stickyElement.find(menuClass);\r\n this.$clonedMenu = this.$clonedStickyElement.find(menuClass);\r\n this.lastOriginalScrollLeft = 0;\r\n this.lastClonedScrollLeft = 0;\r\n this.fixed = false;\r\n\r\n this.listenForPageScroll();\r\n}\r\n\r\nStickyMenuManager.prototype.listenForPageScroll = function() {\r\n const _this = this;\r\n\r\n function handleScroll() {\r\n const scrollTop = $(window).scrollTop();\r\n const whereToFix = _this.$stickyElement.offset().top;\r\n\r\n if (scrollTop > whereToFix) {\r\n if (!_this.fixed) {\r\n _this.setStickyNav();\r\n _this.fixed = true;\r\n }\r\n } else if (_this.fixed) {\r\n _this.unsetStickyNav();\r\n _this.fixed = false;\r\n }\r\n }\r\n\r\n $(window).scroll(_debounce(function() {\r\n handleScroll();\r\n }, 10));\r\n handleScroll();\r\n};\r\n\r\n/* This function sets the sticky menu visible and hides the original menu */\r\n/* I used visibility attribute (instead of display) to show/hide cloned sticky navigation, because, only in this case scrollLeft works */\r\nStickyMenuManager.prototype.setStickyNav = function() {\r\n const currentScrollLeft = this.$originalMenu.scrollLeft();\r\n if (currentScrollLeft !== this.lastOriginalScrollLeft) {\r\n this.$clonedMenu.scrollLeft(currentScrollLeft);\r\n this.lastOriginalScrollLeft = currentScrollLeft;\r\n }\r\n this.$stickyElement.css('visibility', 'hidden');\r\n this.$clonedStickyElement.css('visibility', 'visible');\r\n};\r\n\r\n/* This function hides the sticky menu and make the original menu visible again */\r\n/* I used visibility attribute (instead of display) to show/hide cloned sticky navigation, because, only in this case scrollLeft works */\r\nStickyMenuManager.prototype.unsetStickyNav = function() {\r\n const currentScrollLeft = this.$clonedMenu.scrollLeft();\r\n if (currentScrollLeft !== this.lastClonedScrollLeft) {\r\n this.$originalMenu.scrollLeft(currentScrollLeft);\r\n this.lastClonedScrollLeft = currentScrollLeft;\r\n }\r\n this.$stickyElement.css('visibility', 'visible');\r\n this.$clonedStickyElement.css('visibility', 'hidden');\r\n};\r\n\r\nStickyMenuManager.prototype.getCloneHeight = function() {\r\n return this.$clonedStickyElement.height();\r\n};\r\n\r\n\r\n//////////////////////////////////////////////////ContextMenuManager/////////////////////////////////////////////////////////////\r\n\r\nfunction ContextMenuManager ($menus, $links, $sections, stickyElementHeight) {\r\n this.stickyElementHeight = stickyElementHeight;\r\n this.$menus = $menus;\r\n this.$allLinks = $links;\r\n this.$sections = $sections;\r\n this.currentSection = '';\r\n\r\n this.listenForSectionScroll();\r\n this.listenForLinkClick();\r\n}\r\n\r\n/* This function listens for a user's scroll of a page in the browser */\r\n/* and updates the menu according to the current section, that he is scrolling through */\r\nContextMenuManager.prototype.listenForSectionScroll = function() {\r\n const _this = this;\r\n\r\n function handleScroll () {\r\n const cur_pos = $(window).scrollTop();\r\n const bottomOfThePage = $(document).height() - $(window).height();\r\n\r\n _this.$sections.each(function(index) {\r\n const top = $(this).offset().top - _this.stickyElementHeight;\r\n const bottom = top + $(this).outerHeight();\r\n\r\n if ((cur_pos >= top && cur_pos <= bottom) || (index===_this.$sections.length-1 && cur_pos === bottomOfThePage)) {\r\n const newHash = '#' + $(this).attr('id');\r\n if (_this.currentSection !== newHash) {\r\n _this.setSection(newHash);\r\n _this.updateActiveMenuItem();\r\n }\r\n _this.updateMenuScrollbarHorizontalPosition();\r\n }\r\n });\r\n }\r\n\r\n $(window).scroll(_debounce(function () {\r\n handleScroll();\r\n }, 10));\r\n};\r\n\r\n/* This function listens for a section change that a user does in the menu */\r\nContextMenuManager.prototype.listenForLinkClick = function () {\r\n const _this = this;\r\n this.$allLinks.click(function (e) {\r\n e.preventDefault();\r\n _this.setSection(this.hash);\r\n _this.updateActiveMenuItem();\r\n _this.updatePageScrollVericalPosition();\r\n _this.updateMenuScrollbarHorizontalPosition();\r\n });\r\n};\r\n\r\nContextMenuManager.prototype.setSection = function (hash) {\r\n this.currentSection = hash;\r\n};\r\n\r\n/* This function updates scrollLeft position of the horizontal menu according to current section */\r\nContextMenuManager.prototype.updateMenuScrollbarHorizontalPosition = function () {\r\n const _this = this;\r\n\r\n this.$menus.each(function () {\r\n const $menu = $(this);\r\n let $target = null;\r\n const visibleArea = $menu.outerWidth();\r\n _this.$allLinks.each(function () {\r\n if (this.hash === _this.currentSection) {\r\n $target = $(this);\r\n }\r\n });\r\n let currentSectionPosition = $target.position().left;\r\n currentSectionPosition += ($target.outerWidth() / 2) - (visibleArea / 2);\r\n $menu.scrollLeft(currentSectionPosition);\r\n });\r\n};\r\n\r\n/* This function updates the active element in the menu according to current section */\r\nContextMenuManager.prototype.updateActiveMenuItem = function() {\r\n const _this = this;\r\n this.$allLinks.removeClass('active');\r\n this.$allLinks.each(function() {\r\n if (this.hash === _this.currentSection) {\r\n $(this).addClass('active');\r\n }\r\n });\r\n};\r\n\r\n/* This function scrolls the page to the current section */\r\nContextMenuManager.prototype.updatePageScrollVericalPosition = function () {\r\n const $target = $(this.currentSection);\r\n const $heading = $target.find('h2').first();\r\n const newPosition = $target.offset().top - this.stickyElementHeight + 2; //+2 to aviod the situation where scroll position is balancing between two sections\r\n window.scroll({\r\n top: newPosition,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n\r\n _debounce(function () {\r\n if ($heading.is(\":focus\")) { // Checking if the target was focused\r\n return false;\r\n } else {\r\n $heading.attr('tabindex', '-1'); // Adding tabindex for elements not focusable\r\n $heading.focus(); // Setting focus\r\n };\r\n }, 100);\r\n};\r\n\r\n\r\n/////////////////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n$(document).ready(function () {\r\n\r\n let stickyHeight = 0;\r\n const $elementToBeSticky = $('.js-sticky');\r\n if ($elementToBeSticky.length) {\r\n const stickyMenuManager = new StickyMenuManager($elementToBeSticky, '.js-context-menu');\r\n stickyHeight = stickyMenuManager.getCloneHeight();\r\n }\r\n\r\n /* Two menu instances */\r\n /* The original menu and its clone (from the above code) */\r\n const $menus = $('.js-context-menu');\r\n\r\n /* Links in context menu */\r\n /* It's a sum of links from the original menu and its clone (fixed menu) */\r\n const $links = $menus.find('a[href*=\"#\"]');\r\n\r\n /* Sections on a product page, like: Product Information, Specification, Related products */\r\n const $sections = $('.js-context-menu-sections').find('section');\r\n\r\n /* Creating a ContextMenuManager */\r\n if ($links.length && $sections.length) {\r\n new ContextMenuManager($menus, $links, $sections, stickyHeight);\r\n }\r\n\r\n});","$(document).ready(function () {\r\n var languageSwitcher = $('.js-language-switcher');\r\n\r\n if (languageSwitcher.length > 0) {\r\n var mainContentWrapper = $('main > .inner').eq(0),\r\n mainContentWrapperPrevSibling = mainContentWrapper.prev(),\r\n nativeSelect = languageSwitcher.find('select')[0];\r\n\r\n $(languageSwitcher).insertBefore(mainContentWrapper).css('display', 'flex');\r\n\r\n mainContentWrapperPrevSibling.addClass('el-prev-language-switcher');\r\n\r\n nativeSelect.onchange = function () {\r\n nativeSelect.options[nativeSelect.selectedIndex].value && (window.location = nativeSelect.options[nativeSelect.selectedIndex].value);\r\n };\r\n }\r\n});","$(document).ready(function () {\r\n setHowManyImagesInARow();\r\n setStylingForImageOrientation();\r\n});\r\n\r\nfunction setHowManyImagesInARow() {\r\n var $imageGallery = $('.image-gallery');\r\n\r\n $imageGallery.each(function () {\r\n var imageGallery = $(this),\r\n imageGalleryWidth = imageGallery.width(),\r\n minWidth = 900;\r\n\r\n if (imageGalleryWidth < minWidth) {\r\n imageGallery.removeClass('many').addClass('few');\r\n }\r\n });\r\n}\r\n\r\nfunction setStylingForImageOrientation() {\r\n var $mediaGalleryImages = $('.image-gallery__image');\r\n\r\n $mediaGalleryImages.each(function () {\r\n var $image = $(this),\r\n width = $image.width(),\r\n height = $image.height();\r\n\r\n if (height > width) {\r\n $image.addClass('image-gallery__image--portrait');\r\n } else {\r\n $image.addClass('image-gallery__image--landscape');\r\n }\r\n })\r\n}","(function () {\r\n let isIMO = document.querySelector('.imo2020-header');\r\n\r\n if(isIMO) {\r\n /*\r\n * Add resize event to an element\r\n */\r\n var attachEvent = document.attachEvent,\r\n stylesCreated = false;\r\n\r\n if (!attachEvent) {\r\n var requestFrame = (function(){\r\n var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame ||\r\n function(fn){ return window.setTimeout(fn, 20); };\r\n return function(fn){ return raf(fn); };\r\n })();\r\n\r\n var cancelFrame = (function(){\r\n var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame ||\r\n window.clearTimeout;\r\n return function(id){ return cancel(id); };\r\n })();\r\n\r\n var resetTriggers = function (element){\r\n var triggers = element.__resizeTriggers__,\r\n expand = triggers.firstElementChild,\r\n contract = triggers.lastElementChild,\r\n expandChild = expand.firstElementChild;\r\n contract.scrollLeft = contract.scrollWidth;\r\n contract.scrollTop = contract.scrollHeight;\r\n expandChild.style.width = expand.offsetWidth + 1 + 'px';\r\n expandChild.style.height = expand.offsetHeight + 1 + 'px';\r\n expand.scrollLeft = expand.scrollWidth;\r\n expand.scrollTop = expand.scrollHeight;\r\n };\r\n\r\n var checkTriggers = function (element){\r\n return element.offsetWidth != element.__resizeLast__.width ||\r\n element.offsetHeight != element.__resizeLast__.height;\r\n }\r\n\r\n var scrollListener = function (e){\r\n var element = this;\r\n resetTriggers(this);\r\n if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__);\r\n this.__resizeRAF__ = requestFrame(function(){\r\n if (checkTriggers(element)) {\r\n element.__resizeLast__.width = element.offsetWidth;\r\n element.__resizeLast__.height = element.offsetHeight;\r\n element.__resizeListeners__.forEach(function(fn){\r\n fn.call(element, e);\r\n });\r\n }\r\n });\r\n };\r\n\r\n /* Detect CSS Animations support to detect element display/re-attach */\r\n var animation = false,\r\n animationstring = 'animation',\r\n keyframeprefix = '',\r\n animationstartevent = 'animationstart',\r\n domPrefixes = 'Webkit Moz O ms'.split(' '),\r\n startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '),\r\n pfx = '';\r\n {\r\n var elm = document.createElement('fakeelement');\r\n if( elm.style.animationName !== undefined ) { animation = true; }\r\n\r\n if( animation === false ) {\r\n for( var i = 0; i < domPrefixes.length; i++ ) {\r\n if( elm.style[ domPrefixes[i] + 'AnimationName' ] !== undefined ) {\r\n pfx = domPrefixes[ i ];\r\n animationstring = pfx + 'Animation';\r\n keyframeprefix = '-' + pfx.toLowerCase() + '-';\r\n animationstartevent = startEvents[ i ];\r\n animation = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n var animationName = 'resizeanim';\r\n var animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } ';\r\n var animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; ';\r\n }\r\n\r\n function createStyles() {\r\n if (!stylesCreated) {\r\n // opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\r\n var css = (animationKeyframes ? animationKeyframes : '') +\r\n '.resize-triggers { ' + (animationStyle ? animationStyle : '') + 'visibility: hidden; opacity: 0; } ' +\r\n '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \\\" \\\"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\r\n head = document.head || document.getElementsByTagName('head')[0],\r\n style = document.createElement('style');\r\n\r\n style.type = 'text/css';\r\n if (style.styleSheet) {\r\n style.styleSheet.cssText = css;\r\n } else {\r\n style.appendChild(document.createTextNode(css));\r\n }\r\n\r\n head.appendChild(style);\r\n stylesCreated = true;\r\n }\r\n }\r\n\r\n window.addResizeListener = function(element, fn){\r\n if (attachEvent) element.attachEvent('onresize', fn);\r\n else {\r\n if (!element.__resizeTriggers__) {\r\n if (getComputedStyle(element).position == 'static') element.style.position = 'relative';\r\n createStyles();\r\n element.__resizeLast__ = {};\r\n element.__resizeListeners__ = [];\r\n (element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers';\r\n element.__resizeTriggers__.innerHTML = '
    ' +\r\n '
    ';\r\n element.appendChild(element.__resizeTriggers__);\r\n resetTriggers(element);\r\n element.addEventListener('scroll', scrollListener, true);\r\n\r\n /* Listen for a css animation to detect element display/re-attach */\r\n animationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function(e) {\r\n if(e.animationName == animationName)\r\n resetTriggers(element);\r\n });\r\n }\r\n element.__resizeListeners__.push(fn);\r\n }\r\n };\r\n\r\n window.removeResizeListener = function(element, fn){\r\n if (attachEvent) element.detachEvent('onresize', fn);\r\n else {\r\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\r\n if (!element.__resizeListeners__.length) {\r\n element.removeEventListener('scroll', scrollListener);\r\n element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n $(window).on('scroll', function () {\r\n if ($(window).scrollTop() > 100) {\r\n $('.imo2020-header__menu--floating').removeClass('hidden');\r\n }\r\n else {\r\n $('.imo2020-header__menu--floating').addClass('hidden');\r\n }\r\n });\r\n }\r\n\r\n /*\r\n * Adds scroll animation to an element\r\n *\r\n * params:\r\n * element\r\n * direction (1 | -1) - direction of animation (negative for reverse)\r\n * axis (\"x\" | \"y\") animated axis\r\n * offset (+ | - int) - element/parent element pixels visible in viewport before we start the animation\r\n */\r\n\r\n function addScrollAnimation(element, direction, axis, offset) {\r\n let offsetTop;\r\n\r\n if (!element) {\r\n return;\r\n } else {\r\n offsetTop = getElementOffsetTop(element);\r\n }\r\n\r\n /* Add event listeners */\r\n\r\n window.addEventListener(\"load\", function () {\r\n setTransform(element, offsetTop, direction, axis, offset);\r\n }, false);\r\n\r\n window.addEventListener(\"scroll\", function () {\r\n setTransform(element, offsetTop, direction, axis, offset);\r\n }, false);\r\n }\r\n\r\n\r\n /*\r\n * Calculates target element offset based on all its parents' offsets\r\n */\r\n\r\n function getElementOffsetTop(element) {\r\n let top = 0;\r\n\r\n do {\r\n top += element.offsetTop || 0;\r\n element = element.offsetParent;\r\n } while (element);\r\n\r\n return top;\r\n }\r\n\r\n\r\n /*\r\n * Sets element transform\r\n */\r\n\r\n function setTransform(element, offsetTop, direction, axis, offset) {\r\n let min = 0;\r\n let scroll = window.pageYOffset;\r\n let translate = scroll - offsetTop + window.innerHeight + offset;\r\n\r\n if (translate < min) {\r\n translate = min;\r\n } else if (translate > element.parentElement.offsetHeight - element.offsetHeight) {\r\n translate = element.parentElement.offsetHeight - element.offsetHeight;\r\n }\r\n\r\n element.style.transform = `translate${axis}(${(translate) * direction}px)`;\r\n }\r\n\r\n\r\n /*\r\n * Init scroll animation\r\n */\r\n\r\n let ship = document.querySelector(\"[js-ship]\");\r\n\r\n if (ship) {\r\n addScrollAnimation(ship, 1, \"y\", -((window.innerHeight + ship.offsetHeight) / 2));\r\n }\r\n\r\n\r\n /*\r\n * Init height check for ship background\r\n */\r\n\r\n let shipBg = document.querySelector(\"[js-ship-bg]\");\r\n\r\n if (ship && shipBg) {\r\n initHeightWatch(shipBg);\r\n }\r\n\r\n /*\r\n * Add event listeners to\r\n */\r\n\r\n function initHeightWatch(element) {\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n window.addEventListener(\"resize\", function () {\r\n if (window.innerWidth > 900) {\r\n fixShipBgCutoff(element);\r\n }\r\n }, false);\r\n\r\n window.addEventListener(\"load\", function () {\r\n fixShipBgCutoff(element);\r\n }, false);\r\n }\r\n\r\n\r\n /*\r\n * Changes element's height to prevent bg cutoff at the top\r\n * based on parent element's height\r\n */\r\n\r\n function fixShipBgCutoff(element) {\r\n // Actual size of the background used (for the proportions)\r\n let height = 167;\r\n let width = 124;\r\n // Element translation from the top (in pixels)\r\n let offset = 140;\r\n\r\n let elementWidth = element.offsetWidth;\r\n let imageHeight = Math.floor(height * elementWidth / width);\r\n let parentHeight = Math.floor(element.parentElement.offsetHeight - offset);\r\n\r\n let newHeight = parentHeight - (parentHeight % imageHeight);\r\n\r\n if (parentHeight - newHeight >= imageHeight) {\r\n newHeight += imageHeight;\r\n }\r\n\r\n element.style.height = `${newHeight}px`;\r\n }\r\n\r\n\r\n /*\r\n * Survey submit scroll\r\n */\r\n\r\n let surveyIframe = document.querySelector(\"#survey iframe\");\r\n let surveyLoadFlag = false;\r\n\r\n\r\n /*\r\n * Add event listeners for survey iframe load\r\n */\r\n\r\n if (surveyIframe) {\r\n surveyIframe.addEventListener(\"load\", handleIframeLoad, false);\r\n }\r\n\r\n\r\n /*\r\n * Scroll to the survey if it was loaded for the second time (TYP was shown)\r\n */\r\n\r\n function handleIframeLoad() {\r\n\r\n if(surveyLoadFlag) {\r\n surveyIframe.scrollIntoView();\r\n }\r\n\r\n surveyLoadFlag = true;\r\n }\r\n\r\n\r\n let steps = document.querySelector(\".steps\");\r\n\r\n /*\r\n * Setting up event listeners for collapsible steps\r\n */\r\n\r\n document.querySelectorAll(\".steps__item--collapsible\").forEach(element => {\r\n element.addEventListener(\"click\", function(e){\r\n if(e.target.classList.contains(\"single-teaser\") ||\r\n e.target.classList.contains(\"single-teaser-image\") ||\r\n e.target.classList.contains(\"video-play\") ||\r\n e.target.classList.contains(\"image-open\")) {\r\n return;\r\n }\r\n\r\n e.stopPropagation();\r\n this.classList.toggle(\"collapsed\");\r\n\r\n // Calling fixShipBgCutoff twice to reduce bg overflow when still transitioning\r\n fixShipBgCutoff(shipBg);\r\n });\r\n\r\n addResizeListener(element, function(){\r\n if(this.classList.contains(\"collapsed\")) {\r\n window.scrollTo(0, getElementOffsetTop(steps));\r\n } else {\r\n window.scrollTo(0, getElementOffsetTop(this));\r\n }\r\n fixShipBgCutoff(shipBg);\r\n });\r\n });\r\n}());","function Accordion(sections) {\r\n this.sections = sections;\r\n this.activeSection = '';\r\n\r\n for(let section of this.sections) {\r\n section.isOpen = false;\r\n section.accordionTriggers = findChildrenWithClass(section, \"accordion__trigger\");\r\n section.accordionContent = findChildrenWithClass(section, \"accordion__content\");\r\n }\r\n\r\n this.setupEvents();\r\n}\r\n\r\n\r\nAccordion.prototype.setupEvents = function () {\r\n for(let section of this.sections) {\r\n if(section.accordionTriggers.length && section.accordionContent.length) {\r\n for(let trigger of section.accordionTriggers) {\r\n // Set tabIndex to allow keyboard controls\r\n trigger.tabIndex = 0;\r\n\r\n trigger.addEventListener(\"click\", e => {\r\n this.handleEvent(section);\r\n });\r\n\r\n trigger.addEventListener(\"keydown\", (e) => {\r\n if(e.keyCode === 13) {\r\n this.handleEvent(section);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n};\r\n\r\nAccordion.prototype.handleEvent = function(section) {\r\n section.isActive = !section.isActive;\r\n this.updateSection(section);\r\n\r\n if(section.isActive) {\r\n if(this.activeSection.id !== section.id) {\r\n if(this.activeSection) {\r\n this.activeSection.isActive = false;\r\n this.updateSection(this.activeSection);\r\n this.activeSection = \"\";\r\n }\r\n section.isActive = true;\r\n this.updateSection(section);\r\n this.activeSection = section;\r\n }\r\n } else {\r\n this.activeSection = \"\";\r\n this.updateSection(section);\r\n }\r\n};\r\n\r\nAccordion.prototype.updateSection = function(section) {\r\n if(section.isActive) {\r\n section.classList.add(\"open\");\r\n } else {\r\n section.classList.remove(\"open\");\r\n }\r\n\r\n for(let trigger of section.accordionTriggers) {\r\n trigger.setAttribute(\"aria-expanded\", section.isActive);\r\n }\r\n\r\n for(let content of section.accordionContent) {\r\n content.setAttribute(\"aria-hidden\", !section.isActive);\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Returns an array of element's children that have a specific class\r\n */\r\n\r\nfunction findChildrenWithClass(parent, className) {\r\n let children = [];\r\n\r\n for(let child of parent.children) {\r\n if(child.classList.contains(className)) {\r\n children.push(child);\r\n }\r\n }\r\n\r\n return children;\r\n}\r\n\r\n\r\n/*\r\n * ACCORDION COMPONENT INITIALIZATION\r\n * Valid HTML structure is as follows:\r\n * .accordion\r\n * \t.accordion__section\r\n *\t\t\t.accordion__trigger\r\n *\t\t\t.accordion__content\r\n */\r\n\r\n(function() {\r\n let accordionComponents = document.querySelectorAll(\".accordion\");\r\n\r\n for(let accordion of accordionComponents) {\r\n let accordionSections = findChildrenWithClass(accordion, \"accordion__section\");\r\n accordionSections = accordionSections.filter(function(section) {\r\n if(!section.classList.contains(\"accordion__section--empty\")) {\r\n return section;\r\n }\r\n });\r\n if(accordionSections.length) {\r\n new Accordion(accordionSections);\r\n }\r\n }\r\n}());\r\n","(function () {\r\n\r\n /* Function that adds the tab interaction to the block */\r\n /* It finds the buttons and the corresponding content (with the same id) */\r\n /* and make the content display only for a selected tab button */\r\n function tabify (block) {\r\n\r\n /* buttons - array of tab buttons */\r\n /* contents - array of corresponding content */\r\n const buttons = Array.prototype.slice.apply(block.querySelectorAll('.js-tabs-block__button'));\r\n let contents = [];\r\n let currentTabSelected = 0;\r\n let currentTabFocused = 0;\r\n\r\n buttons.forEach(button => {\r\n /* Find content with the same id as button */\r\n const content = block.querySelector(`.js-tabs-block__content[data-tab-id=\"${button.dataset.tabId}\"]`);\r\n contents.push(content ? content : null);\r\n });\r\n\r\n function toggleDisplayContent(element, ifDisplay) {\r\n if (element) {\r\n if (ifDisplay) {\r\n element.classList.add('tab-active');\r\n element.ariaExpanded = \"true\";\r\n } else {\r\n element.classList.remove('tab-active');\r\n element.ariaExpanded = \"false\";\r\n }\r\n }\r\n }\r\n function toggleActiveTab(element, ifActive) {\r\n if (element) {\r\n if (ifActive) {\r\n element.classList.add('active');\r\n element.ariaSelected = \"true\";\r\n } else {\r\n element.classList.remove('active');\r\n element.ariaSelected = \"false\";\r\n }\r\n }\r\n }\r\n function toggleFocusTab(element, ifFocus) {\r\n if (element) {\r\n if (ifFocus) {\r\n element.setAttribute(\"tabindex\", 0);\r\n element.focus();\r\n } else {\r\n element.setAttribute(\"tabindex\", -1);\r\n }\r\n }\r\n }\r\n function moveFocusNext() {\r\n currentTabFocused++;\r\n if (currentTabFocused >= buttons.length) {\r\n currentTabFocused = 0;\r\n }\r\n }\r\n function moveFocusPrev() {\r\n currentTabFocused--;\r\n if (currentTabFocused < 0) {\r\n currentTabFocused = buttons.length - 1;\r\n }\r\n }\r\n function setTab( index ) {\r\n toggleDisplayContent(contents[currentTabSelected], false);\r\n toggleActiveTab(buttons[currentTabSelected], false);\r\n toggleDisplayContent(contents[index], true);\r\n toggleActiveTab(buttons[index], true);\r\n currentTabSelected = index;\r\n }\r\n function handleKeyDown (e) {\r\n if (e.keyCode === 39 || e.keyCode === 37) {\r\n toggleFocusTab(buttons[currentTabFocused], false);\r\n if (e.keyCode === 39) { moveFocusNext(); }\r\n else if (e.keyCode === 37) { moveFocusPrev(); }\r\n toggleFocusTab(buttons[currentTabFocused], true);\r\n }\r\n }\r\n function init() {\r\n /* clear state */\r\n contents.forEach(item => { toggleDisplayContent(item, false); });\r\n buttons.forEach(item => { toggleActiveTab(item, false); });\r\n buttons.forEach(item => { toggleFocusTab(item, false); });\r\n\r\n /* init state */\r\n setTab(currentTabSelected);\r\n\r\n /* event listeners */\r\n buttons.forEach((item, index) => item.onclick = event => setTab(index));\r\n buttons.forEach((item) => item.onkeydown = event => handleKeyDown(event));\r\n }\r\n\r\n init();\r\n }\r\n\r\n [...document.querySelectorAll('.js-tabs-block')]\r\n .forEach(x => tabify(x));\r\n}());\r\n","(function () {\r\n const insuranceElements = document.querySelectorAll('.insurance-products');\r\n\r\n if (insuranceElements) {\r\n insuranceElements.forEach((element) => {\r\n const header = element.querySelector('.insurance-products__header');\r\n const list = element.querySelector('.insurance-products__list');\r\n\r\n header.addEventListener('click', function () {\r\n if (window.innerWidth < 700) {\r\n if (getComputedStyle(list).display === 'none') {\r\n list.style.display = 'flex';\r\n header.classList.add('expanded');\r\n } else {\r\n list.style.display = 'none';\r\n header.classList.remove('expanded');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n})();\r\n","import { checkRecaptcha } from './helpers.js';\r\n\r\n(function () {\r\n const links = document.querySelectorAll('.--require-recaptcha');\r\n\r\n if (links.length > 0) {\r\n links.forEach((linkEl) => {\r\n linkEl.addEventListener('click', function (e) {\r\n e.preventDefault();\r\n checkRecaptcha().then((isValidated) => {\r\n if (isValidated) {\r\n const isPrintLink = linkEl.href === 'javascript:window.print()';\r\n if (isPrintLink) {\r\n window.print();\r\n } else {\r\n window.open(linkEl.href, '__blank');\r\n }\r\n }\r\n });\r\n });\r\n });\r\n }\r\n})();\r\n","const EXISTING_SHIP = 'existing-ship';\r\nconst NEW_BUILD = 'new-build';\r\n\r\nconst constants = {\r\n EXISTING_SHIP,\r\n NEW_BUILD,\r\n};\r\n\r\nconst tooltipsConstants = {\r\n HELP_TEXT_ANNUAL_LEAKAGE_RATE: 'HelpTextAnnualLeakageRate',\r\n HELP_TEXT_HIGH_GWP_REFRIGERANT: 'HelpTextHighGwpRefrigerant',\r\n HELP_TEXT_LOW_GWP_REFRIGERANT: 'HelpTextLowGwpRefrigerant',\r\n // HELP_TEXT_REFRIGERANT_LOSS: 'HelpTextRefrigerantLoss',\r\n HELP_TEXT_TOTAL_QUANTITY_NEW_BUILD: 'NewBuildHelpTextTotalQuantity',\r\n HELP_TEXT_TOTAL_QUANTITY_EXISTING_SHIP: 'ExistingHelpTextTotalQuantity',\r\n};\r\n\r\nconst equivalentConstants = {\r\n NumberOfCars: {label:\"Number of gasoline powered passenger cars taken off the road\", iconUrl: \"/Static/prod/images/car.svg\"},\r\n NumberOfHomes: {label: \"Number of homes electricity use\", iconUrl: \"/Static/prod/images/house.svg\"},\r\n NumberOfSmartphones: {label: \"Number of smartphones charged\", iconUrl: \"/Static/prod/images/phone.svg\"},\r\n NumberOfTreesPlanted: {label: \"Number of tree seedings needed to convert CO2 to oxygen for 10 years\", iconUrl: \"/Static/prod/images/tree.svg\"}\r\n}\r\n\r\nconst LEAKAGE_MIN_RATE = 20;\r\nconst LEAKAGE_MAX_RATE = 40;\r\n\r\nfunction isNumberKey(evt) {\r\n var charCode = evt.which ? evt.which : evt.keyCode;\r\n if (\r\n (charCode >= 37 && charCode <= 40) || // arrows\r\n charCode === 46 || // delete\r\n charCode === 190 // period\r\n ) {\r\n return true; // Arrows, delete keys\r\n }\r\n if (charCode > 31 && (charCode < 48 || charCode > 57)) return false; // Non number keys\r\n return true;\r\n}\r\n\r\nconst createTooltip = (content) => {\r\n const tooltipEl = document.createElement('div');\r\n tooltipEl.classList.add('refrigerant-calculator__tooltip');\r\n\r\n const tooltipBox = document.createElement('div');\r\n tooltipBox.classList.add('refrigerant-calculator__tooltip-box');\r\n\r\n const tooltipContent = document.createElement('div');\r\n tooltipContent.style.width = '220px';\r\n tooltipContent.style.paddingRight = '6px';\r\n tooltipContent.innerHTML = content;\r\n\r\n const closeBtn = document.createElement('button');\r\n closeBtn.classList.add('refrigerant-calculator__tooltip-close-btn');\r\n\r\n tooltipBox.append(tooltipContent, closeBtn);\r\n\r\n closeBtn.addEventListener('click', function (e) {\r\n e.stopPropagation();\r\n tooltipBox.style.visibility = 'hidden';\r\n });\r\n tooltipEl.addEventListener('click', function () {\r\n const tooltips = document.querySelectorAll(\r\n '.refrigerant-calculator__tooltip-box'\r\n );\r\n tooltips.forEach((item) => {\r\n item.style.visibility = 'hidden';\r\n });\r\n\r\n tooltipBox.style.visibility = 'visible';\r\n });\r\n\r\n tooltipEl.append(tooltipBox);\r\n\r\n return tooltipEl;\r\n};\r\n\r\nconst getTooltips = () => {\r\n const tooltipsContainer = document.querySelector(\r\n '.refrigerant-calculator__tooltips'\r\n );\r\n const tooltipsList = Array.from(tooltipsContainer.children);\r\n\r\n const tooltipsObj = {};\r\n\r\n tooltipsList.forEach((item) => {\r\n const { id, content } = item.dataset;\r\n tooltipsObj[id] = content;\r\n });\r\n\r\n return tooltipsObj;\r\n};\r\n\r\nconst getLeakagePreview = () => {\r\n const leakagePercentageInput = document.getElementById(\r\n `${NEW_BUILD}-leakage-rate`\r\n );\r\n const quantityInput = document.getElementById(`${NEW_BUILD}-quantity`);\r\n\r\n const quantity = Number(quantityInput.value);\r\n const percentage = Number(leakagePercentageInput.value);\r\n\r\n const result = Number((quantity * (percentage / 100)).toFixed(2));\r\n\r\n return result;\r\n};\r\n\r\nconst createStats = ({ items, type }) => {\r\n const chosenItem = items.find((item) => item.IsChosen === true);\r\n const { EmissionReduction, Name } = chosenItem;\r\n\r\n let emissionReductionString = EmissionReduction.ValueInKg.toLocaleString(\r\n 'en-US'\r\n );\r\n emissionReductionString = `${emissionReductionString} kg CO₂e`;\r\n\r\n const percentageString = EmissionReduction.Percentage.toLocaleString('en-US');\r\n\r\n const wrapperEl = document.createElement('div');\r\n wrapperEl.classList.add('refrigerant-stats');\r\n\r\n const headingEl = document.createElement('p');\r\n headingEl.classList.add('refrigerant-stats__heading');\r\n headingEl.innerHTML =\r\n type === EXISTING_SHIP\r\n ? `Adopting ${Name} can help you reduce yearly emission by:`\r\n : 'Adopting the low GWP refrigerant type you have avoided yearly emission by:';\r\n\r\n const amountHeadingEl = document.createElement('h2');\r\n amountHeadingEl.classList.add('refrigerant-stats__amount-heading');\r\n amountHeadingEl.innerHTML = emissionReductionString;\r\n\r\n const reductionHeadingEl = document.createElement('h3');\r\n reductionHeadingEl.classList.add('refrigerant-stats__reduction-heading');\r\n reductionHeadingEl.innerHTML = `${percentageString}% CO₂e reduction`;\r\n\r\n const equivalentListEl = createEquivalentList(chosenItem);\r\n\r\n\r\n const otherRefrigerantsHeadingEl = document.createElement('p');\r\n otherRefrigerantsHeadingEl.classList.add('refrigerant-stats__other-heading');\r\n otherRefrigerantsHeadingEl.textContent =\r\n type === EXISTING_SHIP\r\n ? 'Other Retrofit Refrigerants:'\r\n : 'Other Low GWP Refrigerants:';\r\n\r\n const coEmissionTextEl = document.createElement('p');\r\n coEmissionTextEl.classList.add('refrigerant-stats__co-emission');\r\n coEmissionTextEl.innerHTML = `CO₂e emission`;\r\n\r\n const graphEl = createGraph(items, type);\r\n\r\n const printButton = document.createElement('div');\r\n printButton.classList.add('refrigerant-stats__print-btn');\r\n const printLink = document.createElement('a');\r\n printLink.setAttribute('href', 'javascript:window.print()');\r\n printLink.classList.add(\r\n 'products-link--inverted',\r\n 'products-icon',\r\n 'products-icon--print'\r\n );\r\n printLink.innerHTML = 'Print';\r\n printButton.append(printLink);\r\n\r\n wrapperEl.append(\r\n headingEl,\r\n reductionHeadingEl,\r\n amountHeadingEl,\r\n equivalentListEl,\r\n otherRefrigerantsHeadingEl,\r\n coEmissionTextEl,\r\n graphEl,\r\n printButton\r\n );\r\n\r\n return wrapperEl;\r\n};\r\n\r\nconst createEquivalentItem = ({value, label, iconUrl}) => {\r\n const itemEl = document.createElement('li');\r\n itemEl.classList.add(\"refrigerant-stats__equivalent-item\");\r\n\r\n let itemValueString = value.toLocaleString('en-US');\r\n\r\n const itemValueIconEl = document.createElement('span');\r\n itemValueIconEl.classList.add(\"refrigerant-stats__equivalent-item-icon\");\r\n const iconEl = document.createElement('img');\r\n iconEl.setAttribute('src', iconUrl);\r\n itemValueIconEl.append(iconEl);\r\n itemEl.append(itemValueIconEl);\r\n\r\n const textsEl = document.createElement('span');\r\n const itemValueEl = document.createElement('h4');\r\n itemValueEl.textContent = itemValueString;\r\n textsEl.append(itemValueEl);\r\n const itemLabelEl = document.createElement('p');\r\n itemLabelEl.textContent = label;\r\n textsEl.append(itemLabelEl);\r\n itemEl.append(textsEl);\r\n\r\n return itemEl;\r\n}\r\n\r\nconst createEquivalentList = (chosenItem) => {\r\n const wrapperEl = document.createElement('div');\r\n wrapperEl.classList.add('refrigerant-stats__equivalent')\r\n\r\n const equivalentHeadingEl = document.createElement('p');\r\n equivalentHeadingEl.classList.add('refrigerant-stats__equivalent-heading')\r\n equivalentHeadingEl.textContent = 'The amount of CO₂ is equivalent to:';\r\n wrapperEl.append(equivalentHeadingEl);\r\n\r\n const equivalentItemsEl = document.createElement('ul');\r\n equivalentItemsEl.classList.add(\"refrigerant-stats__equivalent-items\")\r\n\r\n for (const [key, value] of Object.entries(chosenItem.EmissionReduction)) {\r\n if (Object.keys(equivalentConstants).includes(key)) {\r\n const equivalentItem = createEquivalentItem({\r\n value: value,\r\n label: equivalentConstants[key].label,\r\n iconUrl: equivalentConstants[key].iconUrl\r\n });\r\n equivalentItemsEl.append(equivalentItem);\r\n }\r\n }\r\n wrapperEl.append(equivalentItemsEl);\r\n\r\n const equivalentDescriptionEl = document.createElement('p');\r\n equivalentDescriptionEl.classList.add('refrigerant-stats__equivalent-description')\r\n equivalentDescriptionEl.textContent = `Estimated values are taking reference from `;\r\n const epaLink = document.createElement('a');\r\n epaLink.setAttribute('href', 'https://www.epa.gov/energy/greenhouse-gases-equivalencies-calculator-calculations-and-references');\r\n epaLink.setAttribute('target', \"_blank\");\r\n epaLink.setAttribute('rel', \"noopener noreferrer\");\r\n epaLink.innerHTML = 'EPA greenhouse gas equivalencies calculator';\r\n equivalentDescriptionEl.append(epaLink)\r\n wrapperEl.append(equivalentDescriptionEl);\r\n\r\n return wrapperEl;\r\n}\r\n\r\nconst createGraph = (items, type) => {\r\n const wrapperEl = document.createElement('ul');\r\n wrapperEl.classList.add('refrigerant-stats__graph');\r\n\r\n items.forEach((item) => {\r\n const { Name, IsCurrent, IsChosen, EmissionReduction } = item;\r\n\r\n const listItem = createGraphItem({\r\n name: Name,\r\n isCurrent: IsCurrent,\r\n isChosen: IsChosen,\r\n percentage: EmissionReduction.Percentage,\r\n type: type,\r\n });\r\n\r\n wrapperEl.append(listItem);\r\n });\r\n\r\n return wrapperEl;\r\n};\r\n\r\nconst createGraphItem = ({ isCurrent, isChosen, percentage, name, type }) => {\r\n const percentageString = percentage.toLocaleString('en-US');\r\n\r\n const wrapper = document.createElement('li');\r\n wrapper.classList.add('refrigerant-stats__item');\r\n\r\n const nameEl = document.createElement('p');\r\n nameEl.classList.add('refrigerant-stats__item-name');\r\n if (isCurrent) {\r\n nameEl.innerHTML =\r\n type === NEW_BUILD ? 'High GWP Refrigerant' : 'Your current refrigerant';\r\n } else {\r\n nameEl.innerHTML = name;\r\n }\r\n\r\n if (isCurrent || isChosen) {\r\n nameEl.classList.add('highlighted');\r\n }\r\n\r\n const progressWrapper = document.createElement('div');\r\n progressWrapper.classList.add('refrigerant-stats__progress-box');\r\n\r\n if (isCurrent) {\r\n progressWrapper.classList.add('current');\r\n } else if (isChosen) {\r\n progressWrapper.classList.add('chosen');\r\n }\r\n\r\n const progressBar = document.createElement('div');\r\n progressBar.classList.add('refrigerant-stats__progress-bar');\r\n progressBar.style.width = `${Math.round(percentage)}%`;\r\n\r\n const percentageText = document.createElement('p');\r\n percentageText.classList.add('refrigerant-stats__progress-text');\r\n percentageText.innerHTML = isCurrent ? '' : `${percentageString}% reduction`;\r\n if (isCurrent) percentageText.style.display = 'none';\r\n\r\n progressWrapper.append(percentageText, progressBar);\r\n\r\n wrapper.append(nameEl, progressWrapper);\r\n\r\n return wrapper;\r\n};\r\n\r\nconst addOptionsToSelect = ({ items, selectEl }) => {\r\n items.forEach((el) => {\r\n const { name, id } = el;\r\n selectEl.insertAdjacentHTML(\r\n 'beforeend',\r\n ``\r\n );\r\n });\r\n};\r\n\r\nconst updateOptionsInSelect = ({ id, items, placeholder }) => {\r\n const firstEl = document.createElement('option');\r\n firstEl.innerHTML = placeholder;\r\n\r\n const selectEl = document.getElementById(id);\r\n selectEl.innerHTML = '';\r\n selectEl.append(firstEl);\r\n\r\n addOptionsToSelect({ items, selectEl });\r\n if (items.length === 1) {\r\n selectEl.selectedIndex = 1;\r\n }\r\n};\r\n\r\nconst createSelectElement = ({ label, placeholder, items, id, onChange }) => {\r\n const selectEl = document.createElement('select');\r\n const labelEl = document.createElement('label');\r\n const firstEl = document.createElement('option');\r\n\r\n labelEl.setAttribute('for', id);\r\n labelEl.innerHTML = label;\r\n\r\n firstEl.innerHTML = placeholder;\r\n selectEl.setAttribute('id', id);\r\n\r\n placeholder && selectEl.append(firstEl);\r\n addOptionsToSelect({ items, selectEl });\r\n\r\n selectEl.addEventListener('change', () => {\r\n const index = selectEl.selectedIndex;\r\n onChange && onChange(index);\r\n });\r\n\r\n return { selectEl, labelEl };\r\n};\r\n\r\nconst createInputFields = (type) => {\r\n const tooltipsList = getTooltips();\r\n const {\r\n HELP_TEXT_TOTAL_QUANTITY_EXISTING_SHIP,\r\n HELP_TEXT_TOTAL_QUANTITY_NEW_BUILD,\r\n HELP_TEXT_ANNUAL_LEAKAGE_RATE,\r\n // HELP_TEXT_REFRIGERANT_LOSS,\r\n } = tooltipsConstants;\r\n\r\n const wrapperEl = document.createElement('div');\r\n wrapperEl.classList.add('refrigerant-calculator__inputs-wrapper');\r\n\r\n const quantityWrapper = document.createElement('div');\r\n const quantityLabelEl = document.createElement('label');\r\n quantityLabelEl.innerHTML = 'Total Quantity';\r\n quantityLabelEl.setAttribute('for', `${type}-quantity`);\r\n\r\n const quantityInputEl = document.createElement('input');\r\n quantityInputEl.setAttribute('type', 'number');\r\n quantityInputEl.setAttribute('min', '0');\r\n quantityInputEl.setAttribute('value', `0`);\r\n quantityInputEl.setAttribute('id', `${type}-quantity`);\r\n\r\n if (type === NEW_BUILD) {\r\n const quantityTooltip = createTooltip(\r\n tooltipsList[HELP_TEXT_TOTAL_QUANTITY_NEW_BUILD]\r\n );\r\n quantityLabelEl.append(quantityTooltip);\r\n\r\n quantityInputEl.style.width = '180px';\r\n } else if (type === EXISTING_SHIP) {\r\n const quantityTooltip = createTooltip(\r\n tooltipsList[HELP_TEXT_TOTAL_QUANTITY_EXISTING_SHIP]\r\n );\r\n quantityLabelEl.append(quantityTooltip);\r\n }\r\n\r\n quantityInputEl.addEventListener('keydown', function (e) {\r\n if (!isNumberKey(e)) e.preventDefault();\r\n });\r\n\r\n const unitWrapper = document.createElement('div');\r\n const unitSelect = createSelectElement({\r\n label: 'Unit',\r\n items: [\r\n { name: 'kg', id: 'Kg' },\r\n { name: 'lbs', id: 'Lbs' },\r\n ],\r\n id: `${type}-unit`,\r\n });\r\n\r\n unitWrapper.append(unitSelect.labelEl, unitSelect.selectEl);\r\n quantityWrapper.append(quantityLabelEl, quantityInputEl);\r\n\r\n wrapperEl.append(quantityWrapper, unitWrapper);\r\n\r\n if (type === EXISTING_SHIP) {\r\n const periodWrapper = document.createElement('div');\r\n const items = [\r\n { name: 'Monthly', id: 12 },\r\n { name: 'Quarterly', id: 4 },\r\n { name: 'Annual', id: 1 },\r\n ];\r\n const { labelEl, selectEl } = createSelectElement({\r\n label: 'Period',\r\n items: items,\r\n id: `${type}-period`,\r\n });\r\n periodWrapper.append(labelEl, selectEl);\r\n\r\n wrapperEl.append(periodWrapper);\r\n } else if (type === NEW_BUILD) {\r\n const leakageWrapper = document.createElement('div');\r\n\r\n const leakageLabelEl = document.createElement('label');\r\n leakageLabelEl.innerHTML = 'Annual Leakage Rate';\r\n leakageLabelEl.setAttribute('for', `${type}-leakage-rate`);\r\n\r\n const leakageTooltip = createTooltip(\r\n tooltipsList[HELP_TEXT_ANNUAL_LEAKAGE_RATE]\r\n );\r\n leakageLabelEl.append(leakageTooltip);\r\n\r\n const leakageInputEl = document.createElement('input');\r\n leakageInputEl.setAttribute('type', 'number');\r\n leakageInputEl.setAttribute('min', '20');\r\n leakageInputEl.setAttribute('max', '40');\r\n leakageInputEl.setAttribute('value', `20`);\r\n leakageInputEl.setAttribute('id', `${type}-leakage-rate`);\r\n\r\n const leakageInnerWrapper = document.createElement('div');\r\n leakageInnerWrapper.classList.add(\r\n 'refrigerant-calculator__leakage-wrapper'\r\n );\r\n\r\n const percentageEl = document.createElement('span');\r\n percentageEl.innerHTML = '%';\r\n\r\n const leakagePreviewEl = document.createElement('div');\r\n leakagePreviewEl.classList.add('refrigerant-calculator__leakage-preview');\r\n\r\n const lekagePreviewAmount = document.createElement('span');\r\n lekagePreviewAmount.textContent = '0';\r\n\r\n const unitTextEl = document.createElement('span');\r\n unitTextEl.innerHTML = 'kg';\r\n\r\n leakageInputEl.addEventListener('change', function (e) {\r\n if (e.target.value < LEAKAGE_MIN_RATE) {\r\n e.target.value = LEAKAGE_MIN_RATE;\r\n } else if (e.target.value > LEAKAGE_MAX_RATE) {\r\n e.target.value = LEAKAGE_MAX_RATE;\r\n }\r\n\r\n const amount = getLeakagePreview();\r\n lekagePreviewAmount.textContent = amount;\r\n });\r\n leakageInputEl.addEventListener('keydown', function (e) {\r\n if (!isNumberKey(e)) e.preventDefault();\r\n });\r\n\r\n quantityInputEl.addEventListener('change', function (e) {\r\n const amount = getLeakagePreview();\r\n lekagePreviewAmount.textContent = amount;\r\n });\r\n\r\n leakagePreviewEl.append(lekagePreviewAmount, unitTextEl);\r\n leakageInnerWrapper.append(leakageInputEl, percentageEl, leakagePreviewEl);\r\n leakageWrapper.append(leakageLabelEl, leakageInnerWrapper);\r\n\r\n wrapperEl.append(leakageWrapper);\r\n }\r\n\r\n return wrapperEl;\r\n};\r\n\r\nexport {\r\n constants,\r\n tooltipsConstants,\r\n addOptionsToSelect,\r\n updateOptionsInSelect,\r\n createSelectElement,\r\n createInputFields,\r\n createStats,\r\n createTooltip,\r\n getTooltips,\r\n};\r\n","import {\r\n constants,\r\n tooltipsConstants,\r\n updateOptionsInSelect,\r\n createSelectElement,\r\n createInputFields,\r\n createStats,\r\n getTooltips,\r\n createTooltip,\r\n} from './refrigerant-calculator-helpers.js';\r\n\r\nconst { EXISTING_SHIP, NEW_BUILD } = constants;\r\n\r\nconst CURRENT_REFRIGERANT_ID = 'current-refrigerant';\r\nconst RETROFIT_REFRIGERANT_ID = 'retrofit-refrigerant';\r\nconst LOW_REFRIGERANT_ID = 'low-refrigerant';\r\nconst HIGH_REFRIGERANT_ID = 'high-refrigerant';\r\n\r\nconst RETROFIT_PLACEHOLDER = 'Select Retrofit Refrigerant';\r\nconst REFRIGERANT_PLACEHOLDER = 'Select Refrigerant';\r\nconst RETROFIT_LABEL = 'Retrofit Refrigerant';\r\n\r\nconst showStatsContainer = (data, type) => {\r\n const calculatorEl = document.querySelector('.refrigerant-calculator');\r\n const refrigerantStats = calculatorEl.querySelector('.refrigerant-stats');\r\n\r\n const stats = createStats({ items: data, type });\r\n\r\n if (refrigerantStats) {\r\n refrigerantStats.remove();\r\n }\r\n calculatorEl.append(stats);\r\n};\r\n\r\nconst submitNewBuildData = (type) => {\r\n const lowRefrigerantSelect = document.getElementById(LOW_REFRIGERANT_ID);\r\n const highRefrigerantSelect = document.getElementById(HIGH_REFRIGERANT_ID);\r\n const totalQuantityInput = document.getElementById(`${type}-quantity`);\r\n const unitInput = document.getElementById(`${type}-unit`);\r\n const leakageInput = document.getElementById(`${type}-leakage-rate`);\r\n\r\n const isRefrigerantSelected =\r\n lowRefrigerantSelect.selectedIndex > 0 &&\r\n highRefrigerantSelect.selectedIndex > 0;\r\n const isQuantityPositiveNum = Number(totalQuantityInput.value) > 0;\r\n\r\n const isValidData = isRefrigerantSelected && isQuantityPositiveNum;\r\n\r\n if (isValidData) {\r\n const lowData = lowRefrigerantSelect.selectedOptions[0].dataset;\r\n const lowId = Number(lowData.id);\r\n\r\n const highData = highRefrigerantSelect.selectedOptions[0].dataset;\r\n const highId = Number(highData.id);\r\n\r\n const amount = Number(totalQuantityInput.value);\r\n\r\n const unit = unitInput.selectedIndex;\r\n\r\n const leakageRate = Number(leakageInput.value) / 100;\r\n\r\n const reqBody = {\r\n HighGwpId: highId,\r\n LowGwpId: lowId,\r\n CalculatorType: 0,\r\n Amount: amount,\r\n Unit: unit,\r\n AnnualLeakageRate: leakageRate,\r\n };\r\n\r\n fetch(`${window.location.origin}/api/refrigerantcalculator/Calculate`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(reqBody),\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n showStatsContainer(data, NEW_BUILD);\r\n })\r\n .catch((error) => {\r\n console.error('Error:', error);\r\n });\r\n }\r\n};\r\n\r\nconst submitExistingShipData = (type) => {\r\n const currentRefrigerantSelect = document.getElementById(\r\n CURRENT_REFRIGERANT_ID\r\n );\r\n const retrofitRefrigerantSelect = document.getElementById(\r\n RETROFIT_REFRIGERANT_ID\r\n );\r\n const totalQuantityInput = document.getElementById(`${type}-quantity`);\r\n const unitInput = document.getElementById(`${type}-unit`);\r\n const periodInput = document.getElementById(`${type}-period`);\r\n\r\n const isRefrigerantSelected =\r\n currentRefrigerantSelect.selectedIndex > 0 &&\r\n retrofitRefrigerantSelect.selectedIndex > 0;\r\n const isQuantityPositiveNum = Number(totalQuantityInput.value) > 0;\r\n\r\n const isValidData = isRefrigerantSelected && isQuantityPositiveNum;\r\n\r\n if (isValidData) {\r\n const currentData = currentRefrigerantSelect.selectedOptions[0].dataset;\r\n const currentId = Number(currentData.id);\r\n\r\n const retrofitData = retrofitRefrigerantSelect.selectedOptions[0].dataset;\r\n const retrofitId = Number(retrofitData.id);\r\n\r\n const periodData = periodInput.selectedOptions[0].dataset;\r\n const periodId = Number(periodData.id);\r\n\r\n const amount = Number(totalQuantityInput.value);\r\n\r\n const unit = unitInput.selectedIndex;\r\n\r\n const reqBody = {\r\n HighGwpId: currentId,\r\n LowGwpId: retrofitId,\r\n CalculatorType: 1,\r\n Amount: amount,\r\n Unit: unit,\r\n Period: periodId,\r\n };\r\n\r\n fetch(`${window.location.origin}/api/refrigerantcalculator/Calculate`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(reqBody),\r\n })\r\n .then((response) => response.json())\r\n .then((data) => {\r\n showStatsContainer(data, EXISTING_SHIP);\r\n })\r\n .catch((error) => {\r\n console.error('Error:', error);\r\n });\r\n }\r\n};\r\n\r\nconst createExistingShipTab = (data) => {\r\n const existingShipEl = document.querySelector(\r\n '.refrigerant-calculator__existing-ship'\r\n );\r\n\r\n const submitButtonEl = document.createElement('button');\r\n submitButtonEl.innerHTML = 'Calculate your gain';\r\n submitButtonEl.style.marginTop = 'auto';\r\n\r\n submitButtonEl.addEventListener('click', () =>\r\n submitExistingShipData(EXISTING_SHIP)\r\n );\r\n\r\n const handleCurrentSelectChange = (index) => {\r\n updateOptionsInSelect({\r\n id: RETROFIT_REFRIGERANT_ID,\r\n items: index > 0 ? retrofitRefrigerantOptions[index - 1] : [],\r\n placeholder: RETROFIT_PLACEHOLDER,\r\n });\r\n };\r\n\r\n const currentRefrigerantOptions = data.map((item) => {\r\n const el = item.MainRefrigerant;\r\n const { Gwp, Name, Id } = el;\r\n\r\n return {\r\n name: `${Name} (${Gwp} GWP - AR4)`,\r\n id: Id,\r\n };\r\n });\r\n const retrofitRefrigerantOptions = data.map((item) => {\r\n const items = item.RelatedRefrigerants;\r\n const list = items.map((item) => {\r\n const { Name, Gwp, Id } = item;\r\n\r\n return {\r\n name: `${Name} (${Gwp} GWP - AR4)`,\r\n id: Id,\r\n };\r\n });\r\n return list;\r\n });\r\n\r\n const currentRefrigerantSelect = createSelectElement({\r\n label: 'Current Refrigerant',\r\n placeholder: REFRIGERANT_PLACEHOLDER,\r\n items: currentRefrigerantOptions,\r\n id: CURRENT_REFRIGERANT_ID,\r\n onChange: handleCurrentSelectChange,\r\n });\r\n\r\n const retrofitRefrigerantSelect = createSelectElement({\r\n label: RETROFIT_LABEL,\r\n placeholder: RETROFIT_PLACEHOLDER,\r\n items: [],\r\n id: RETROFIT_REFRIGERANT_ID,\r\n });\r\n\r\n const inputFields = createInputFields(EXISTING_SHIP);\r\n\r\n existingShipEl.append(\r\n currentRefrigerantSelect.labelEl,\r\n currentRefrigerantSelect.selectEl,\r\n inputFields,\r\n retrofitRefrigerantSelect.labelEl,\r\n retrofitRefrigerantSelect.selectEl,\r\n submitButtonEl\r\n );\r\n};\r\n\r\nconst createNewBuildTab = (data) => {\r\n const tooltipsList = getTooltips();\r\n const { HELP_TEXT_LOW_GWP_REFRIGERANT, HELP_TEXT_HIGH_GWP_REFRIGERANT } =\r\n tooltipsConstants;\r\n\r\n const newBuildEl = document.querySelector(\r\n '.refrigerant-calculator__new-build'\r\n );\r\n\r\n const submitButtonEl = document.createElement('button');\r\n submitButtonEl.innerHTML = 'Calculate your gain';\r\n submitButtonEl.style.marginTop = 'auto';\r\n\r\n submitButtonEl.addEventListener('click', () => submitNewBuildData(NEW_BUILD));\r\n\r\n const handleCurrentSelectChange = (index) => {\r\n updateOptionsInSelect({\r\n id: HIGH_REFRIGERANT_ID,\r\n items: index > 0 ? highRefrigerantOptions[index - 1] : [],\r\n placeholder: REFRIGERANT_PLACEHOLDER,\r\n });\r\n };\r\n\r\n const lowRefrigerantOptions = data.map((item) => {\r\n const el = item.MainRefrigerant;\r\n const { Gwp, Name, Id } = el;\r\n\r\n return {\r\n name: `${Name} (${Gwp} GWP - AR4)`,\r\n id: Id,\r\n };\r\n });\r\n\r\n const highRefrigerantOptions = data.map((item) => {\r\n const items = item.RelatedRefrigerants;\r\n const list = items.map((item) => {\r\n const { Name, Gwp, Id } = item;\r\n\r\n return {\r\n name: `${Name} (${Gwp} GWP - AR4)`,\r\n id: Id,\r\n };\r\n });\r\n return list;\r\n });\r\n\r\n const lowRefrigerantSelect = createSelectElement({\r\n label: 'Low GWP Refrigerant',\r\n placeholder: REFRIGERANT_PLACEHOLDER,\r\n items: lowRefrigerantOptions,\r\n id: LOW_REFRIGERANT_ID,\r\n onChange: handleCurrentSelectChange,\r\n });\r\n const lowRefrigerantTooltip = createTooltip(\r\n tooltipsList[HELP_TEXT_LOW_GWP_REFRIGERANT]\r\n );\r\n lowRefrigerantSelect.labelEl.append(lowRefrigerantTooltip);\r\n\r\n const highRefrigerantSelect = createSelectElement({\r\n label: 'High GWP Refrigerant',\r\n placeholder: REFRIGERANT_PLACEHOLDER,\r\n items: [],\r\n id: HIGH_REFRIGERANT_ID,\r\n });\r\n const highRefrigerantTooltip = createTooltip(\r\n tooltipsList[HELP_TEXT_HIGH_GWP_REFRIGERANT]\r\n );\r\n highRefrigerantSelect.labelEl.append(highRefrigerantTooltip);\r\n\r\n const inputFields = createInputFields(NEW_BUILD);\r\n\r\n newBuildEl.append(\r\n lowRefrigerantSelect.labelEl,\r\n lowRefrigerantSelect.selectEl,\r\n inputFields,\r\n highRefrigerantSelect.labelEl,\r\n highRefrigerantSelect.selectEl,\r\n submitButtonEl\r\n );\r\n};\r\n\r\n(function () {\r\n const calculatorEl = document.querySelector('.refrigerant-calculator');\r\n\r\n if (calculatorEl) {\r\n fetch(`${window.location.origin}/api/refrigerantcalculator/GetInitialData`)\r\n .then((response) => response.json())\r\n .then((refrigerantsData) => {\r\n const {\r\n ExistingShipRefrigerantsRelationship,\r\n NewBuildRefrigerantsRelationship,\r\n } = refrigerantsData;\r\n\r\n createExistingShipTab(ExistingShipRefrigerantsRelationship);\r\n createNewBuildTab(NewBuildRefrigerantsRelationship);\r\n })\r\n .catch((error) => {\r\n console.error('Error:', error);\r\n });\r\n\r\n const wrapperEl = calculatorEl.querySelector(\r\n '.refrigerant-calculator__wrapper'\r\n );\r\n const navEl = wrapperEl.querySelector('.refrigerant-calculator__nav');\r\n const existingShipEl = wrapperEl.querySelector(\r\n '.refrigerant-calculator__existing-ship'\r\n );\r\n const newBuildEl = wrapperEl.querySelector(\r\n '.refrigerant-calculator__new-build'\r\n );\r\n\r\n const existingShipBtn = navEl.querySelector(\r\n '.refrigerant-calculator__nav-btn--existing'\r\n );\r\n const newBuildBtn = navEl.querySelector(\r\n '.refrigerant-calculator__nav-btn--new'\r\n );\r\n\r\n const setActiveTab = (tab) => {\r\n if (tab === EXISTING_SHIP) {\r\n const isActive =\r\n existingShipBtn.parentElement.classList.contains('is-active');\r\n\r\n if (!isActive) {\r\n existingShipBtn.parentElement.classList.add('is-active');\r\n existingShipEl.classList.add('is-active');\r\n\r\n newBuildBtn.parentElement.classList.remove('is-active');\r\n newBuildEl.classList.remove('is-active');\r\n }\r\n } else if (tab === NEW_BUILD) {\r\n const isActive =\r\n newBuildBtn.parentElement.classList.contains('is-active');\r\n\r\n if (!isActive) {\r\n newBuildBtn.parentElement.classList.add('is-active');\r\n newBuildEl.classList.add('is-active');\r\n\r\n existingShipBtn.parentElement.classList.remove('is-active');\r\n existingShipEl.classList.remove('is-active');\r\n }\r\n }\r\n };\r\n\r\n existingShipBtn.addEventListener('click', () =>\r\n setActiveTab(EXISTING_SHIP)\r\n );\r\n newBuildBtn.addEventListener('click', () => setActiveTab(NEW_BUILD));\r\n }\r\n})();\r\n"],"names":["root","factory","module","this","ayepromise","once","wasCalled","wrappedFunction","getThenableIfExists","obj","then","aThenHandler","onFulfilled","onRejected","defer","doHandlerCall","func","value","returnValue","e","callFulfilled","callRejected","state","FULFILLED","PENDING","REJECTED","outcome","thenHandlers","doSettle","settledState","doFulfill","doReject","error","registerThenHandler","thenHandler","safelyResolveThenable","thenable","onceWrapper","transparentlyResolveThenablesAndSettle","arr","item","regExp","name","forEach","list","fn","scope","i","ClassList","element","oldName","newName","keyCounter","allWaypoints","Waypoint","options","direction","args","method","allWaypointsArray","waypointKey","end","noop","Inview","configs","config","self","listElement","scrollLinkClass","link","li","a","form","isFormActive","html","input","button","buttonMobile","handleClick","handleBlur","handleFocus","window","document","undefined","includeGoogleMapsAPI","js","fjs","$mapCanvas","startMapping","initMap","wilhelmsenMapStyles","mapCanvas","markers","dotColor","dotColorActive","mapType","mapLocations","showBoxList","useClustering","map","bounds","infowindow","locations","icon","marker","infowindowContent","j","symbol","clusterStyles","mcOptions","expanders","expander","dateFormat","from","to","getDate","date","addLinks","listContents","removeText","addText","animationDelay","addLink","currentLinkID","wlistLocal","localId","localTitle","el","removeFromFavList","addToFavList","listItem","title","editBtn","removeAddedClass","theList","content","$content","elementID","selectID","selectValue","latestVisitsList","latestVisitsArray","maxNumberOfItemsInList","pageTitle","pageType","pageUrl","processListItems","processListItem","secret","timer","esc","check_input","filterList","counter","showOrHideFilterMessage","checkedBoxes","filterID","filterName","$activeFiltersList","addToActiveFilterList","$hero","viewportWidth","videoSrc","video","$oversize","define_process_env_default","captchaKey","require$$0","getQueryVariable","variable","query","vars","pair","documentReady","addRecaptchaScript","resolve","script","getRecaptchaToken","token","checkRecaptcha","endpointUrl","res","helpers","checkRecaptcha_1","heroVideo","wrapper","cover","isValidated","distance","$window","$self","$jumpButton","$offices","$ports","$tabs","tab","tabID","event","ui","clipboard","Clipboard","showTooltip","elem","msg","removeTooltip","$obfuscators","$obfuscator","beforeAlpha","afterAlpha","concat","wmarkup","wwExpandBlocks","wwExpandBlock","addScrollAnimation","offsetTop","getElementOffsetTop","setTransform","top","translate","transform","o","galleryItems","createObserver","observer","handleIntersect","entries","entry","mainNavItems","isMobile","isViewportMobile","megaMenuItems","filterMegaMenuItems","megaWrapper","setUpMegaMenuBehaviour","addScrollbar","isMobileAfterResize","clearMegaMenuSetup","removeScrollbar","collection","items","hasMegaMenu","parent","$mainNavItem","$fullMenu","$fullMenuBack","$megaList","$megaHeader","$megaIntro","$firstLevelItems","$firstLevelItemsParents","$firstLevelBackBtn","$firstItemFirstLevel","$secondLevelItems","$secondLevelItemsParents","$isProductCatalogue","$prodCat1stLvlBackBtn","$prodCatItems","$prodCatBackBtns","$megaWrapper","isHoverable","btn","scrollbar","_this","handleNavItemHover","handleButtonClick","customSelect","selectBtn","url","toggleOptList","deactivateSelect","select","selectOptions","nativeSelectWidget","selectIndex","getIndex","updateValue","option","length","index","categoryId","customSelectWidget","nativeSelect","previousSelectedIndex","selectedValue","selectedOptionText","highlightOption","hasHighlightedOption","globalHeader","mainNavigationList","positionCatalogueDownload","$catalogueDownload","windowWidth","_debounce","StickyMenuManager","$stickyElement","menuClass","handleScroll","scrollTop","whereToFix","currentScrollLeft","ContextMenuManager","$menus","$links","$sections","stickyElementHeight","cur_pos","bottomOfThePage","bottom","newHash","hash","$menu","$target","visibleArea","currentSectionPosition","$heading","newPosition","stickyHeight","$elementToBeSticky","languageSwitcher","mainContentWrapper","mainContentWrapperPrevSibling","setHowManyImagesInARow","setStylingForImageOrientation","$imageGallery","imageGallery","imageGalleryWidth","minWidth","$mediaGalleryImages","$image","width","height","createStyles","stylesCreated","css","animationKeyframes","animationStyle","head","style","attachEvent","requestFrame","raf","cancelFrame","cancel","id","resetTriggers","triggers","expand","contract","expandChild","checkTriggers","scrollListener","animation","keyframeprefix","animationstartevent","domPrefixes","startEvents","pfx","elm","animationName","axis","offset","min","ship","shipBg","initHeightWatch","fixShipBgCutoff","elementWidth","imageHeight","parentHeight","newHeight","surveyIframe","surveyLoadFlag","handleIframeLoad","steps","Accordion","sections","section","findChildrenWithClass","trigger","className","children","child","accordionComponents","accordion","accordionSections","tabify","block","buttons","contents","currentTabSelected","currentTabFocused","toggleDisplayContent","ifDisplay","toggleActiveTab","ifActive","toggleFocusTab","ifFocus","moveFocusNext","moveFocusPrev","setTab","handleKeyDown","init","x","insuranceElements","header","links","linkEl","EXISTING_SHIP","NEW_BUILD","constants","tooltipsConstants","equivalentConstants","LEAKAGE_MIN_RATE","LEAKAGE_MAX_RATE","isNumberKey","evt","charCode","createTooltip","tooltipEl","tooltipBox","tooltipContent","closeBtn","getTooltips","tooltipsContainer","tooltipsList","tooltipsObj","getLeakagePreview","leakagePercentageInput","quantityInput","quantity","percentage","createStats","type","chosenItem","EmissionReduction","Name","emissionReductionString","percentageString","wrapperEl","headingEl","amountHeadingEl","reductionHeadingEl","equivalentListEl","createEquivalentList","otherRefrigerantsHeadingEl","coEmissionTextEl","graphEl","createGraph","printButton","printLink","createEquivalentItem","label","iconUrl","itemEl","itemValueString","itemValueIconEl","iconEl","textsEl","itemValueEl","itemLabelEl","equivalentHeadingEl","equivalentItemsEl","key","equivalentItem","equivalentDescriptionEl","epaLink","IsCurrent","IsChosen","createGraphItem","isCurrent","isChosen","nameEl","progressWrapper","progressBar","percentageText","addOptionsToSelect","selectEl","updateOptionsInSelect","placeholder","firstEl","createSelectElement","onChange","labelEl","createInputFields","HELP_TEXT_TOTAL_QUANTITY_EXISTING_SHIP","HELP_TEXT_TOTAL_QUANTITY_NEW_BUILD","HELP_TEXT_ANNUAL_LEAKAGE_RATE","quantityWrapper","quantityLabelEl","quantityInputEl","quantityTooltip","unitWrapper","unitSelect","periodWrapper","leakageWrapper","leakageLabelEl","leakageTooltip","leakageInputEl","leakageInnerWrapper","percentageEl","leakagePreviewEl","lekagePreviewAmount","unitTextEl","amount","CURRENT_REFRIGERANT_ID","RETROFIT_REFRIGERANT_ID","LOW_REFRIGERANT_ID","HIGH_REFRIGERANT_ID","RETROFIT_PLACEHOLDER","REFRIGERANT_PLACEHOLDER","RETROFIT_LABEL","showStatsContainer","data","calculatorEl","refrigerantStats","stats","submitNewBuildData","lowRefrigerantSelect","highRefrigerantSelect","totalQuantityInput","unitInput","leakageInput","isRefrigerantSelected","isQuantityPositiveNum","lowData","lowId","highData","highId","unit","leakageRate","reqBody","response","submitExistingShipData","currentRefrigerantSelect","retrofitRefrigerantSelect","periodInput","currentData","currentId","retrofitData","retrofitId","periodData","periodId","createExistingShipTab","existingShipEl","submitButtonEl","handleCurrentSelectChange","retrofitRefrigerantOptions","currentRefrigerantOptions","Gwp","Id","inputFields","createNewBuildTab","HELP_TEXT_LOW_GWP_REFRIGERANT","HELP_TEXT_HIGH_GWP_REFRIGERANT","newBuildEl","highRefrigerantOptions","lowRefrigerantOptions","lowRefrigerantTooltip","highRefrigerantTooltip","refrigerantsData","ExistingShipRefrigerantsRelationship","NewBuildRefrigerantsRelationship","navEl","existingShipBtn","newBuildBtn","setActiveTab"],"mappings":"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AAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,WACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,WACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,OACf,QAAW,CACT,CACI,WAAc,KACjB,CACF,CACJ,EACD,CACI,YAAe,OACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,OACf,YAAe,cACf,QAAW,CACT,CACI,WAAc,KACjB,CACF,CACJ,EACD,CACI,YAAe,gBACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,eACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,aACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,UACf,QAAW,CACT,CACI,WAAc,KACjB,CACF,CACJ,EACD,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,kBACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,QACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,QACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,CACN,EACD,SAAU,CACV,CACI,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,cACf,QAAW,CACT,CACI,WAAc,IACjB,CACF,CACJ,EACD,CACI,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,qBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,6BACf,QAAW,CACT,CACI,WAAc,KACjB,CACF,CACJ,EACD,CACI,YAAe,6BACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,8BACf,QAAW,CACT,CACI,WAAc,KACjB,CACF,CACJ,EACD,CACI,YAAe,MACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,MACf,YAAe,cACf,QAAW,CACT,CACI,WAAc,KACjB,CACF,CACJ,EACD,CACI,YAAe,MACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,WACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,WACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,OACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,OACf,YAAe,SACf,QAAW,CACT,CACI,WAAc,KACjB,CACF,CACJ,EACD,CACI,YAAe,gBACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,eACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,aACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EAED,CACI,YAAe,kBACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,QACf,YAAe,WACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,EACD,CACI,YAAe,QACf,YAAe,cACf,QAAW,CACT,CACI,WAAc,KACjB,CACF,CACJ,EACD,CACI,YAAe,QACf,YAAe,mBACf,QAAW,CACT,CACI,MAAS,SACZ,CACF,CACJ,CACA,CACT,EAEI,SAASD,EAAQE,EAAW,CACxB,IAAIC,EAAU,IAAI,MAEdC,EAAW,UACXC,EAAiB,UAGjBC,EAAU,EAAEJ,CAAS,EAAE,KAAK,SAAS,EACrCK,EAAe,EAAEL,CAAS,EAAE,KAAK,WAAW,EAC5CM,EAAc,EAAEN,CAAS,EAAE,KAAK,eAAe,GAAK,GAChC,EAAEA,CAAS,EAAE,KAAK,sBAAsB,EAChE,IAAIO,EAAgB,EAAEP,CAAS,EAAE,KAAK,gBAAgB,GAAK,GAGvDQ,EAAM,IAAI,OAAO,KAAK,IAAIR,EAAW,CACrC,OAAQ,CAAE,IAAK,EAAG,IAAK,CAAG,EAC1B,KAAM,EACN,eAAgB,GAChB,iBAAkB,GAClB,gBAAiB,OACjB,OAAQD,EAAoBK,CAAO,CAC/C,CAAS,EAEGK,EAAS,IAAI,OAAO,KAAK,aAEzBC,EAAa,IAAI,OAAO,KAAK,WAAW,CACzC,SAAU,GACrB,CAAS,EAEGC,EAAYN,EAEZO,EAAO,CAEP,KAAM,gZACN,UAAWV,EACX,YAAa,EACb,MAAO,KACP,YAAa,UACb,aAAc,EACd,OAAQ,IAAI,OAAO,KAAK,MAAM,EAAG,IAAI,CAExC,EAKD,GAAII,GAAe,GAAM,CACrB,QAASlD,EAAI,EAAGA,EAAIuD,EAAU,OAAQvD,IAAK,CAKvC,IAAIyD,EAAS,IAAI,OAAO,KAAK,OAAO,CAChC,SAAU,IAAI,OAAO,KAAK,OAAOF,EAAUvD,CAAC,EAAE,CAAC,EAAGuD,EAAUvD,CAAC,EAAE,CAAC,CAAC,EACjE,IAAKoD,EACL,MAAOG,EAAUvD,CAAC,EAAE,CAAC,EACrB,KAAMwD,CAC1B,CAAiB,EAGD,OAAO,KAAK,MAAM,YAAYC,EAAQ,QAAU,SAAUA,EAAQzD,EAAG,CACjE,OAAO,UAAY,CAEf,IAAI0D,EAAoB,iCAAmCH,EAAUvD,CAAC,EAAE,CAAC,EAAI,oCACpBuD,EAAUvD,CAAC,EAAE,CAAC,EAAI,gDAELuD,EAAUvD,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAO,EAAE,EAAI,IAAMuD,EAAUvD,CAAC,EAAE,CAAC,EAAI,4CACrEuD,EAAUvD,CAAC,EAAE,CAAC,EAAI,oBAChFsD,EAAW,WAAWI,CAAiB,EACvCJ,EAAW,KAAKF,EAAKK,CAAM,EAE3B,QAASE,EAAI,EAAGA,EAAId,EAAQ,OAAQc,IAAK,CACrC,IAAIC,EAASf,EAAQc,CAAC,EAAE,QAAO,EAC/BC,EAAO,UAAYd,EACnBD,EAAQc,CAAC,EAAE,QAAQC,CAAM,CAC5B,CAED,IAAIA,EAAS,KAAK,UAClBA,EAAO,UAAYb,EACnBU,EAAO,QAAQG,CAAM,CAExB,CACrB,EAAmBH,EAAQzD,CAAC,CAAC,EAGb6C,EAAQ,KAAKY,CAAM,CACtB,CAED,QAASzD,EAAI,EAAGA,EAAI6C,EAAQ,OAAQ7C,IAChCqD,EAAO,OAAOR,EAAQ7C,CAAC,EAAE,YAAa,CAAA,EAK1C,GAHAoD,EAAI,UAAUC,EAAO,UAAW,CAAA,EAChCD,EAAI,UAAUC,CAAM,EAEhBF,EAAe,CAGf,IAAIU,EAAgB,CAChB,CACI,UAAW,QAC7B,IAAK,2CACa,OAAQ,GACR,MAAO,EACV,EACD,CACI,UAAW,QAC7B,IAAK,2CACa,OAAQ,GACR,MAAO,EACV,EACD,CACI,UAAW,QAC7B,IAAK,2CACa,OAAQ,GACR,MAAO,EACV,CACrB,EAEoBC,EAAY,CACZ,OAAQD,CAC5B,EAEoC,IAAI,gBAAgBT,EAAKP,EAASiB,CAAS,CAClE,CAGDV,EAAI,QAAQA,EAAI,QAAS,EAAG,CAAC,EAIzB,EAAElB,CAAM,EAAE,MAAK,EAAK,KACpB,EAAE,cAAc,EAAE,MAAM,UAAY,CAChC,OAAO,KAAK,MAAM,QAAQW,EAAQ,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,EAAG,OAAO,CACxF,CAAiB,CAGR,KAEI,CACD,QAAS7C,EAAI,EAAGA,EAAIuD,EAAU,OAAQvD,IAAK,CACvC,IAAIyD,EAAS,IAAI,OAAO,KAAK,OAAO,CAChC,SAAU,IAAI,OAAO,KAAK,OAAOF,EAAUvD,CAAC,EAAE,CAAC,EAAGuD,EAAUvD,CAAC,EAAE,CAAC,CAAC,EACjE,IAAKoD,EACL,MAAOG,EAAUvD,CAAC,EAAE,CAAC,EACrB,KAAMwD,CAE1B,CAAiB,EAED,OAAO,KAAK,MAAM,YAAYC,EAAQ,QAAU,SAAUA,EAAQzD,EAAG,CACjE,OAAO,UAAY,CAEf,IAAI0D,EAAoB,iCAAmCH,EAAUvD,CAAC,EAAE,CAAC,EAAI,6FAEqCuD,EAAUvD,CAAC,EAAE,CAAC,EAAI,IAAMuD,EAAUvD,CAAC,EAAE,CAAC,EAAI,sCAG5JsD,EAAW,WAAWI,CAAiB,EACvCJ,EAAW,KAAKF,EAAKK,CAAM,CAC9B,CACrB,EAAmBA,EAAQzD,CAAC,CAAC,EAEb6C,EAAQ,KAAKY,CAAM,CACtB,CAED,GAAIZ,EAAQ,QAAU,EAClBO,EAAI,QAAQ,EAAE,EACdA,EAAI,UAAUK,EAAO,YAAa,CAAA,MAC/B,CACH,QAASzD,EAAI,EAAGA,EAAI6C,EAAQ,OAAQ7C,IAChCqD,EAAO,OAAOR,EAAQ7C,CAAC,EAAE,YAAa,CAAA,EAE1CoD,EAAI,UAAUC,EAAO,UAAW,CAAA,EAChCD,EAAI,UAAUC,CAAM,EACpBD,EAAI,QAAQA,EAAI,QAAS,EAAG,CAAC,CAChC,CACJ,CACJ,CAKD,MAAO,CACH,aAAcX,CACtB,CAEA,EAAG,OAAQ,QAAQ,EC3nBnB,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAIsB,EAAY,EAAE,oBAAoB,EAClCA,EAAU,OAAS,GACnBA,EAAU,KAAK,SAAU/D,EAAG,CACxB,IAAIgE,EAAWD,EAAU/D,CAAC,EAE1B,EAAEgE,CAAQ,EAAE,GAAG,QAAS,yBAA0B,SAAU5F,EAAG,CAC3DA,EAAE,eAAc,EAChB,EAAE,IAAI,EAAE,YAAY,MAAM,EAC1B,EAAE,IAAI,EAAE,KAAK,4BAA4B,EAAE,YAAY,MAAM,CAC7E,CAAa,CACb,CAAS,CAET,CAAC,EClBD,OAAO,QAAQ,EAAE,MAAM,UAAY,CAC/B,OAAO,UAAY,CACf,IAAI6F,EAAa,UACjBC,EAAO,OAAO,OAAO,EAChB,WAAW,CACR,eAAgB,EAChB,WAAYD,EACZ,QAAS,EACT,SAAU,GACV,SAAU,CAC1B,CAAa,EACA,GAAG,SAAU,UAAY,CACtBE,EAAG,WAAW,SAAU,UAAWC,EAAQ,IAAI,CAAC,CAChE,CAAa,EAELD,EAAK,OAAO,KAAK,EAChB,WAAW,CACR,eAAgB,EAChB,WAAYF,EACZ,QAAS,EACT,SAAU,GACV,SAAU,CACtB,CAAS,EACA,GAAG,SAAU,UAAY,CACtBC,EAAK,WAAW,SAAU,UAAWE,EAAQ,IAAI,CAAC,CAC9D,CAAS,EAED,SAASA,EAAQlE,EAAS,CACtB,IAAImE,EACJ,GAAI,CACAA,EAAO,OAAO,WAAW,UAAUJ,EAAY/D,EAAQ,KAAK,CAC/D,MAAe,CACZmE,EAAO,IACV,CAED,OAAOA,CACV,CACT,CAAK,CACL,CAAC,ECpCD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAIC,EAAW,EAAE,YAAY,EACzBC,EAAe,CAAA,EACfC,EAAa,wBACbC,EAAU,mBACVC,EAAiB,IAErBH,EAAe,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC,EAEnDD,EAAS,OAAS,GAClBA,EAAS,KAAK,SAAUtE,EAAG,CACvB,IAAI2E,EAAUL,EAAStE,CAAC,EAMpB4E,EAAgB,EAAED,CAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EACzD,EAAEJ,CAAY,EAAE,OAAS,GACxB,EAAEA,CAAY,EAAE,KAAK,SAASZ,EAAE,CACzBY,EAAaZ,CAAC,EAAE,UAAeiB,GAC9B,EAAED,CAAO,EAAE,KAAK,QAAQ,EACvB,YAAY,SAAS,EACrB,SAAS,OAAO,EAChB,KAAKH,CAAU,CAExC,CAAiB,EAML,EAAEG,CAAO,EAAE,GAAG,QAAS,UAAW,SAAUvG,EAAG,CAC3CA,EAAE,eAAc,EAChB,IAAIyG,EAAa,aAAa,QAAQ,OAAO,EACzC1D,EAAO,EAAE,IAAI,EACb2D,EAAU3D,EAAK,KAAK,SAAS,EAC7B4D,EAAa5D,EAAK,KAAK,OAAO,EAKlC,GAAGA,EAAK,SAAS,OAAO,EACpBA,EAAK,YAAY,OAAO,EAAE,SAAS,SAAS,EAEzC0D,IAAe,OACdN,EAAe,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC,EACvDA,EAAeA,EAAa,OAAO,SAASS,EAAI,CAC5C,OAAOA,EAAG,UAAYF,CAClD,CAAyB,EACD,aAAa,QAAQ,QAAQ,KAAK,UAAUP,CAAY,CAAC,GAE7DU,EAAkBH,CAAO,EAEzB,WAAW,UAAU,CACjB,EAAE3D,CAAI,EACL,YAAY,SAAS,EACrB,YAAY,KAAK,EACjB,KAAKsD,CAAO,CAChB,EAAEC,CAAc,MAGjB,CACA,GAAGG,IAAe,KAId,GAFAN,EAAe,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC,EAEpDA,EAAa,OAAS,EACrBpD,EAAK,SAAS,SAAS,EACvBoD,EAAa,KAAK,CAAC,QAAQO,EAAS,WAAWC,CAAU,CAAC,EAE1D,aAAa,QAAQ,QAAQ,KAAK,UAAUR,CAAY,CAAC,MACvD,CACF,MAAM,uCAAuC,EAC7C,MACH,MAGDA,EAAe,CAAA,EACfA,EAAa,KAAK,CAAC,QAAQO,EAAS,WAAWC,CAAU,CAAC,EAC1D,aAAa,QAAQ,QAAQ,KAAK,UAAUR,CAAY,CAAC,EAG7DW,EAAaJ,EAASC,CAAU,EAEhC,WAAW,UAAU,CACjB,EAAE5D,CAAI,EACL,YAAY,SAAS,EACrB,SAAS,OAAO,EAChB,KAAKqD,CAAU,CACnB,EAAEE,CAAc,CACpB,CACjB,CAAa,CAEb,CAAS,EAIL,SAASO,EAAkBE,EAAS,CAC7B,EAAE,iBAAiB,EAAE,OAAS,GAC7B,EAAE,iBAAiB,EAClB,KAAK,sCAAwCA,EAAW,IAAI,EAC5D,QAAQ,CACL,QAAS,EACT,QAAS,EACT,OAAQ,CACX,EAAE,IAAK,UAAY,CAChB,EAAE,IAAI,EAAE,QACxB,CAAa,CAGR,CAED,SAASD,EAAaC,EAAUC,EAAM,CAC/B,EAAE,iBAAiB,EAAE,OAAS,IAE7B,EAAE,gCAAgC,EAAE,SACpC,EAAE,iBAAiB,EAClB,OACG,iDAAiDD,EAAS,cAC7CA,EAAS,iEAGtBC,EACA,WAEhB,EAGK,CACL,CAAC,ECnID,EAAE,QAAQ,EAAE,MAAM,UAAY,CAE1B,IAAIb,EAAe,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC,EACxDA,GAAgB,MAAQA,EAAa,OAAS,EAE7C,EAAEA,CAAY,EAAE,KAAK,SAAUvE,EAAE,CAC7B,EAAE,iBAAiB,EAClB,OACG,iDAAiDuE,EAAavE,CAAC,EAAE,QAAW,cAC/DuE,EAAavE,CAAC,EAAE,QAAY,iEAGzCuE,EAAavE,CAAC,EAAE,WAChB,WAEhB,CACA,CAAS,EAEA,EAAE,iBAAiB,EACf,OACG,wDAChB,EAGmB,EAAE,sBAAsB,EACvC,IAAIqF,EAAU,EAAE,WAAW,EAG3BA,EAAQ,GAAG,QAAS,UAAY,CAC5B,EAAE,IAAI,EAAE,KAAK,iBAAiB,EAAE,YAAY,MAAM,EAC/C,EAAE,IAAI,EAAE,SAAS,SAAS,EACzB,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,YAAY,SAAS,EAG1C,EAAE,IAAI,EAAE,KAAK,iBAAiB,EAAE,SAAS,SAAS,EAStD,EAAE,sBAAsB,EAAE,GAAG,QAAS,UAAW,SAAUjH,EAAG,CAC1DA,EAAE,eAAc,EAGhB,EAAE,IAAI,EAAE,OAGR,IAAI0G,EAAU,EAAE,IAAI,EAAE,OAAQ,EAAC,OAAQ,EAAC,KAAK,SAAS,EAEtDQ,EAAiBR,CAAO,EAGxBP,EAAe,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC,EAGvDA,EAAeA,EAAa,OAAO,SAASS,EAAI,CAC5C,OAAOA,EAAG,UAAYF,CACtC,CAAa,EAED,aAAa,QAAQ,QAAQ,KAAK,UAAUP,CAAY,CAAC,EAGzD,EAAE,IAAI,EAAE,OAAQ,EAAC,OAAM,EAAG,QAAQ,CAC9B,QAAS,EACT,QAAS,EACT,OAAQ,CACX,EAAE,IAAK,UAAY,CAEhB,EAAE,IAAI,EAAE,SAGR,IAAIgB,EAAU,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC,EAGnDA,EAAQ,OAAS,IAChB,EAAE,iBAAiB,EACd,YAAY,MAAM,EAClB,OAAO,wDAAwD,EACpE,EAAEF,CAAO,EAAE,KAAK,MAAM,EAAE,YAAY,SAAS,EAGjE,CAAa,CACb,CAAS,CACT,CAAK,EAGD,SAASC,EAAiBH,EAAS,CAC3B,EAAE,oCAAsCA,EAAW,IAAI,EAAE,YAAY,OAAO,EAAE,KAAK,kBAAkB,CAC5G,CACL,CAAC,EC7FD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,EAAE,8BAA8B,EAAE,GAAG,QAAS,SAAU,EAAG,CACvD,IAAIK,EAAU,EAAE,IAAI,EAAE,SAAS,KAAK,2BAA2B,EAC/DA,EAAQ,YAAY,MAAM,EAEvB,EAAE,IAAI,EAAE,SAAS,MAAM,EACtB,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,YAAY,MAAM,EAG7C,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,SAAS,MAAM,CAEtD,CAAK,EAED,EAAE,mCAAmC,EAAE,GAAG,QAAS,SAAU,EAAG,CAC5D,EAAE,eAAc,EAChB,EAAE,IAAI,EAAE,SACR,EAAE,wBAAwB,EAAE,KAAK,UAAU,CACvC,EAAE,IAAI,EAAE,YAAY,QAAQ,CACxC,CAAS,CACT,CAAK,EAED,EAAE,mBAAmB,EAAE,KAAK,UAAY,CACpC,IAAIC,EAAW,EAAE,IAAI,EAAE,KAAK,2BAA2B,EAClDA,EAAS,QACV,EAAE,IAAI,EAAE,KAAK,8BAA8B,EAAE,SAAS,MAAM,CAExE,CAAK,CACL,CAAC,EC3BD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,EAAE,YAAY,EAAE,GAAG,QAAS,SAAU,EAAG,CACrC,EAAE,eAAc,EAChB,IAAIC,EAAY,EAAE,IAAI,EAAE,KAAK,MAAM,EACnC,EAAE,YAAY,EAAE,QAAQ,CACpB,UAAW,EAAEA,CAAS,EAAE,OAAQ,EAAC,IAAM,EAC1C,EAAE,GAAG,CACd,CAAK,CACL,CAAC,ECRD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,EAAE,aAAa,EAAE,GAAG,QAAS,SAAU,EAAG,CACtC,EAAE,eAAc,EAChB,IAAIC,EAAW,EAAE,IAAI,EAAE,KAAK,WAAW,EACnCC,EAAc,EAAE,IAAI,EAAE,KAAK,OAAO,EACtC,EAAE,IAAID,CAAQ,EAAE,IAAIC,CAAW,EAAE,OACzC,CAAK,CACL,CAAC,ECJD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAIC,EAAmB,EAAE,qBAAqB,EAE1CC,EAAoB,KAAK,MAAM,aAAa,QAAQ,eAAe,CAAC,EACpEC,EAAyB,EA+B7B,GA1BID,GAAqB,MAAQA,EAAkB,OAAS,EAExD,EAAEA,CAAiB,EAAE,KAAK,SAAU9F,EAAG,CACnC,EAAE6F,CAAgB,EACb,OACD,yBACcC,EAAkB9F,CAAC,EAAE,QAAa,KAChD8F,EAAkB9F,CAAC,EAAE,UACrB,WAEhB,CACA,CAAS,EAGD,EAAE6F,CAAgB,EACb,OACD,oEACZ,EASQ,OAAO,SAAS,KAAK,QAAQ,mCAAmC,EAAI,IAAM,OAAO,SAAS,KAAK,QAAQ,kCAAkC,EAAI,GAAI,CAEjJ,IAAIG,EAAY,EAAE,qBAAqB,EAAE,KAAI,EAAG,OAChD,GAAG,EAAE,OAAO,EAAE,OAAQ,EAAE,CACpB,IAAIC,EAAW,EAAE,OAAO,EAAE,KAAI,EAAG,OACjCD,EAAYA,EAAY,KAAOC,EAAW,GAC7C,CAED,IAAIC,EAAU,EAAE,QAAQ,EAAE,KAAK,MAAM,EAGjC,EAAEJ,CAAiB,EAAE,OAAS,GAE9BA,EAAoBA,EAAkB,OAAO,SAAUd,EAAI,CACvD,OAAOA,EAAG,UAAYkB,CACtC,CAAa,EAGDJ,EAAkB,QAAQ,CAAE,UAAUE,EAAW,QAAQE,CAAO,CAAE,EAE/D,EAAEJ,CAAiB,EAAE,OAASC,GAC7BD,EAAkB,IAAG,EAGzB,aAAa,QAAQ,gBAAiB,KAAK,UAAUA,CAAiB,CAAC,IAGvEA,EAAoB,CAAA,EAEpBA,EAAkB,QAAQ,CAAE,UAAUE,EAAW,QAAQE,CAAO,CAAE,EAElE,aAAa,QAAQ,gBAAiB,KAAK,UAAUJ,CAAiB,CAAC,EAE9E,CACL,CAAC,ECxED,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,EAAE,iBAAiB,EAAE,GAAG,QAAS,SAAU1H,EAAG,CAC1CA,EAAE,eAAc,EAChB,EAAE,IAAI,EAAE,YAAY,MAAM,EAC1B,EAAE,IAAI,EAAE,OAAM,EAAG,OAAM,EAAG,KAAK,4BAA4B,EAAE,YAAY,MAAM,CACvF,CAAK,EAED,IAAI+H,EAAmB,EAAE,oBAAoB,EAC7CA,EAAiB,KAAK,SAAUnG,EAAG,CAC/B,IAAIoG,EAAkBD,EAAiBnG,CAAC,EACzB,IAAI,SAAS,CACxB,QAASoG,EACT,QAAS,SAAU3F,EAAW,CAC1B,EAAE2F,CAAe,EAAE,SAAS,SAAS,EACrC,KAAK,QAAO,CACf,EACD,OAAQ,KACpB,CAAS,CACT,CAAK,CAEL,CAAC,ECpBD,IAAIC,GAAS,uBAETzE,EAAQ,GACR0E,GAEAC,GAAM,KAEV,EAAE,QAAQ,EAAE,MAAM,SAAS,EAAG,CAC1B3E,GAAS,EAAE,MACX,aAAa0E,EAAK,EAClBA,GAAQ,WAAW,UAAW,CAAE1E,EAAQ,EAAG,EAAI,GAAG,EAElD4E,IACJ,CAAC,EAED,SAASA,IAAc,CAChB5E,GAASyE,IAER,EAAE,MAAM,EAAE,OAAO,0DAA0D,EAG5EzE,GAAS2E,IACR,EAAE,eAAe,EAAE,QAE3B,CCnBA,EAAE,QAAQ,EAAE,MAAM,UAAY,CAE1B,IAAIE,EAAa,KAAK,MAAM,aAAa,QAAQ,YAAY,CAAC,EAG1DC,EAAU,EAGd,EAAE,2BAA2B,EAAE,WAAW,SAAS,EAGhDD,GAAc,MAAQA,EAAW,OAAS,GACzCC,EAAU,EACd,EAAE,aAAa,EAAE,OACjB,EAAE,eAAe,EAAE,OAEf,EAAED,CAAU,EAAE,KAAK,SAAUzG,EAAE,CAE3B,EAAE,mBAAqByG,EAAWzG,CAAC,EAAE,SAAc,GAAG,EAAE,KAAK,UAAU,MAAM,EAE7E,EAAE,aAAa,EAAE,KAAK,UAAY,CAC3B,EAAE,IAAI,EAAE,KAAK,WAAW,GAAKyG,EAAWzG,CAAC,EAAE,WAC1C,EAAE,IAAI,EAAE,OAAO,GAAG,EAClB0G,GAAW,EAE/B,CAAa,CACb,CAAS,EACDC,EAAwBD,CAAO,IAG/B,EAAE,aAAa,EAAE,OAAO,GAAG,EAC3B,EAAE,eAAe,EAAE,QAIvB,EAAE,eAAe,EAAE,GAAG,QAAS,UAAY,CACvC,EAAE,aAAa,EAAE,OAEjB,IAAIE,EAAe,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,OAEzDH,EAAa,CAAA,EAEVG,EAAe,GACdF,EAAU,EAEV,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,KAAK,UAAY,CAEnD,IAAIG,EAAW,EAAE,IAAI,EAAE,IAAG,EACtBC,EAAa,EAAE,IAAI,EAAE,KAAK,aAAa,EAC3CL,EAAW,KAAK,CAAC,SAASI,EAAS,WAAWC,CAAU,CAAC,EACzD,aAAa,QAAQ,aAAa,KAAK,UAAUL,CAAU,CAAC,EAG5D,EAAE,aAAa,EAAE,KAAK,UAAY,CAC3B,EAAE,IAAI,EAAE,KAAK,WAAW,GAAKI,IAC5B,EAAE,IAAI,EAAE,OAAO,GAAG,EAClBH,GAAW,EAEnC,CAAiB,CAEjB,CAAa,EAEDC,EAAwBD,CAAO,EAE/B,EAAE,eAAe,EAAE,OAAO,GAAG,IAI7B,aAAa,QAAQ,aAAa,KAAK,UAAUD,CAAU,CAAC,EAC5D,EAAE,aAAa,EAAE,OAAO,GAAG,EAC3B,EAAE,eAAe,EAAE,OAE/B,CAAK,EAGD,EAAE,eAAe,EAAE,GAAG,QAAS,UAAY,CAEvC,EAAE,aAAa,EAAE,OAAO,GAAG,EAC3BE,EAAwB,CAAC,EAGzB,EAAE,YAAY,EAAE,KAAK,wBAAwB,EAAE,KAAK,UAAU,CAC1D,EAAE,IAAI,EAAE,KAAK,UAAU,EAAK,CACxC,CAAS,EAGDF,EAAa,CAAA,EACb,aAAa,QAAQ,aAAa,KAAK,UAAUA,CAAU,CAAC,EAG5D,EAAE,IAAI,EAAE,MAChB,CAAK,EAGD,SAASE,EAAwBD,EAAQ,CAClCA,GAAW,EACV,EAAE,iBAAiB,EAAE,OAAO,GAAG,EAE/B,EAAE,iBAAiB,EAAE,QAAQ,GAAG,CAEvC,CACL,CAAC,EC1GD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAID,EAAa,KAAK,MAAM,aAAa,QAAQ,YAAY,CAAC,EAC1DM,EAAqB,EAAE,sBAAsB,EAE9CN,GAAc,MAAQA,EAAW,OAAS,EACtCM,EAAmB,OAAS,GAC3B,EAAEN,CAAU,EAAE,KAAK,SAAUzG,EAAE,CAC3BgH,EAAsBP,EAAWzG,CAAC,EAAE,UAAa,CACjE,CAAa,GAGD+G,EAAmB,QAAQ,6DAA6D,EACxF,EAAE,uBAAuB,EAAE,UAGnC,SAASC,EAAsB5B,EAAM,CACjC2B,EAAmB,QAAQ,wCAAwC3B,EAAO,OAAO,CACpF,CAEC,EAAE,uBAAuB,EAAE,GAAG,QAAQ,IAAK,UAAY,CAErDqB,EAAa,CAAA,EACb,aAAa,QAAQ,aAAa,KAAK,UAAUA,CAAU,CAAC,EAE5D,EAAE,IAAI,EAAE,OAER,EAAE,2BAA2B,EAAE,SAE/BM,EAAmB,QAAQ,6DAA6D,CAEhG,CAAK,CAEL,CAAC,EChCD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAE1B,IAAIE,EAAQ,EAAE,OAAO,EACrB,GAAIA,EAAM,OAAS,GAEZA,EAAM,KAAK,WAAW,EAAE,CAEvB,IAAIC,EAAgB,EAAE,MAAM,EAAE,MAAK,EACnC,GAAGA,EAAgB,KAAOD,EAAM,KAAK,iBAAiB,EAAE,CACpD,IAAIE,EAAWF,EAAM,KAAK,WAAW,EACjCG,EAAQ,uIAEMD,EAAW,+BAE7BF,EAAM,QAAQG,CAAK,CACtB,CACJ,CAET,CAAC,EClBD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAE1B,IAAIC,EAAY,EAAE,WAAW,EAC7B,GAAIA,EAAU,OAAS,GAEhBA,EAAU,KAAK,WAAW,EAAE,CAE3B,IAAIH,EAAgB,EAAE,MAAM,EAAE,MAAK,EACnC,GAAGA,EAAgB,IAAI,CACnB,IAAIC,EAAWE,EAAU,KAAK,WAAW,EACrCD,EAAQ,2FACMD,EAAW,yBAE7BE,EAAU,KAAK,OAAO,EAAE,QAAQD,CAAK,CACxC,CACJ,CAET,CAAC,WCjBAE,GAAA,CAAA,4NCAK,CAAE,WAAAC,EAAY,EAAGC,GAEvB,SAASC,GAAiBC,EAAU,CAGlC,QAFIC,EAAQ,OAAO,SAAS,OAAO,UAAU,CAAC,EAC5CC,EAAOD,EAAM,MAAM,GAAG,EACf3H,EAAI,EAAGA,EAAI4H,EAAK,OAAQ5H,IAAK,CACpC,IAAI6H,EAAOD,EAAK5H,CAAC,EAAE,MAAM,GAAG,EAC5B,GAAI6H,EAAK,CAAC,GAAKH,EACb,OAAOG,EAAK,CAAC,CAEhB,CACD,MAAO,EACT,CAEA,SAASC,GAAchI,EAAI,CACrB,SAAS,YAAc,UACzBA,IAEA,SAAS,iBAAiB,mBAAoBA,CAAE,CAEpD,CAEA,SAASiI,IAAqB,CAC5B,OAAO,IAAI,QAASC,GAAY,CAE9B,GADiB,SAAS,eAAe,YAAY,EACvC,OAAOA,EAAQ,EAAI,EAEjC,MAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAM,kDAAkDV,EAAU,GACzEU,EAAO,aAAa,KAAM,YAAY,EACtC,SAAS,KAAK,YAAYA,CAAM,EAEhCA,EAAO,iBAAiB,OAAQ,UAAY,CAC1CD,EAAQ,EAAI,CAClB,CAAK,CACL,CAAG,CACH,CAEA,SAASE,IAAoB,CAC3B,OAAO,IAAI,QAASF,GAAY,CAC9BD,GAAkB,EAAG,KAAK,IAAM,CAC9BC,EACE,IAAI,QAASA,GAAY,CACvB,WAAW,MAAM,UAAY,CAC3B,WACG,QAAQ,GAAGT,EAAU,GAAI,CACxB,OAAQ,QACxB,CAAe,EACA,KAAK,SAAUY,EAAO,CACrBH,EAAQG,CAAK,CAC7B,CAAe,CACf,CAAW,CACX,CAAS,CACT,CACA,CAAK,CACL,CAAG,CACH,CAEA,SAASC,IAAiB,CACxB,MAAMC,EAAc,0BACpB,OAAO,IAAI,QAASL,GAAY,CAC9BE,GAAmB,EAAC,KAAMC,GAAU,CAClC,MAAME,EAAa,CACjB,OAAQ,OACR,QAAS,CACP,eAAgB,kBACjB,EACD,KAAM,KAAK,UAAU,CACnB,MAAOF,CACjB,CAAS,CACT,CAAO,EACE,KAAMG,GAAQA,EAAI,KAAI,CAAE,EACxB,KAAMA,GAAQN,EAAQM,CAAG,CAAC,CACnC,CAAK,CACL,CAAG,CACH,CAEwBC,EAAA,iBAAGd,GACFc,EAAA,kBAAGL,GAC5B,IAAsBM,GAAAD,EAAA,eAAGH,GACzBG,EAAA,cAAwBT,GChFxB,KAAM,CAAE,cAAAA,GAAe,eAAAM,EAAgB,EAAGZ,EAE1C,SAASiB,IAAY,CACC,SAAS,iBAAiB,YAAY,EAE5C,QAASC,GAAY,CACjC,IAAItB,EAAQsB,EAAQ,cAAc,OAAO,EACrC7G,EAAS6G,EAAQ,cAAc,QAAQ,EACvCC,EAAQD,EAAQ,cAAc,eAAe,EAE7C7G,GACFA,EAAO,iBAAiB,QAAS,UAAY,CAC3CuG,GAAgB,EAAC,KAAMQ,GAAgB,CACjCA,IACFD,EAAM,iBAAiB,gBAAiB,UAAY,CAClDA,EAAM,UAAU,IAAI,QAAQ,CAC1C,CAAa,EACDA,EAAM,UAAU,IAAI,QAAQ,EAC5BD,EAAQ,UAAU,OAAO,QAAQ,EAEjCtB,EAAM,KAAI,EAEtB,CAAS,CACT,CAAO,CAEP,CAAG,CACH,CAEAU,GAAcW,EAAS,ECzBvB,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,GAAI,EAAE,qBAAqB,EAAE,OAAQ,CACjC,IAAII,EAAW,EAAE,gBAAgB,EAAE,OAAQ,EAAC,IAAM,IAC9CC,EAAU,EAAE,MAAM,EACtBA,EAAQ,GAAG,SAAU,UAAY,CAC1BA,EAAQ,YAAc,KAAOA,EAAQ,UAAW,EAAGD,EAClD,EAAE,qBAAqB,EAAE,SAAS,MAAM,EAGxC,EAAE,qBAAqB,EAAE,YAAY,MAAM,CAE3D,CAAS,CACJ,CAED,EAAE,qBAAqB,EAAE,GAAG,QAAS,UAAU,CAC3C,IAAIE,EAAQ,EAAE,IAAI,EAClB,SAAE,WAAW,EAAE,QAAQ,CACnB,UAAW,EAAE,gBAAgB,EAAE,OAAQ,EAAC,GAC3C,EAAE,GAAG,EACN,WAAW,UAAW,CAClBA,EAAM,YAAY,MAAM,EACxB,EAAE,wBAAwB,EAAE,OAC/B,EAAE,GAAG,EAEC,EACf,CAAK,CACL,CAAC,ECzBD,EAAE,QAAQ,EAAE,MAAM,UAAU,CACxB,IAAIC,EAAc,EAAE,aAAa,EAC7BC,EAAW,EAAE,UAAU,EACvBC,EAAS,EAAE,QAAQ,EAEpBF,EAAY,QACXA,EAAY,GAAG,QAAS,UAAU,CAC3BC,EAAS,OACR,EAAE,WAAW,EAAE,QAAQ,CACnB,UAAWA,EAAS,OAAM,EAAG,GAChC,EAAE,GAAG,EACAC,EAAO,QACb,EAAE,WAAW,EAAE,QAAQ,CACnB,UAAWA,EAAO,OAAM,EAAG,GAC9B,EAAE,GAAG,CAEtB,CAAS,CAET,CAAC,ECnBD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAIC,EAAQ,EAAE,OAAO,EAErBA,EAAM,KAAK,SAASnJ,EAAE,CAClB,IAAIoJ,EAAM,EAAED,EAAMnJ,CAAC,CAAC,EAChBqJ,EAAQ,IAAKD,EAAI,KAAK,IAAI,EAE9B,EAAEC,CAAK,EAAE,KAAK,CACV,OAAQ,SAAUC,EAAOC,EAAK,CAC7B,CACb,CAAS,CACT,CAAK,CACL,CAAG,ECfH,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,EAAE,iCAAiC,EAAE,OAAO,UAAU,CAClD,EAAE,IAAI,EAAE,OAAM,EAAG,KAAK,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,YAAY,UAAU,CACpG,CAAK,EAED,EAAE,sBAAsB,EAAE,GAAG,QAAS,SAAS,EAAE,CACxC,EAAG,IAAI,EAAG,SAAU,UAAU,GAC/B,EAAE,eAAc,CAE5B,CAAK,CACL,CAAC,ECRD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAIC,EAAY,IAAIC,GAAU,YAAY,EAC1CD,EAAU,GAAG,UAAW,SAASpL,EAAG,CAChCsL,GAAYtL,EAAE,QAAS,SAAS,CACxC,CAAK,EACDoL,EAAU,GAAG,QAAS,SAASpL,EAAG,CACtC,CAAK,CACL,CAAC,EAED,SAASsL,GAAYC,EAAMC,EAAK,CAC5BD,EAAK,aAAa,QAAS,sBAAsB,EACjDA,EAAK,aAAa,aAAcC,CAAG,EACnC,WAAWC,GAAe,IAAMF,CAAI,CACxC,CAEA,SAASE,GAAcF,EAAM,CAEzBA,EAAK,aAAa,QAAS,WAAW,CAC1C,CCpBA,EAAE,QAAQ,EAAE,MAAM,UAAU,CAExB,IAAIG,EAAe,EAAE,aAAa,EAE/BA,EAAa,QACZA,EAAa,KAAK,SAAS9J,EAAE,CACzB,IAAI+J,EAAc,EAAED,EAAa9J,CAAC,CAAC,EAC/BgK,EAAcD,EAAY,KAAK,cAAc,EAC7CE,EAAa,iBACbF,EAAY,KAAK,iBAAiB,IAClCE,EAAaF,EAAY,KAAK,iBAAiB,GAEnD,IAAIG,EAASF,EAAc,IAAMC,EAC7BE,EAAU,mBAAqBD,EAAS,KAAOA,EAAS,OAC5D,EAAEH,CAAW,EAAE,KAAKI,CAAO,CACvC,CAAS,CAGT,CAAC,EClBD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAE1B,EAAE,gCAAgC,EAAE,GAAG,QAAQ,0BAA4B,UAAU,CACjF,EAAE,IAAI,EAAE,OAAQ,EAAC,YAAY,WAAW,EACxC,EAAE,IAAI,EAAE,QAChB,CAAK,CAEL,CAAC,ECND,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAIC,EAAiB,EAAE,kBAAkB,EACrCA,EAAe,OAAS,GACxBA,EAAe,KAAK,SAAUpK,EAAG,CAC7B,IAAIqK,EAAgBD,EAAepK,CAAC,EAEpC,EAAEqK,CAAa,EAAE,GAAG,QAAS,yBAA0B,SAAUjM,EAAG,CAChEA,EAAE,eAAc,EAChB,EAAE,IAAI,EAAE,YAAY,+BAA+B,EACnD,EAAE,IAAI,EAAE,KAAK,2BAA2B,EAAE,YAAY,qCAAqC,CAC3G,CAAa,CACb,CAAS,CAET,CAAC,GCdA,UAAW,CAQR,SAASkM,EAAmBpK,EAASM,EAAS,CAE1C,IAAI+J,EACAjE,EAEJ,GAAIpG,EAGAqK,EAAYC,EAAoBtK,CAAO,MAFvC,QAKJuK,EAAavK,EAASM,EAAS+J,CAAS,EAExC,OAAO,iBAAiB,SAAU,UAAW,CACtCjE,GACC,OAAO,aAAaA,CAAK,EAG7BA,EAAQ,OAAO,WAAW,UAAW,CACjCmE,EAAavK,EAASM,EAAS+J,CAAS,CAC3C,EAAE,EAAE,CACR,EAAE,EAAK,CACX,CAED,SAASC,EAAoBtK,EAAS,CAClC,IAAIwK,EAAM,EAEV,GACIA,GAAOxK,EAAQ,WAAa,EAC5BA,EAAUA,EAAQ,mBACbA,GAET,OAAOwK,CACV,CAED,SAASD,EAAavK,EAASM,EAAS+J,EAAW,CAE/C,IAAII,EADS,OAAO,QAAUJ,EACL,OAAO,YAC5BK,EAAY,CAAA,EAEhBpK,EAAQ,QAAQqK,GAAK,CACjBD,EAAU,KAAK,GAAGC,EAAE,SAAS,KAAKF,EAAYE,EAAE,QAAUA,EAAE,KAAK,GAAGA,EAAE,IAAI,GAAG,CACzF,CAAS,EAGD3K,EAAQ,MAAM,UAAY0K,EAAU,KAAK,GAAG,CAC/C,CAED,SAAS,iBAAiB,yBAAyB,EAAE,QAAQ1K,GAAW,CACpE,IAAIM,EAAU,KAAK,MAAMN,EAAQ,QAAQ,eAAe,EACxDoK,EAAmBpK,EAASM,CAAO,CAC3C,CAAK,CAEL,GAAG,GC7DF,UAAW,CACR,IAAIsK,EAEJ,OAAO,iBAAiB,OAASxB,GAAU,CACvCwB,EAAe,SAAS,iBAAiB,uBAAuB,EAEhEC,GACH,EAAE,EAAK,EAER,SAASA,GAAiB,CACtB,IAAIC,EAEAxK,EAAU,CACV,KAAM,KACN,WAAY,MACZ,UAAW,CACvB,EAEY,yBAA0B,QAC1BwK,EAAW,IAAI,qBAAqBC,EAAiBzK,CAAO,EAC5DsK,EAAa,QAAQ5K,GAAW,CAC5B8K,EAAS,QAAQ9K,CAAO,CACxC,CAAa,GAED4K,EAAa,QAAQ5K,GAAW,CAC5BA,EAAQ,UAAU,IAAI,SAAS,CAC/C,CAAa,CAER,CAED,SAAS+K,EAAgBC,EAASF,EAAU,CACxCE,EAAQ,QAASC,GAAU,CACnBA,EAAM,gBACNA,EAAM,OAAO,UAAU,IAAI,SAAS,CAEpD,CAAS,CACJ,CACL,GAAI,ECrCJ,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,MAAMC,EAAe,EAAE,qDAAqD,EAC5E,IAAIC,EAAWC,KACXC,EAAgB,EAAEC,GAAoBJ,CAAY,CAAC,EACnDK,EAAc,EAAE,iBAAiB,EAAE,CAAC,EAErCF,IACCA,EAAc,KAAK,UAAY,CAC3BG,GAAuB,EAAE,IAAI,EAAGL,EAAUE,CAAa,CACnE,CAAS,EAEEF,GACCM,EAAaF,CAAW,EAG5B,OAAO,iBAAiB,SAAU,UAAY,CAC1C,IAAIG,EAAsBN,KAEvBD,GAAYO,IACXP,EAAWO,EAEXC,KAEAN,EAAc,KAAK,UAAY,CAC3BG,GAAuB,EAAE,IAAI,EAAGL,EAAUE,CAAa,CAC3E,CAAiB,EAEEF,GAAY,CAACI,EAAY,WACxBE,EAAaF,CAAW,EAG5C,CAAS,EAET,CAAC,EAED,SAASI,IAAqB,CAC1B,EAAE,MAAM,EAAE,YAAY,WAAW,EACjC,EAAE,uBAAuB,EAAE,KAAK,UAAW,CACvC,KAAK,UAAU,OAAO,QAAQ,CACtC,CAAK,EACD,EAAE,gDAAgD,EAAE,KAAK,UAAW,CAChEC,EAAgB,IAAI,CAC5B,CAAK,CACL,CAEA,SAASR,IAAmB,CACxB,OAAO,OAAO,WAAa,GAC/B,CAEA,SAASE,GAAoBO,EAAY,CACrC,IAAIC,EAAQ,CAAA,EACZ,OAAAD,EAAW,KAAK,UAAY,CACnBE,GAAY,IAAI,EAGjBD,EAAM,KAAK,IAAI,EAFf,EAAE,IAAI,EAAE,SAAS,aAAa,CAI1C,CAAK,EACMA,CACX,CAEA,SAASC,GAAYC,EAAQ,CACzB,OAAO,EAAEA,CAAM,EAAE,SAAS,OAAO,EAAE,OAAS,CAChD,CAEA,SAASP,EAAazL,EAAS,CACxBA,IACCA,EAAQ,UAAY,IAAI,iBAAiBA,EAAS,CAC9C,iBAAkB,GAClB,mBAAoB,IACpB,mBAAoB,IACpB,gBAAiB,GACjB,YAAa,EACzB,CAAS,EAET,CAEA,SAAS4L,EAAgB5L,EAAS,CAC3BA,IACCA,EAAQ,UAAY,EACpBA,EAAQ,UAAU,UAClBA,EAAQ,UAAY,KACpB,EAAEA,CAAO,EAAE,SAAS,0BAA0B,EAAE,OAAM,EAE9D,CAEA,SAASwL,GAAuBS,EAAcd,EAAUE,EAAe,CACnE,MAEIa,EAAYD,EAAa,SAAS,OAAO,EAAE,GAAG,CAAC,EAC/CE,EAAgBD,EAAU,SAAS,aAAa,EAChDE,EAAYF,EAAU,SAAS,aAAa,EAC5CG,EAAcH,EAAU,SAAS,wBAAwB,EACzDI,EAAaJ,EAAU,SAAS,cAAc,EAC9CK,EAAmBH,EAAU,WAAW,SAAS,cAAc,EAC/DI,EAA0BD,EAAiB,OAAQ,EACnDE,EAAqBD,EAAwB,WAAW,SAAS,aAAa,EAC9EE,EAAuBH,EAAiB,GAAG,CAAC,EAC5CI,EAAoBJ,EAAiB,SAAS,gBAAgB,EAAE,SAAU,EAAC,SAAS,cAAc,EAClGK,EAA2BD,EAAkB,OAAQ,EAErDE,EAAsB,EAAE,gBAAgB,EAAE,OAC1CC,EAAwBZ,EAAU,SAAS,aAAa,EAAE,SAAS,aAAa,EAChFa,EAAgBb,EAAU,KAAK,iBAAiB,EAAE,SAAS,IAAI,EAC/Dc,EAAmBd,EAAU,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAEvEe,EAAe,EAAE,iBAAiB,EAAE,CAAC,EAEzC,IAAIC,EAAcjB,EAAa,SAAS,UAAU,EAC9CkB,EAAMlB,EAAa,KAAK,6BAA6B,EACrD7F,EAGC+E,GAyEDc,EAAa,OAAO,OAAO,EAC3BI,EAAY,OAAO,OAAO,EAE1BJ,EAAa,MAAM,UAAY,CAC3BA,EAAa,SAAS,QAAQ,EAC9BA,EAAa,MAAK,EAClBL,EAAgB,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE,CAAC,CAAC,EACxDH,EAAa,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,EACzC,MAAM,gBAAe,CACjC,CAAS,EAEEoB,GACCE,EAAc,OAAO,OAAO,EAE5BD,EAAsB,MAAM,UAAY,CACpCb,EAAa,YAAY,QAAQ,EACjCL,EAAgBK,EAAa,SAAS,oBAAoB,EAAE,CAAC,CAAC,EAC9DR,EAAawB,CAAY,EACzB,MAAM,gBAAe,CACrC,CAAa,EAEDF,EAAc,MAAM,UAAY,CAC5B,EAAE,IAAI,EAAE,SAAS,QAAQ,EACzB,EAAE,IAAI,EAAE,QACRnB,EAAgB,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE,CAAC,CAAC,EACxDH,EAAa,EAAE,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC,CAAC,EAClD,MAAM,gBAAe,CACrC,CAAa,EAEDuB,EAAiB,MAAM,UAAY,CAC/B,IAAII,EAAY,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EACpD,EAAE,IAAI,EAAE,OAAM,EAAG,SAAS,YAAY,QAAQ,EAC9C3B,EAAa2B,EAAU,OAAQ,EAAC,QAAQ,uBAAuB,EAAE,CAAC,CAAC,EACnExB,EAAgBwB,EAAU,CAAC,CAAC,EAC5B,MAAM,gBAAe,CACrC,CAAa,IAEDb,EAAiB,OAAO,OAAO,EAC/BI,EAAkB,OAAO,OAAO,EAEhCR,EAAc,MAAM,UAAY,CAC5BF,EAAa,YAAY,QAAQ,EACjCL,EAAgBK,EAAa,SAAS,oBAAoB,EAAE,CAAC,CAAC,EAC9DR,EAAawB,CAAY,EACzB,MAAM,gBAAe,CACrC,CAAa,EAEDV,EAAiB,MAAM,UAAY,CAC/B,EAAE,IAAI,EAAE,OAAQ,EAAC,SAAS,QAAQ,EAClC,EAAE,IAAI,EAAE,OAAQ,EAAC,MAAK,EACtBX,EAAgB,EAAE,IAAI,EAAE,OAAM,EAAG,QAAQ,oBAAoB,EAAE,CAAC,CAAC,EACjEH,EAAa,EAAE,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC,CAAC,EAClD,MAAM,gBAAe,CACrC,CAAa,EAEDgB,EAAmB,MAAM,UAAW,CAChCD,EAAwB,YAAY,QAAQ,EAC5CZ,EAAgB,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE,CAAC,CAAC,EACxDH,EAAa,EAAE,IAAI,EAAE,QAAQ,OAAO,EAAE,CAAC,CAAC,EACxC,MAAM,gBAAe,CACrC,CAAa,KApILiB,EAAqB,OAAM,EAAG,SAAS,QAAQ,EAE5CG,GACCC,EAAsB,OAAO,OAAO,EACpCC,EAAc,OAAO,OAAO,EAC5BC,EAAiB,OAAO,OAAO,EAE/Bf,EAAa,MAAM,UAAY,CAC3Bc,EAAc,YAAY,QAAQ,EAClCT,EAAW,SAAS,QAAQ,CAC5C,CAAa,EAEDS,EAAc,GAAG,aAAc,UAAY,CACvC,MAAMM,EAAQ,KACdjH,EAAQ,WAAW,UAAY,CACxB,EAAEiH,CAAK,EAAE,OAAQ,EAAC,OAAQ,EAAC,OAAQ,EAAC,SAAS,eAAe,GAC3D,EAAEA,CAAK,EAAE,SAAQ,EAAG,SAAQ,EAAG,KAAK,SAAS,EAAE,YAAY,QAAQ,EAEvE,EAAEA,CAAK,EAAE,SAAU,EAAC,YAAY,QAAQ,EACxCf,EAAW,YAAY,QAAQ,EAC/B,EAAEe,CAAK,EAAE,SAAS,QAAQ,CAC7B,EAAE,GAAK,CACxB,CAAa,EAAE,GAAG,aAAc,UAAY,CAC5B,aAAajH,CAAK,CAClC,CAAa,EAEDiG,EAAY,MAAM,UAAY,CAC1BU,EAAc,YAAY,QAAQ,EAClCT,EAAW,SAAS,QAAQ,CAC5C,CAAa,IAEDH,EAAc,OAAO,OAAO,EAC5BI,EAAiB,OAAO,OAAO,EAC/BE,EAAmB,OAAO,OAAO,EAE9BS,EACCjB,EAAa,MAAMqB,CAAkB,EAErCH,EAAI,MAAMI,CAAiB,EAG/BlB,EAAY,MAAM,UAAY,CAC1BG,EAAwB,YAAY,QAAQ,EAC5CI,EAAyB,YAAY,QAAQ,EAC7CN,EAAW,SAAS,QAAQ,CAC5C,CAAa,EAEDC,EAAiB,GAAG,aAAc,UAAY,CAC1C,MAAMc,EAAQ,KACdjH,EAAQ,WAAW,UAAY,CAC3BoG,EAAwB,YAAY,QAAQ,EAC5CI,EAAyB,YAAY,QAAQ,EAC7CN,EAAW,YAAY,QAAQ,EAC/B,EAAEe,CAAK,EAAE,OAAQ,EAAC,SAAS,QAAQ,CACtC,EAAE,GAAK,CACxB,CAAa,EAAE,GAAG,aAAc,UAAY,CAC5B,aAAajH,CAAK,CAClC,CAAa,EAEDuG,EAAkB,GAAG,aAAc,SAAUvD,EAAO,CAChD,MAAMiE,EAAQ,KACdjH,EAAQ,WAAW,UAAY,CAC3BwG,EAAyB,YAAY,QAAQ,EAC7C,EAAES,CAAK,EAAE,OAAQ,EAAC,SAAS,QAAQ,EACnCjE,EAAM,gBAAe,CACxB,EAAE,GAAK,CACxB,CAAa,EAAE,GAAG,aAAc,UAAY,CAC5B,aAAahD,CAAK,CAClC,CAAa,IAoET,SAASkH,GAAqB,CAC1Bd,EAAwB,YAAY,QAAQ,EAC5CI,EAAyB,YAAY,QAAQ,EAC7CN,EAAW,SAAS,QAAQ,CAC/B,CAED,SAASiB,GAAoB,CACtBtB,EAAa,SAAS,QAAQ,EAC7BA,EAAa,YAAY,QAAQ,GAEjCZ,EAAc,YAAY,QAAQ,EAClCmB,EAAwB,YAAY,QAAQ,EAC5CI,EAAyB,YAAY,QAAQ,EAC7CN,EAAW,SAAS,QAAQ,EAC5BL,EAAa,SAAS,QAAQ,EAErC,CACL,CC3QA,IAAI1E,GAAmBD,EAAqB,iBAE5C,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAIkG,EAAe,EAAE,mBAAmB,EACpCC,EAAYD,EAAa,KAAK,qBAAqB,EACnDE,EAAM,OAAO,SAAS,KAE1B,GAAIF,EAAa,OAAS,IACtBC,EAAU,GAAG,QAAS,UAAY,CAC9B,IAAIN,EAAM,EAAE,IAAI,EAChBQ,EAAcR,CAAG,CAC7B,CAAS,EAEDM,EAAU,GAAG,OAAQ,UAAY,CAC7B,IAAIN,EAAM,EAAE,IAAI,EAChBS,EAAiBT,CAAG,CAChC,CAAS,EAEDK,EAAa,KAAK,SAAU1N,EAAG+N,EAAQ,CACnC,IAAIC,EAAgB,EAAED,CAAM,EAAE,KAAK,sBAAsB,EACrDE,EAAqB,EAAEF,CAAM,EAAE,KAAK,iCAAiC,EACrEG,EAAcC,EAASJ,CAAM,EAEjCK,EAAYL,EAAQG,CAAW,EAC/BD,EAAmB,KAAK,WAAY,EAAE,EAEtCD,EAAc,KAAK,SAAUhO,EAAGqO,EAAQ,CACpC,EAAEA,CAAM,EAAE,GAAG,YAAa,UAAY,CAClCD,EAAYL,EAAQ/N,CAAC,CACzC,CAAiB,CACjB,CAAa,EACD,EAAE+N,CAAM,EAAE,GAAG,UAAW,SAAU3P,EAAG,CACjC,IAAIkQ,EAASN,EAAc,OACvBO,EAAQJ,EAASJ,CAAM,EAEvB3P,EAAE,UAAY,IAAMmQ,EAAQD,EAAS,IACrClQ,EAAE,eAAc,EAChBmQ,KAGAnQ,EAAE,UAAY,IAAMmQ,EAAQ,IAC5BnQ,EAAE,eAAc,EAChBmQ,KAGJH,EAAYL,EAAQQ,CAAK,CACzC,CAAa,CACb,CAAS,EAGIX,EAAI,QAAQ,QAAQ,GAAK,GAAI,CAC9B,IAAIG,EAAS,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EACpDS,EAAa/G,GAAiB,YAAY,EAAE,SAAQ,EAExDsG,EAAO,KAAK,SAAU/N,EAAG+N,EAAQ,CAC7B,IAAIC,EAAgB,EAAED,CAAM,EAAE,KAAK,sBAAsB,EAEzDC,EAAc,KAAK,SAAUhO,EAAGqO,EAAQ,CAChC,EAAEA,CAAM,EAAE,KAAK,kBAAkB,IAAMG,GACvCJ,EAAYL,EAAQ/N,CAAC,CAC7C,CAAiB,CACjB,CAAa,CACJ,CAGL,SAAS6N,EAAcR,EAAK,CACxBA,EAAI,MAAK,EACTA,EAAI,OAAM,EAAG,YAAY,6BAA6B,CACzD,CAED,SAASS,EAAiBT,EAAK,CAC3B,IAAIoB,EAAqBpB,EAAI,SACxBoB,EAAmB,SAAS,6BAA6B,GAE9DA,EAAmB,YAAY,6BAA6B,CAC/D,CAED,SAASN,EAASJ,EAAQ,CACtB,IAAIW,EAAe,EAAEX,CAAM,EAAE,KAAK,iCAAiC,EAAE,CAAC,EACtE,OAAOW,EAAa,aACvB,CAED,SAASN,EAAYL,EAAQQ,EAAO,CAChC,IAAIb,EAAe,EAAEK,CAAM,EACvBW,EAAehB,EAAa,KAAK,iCAAiC,EAAE,CAAC,EACrEiB,EAAwBD,EAAa,cACrCE,EAAgBlB,EAAa,KAAK,uBAAuB,EACzDM,EAAgBN,EAAa,KAAK,sBAAsB,EACxDmB,EAAqB,EAAEb,EAAcO,CAAK,CAAC,EAAE,KAAI,EAErDP,EAAc,KAAK,SAAUhO,EAAGqO,EAAQ,CACpC,EAAEA,CAAM,EAAE,KAAK,gBAAiB,OAAO,CACnD,CAAS,EACD,EAAEL,EAAcO,CAAK,CAAC,EAAE,KAAK,gBAAiB,MAAM,EACpDG,EAAa,cAAgBH,EACzBI,IAA0BJ,GAC1B,EAAEG,CAAY,EAAE,QAAQ,UAAU,EAGtCE,EAAc,KAAKC,CAAkB,EACrCC,EAAgBf,EAAQC,EAAcO,CAAK,CAAC,CAE/C,CAED,SAASO,EAAgBf,EAAQM,EAAQ,CACrC,IAAIL,EAAgBN,EAAa,KAAK,sBAAsB,EACxDqB,EAAuB,GAEvB,EAAEhB,CAAM,EAAE,KAAK,sBAAsB,EAAE,SAAS,mCAAmC,EAAE,OAAS,EAC9FgB,EAAuB,GAEvBA,EAAuB,GAGvBA,GACAf,EAAc,YAAY,kCAAkC,EAEhE,EAAEK,CAAM,EAAE,SAAS,kCAAkC,CACxD,CACL,CAAC,ECvHD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,GAAI,EAAE,wBAAwB,EAAE,OAAS,EAAG,CACxC,IAAIW,EAAe,EAAE,eAAe,EAChCC,EAAqB,EAAE,SAAS,EAEpCC,IACA,EAAE,MAAM,EAAE,OAAO,UAAY,CACzBA,GACZ,CAAS,CACJ,CAED,SAASA,GAA4B,CACjC,IAAIC,EAAqB,EAAE,wBAAwB,EAC/CC,EAAc,EAAE,MAAM,EAAE,MAAK,EAE7BA,GAAe,IACfD,EAAmB,YAAYH,CAAY,EACpCI,EAAc,KACrBD,EAAmB,SAASF,CAAkB,CAErD,CACL,CAAC,ECbD,MAAMI,GAAY7H,GAKlB,SAAS8H,EAAkBC,EAAgBC,EAAW,CAClD,KAAK,eAAiBD,EACtB,KAAK,qBAAuB,KAAK,eAAe,MAAK,EAAG,SAAS,uBAAuB,EAAE,YAAY,KAAK,cAAc,EAAE,IAAI,aAAc,QAAQ,EACrJ,KAAK,cAAgB,KAAK,eAAe,KAAKC,CAAS,EACvD,KAAK,YAAc,KAAK,qBAAqB,KAAKA,CAAS,EAC3D,KAAK,uBAAyB,EAC9B,KAAK,qBAAuB,EAC5B,KAAK,MAAQ,GAEb,KAAK,oBAAmB,CAC5B,CAEAF,EAAkB,UAAU,oBAAsB,UAAW,CACzD,MAAM/B,EAAQ,KAEd,SAASkC,GAAe,CACpB,MAAMC,EAAY,EAAE,MAAM,EAAE,UAAS,EAC/BC,EAAapC,EAAM,eAAe,OAAM,EAAG,IAE7CmC,EAAYC,EACPpC,EAAM,QACPA,EAAM,aAAY,EAClBA,EAAM,MAAQ,IAEXA,EAAM,QACbA,EAAM,eAAc,EACpBA,EAAM,MAAQ,GAErB,CAED,EAAE,MAAM,EAAE,OAAO8B,GAAU,UAAW,CAClCI,GACR,EAAO,EAAE,CAAC,EACNA,GACJ,EAIAH,EAAkB,UAAU,aAAe,UAAW,CAClD,MAAMM,EAAoB,KAAK,cAAc,WAAU,EACnDA,IAAsB,KAAK,yBAC3B,KAAK,YAAY,WAAWA,CAAiB,EAC7C,KAAK,uBAAyBA,GAElC,KAAK,eAAe,IAAI,aAAc,QAAQ,EAC9C,KAAK,qBAAqB,IAAI,aAAc,SAAS,CACzD,EAIAN,EAAkB,UAAU,eAAiB,UAAW,CACpD,MAAMM,EAAoB,KAAK,YAAY,WAAU,EACjDA,IAAsB,KAAK,uBAC3B,KAAK,cAAc,WAAWA,CAAiB,EAC/C,KAAK,qBAAuBA,GAEhC,KAAK,eAAe,IAAI,aAAc,SAAS,EAC/C,KAAK,qBAAqB,IAAI,aAAc,QAAQ,CACxD,EAEAN,EAAkB,UAAU,eAAiB,UAAW,CACpD,OAAO,KAAK,qBAAqB,QACrC,EAKA,SAASO,EAAoBC,EAAQC,EAAQC,EAAWC,EAAqB,CACzE,KAAK,oBAAsBA,EAC3B,KAAK,OAASH,EACd,KAAK,UAAYC,EACjB,KAAK,UAAYC,EACjB,KAAK,eAAiB,GAEtB,KAAK,uBAAsB,EAC3B,KAAK,mBAAkB,CAC3B,CAIAH,EAAmB,UAAU,uBAAyB,UAAW,CAC7D,MAAMtC,EAAQ,KAEd,SAASkC,GAAgB,CACrB,MAAMS,EAAU,EAAE,MAAM,EAAE,UAAS,EAC7BC,EAAkB,EAAE,QAAQ,EAAE,OAAQ,EAAG,EAAE,MAAM,EAAE,SAEzD5C,EAAM,UAAU,KAAK,SAASgB,EAAO,CACjC,MAAM7D,EAAM,EAAE,IAAI,EAAE,OAAM,EAAG,IAAM6C,EAAM,oBACnC6C,EAAS1F,EAAM,EAAE,IAAI,EAAE,YAAW,EAExC,GAAKwF,GAAWxF,GAAOwF,GAAWE,GAAa7B,IAAQhB,EAAM,UAAU,OAAO,GAAK2C,IAAYC,EAAkB,CAC7G,MAAME,EAAW,IAAM,EAAE,IAAI,EAAE,KAAK,IAAI,EACpC9C,EAAM,iBAAmB8C,IACzB9C,EAAM,WAAW8C,CAAO,EACxB9C,EAAM,qBAAoB,GAE9BA,EAAM,sCAAqC,CAC9C,CACb,CAAS,CACJ,CAED,EAAE,MAAM,EAAE,OAAO8B,GAAU,UAAY,CACnCI,GACR,EAAO,EAAE,CAAC,CACV,EAGAI,EAAmB,UAAU,mBAAqB,UAAY,CAC1D,MAAMtC,EAAQ,KACd,KAAK,UAAU,MAAM,SAAUnP,EAAG,CAC9BA,EAAE,eAAc,EAChBmP,EAAM,WAAW,KAAK,IAAI,EAC1BA,EAAM,qBAAoB,EAC1BA,EAAM,gCAA+B,EACrCA,EAAM,sCAAqC,CACnD,CAAK,CACL,EAEAsC,EAAmB,UAAU,WAAa,SAAUS,EAAM,CACtD,KAAK,eAAiBA,CAC1B,EAGAT,EAAmB,UAAU,sCAAwC,UAAY,CAC7E,MAAMtC,EAAQ,KAEd,KAAK,OAAO,KAAK,UAAY,CACzB,MAAMgD,EAAQ,EAAE,IAAI,EACpB,IAAIC,EAAU,KACd,MAAMC,EAAcF,EAAM,aAC1BhD,EAAM,UAAU,KAAK,UAAY,CACzB,KAAK,OAASA,EAAM,iBACpBiD,EAAU,EAAE,IAAI,EAEhC,CAAS,EACD,IAAIE,EAAyBF,EAAQ,SAAQ,EAAG,KAChDE,GAA2BF,EAAQ,WAAU,EAAK,EAAMC,EAAc,EACtEF,EAAM,WAAWG,CAAsB,CAC/C,CAAK,CACL,EAGAb,EAAmB,UAAU,qBAAuB,UAAW,CAC3D,MAAMtC,EAAQ,KACd,KAAK,UAAU,YAAY,QAAQ,EACnC,KAAK,UAAU,KAAK,UAAW,CACvB,KAAK,OAASA,EAAM,gBACpB,EAAE,IAAI,EAAE,SAAS,QAAQ,CAErC,CAAK,CACL,EAGAsC,EAAmB,UAAU,gCAAkC,UAAY,CACvE,MAAMW,EAAU,EAAE,KAAK,cAAc,EAC/BG,EAAWH,EAAQ,KAAK,IAAI,EAAE,MAAK,EACnCI,EAAcJ,EAAQ,OAAM,EAAG,IAAM,KAAK,oBAAsB,EACtE,OAAO,OAAO,CACV,IAAKI,EACL,KAAM,EACN,SAAU,QAClB,CAAK,EAEDvB,GAAU,UAAY,CAClB,GAAIsB,EAAS,GAAG,QAAQ,EACpB,MAAO,GAEPA,EAAS,KAAK,WAAY,IAAI,EAC9BA,EAAS,MAAK,CAErB,EAAE,GAAG,CACV,EAMA,EAAE,QAAQ,EAAE,MAAM,UAAY,CAE1B,IAAIE,EAAe,EACnB,MAAMC,EAAqB,EAAE,YAAY,EACrCA,EAAmB,SAEnBD,EAD0B,IAAIvB,EAAkBwB,EAAoB,kBAAkB,EACrD,kBAKrC,MAAMhB,EAAS,EAAE,kBAAkB,EAI7BC,EAASD,EAAO,KAAK,cAAc,EAGnCE,EAAY,EAAE,2BAA2B,EAAE,KAAK,SAAS,EAG3DD,EAAO,QAAUC,EAAU,QAC3B,IAAIH,EAAmBC,EAAQC,EAAQC,EAAWa,CAAY,CAGtE,CAAC,ECxND,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1B,IAAIE,EAAmB,EAAE,uBAAuB,EAEhD,GAAIA,EAAiB,OAAS,EAAG,CAC7B,IAAIC,EAAqB,EAAE,eAAe,EAAE,GAAG,CAAC,EAC5CC,EAAgCD,EAAmB,KAAM,EACzDtC,EAAeqC,EAAiB,KAAK,QAAQ,EAAE,CAAC,EAEpD,EAAEA,CAAgB,EAAE,aAAaC,CAAkB,EAAE,IAAI,UAAW,MAAM,EAE1EC,EAA8B,SAAS,2BAA2B,EAElEvC,EAAa,SAAW,UAAY,CAChCA,EAAa,QAAQA,EAAa,aAAa,EAAE,QAAU,OAAO,SAAWA,EAAa,QAAQA,EAAa,aAAa,EAAE,MAC1I,CACK,CACL,CAAC,EChBD,EAAE,QAAQ,EAAE,MAAM,UAAY,CAC1BwC,KACAC,IACJ,CAAC,EAED,SAASD,IAAyB,CAC9B,IAAIE,EAAgB,EAAE,gBAAgB,EAEtCA,EAAc,KAAK,UAAY,CAC3B,IAAIC,EAAe,EAAE,IAAI,EACrBC,EAAoBD,EAAa,MAAO,EACxCE,EAAW,IAEXD,EAAoBC,GACpBF,EAAa,YAAY,MAAM,EAAE,SAAS,KAAK,CAE3D,CAAK,CACL,CAEA,SAASF,IAAgC,CACrC,IAAIK,EAAsB,EAAE,uBAAuB,EAEnDA,EAAoB,KAAK,UAAY,CACjC,IAAIC,EAAS,EAAE,IAAI,EACfC,EAAQD,EAAO,MAAO,EACtBE,EAASF,EAAO,SAEhBE,EAASD,EACTD,EAAO,SAAS,gCAAgC,EAEhDA,EAAO,SAAS,iCAAiC,CAE7D,CAAK,CACL,ECjCC,UAAY,CAGT,GAFY,SAAS,cAAc,iBAAiB,EAE1C,CAoFN,IAASG,EAAT,UAAwB,CACpB,GAAI,CAACC,EAAe,CAEhB,IAAIC,GAAOC,GAA0C,IACjD,uBAAyBC,GAAkC,IAAM,gVAEjEC,EAAO,SAAS,MAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAC/DC,EAAQ,SAAS,cAAc,OAAO,EAE1CA,EAAM,KAAO,WACTA,EAAM,WACNA,EAAM,WAAW,QAAUJ,EAE3BI,EAAM,YAAY,SAAS,eAAeJ,CAAG,CAAC,EAGlDG,EAAK,YAAYC,CAAK,EACtBL,EAAgB,EACnB,CACJ,EAnGD,IAAIM,EAAc,SAAS,YACvBN,EAAgB,GAEpB,GAAI,CAACM,EAAa,CACd,IAAIC,EAAgB,UAAU,CAC1B,IAAIC,EAAM,OAAO,uBAAyB,OAAO,0BAA4B,OAAO,6BAChF,SAASvS,EAAG,CAAE,OAAO,OAAO,WAAWA,EAAI,EAAE,GACjD,OAAO,SAASA,EAAG,CAAE,OAAOuS,EAAIvS,CAAE,CAAE,CACpD,IAEgBwS,EAAe,UAAU,CACzB,IAAIC,EAAS,OAAO,sBAAwB,OAAO,yBAA2B,OAAO,4BACjF,OAAO,aACX,OAAO,SAASC,EAAG,CAAE,OAAOD,EAAOC,CAAE,CAAE,CACvD,IAEgBC,EAAgB,SAAUvS,EAAQ,CAClC,IAAIwS,EAAWxS,EAAQ,mBACnByS,EAASD,EAAS,kBAClBE,EAAWF,EAAS,iBACpBG,EAAcF,EAAO,kBACzBC,EAAS,WAAaA,EAAS,YAC/BA,EAAS,UAAYA,EAAS,aAC9BC,EAAY,MAAM,MAAQF,EAAO,YAAc,EAAI,KACnDE,EAAY,MAAM,OAASF,EAAO,aAAe,EAAI,KACrDA,EAAO,WAAaA,EAAO,YAC3BA,EAAO,UAAYA,EAAO,YAC1C,EAEgBG,EAAgB,SAAU5S,EAAQ,CAClC,OAAOA,EAAQ,aAAeA,EAAQ,eAAe,OACjDA,EAAQ,cAAgBA,EAAQ,eAAe,MACtD,EAEG6S,EAAiB,SAAU3U,EAAE,CAC7B,IAAI8B,EAAU,KACduS,EAAc,IAAI,EACd,KAAK,eAAeH,EAAY,KAAK,aAAa,EACtD,KAAK,cAAgBF,EAAa,UAAU,CACpCU,EAAc5S,CAAO,IACrBA,EAAQ,eAAe,MAAQA,EAAQ,YACvCA,EAAQ,eAAe,OAASA,EAAQ,aACxCA,EAAQ,oBAAoB,QAAQ,SAASJ,EAAG,CAC5CA,EAAG,KAAKI,EAAS9B,CAAC,CAC9C,CAAyB,EAEzB,CAAiB,CACjB,EAGgB4U,EAAY,GAEZC,EAAiB,GACjBC,EAAsB,iBACtBC,EAAc,kBAAkB,MAAM,GAAG,EACzCC,EAAc,uEAAuE,MAAM,GAAG,EAC9FC,EAAO,GACX,CACI,IAAIC,EAAM,SAAS,cAAc,aAAa,EAG9C,GAFIA,EAAI,MAAM,gBAAkB,SAAcN,EAAY,IAEtDA,IAAc,IACd,QAAShT,EAAI,EAAGA,EAAImT,EAAY,OAAQnT,IACpC,GAAIsT,EAAI,MAAOH,EAAYnT,CAAC,EAAI,eAAiB,IAAK,OAAY,CAC9DqT,EAAMF,EAAanT,GAEnBiT,EAAiB,IAAMI,EAAI,YAAW,EAAK,IAC3CH,EAAsBE,EAAapT,GACnCgT,EAAY,GACZ,KACH,EAGZ,CAED,IAAIO,EAAgB,aAChBxB,EAAqB,IAAMkB,EAAiB,aAAeM,EAAgB,gDAC3EvB,EAAiBiB,EAAiB,kBAAoBM,EAAgB,IAC7E,CAuBD,OAAO,kBAAoB,SAASrT,EAASJ,EAAG,CACxCqS,EAAajS,EAAQ,YAAY,WAAYJ,CAAE,GAE1CI,EAAQ,qBACL,iBAAiBA,CAAO,EAAE,UAAY,WAAUA,EAAQ,MAAM,SAAW,YAC7E0R,IACA1R,EAAQ,eAAiB,GACzBA,EAAQ,oBAAsB,IAC7BA,EAAQ,mBAAqB,SAAS,cAAc,KAAK,GAAG,UAAY,kBACzEA,EAAQ,mBAAmB,UAAY,oFAEvCA,EAAQ,YAAYA,EAAQ,kBAAkB,EAC9CuS,EAAcvS,CAAO,EACrBA,EAAQ,iBAAiB,SAAU6S,EAAgB,EAAI,EAGvDG,GAAuBhT,EAAQ,mBAAmB,iBAAiBgT,EAAqB,SAAS9U,EAAG,CAC7FA,EAAE,eAAiBmV,GAClBd,EAAcvS,CAAO,CACjD,CAAqB,GAELA,EAAQ,oBAAoB,KAAKJ,CAAE,EAEnD,EAEQ,OAAO,qBAAuB,SAASI,EAASJ,EAAG,CAC3CqS,EAAajS,EAAQ,YAAY,WAAYJ,CAAE,GAE/CI,EAAQ,oBAAoB,OAAOA,EAAQ,oBAAoB,QAAQJ,CAAE,EAAG,CAAC,EACxEI,EAAQ,oBAAoB,SAC7BA,EAAQ,oBAAoB,SAAU6S,CAAc,EACpD7S,EAAQ,mBAAqB,CAACA,EAAQ,YAAYA,EAAQ,kBAAkB,GAGvF,EAID,EAAE,MAAM,EAAE,GAAG,SAAU,UAAY,CAC3B,EAAE,MAAM,EAAE,UAAS,EAAK,IACxB,EAAE,iCAAiC,EAAE,YAAY,QAAQ,EAGzD,EAAE,iCAAiC,EAAE,SAAS,QAAQ,CAEtE,CAAS,CACJ,CAYD,SAASoK,EAAmBpK,EAASO,EAAW+S,EAAMC,EAAQ,CAC1D,IAAIlJ,EAEJ,GAAKrK,EAGDqK,EAAYC,EAAoBtK,CAAO,MAFvC,QAOJ,OAAO,iBAAiB,OAAQ,UAAY,CACxCuK,EAAavK,EAASqK,EAAW9J,EAAW+S,EAAMC,CAAM,CAC3D,EAAE,EAAK,EAER,OAAO,iBAAiB,SAAU,UAAY,CAC1ChJ,EAAavK,EAASqK,EAAW9J,EAAW+S,EAAMC,CAAM,CAC3D,EAAE,EAAK,CACX,CAOD,SAASjJ,EAAoBtK,EAAS,CAClC,IAAIwK,EAAM,EAEV,GACIA,GAAOxK,EAAQ,WAAa,EAC5BA,EAAUA,EAAQ,mBACbA,GAET,OAAOwK,CACV,CAOD,SAASD,EAAavK,EAASqK,EAAW9J,EAAW+S,EAAMC,EAAQ,CAC/D,IAAIC,EAAM,EAEN/I,EADS,OAAO,YACKJ,EAAY,OAAO,YAAckJ,EAEtD9I,EAAY+I,EACZ/I,EAAY+I,EACL/I,EAAYzK,EAAQ,cAAc,aAAeA,EAAQ,eAChEyK,EAAYzK,EAAQ,cAAc,aAAeA,EAAQ,cAG7DA,EAAQ,MAAM,UAAY,YAAYsT,CAAI,IAAK7I,EAAalK,CAAS,KACxE,CAOD,IAAIkT,EAAO,SAAS,cAAc,WAAW,EAEzCA,GACArJ,EAAmBqJ,EAAM,EAAG,IAAK,GAAG,OAAO,YAAcA,EAAK,cAAgB,EAAE,EAQpF,IAAIC,EAAS,SAAS,cAAc,cAAc,EAE9CD,GAAQC,GACRC,EAAgBD,CAAM,EAO1B,SAASC,EAAgB3T,EAAS,CAEzBA,IAIL,OAAO,iBAAiB,SAAU,UAAY,CACtC,OAAO,WAAa,KACpB4T,EAAgB5T,CAAO,CAE9B,EAAE,EAAK,EAER,OAAO,iBAAiB,OAAQ,UAAY,CACxC4T,EAAgB5T,CAAO,CAC1B,EAAE,EAAK,EACX,CAQD,SAAS4T,EAAgB5T,EAAS,CAE9B,IAAIyR,EAAS,IACTD,EAAQ,IAER+B,EAAS,IAETM,EAAe7T,EAAQ,YACvB8T,EAAc,KAAK,MAAMrC,EAASoC,EAAerC,CAAK,EACtDuC,EAAe,KAAK,MAAM/T,EAAQ,cAAc,aAAeuT,CAAM,EAErES,EAAYD,EAAgBA,EAAeD,EAE3CC,EAAeC,GAAaF,IAC5BE,GAAaF,GAGjB9T,EAAQ,MAAM,OAAS,GAAGgU,CAAS,IACtC,CAOD,IAAIC,EAAe,SAAS,cAAc,gBAAgB,EACtDC,EAAiB,GAOjBD,GACAA,EAAa,iBAAiB,OAAQE,EAAkB,EAAK,EAQjE,SAASA,GAAmB,CAErBD,GACCD,EAAa,eAAc,EAG/BC,EAAiB,EACpB,CAGD,IAAIE,EAAQ,SAAS,cAAc,QAAQ,EAM3C,SAAS,iBAAiB,2BAA2B,EAAE,QAAQpU,GAAW,CACtEA,EAAQ,iBAAiB,QAAS,SAAS9B,EAAE,CACtCA,EAAE,OAAO,UAAU,SAAS,eAAe,GAC1CA,EAAE,OAAO,UAAU,SAAS,qBAAqB,GACjDA,EAAE,OAAO,UAAU,SAAS,YAAY,GACxCA,EAAE,OAAO,UAAU,SAAS,YAAY,IAI5CA,EAAE,gBAAe,EACjB,KAAK,UAAU,OAAO,WAAW,EAGjC0V,EAAgBF,CAAM,EAClC,CAAS,EAED,kBAAkB1T,EAAS,UAAU,CAC9B,KAAK,UAAU,SAAS,WAAW,EAClC,OAAO,SAAS,EAAGsK,EAAoB8J,CAAK,CAAC,EAE7C,OAAO,SAAS,EAAG9J,EAAoB,IAAI,CAAC,EAEhDsJ,EAAgBF,CAAM,CAClC,CAAS,CACT,CAAK,CACL,GAAG,ECjWH,SAASW,EAAUC,EAAU,CACzB,KAAK,SAAWA,EAChB,KAAK,cAAgB,GAErB,QAAQC,KAAW,KAAK,SACpBA,EAAQ,OAAS,GACjBA,EAAQ,kBAAoBC,GAAsBD,EAAS,oBAAoB,EAC/EA,EAAQ,iBAAmBC,GAAsBD,EAAS,oBAAoB,EAGlF,KAAK,YAAW,CACpB,CAGAF,EAAU,UAAU,YAAc,UAAY,CAC1C,QAAQE,KAAW,KAAK,SACpB,GAAGA,EAAQ,kBAAkB,QAAUA,EAAQ,iBAAiB,OAC5D,QAAQE,KAAWF,EAAQ,kBAEvBE,EAAQ,SAAW,EAEnBA,EAAQ,iBAAiB,QAASvW,GAAK,CACnC,KAAK,YAAYqW,CAAO,CAC5C,CAAiB,EAEDE,EAAQ,iBAAiB,UAAYvW,GAAM,CACpCA,EAAE,UAAY,IACb,KAAK,YAAYqW,CAAO,CAEhD,CAAiB,CAIjB,EAEAF,EAAU,UAAU,YAAc,SAASE,EAAS,CAChDA,EAAQ,SAAW,CAACA,EAAQ,SAC5B,KAAK,cAAcA,CAAO,EAEvBA,EAAQ,SACJ,KAAK,cAAc,KAAOA,EAAQ,KAC9B,KAAK,gBACJ,KAAK,cAAc,SAAW,GAC9B,KAAK,cAAc,KAAK,aAAa,EACrC,KAAK,cAAgB,IAEzBA,EAAQ,SAAW,GACnB,KAAK,cAAcA,CAAO,EAC1B,KAAK,cAAgBA,IAGzB,KAAK,cAAgB,GACrB,KAAK,cAAcA,CAAO,EAElC,EAEAF,EAAU,UAAU,cAAgB,SAASE,EAAS,CAC/CA,EAAQ,SACPA,EAAQ,UAAU,IAAI,MAAM,EAE5BA,EAAQ,UAAU,OAAO,MAAM,EAGnC,QAAQE,KAAWF,EAAQ,kBACvBE,EAAQ,aAAa,gBAAiBF,EAAQ,QAAQ,EAG1D,QAAQjP,KAAWiP,EAAQ,iBACvBjP,EAAQ,aAAa,cAAe,CAACiP,EAAQ,QAAQ,CAE7D,EAOA,SAASC,GAAsBxI,EAAQ0I,EAAW,CAC9C,IAAIC,EAAW,CAAA,EAEf,QAAQC,KAAS5I,EAAO,SACjB4I,EAAM,UAAU,SAASF,CAAS,GACjCC,EAAS,KAAKC,CAAK,EAI3B,OAAOD,CACX,EAYC,UAAW,CACR,IAAIE,EAAsB,SAAS,iBAAiB,YAAY,EAEhE,QAAQC,KAAaD,EAAqB,CACtC,IAAIE,EAAoBP,GAAsBM,EAAW,oBAAoB,EAC7EC,EAAoBA,EAAkB,OAAO,SAASR,EAAS,CAC3D,GAAG,CAACA,EAAQ,UAAU,SAAS,2BAA2B,EACtD,OAAOA,CAEvB,CAAS,EACEQ,EAAkB,QACjB,IAAIV,EAAUU,CAAiB,CAEtC,CACL,GAAG,GCjHF,UAAY,CAKT,SAASC,EAAQC,EAAO,CAIpB,MAAMC,EAAU,MAAM,UAAU,MAAM,MAAMD,EAAM,iBAAiB,wBAAwB,CAAC,EAC5F,IAAIE,EAAW,CAAA,EACXC,EAAqB,EACrBC,EAAoB,EAExBH,EAAQ,QAAQvT,GAAU,CAEtB,MAAM2D,EAAU2P,EAAM,cAAc,wCAAwCtT,EAAO,QAAQ,KAAK,IAAI,EACpGwT,EAAS,KAAK7P,GAAoB,IAAI,CAClD,CAAS,EAED,SAASgQ,EAAqBtV,EAASuV,EAAW,CAC1CvV,IACIuV,GACAvV,EAAQ,UAAU,IAAI,YAAY,EAClCA,EAAQ,aAAe,SAEvBA,EAAQ,UAAU,OAAO,YAAY,EACrCA,EAAQ,aAAe,SAGlC,CACD,SAASwV,EAAgBxV,EAASyV,EAAU,CACpCzV,IACIyV,GACAzV,EAAQ,UAAU,IAAI,QAAQ,EAC9BA,EAAQ,aAAe,SAEvBA,EAAQ,UAAU,OAAO,QAAQ,EACjCA,EAAQ,aAAe,SAGlC,CACD,SAAS0V,EAAe1V,EAAS2V,EAAS,CAClC3V,IACI2V,GACA3V,EAAQ,aAAa,WAAY,CAAC,EAClCA,EAAQ,MAAK,GAEbA,EAAQ,aAAa,WAAY,EAAE,EAG9C,CACD,SAAS4V,GAAgB,CACrBP,IACIA,GAAqBH,EAAQ,SAC7BG,EAAoB,EAE3B,CACD,SAASQ,GAAgB,CACrBR,IACIA,EAAoB,IACpBA,EAAoBH,EAAQ,OAAS,EAE5C,CACD,SAASY,EAAQzH,EAAQ,CACrBiH,EAAqBH,EAASC,CAAkB,EAAG,EAAK,EACxDI,EAAgBN,EAAQE,CAAkB,EAAG,EAAK,EAClDE,EAAqBH,EAAS9G,CAAK,EAAG,EAAI,EAC1CmH,EAAgBN,EAAQ7G,CAAK,EAAG,EAAI,EACpC+G,EAAqB/G,CACxB,CACD,SAAS0H,EAAe7X,EAAG,EACnBA,EAAE,UAAY,IAAMA,EAAE,UAAY,MAClCwX,EAAeR,EAAQG,CAAiB,EAAG,EAAK,EAC5CnX,EAAE,UAAY,GAAM0X,EAAe,EAC9B1X,EAAE,UAAY,IAAM2X,EAAe,EAC5CH,EAAeR,EAAQG,CAAiB,EAAG,EAAI,EAEtD,CACD,SAASW,GAAO,CAEZb,EAAS,QAAQ5V,GAAQ,CAAE+V,EAAqB/V,EAAM,EAAK,CAAE,CAAE,EAC/D2V,EAAQ,QAAQ3V,GAAQ,CAAEiW,EAAgBjW,EAAM,EAAK,CAAE,CAAE,EACzD2V,EAAQ,QAAQ3V,GAAQ,CAAEmW,EAAenW,EAAM,EAAK,CAAE,CAAE,EAGxDuW,EAAOV,CAAkB,EAGzBF,EAAQ,QAAQ,CAAC3V,EAAM8O,IAAU9O,EAAK,QAAU6J,GAAS0M,EAAOzH,CAAK,CAAC,EACtE6G,EAAQ,QAAS3V,GAASA,EAAK,UAAY6J,GAAS2M,EAAc3M,CAAK,CAAC,CAC3E,CAED4M,GACH,CAED,CAAC,GAAG,SAAS,iBAAiB,gBAAgB,CAAC,EAC1C,QAAQC,GAAKjB,EAAOiB,CAAC,CAAC,CAC/B,GAAG,GClGF,UAAY,CACX,MAAMC,EAAoB,SAAS,iBAAiB,qBAAqB,EAErEA,GACFA,EAAkB,QAASlW,GAAY,CACrC,MAAMmW,EAASnW,EAAQ,cAAc,6BAA6B,EAC5DL,EAAOK,EAAQ,cAAc,2BAA2B,EAE9DmW,EAAO,iBAAiB,QAAS,UAAY,CACvC,OAAO,WAAa,MAClB,iBAAiBxW,CAAI,EAAE,UAAY,QACrCA,EAAK,MAAM,QAAU,OACrBwW,EAAO,UAAU,IAAI,UAAU,IAE/BxW,EAAK,MAAM,QAAU,OACrBwW,EAAO,UAAU,OAAO,UAAU,GAG9C,CAAO,CACP,CAAK,CAEL,GAAI,GCnBH,UAAY,CACX,MAAMC,EAAQ,SAAS,iBAAiB,sBAAsB,EAE1DA,EAAM,OAAS,GACjBA,EAAM,QAASC,GAAW,CACxBA,EAAO,iBAAiB,QAAS,SAAUnY,EAAG,CAC5CA,EAAE,eAAc,EAChBgK,GAAgB,EAAC,KAAMQ,GAAgB,CACjCA,IACkB2N,EAAO,OAAS,4BAElC,OAAO,MAAK,EAEZ,OAAO,KAAKA,EAAO,KAAM,SAAS,EAGhD,CAAS,CACT,CAAO,CACP,CAAK,CAEL,GAAI,ECtBJ,MAAMC,EAAgB,gBAChBC,EAAY,YAEZC,GAAY,CAClB,cAAEF,EACF,UAAEC,CACF,EAEME,GAAoB,CACxB,8BAA+B,4BAC/B,+BAAgC,6BAChC,8BAA+B,4BAE/B,mCAAoC,gCACpC,uCAAwC,+BAC1C,EAEMC,EAAsB,CAC1B,aAAc,CAAC,MAAM,+DAAgE,QAAS,6BAA6B,EAC3H,cAAe,CAAC,MAAO,kCAAmC,QAAS,+BAA+B,EAClG,oBAAqB,CAAC,MAAO,gCAAiC,QAAS,+BAA+B,EACtG,qBAAsB,CAAC,MAAO,uEAAwE,QAAS,8BAA8B,CAC/I,EAEMC,GAAmB,GACnBC,GAAmB,GAEzB,SAASC,GAAYC,EAAK,CACxB,IAAIC,EAAWD,EAAI,MAAQA,EAAI,MAAQA,EAAI,QAC3C,OACGC,GAAY,IAAMA,GAAY,IAC/BA,IAAa,IACbA,IAAa,IAEN,GAEL,EAAAA,EAAW,KAAOA,EAAW,IAAMA,EAAW,IAEpD,CAEA,MAAMC,EAAiB1R,GAAY,CACjC,MAAM2R,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAI,iCAAiC,EAEzD,MAAMC,EAAa,SAAS,cAAc,KAAK,EAC/CA,EAAW,UAAU,IAAI,qCAAqC,EAE9D,MAAMC,EAAiB,SAAS,cAAc,KAAK,EACnDA,EAAe,MAAM,MAAQ,QAC7BA,EAAe,MAAM,aAAe,MACpCA,EAAe,UAAY7R,EAE3B,MAAM8R,EAAW,SAAS,cAAc,QAAQ,EAChD,OAAAA,EAAS,UAAU,IAAI,2CAA2C,EAElEF,EAAW,OAAOC,EAAgBC,CAAQ,EAE1CA,EAAS,iBAAiB,QAAS,SAAUlZ,EAAG,CAC9CA,EAAE,gBAAe,EACjBgZ,EAAW,MAAM,WAAa,QAClC,CAAG,EACDD,EAAU,iBAAiB,QAAS,UAAY,CAC7B,SAAS,iBACxB,sCACN,EACa,QAAS1X,GAAS,CACzBA,EAAK,MAAM,WAAa,QAC9B,CAAK,EAED2X,EAAW,MAAM,WAAa,SAClC,CAAG,EAEDD,EAAU,OAAOC,CAAU,EAEpBD,CACT,EAEMI,GAAc,IAAM,CACxB,MAAMC,EAAoB,SAAS,cACjC,mCACJ,EACQC,EAAe,MAAM,KAAKD,EAAkB,QAAQ,EAEpDE,EAAc,CAAA,EAEpB,OAAAD,EAAa,QAAShY,GAAS,CAC7B,KAAM,CAAE,GAAA+S,EAAI,QAAAhN,GAAY/F,EAAK,QAC7BiY,EAAYlF,CAAE,EAAIhN,CACtB,CAAG,EAEMkS,CACT,EAEMC,GAAoB,IAAM,CAC9B,MAAMC,EAAyB,SAAS,eACtC,GAAGnB,CAAS,eAChB,EACQoB,EAAgB,SAAS,eAAe,GAAGpB,CAAS,WAAW,EAE/DqB,EAAW,OAAOD,EAAc,KAAK,EACrCE,EAAa,OAAOH,EAAuB,KAAK,EAItD,OAFe,QAAQE,GAAYC,EAAa,MAAM,QAAQ,CAAC,CAAC,CAGlE,EAEMC,GAAc,CAAC,CAAE,MAAAhM,EAAO,KAAAiM,KAAW,CACvC,MAAMC,EAAalM,EAAM,KAAMvM,GAASA,EAAK,WAAa,EAAI,EACxD,CAAE,kBAAA0Y,EAAmB,KAAAC,CAAM,EAAGF,EAEpC,IAAIG,EAA0BF,EAAkB,UAAU,eACxD,OACJ,EACEE,EAA0B,GAAGA,CAAuB,6BAEpD,MAAMC,EAAmBH,EAAkB,WAAW,eAAe,OAAO,EAEtEI,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAI,mBAAmB,EAE3C,MAAMC,EAAY,SAAS,cAAc,GAAG,EAC5CA,EAAU,UAAU,IAAI,4BAA4B,EACpDA,EAAU,UACRP,IAASzB,EACL,eAAe4B,CAAI,+CACnB,6EAEN,MAAMK,EAAkB,SAAS,cAAc,IAAI,EACnDA,EAAgB,UAAU,IAAI,mCAAmC,EACjEA,EAAgB,UAAYJ,EAE5B,MAAMK,EAAqB,SAAS,cAAc,IAAI,EACtDA,EAAmB,UAAU,IAAI,sCAAsC,EACvEA,EAAmB,UAAY,WAAWJ,CAAgB,4BAE1D,MAAMK,EAAmBC,GAAqBV,CAAU,EAGlDW,EAA6B,SAAS,cAAc,GAAG,EAC7DA,EAA2B,UAAU,IAAI,kCAAkC,EAC3EA,EAA2B,YACzBZ,IAASzB,EACL,+BACA,8BAEN,MAAMsC,EAAmB,SAAS,cAAc,GAAG,EACnDA,EAAiB,UAAU,IAAI,gCAAgC,EAC/DA,EAAiB,UAAY,gBAE7B,MAAMC,EAAUC,GAAYhN,EAAOiM,CAAI,EAEjCgB,EAAc,SAAS,cAAc,KAAK,EAChDA,EAAY,UAAU,IAAI,8BAA8B,EACxD,MAAMC,EAAY,SAAS,cAAc,GAAG,EAC5C,OAAAA,EAAU,aAAa,OAAQ,2BAA2B,EAC1DA,EAAU,UAAU,IAClB,0BACA,gBACA,sBACJ,EACEA,EAAU,UAAY,QACtBD,EAAY,OAAOC,CAAS,EAE5BX,EAAU,OACRC,EACAE,EACAD,EACAE,EACAE,EACAC,EACAC,EACAE,CACJ,EAESV,CACT,EAEMY,GAAuB,CAAC,CAAC,MAAAjb,EAAO,MAAAkb,EAAO,QAAAC,CAAO,IAAM,CACxD,MAAMC,EAAS,SAAS,cAAc,IAAI,EAC1CA,EAAO,UAAU,IAAI,oCAAoC,EAEzD,IAAIC,EAAkBrb,EAAM,eAAe,OAAO,EAElD,MAAMsb,EAAkB,SAAS,cAAc,MAAM,EACrDA,EAAgB,UAAU,IAAI,yCAAyC,EACvE,MAAMC,EAAS,SAAS,cAAc,KAAK,EAC3CA,EAAO,aAAa,MAAOJ,CAAO,EAClCG,EAAgB,OAAOC,CAAM,EAC7BH,EAAO,OAAOE,CAAe,EAE7B,MAAME,EAAU,SAAS,cAAc,MAAM,EACvCC,EAAc,SAAS,cAAc,IAAI,EAC/CA,EAAY,YAAcJ,EAC1BG,EAAQ,OAAOC,CAAW,EAC1B,MAAMC,EAAc,SAAS,cAAc,GAAG,EAC9C,OAAAA,EAAY,YAAcR,EAC1BM,EAAQ,OAAOE,CAAW,EAC1BN,EAAO,OAAOI,CAAO,EAEdJ,CACT,EAEMV,GAAwBV,GAAe,CAC3C,MAAMK,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAI,+BAA+B,EAEvD,MAAMsB,EAAsB,SAAS,cAAc,GAAG,EACtDA,EAAoB,UAAU,IAAI,uCAAuC,EACzEA,EAAoB,YAAc,sCAClCtB,EAAU,OAAOsB,CAAmB,EAEpC,MAAMC,EAAoB,SAAS,cAAc,IAAI,EACrDA,EAAkB,UAAU,IAAI,qCAAqC,EAErE,SAAW,CAACC,EAAK7b,CAAK,IAAK,OAAO,QAAQga,EAAW,iBAAiB,EACpE,GAAI,OAAO,KAAKtB,CAAmB,EAAE,SAASmD,CAAG,EAAG,CAClD,MAAMC,EAAiBb,GAAqB,CAC1C,MAAOjb,EACP,MAAO0Y,EAAoBmD,CAAG,EAAE,MAChC,QAASnD,EAAoBmD,CAAG,EAAE,OAC1C,CAAO,EACDD,EAAkB,OAAOE,CAAc,CACxC,CAEHzB,EAAU,OAAOuB,CAAiB,EAElC,MAAMG,EAA0B,SAAS,cAAc,GAAG,EAC1DA,EAAwB,UAAU,IAAI,2CAA2C,EACjFA,EAAwB,YAAc,8CACtC,MAAMC,EAAU,SAAS,cAAc,GAAG,EAC1C,OAAAA,EAAQ,aAAa,OAAQ,kGAAkG,EAC/HA,EAAQ,aAAa,SAAU,QAAQ,EACvCA,EAAQ,aAAa,MAAO,qBAAqB,EACjDA,EAAQ,UAAY,mDACpBD,EAAwB,OAAOC,CAAO,EACtC3B,EAAU,OAAO0B,CAAuB,EAEjC1B,CACT,EAEMS,GAAc,CAAChN,EAAOiM,IAAS,CACnC,MAAMM,EAAY,SAAS,cAAc,IAAI,EAC7C,OAAAA,EAAU,UAAU,IAAI,0BAA0B,EAElDvM,EAAM,QAASvM,GAAS,CACtB,KAAM,CAAE,KAAA2Y,EAAM,UAAA+B,EAAW,SAAAC,EAAU,kBAAAjC,CAAiB,EAAK1Y,EAEnD0F,EAAWkV,GAAgB,CAC/B,KAAMjC,EACN,UAAW+B,EACX,SAAUC,EACV,WAAYjC,EAAkB,WAC9B,KAAMF,CACZ,CAAK,EAEDM,EAAU,OAAOpT,CAAQ,CAC7B,CAAG,EAEMoT,CACT,EAEM8B,GAAkB,CAAC,CAAE,UAAAC,EAAW,SAAAC,EAAU,WAAAxC,EAAY,KAAApY,EAAM,KAAAsY,KAAW,CAC3E,MAAMK,EAAmBP,EAAW,eAAe,OAAO,EAEpDrP,EAAU,SAAS,cAAc,IAAI,EAC3CA,EAAQ,UAAU,IAAI,yBAAyB,EAE/C,MAAM8R,EAAS,SAAS,cAAc,GAAG,EACzCA,EAAO,UAAU,IAAI,8BAA8B,EAC/CF,EACFE,EAAO,UACLvC,IAASxB,EAAY,uBAAyB,2BAEhD+D,EAAO,UAAY7a,GAGjB2a,GAAaC,IACfC,EAAO,UAAU,IAAI,aAAa,EAGpC,MAAMC,EAAkB,SAAS,cAAc,KAAK,EACpDA,EAAgB,UAAU,IAAI,iCAAiC,EAE3DH,EACFG,EAAgB,UAAU,IAAI,SAAS,EAC9BF,GACTE,EAAgB,UAAU,IAAI,QAAQ,EAGxC,MAAMC,EAAc,SAAS,cAAc,KAAK,EAChDA,EAAY,UAAU,IAAI,iCAAiC,EAC3DA,EAAY,MAAM,MAAQ,GAAG,KAAK,MAAM3C,CAAU,CAAC,IAEnD,MAAM4C,EAAiB,SAAS,cAAc,GAAG,EACjD,OAAAA,EAAe,UAAU,IAAI,kCAAkC,EAC/DA,EAAe,UAAYL,EAAY,GAAK,GAAGhC,CAAgB,cAC3DgC,IAAWK,EAAe,MAAM,QAAU,QAE9CF,EAAgB,OAAOE,EAAgBD,CAAW,EAElDhS,EAAQ,OAAO8R,EAAQC,CAAe,EAE/B/R,CACT,EAEMkS,GAAqB,CAAC,CAAE,MAAA5O,EAAO,SAAA6O,KAAe,CAClD7O,EAAM,QAAShH,GAAO,CACpB,KAAM,CAAE,KAAArF,EAAM,GAAA6S,CAAI,EAAGxN,EACrB6V,EAAS,mBACP,YACA,oBAAoBrI,CAAE,gBAAgB7S,CAAI,KAAKA,CAAI,WACzD,CACA,CAAG,CACH,EAEMmb,GAAwB,CAAC,CAAE,GAAAtI,EAAI,MAAAxG,EAAO,YAAA+O,CAAW,IAAO,CAC5D,MAAMC,EAAU,SAAS,cAAc,QAAQ,EAC/CA,EAAQ,UAAYD,EAEpB,MAAMF,EAAW,SAAS,eAAerI,CAAE,EAC3CqI,EAAS,UAAY,GACrBA,EAAS,OAAOG,CAAO,EAEvBJ,GAAmB,CAAE,MAAA5O,EAAO,SAAA6O,CAAQ,CAAE,EAClC7O,EAAM,SAAW,IACnB6O,EAAS,cAAgB,EAE7B,EAEMI,EAAsB,CAAC,CAAE,MAAA7B,EAAO,YAAA2B,EAAa,MAAA/O,EAAO,GAAAwG,EAAI,SAAA0I,KAAe,CAC3E,MAAML,EAAW,SAAS,cAAc,QAAQ,EAC1CM,EAAU,SAAS,cAAc,OAAO,EACxCH,EAAU,SAAS,cAAc,QAAQ,EAE/C,OAAAG,EAAQ,aAAa,MAAO3I,CAAE,EAC9B2I,EAAQ,UAAY/B,EAEpB4B,EAAQ,UAAYD,EACpBF,EAAS,aAAa,KAAMrI,CAAE,EAE9BuI,GAAeF,EAAS,OAAOG,CAAO,EACtCJ,GAAmB,CAAE,MAAA5O,EAAO,SAAA6O,CAAQ,CAAE,EAEtCA,EAAS,iBAAiB,SAAU,IAAM,CACxC,MAAMtM,EAAQsM,EAAS,cACvBK,GAAYA,EAAS3M,CAAK,CAC9B,CAAG,EAEM,CAAE,SAAAsM,EAAU,QAAAM,EACrB,EAEMC,GAAqBnD,GAAS,CAClC,MAAMR,EAAeF,KACf,CACJ,uCAAA8D,EACA,mCAAAC,EACA,8BAAAC,CAED,EAAG5E,GAEE4B,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAI,wCAAwC,EAEhE,MAAMiD,EAAkB,SAAS,cAAc,KAAK,EAC9CC,EAAkB,SAAS,cAAc,OAAO,EACtDA,EAAgB,UAAY,iBAC5BA,EAAgB,aAAa,MAAO,GAAGxD,CAAI,WAAW,EAEtD,MAAMyD,EAAkB,SAAS,cAAc,OAAO,EAMtD,GALAA,EAAgB,aAAa,OAAQ,QAAQ,EAC7CA,EAAgB,aAAa,MAAO,GAAG,EACvCA,EAAgB,aAAa,QAAS,GAAG,EACzCA,EAAgB,aAAa,KAAM,GAAGzD,CAAI,WAAW,EAEjDA,IAASxB,EAAW,CACtB,MAAMkF,EAAkBzE,EACtBO,EAAa6D,CAAkC,CACrD,EACIG,EAAgB,OAAOE,CAAe,EAEtCD,EAAgB,MAAM,MAAQ,OAClC,SAAazD,IAASzB,EAAe,CACjC,MAAMmF,EAAkBzE,EACtBO,EAAa4D,CAAsC,CACzD,EACII,EAAgB,OAAOE,CAAe,CACvC,CAEDD,EAAgB,iBAAiB,UAAW,SAAUtd,EAAG,CAClD2Y,GAAY3Y,CAAC,GAAGA,EAAE,eAAc,CACzC,CAAG,EAED,MAAMwd,EAAc,SAAS,cAAc,KAAK,EAC1CC,EAAaZ,EAAoB,CACrC,MAAO,OACP,MAAO,CACL,CAAE,KAAM,KAAM,GAAI,IAAM,EACxB,CAAE,KAAM,MAAO,GAAI,KAAO,CAC3B,EACD,GAAI,GAAGhD,CAAI,OACf,CAAG,EAOD,GALA2D,EAAY,OAAOC,EAAW,QAASA,EAAW,QAAQ,EAC1DL,EAAgB,OAAOC,EAAiBC,CAAe,EAEvDnD,EAAU,OAAOiD,EAAiBI,CAAW,EAEzC3D,IAASzB,EAAe,CAC1B,MAAMsF,EAAgB,SAAS,cAAc,KAAK,EAC5C9P,EAAQ,CACZ,CAAE,KAAM,UAAW,GAAI,EAAI,EAC3B,CAAE,KAAM,YAAa,GAAI,CAAG,EAC5B,CAAE,KAAM,SAAU,GAAI,CAAG,CAC/B,EACU,CAAE,QAAAmP,EAAS,SAAAN,CAAU,EAAGI,EAAoB,CAChD,MAAO,SACP,MAAOjP,EACP,GAAI,GAAGiM,CAAI,SACjB,CAAK,EACD6D,EAAc,OAAOX,EAASN,CAAQ,EAEtCtC,EAAU,OAAOuD,CAAa,CAClC,SAAa7D,IAASxB,EAAW,CAC7B,MAAMsF,EAAiB,SAAS,cAAc,KAAK,EAE7CC,EAAiB,SAAS,cAAc,OAAO,EACrDA,EAAe,UAAY,sBAC3BA,EAAe,aAAa,MAAO,GAAG/D,CAAI,eAAe,EAEzD,MAAMgE,EAAiB/E,EACrBO,EAAa8D,CAA6B,CAChD,EACIS,EAAe,OAAOC,CAAc,EAEpC,MAAMC,EAAiB,SAAS,cAAc,OAAO,EACrDA,EAAe,aAAa,OAAQ,QAAQ,EAC5CA,EAAe,aAAa,MAAO,IAAI,EACvCA,EAAe,aAAa,MAAO,IAAI,EACvCA,EAAe,aAAa,QAAS,IAAI,EACzCA,EAAe,aAAa,KAAM,GAAGjE,CAAI,eAAe,EAExD,MAAMkE,EAAsB,SAAS,cAAc,KAAK,EACxDA,EAAoB,UAAU,IAC5B,yCACN,EAEI,MAAMC,EAAe,SAAS,cAAc,MAAM,EAClDA,EAAa,UAAY,IAEzB,MAAMC,EAAmB,SAAS,cAAc,KAAK,EACrDA,EAAiB,UAAU,IAAI,yCAAyC,EAExE,MAAMC,EAAsB,SAAS,cAAc,MAAM,EACzDA,EAAoB,YAAc,IAElC,MAAMC,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,UAAY,KAEvBL,EAAe,iBAAiB,SAAU,SAAU9d,EAAG,CACjDA,EAAE,OAAO,MAAQyY,GACnBzY,EAAE,OAAO,MAAQyY,GACRzY,EAAE,OAAO,MAAQ0Y,KAC1B1Y,EAAE,OAAO,MAAQ0Y,IAGnB,MAAM0F,EAAS7E,KACf2E,EAAoB,YAAcE,CACxC,CAAK,EACDN,EAAe,iBAAiB,UAAW,SAAU9d,EAAG,CACjD2Y,GAAY3Y,CAAC,GAAGA,EAAE,eAAc,CAC3C,CAAK,EAEDsd,EAAgB,iBAAiB,SAAU,SAAUtd,EAAG,CACtD,MAAMoe,EAAS7E,KACf2E,EAAoB,YAAcE,CACxC,CAAK,EAEDH,EAAiB,OAAOC,EAAqBC,CAAU,EACvDJ,EAAoB,OAAOD,EAAgBE,EAAcC,CAAgB,EACzEN,EAAe,OAAOC,EAAgBG,CAAmB,EAEzD5D,EAAU,OAAOwD,CAAc,CAChC,CAED,OAAOxD,CACT,EC3dM,CAAE,cAAA/B,EAAe,UAAAC,CAAW,EAAGC,GAE/B+F,GAAyB,sBACzBC,GAA0B,uBAC1BC,GAAqB,kBACrBC,GAAsB,mBAEtBC,GAAuB,8BACvBC,EAA0B,qBAC1BC,GAAiB,uBAEjBC,GAAqB,CAACC,EAAMhF,IAAS,CACzC,MAAMiF,EAAe,SAAS,cAAc,yBAAyB,EAC/DC,EAAmBD,EAAa,cAAc,oBAAoB,EAElEE,EAAQpF,GAAY,CAAE,MAAOiF,EAAM,KAAAhF,CAAI,CAAE,EAE3CkF,GACFA,EAAiB,OAAM,EAEzBD,EAAa,OAAOE,CAAK,CAC3B,EAEMC,GAAsBpF,GAAS,CACnC,MAAMqF,EAAuB,SAAS,eAAeX,EAAkB,EACjEY,EAAwB,SAAS,eAAeX,EAAmB,EACnEY,EAAqB,SAAS,eAAe,GAAGvF,CAAI,WAAW,EAC/DwF,EAAY,SAAS,eAAe,GAAGxF,CAAI,OAAO,EAClDyF,EAAe,SAAS,eAAe,GAAGzF,CAAI,eAAe,EAE7D0F,EACJL,EAAqB,cAAgB,GACrCC,EAAsB,cAAgB,EAClCK,EAAwB,OAAOJ,EAAmB,KAAK,EAAI,EAIjE,GAFoBG,GAAyBC,EAE5B,CACf,MAAMC,EAAUP,EAAqB,gBAAgB,CAAC,EAAE,QAClDQ,EAAQ,OAAOD,EAAQ,EAAE,EAEzBE,EAAWR,EAAsB,gBAAgB,CAAC,EAAE,QACpDS,EAAS,OAAOD,EAAS,EAAE,EAE3BvB,EAAS,OAAOgB,EAAmB,KAAK,EAExCS,EAAOR,EAAU,cAEjBS,EAAc,OAAOR,EAAa,KAAK,EAAI,IAE3CS,EAAU,CACd,UAAWH,EACX,SAAUF,EACV,eAAgB,EAChB,OAAQtB,EACR,KAAMyB,EACN,kBAAmBC,CACzB,EAEI,MAAM,GAAG,OAAO,SAAS,MAAM,uCAAwC,CACrE,OAAQ,OACR,QAAS,CACP,eAAgB,kBACjB,EACD,KAAM,KAAK,UAAUC,CAAO,CAClC,CAAK,EACE,KAAMC,GAAaA,EAAS,KAAI,CAAE,EAClC,KAAMnB,GAAS,CACdD,GAAmBC,EAAMxG,CAAS,CAC1C,CAAO,EACA,MAAOxX,GAAU,CAChB,QAAQ,MAAM,SAAUA,CAAK,CACrC,CAAO,CACJ,CACH,EAEMof,GAA0BpG,GAAS,CACvC,MAAMqG,EAA2B,SAAS,eACxC7B,EACJ,EACQ8B,EAA4B,SAAS,eACzC7B,EACJ,EACQc,EAAqB,SAAS,eAAe,GAAGvF,CAAI,WAAW,EAC/DwF,EAAY,SAAS,eAAe,GAAGxF,CAAI,OAAO,EAClDuG,EAAc,SAAS,eAAe,GAAGvG,CAAI,SAAS,EAEtD0F,EACJW,EAAyB,cAAgB,GACzCC,EAA0B,cAAgB,EACtCX,EAAwB,OAAOJ,EAAmB,KAAK,EAAI,EAIjE,GAFoBG,GAAyBC,EAE5B,CACf,MAAMa,EAAcH,EAAyB,gBAAgB,CAAC,EAAE,QAC1DI,EAAY,OAAOD,EAAY,EAAE,EAEjCE,EAAeJ,EAA0B,gBAAgB,CAAC,EAAE,QAC5DK,EAAa,OAAOD,EAAa,EAAE,EAEnCE,EAAaL,EAAY,gBAAgB,CAAC,EAAE,QAC5CM,EAAW,OAAOD,EAAW,EAAE,EAE/BrC,EAAS,OAAOgB,EAAmB,KAAK,EAExCS,EAAOR,EAAU,cAEjBU,EAAU,CACd,UAAWO,EACX,SAAUE,EACV,eAAgB,EAChB,OAAQpC,EACR,KAAMyB,EACN,OAAQa,CACd,EAEI,MAAM,GAAG,OAAO,SAAS,MAAM,uCAAwC,CACrE,OAAQ,OACR,QAAS,CACP,eAAgB,kBACjB,EACD,KAAM,KAAK,UAAUX,CAAO,CAClC,CAAK,EACE,KAAMC,GAAaA,EAAS,KAAI,CAAE,EAClC,KAAMnB,GAAS,CACdD,GAAmBC,EAAMzG,CAAa,CAC9C,CAAO,EACA,MAAOvX,GAAU,CAChB,QAAQ,MAAM,SAAUA,CAAK,CACrC,CAAO,CACJ,CACH,EAEM8f,GAAyB9B,GAAS,CACtC,MAAM+B,EAAiB,SAAS,cAC9B,wCACJ,EAEQC,EAAiB,SAAS,cAAc,QAAQ,EACtDA,EAAe,UAAY,sBAC3BA,EAAe,MAAM,UAAY,OAEjCA,EAAe,iBAAiB,QAAS,IACvCZ,GAAuB7H,CAAa,CACxC,EAEE,MAAM0I,EAA6B3Q,GAAU,CAC3CuM,GAAsB,CACpB,GAAI4B,GACJ,MAAOnO,EAAQ,EAAI4Q,EAA2B5Q,EAAQ,CAAC,EAAI,CAAE,EAC7D,YAAasO,EACnB,CAAK,CACL,EAEQuC,EAA4BnC,EAAK,IAAKxd,GAAS,CACnD,MAAMuF,EAAKvF,EAAK,gBACV,CAAE,IAAA4f,EAAK,KAAAjH,EAAM,GAAAkH,CAAE,EAAKta,EAE1B,MAAO,CACL,KAAM,GAAGoT,CAAI,KAAKiH,CAAG,cACrB,GAAIC,CACV,CACA,CAAG,EACKH,EAA6BlC,EAAK,IAAKxd,GAC7BA,EAAK,oBACA,IAAKA,GAAS,CAC/B,KAAM,CAAE,KAAA2Y,EAAM,IAAAiH,EAAK,GAAAC,CAAE,EAAK7f,EAE1B,MAAO,CACL,KAAM,GAAG2Y,CAAI,KAAKiH,CAAG,cACrB,GAAIC,CACZ,CACA,CAAK,CAEF,EAEKhB,EAA2BrD,EAAoB,CACnD,MAAO,sBACP,YAAa6B,EACb,MAAOsC,EACP,GAAI3C,GACJ,SAAUyC,CACd,CAAG,EAEKX,EAA4BtD,EAAoB,CACpD,MAAO8B,GACP,YAAaF,GACb,MAAO,CAAE,EACT,GAAIH,EACR,CAAG,EAEK6C,EAAcnE,GAAkB5E,CAAa,EAEnDwI,EAAe,OACbV,EAAyB,QACzBA,EAAyB,SACzBiB,EACAhB,EAA0B,QAC1BA,EAA0B,SAC1BU,CACJ,CACA,EAEMO,GAAqBvC,GAAS,CAClC,MAAMxF,EAAeF,KACf,CAAE,8BAAAkI,EAA+B,+BAAAC,CAAgC,EACrE/I,GAEIgJ,EAAa,SAAS,cAC1B,oCACJ,EAEQV,EAAiB,SAAS,cAAc,QAAQ,EACtDA,EAAe,UAAY,sBAC3BA,EAAe,MAAM,UAAY,OAEjCA,EAAe,iBAAiB,QAAS,IAAM5B,GAAmB5G,CAAS,CAAC,EAE5E,MAAMyI,EAA6B3Q,GAAU,CAC3CuM,GAAsB,CACpB,GAAI8B,GACJ,MAAOrO,EAAQ,EAAIqR,EAAuBrR,EAAQ,CAAC,EAAI,CAAE,EACzD,YAAauO,CACnB,CAAK,CACL,EAEQ+C,EAAwB5C,EAAK,IAAKxd,GAAS,CAC/C,MAAMuF,EAAKvF,EAAK,gBACV,CAAE,IAAA4f,EAAK,KAAAjH,EAAM,GAAAkH,CAAE,EAAKta,EAE1B,MAAO,CACL,KAAM,GAAGoT,CAAI,KAAKiH,CAAG,cACrB,GAAIC,CACV,CACA,CAAG,EAEKM,EAAyB3C,EAAK,IAAKxd,GACzBA,EAAK,oBACA,IAAKA,GAAS,CAC/B,KAAM,CAAE,KAAA2Y,EAAM,IAAAiH,EAAK,GAAAC,CAAE,EAAK7f,EAE1B,MAAO,CACL,KAAM,GAAG2Y,CAAI,KAAKiH,CAAG,cACrB,GAAIC,CACZ,CACA,CAAK,CAEF,EAEKhC,EAAuBrC,EAAoB,CAC/C,MAAO,sBACP,YAAa6B,EACb,MAAO+C,EACP,GAAIlD,GACJ,SAAUuC,CACd,CAAG,EACKY,EAAwB5I,EAC5BO,EAAagI,CAA6B,CAC9C,EACEnC,EAAqB,QAAQ,OAAOwC,CAAqB,EAEzD,MAAMvC,EAAwBtC,EAAoB,CAChD,MAAO,uBACP,YAAa6B,EACb,MAAO,CAAE,EACT,GAAIF,EACR,CAAG,EACKmD,EAAyB7I,EAC7BO,EAAaiI,CAA8B,CAC/C,EACEnC,EAAsB,QAAQ,OAAOwC,CAAsB,EAE3D,MAAMR,EAAcnE,GAAkB3E,CAAS,EAE/CkJ,EAAW,OACTrC,EAAqB,QACrBA,EAAqB,SACrBiC,EACAhC,EAAsB,QACtBA,EAAsB,SACtB0B,CACJ,CACA,GAEC,UAAY,CACX,MAAM/B,EAAe,SAAS,cAAc,yBAAyB,EAErE,GAAIA,EAAc,CAChB,MAAM,GAAG,OAAO,SAAS,MAAM,2CAA2C,EACvE,KAAMkB,GAAaA,EAAS,KAAI,CAAE,EAClC,KAAM4B,GAAqB,CAC1B,KAAM,CACJ,qCAAAC,EACA,iCAAAC,CACD,EAAGF,EAEJjB,GAAsBkB,CAAoC,EAC1DT,GAAkBU,CAAgC,CAC1D,CAAO,EACA,MAAOjhB,GAAU,CAChB,QAAQ,MAAM,SAAUA,CAAK,CACrC,CAAO,EAEH,MAAMsZ,EAAY2E,EAAa,cAC7B,kCACN,EACUiD,EAAQ5H,EAAU,cAAc,8BAA8B,EAC9DyG,EAAiBzG,EAAU,cAC/B,wCACN,EACUoH,EAAapH,EAAU,cAC3B,oCACN,EAEU6H,EAAkBD,EAAM,cAC5B,4CACN,EACUE,EAAcF,EAAM,cACxB,uCACN,EAEUG,EAAgBlX,GAAQ,CACxBA,IAAQoN,EAER4J,EAAgB,cAAc,UAAU,SAAS,WAAW,IAG5DA,EAAgB,cAAc,UAAU,IAAI,WAAW,EACvDpB,EAAe,UAAU,IAAI,WAAW,EAExCqB,EAAY,cAAc,UAAU,OAAO,WAAW,EACtDV,EAAW,UAAU,OAAO,WAAW,GAEhCvW,IAAQqN,IAEf4J,EAAY,cAAc,UAAU,SAAS,WAAW,IAGxDA,EAAY,cAAc,UAAU,IAAI,WAAW,EACnDV,EAAW,UAAU,IAAI,WAAW,EAEpCS,EAAgB,cAAc,UAAU,OAAO,WAAW,EAC1DpB,EAAe,UAAU,OAAO,WAAW,GAGrD,EAEIoB,EAAgB,iBAAiB,QAAS,IACxCE,EAAa9J,CAAa,CAChC,EACI6J,EAAY,iBAAiB,QAAS,IAAMC,EAAa7J,CAAS,CAAC,CACpE,CACH,GAAI"}