PageSourceSearch

https://www.landkreis-ludwigsburg.de/typo3temp/assets/compressed/m…ef7a6db6a97ce013508fa746d4644.js?1790265995

js landkreis-ludwigsburg.de collected 2026-09-24 17:56:51 UTC 88,945 bytes, 1,775 lines download raw bytes

1
2class FemanagerValidation{constructor(e){this.element=e,this.requestCallback=null,this.submitFormAllowed=!1,0===this.element.querySelectorAll("*[data-validation]").length&&(this.submitFormAllowed=!0),this.init()}init(){this.element.querySelectorAll('*[data-validation]:not([type="file"])').forEach(e=>{e.addEventListener("blur",()=>{this.validateField(e,!1)})});this.element.querySelectorAll('*[data-validation][type="file"]').forEach(e=>{e.addEventListener("change",()=>{this.validateField(e,!1)})}),this.element.addEventListener("submit",e=>{document.body.style.cursor="wait",this.submitFormAllowed||(e.preventDefault(),this.validateAllFields(this.element))})}createRequestsCompleted(e={}){const t=e.numRequest||0;let a=e.requestsCompleted||0;const r=e.element||null,l=[];e.singleCallback&&l.push(e.singleCallback);const i=()=>{document.body.style.cursor="default",this.submitForm(r),l.forEach(e=>e())};return{addCallbackToQueue:(e,r)=>{e&&a++,r&&l.push(r),a===t&&i()},requestComplete:e=>{e&&a++,a===t&&i()},setCallback:e=>{l.push(e)}}}validateAllFields(e){this.requestCallback=this.createRequestsCompleted({numRequest:e.querySelectorAll("*[data-validation]").length,element:e}),e.querySelectorAll("*[data-validation]").forEach(e=>{this.validateField(e,!0)})}validateField(e,t){if(e.disabled)return void(t&&this.requestCallback.addCallbackToQueue(!0));const a=e.closest("form"),r=a.dataset.femanagerPlugin,l="tx_"+a.dataset.femanagerPluginName,i=a.querySelector('div:first-child input[name="'+l+'[user][__identity]"]')?.value,n=a.querySelector('div:first-child input[name="'+l+'[__referrer][@action]"]')?.value,o=Femanager.getBaseUrl()+"?id="+document.getElementById("femanagerPid")?.value+"&type=1548935210",s=document.getElementById("femanagerStoragePid")?.value,d=e.getAttribute("data-validation"),c=this.getValidations(e);let u=e.value;"checkbox"!==e.type||e.checked||(u="");let m="";if(this.indexOfArray(c,"sameAs")){const e=this.indexOfArray(c,"sameAs"),t=this.getStringInBrackets(e),a=document.querySelector('input[name="'+l+"[user]["+t+']"]');a&&(m=a.value,"checkbox"!==a.type||a.checked||(m=""))}const g=new URLSearchParams;g.append("storagePid",s||""),g.append("L",document.getElementById("femanagerLanguage")?.value||""),g.append("id",document.getElementById("femanagerPid")?.value||""),g.append("tx_femanager_validation[validation]",d||""),g.append("tx_femanager_validation[value]",u||""),g.append("tx_femanager_validation[field]",this.getFieldName(e)||""),g.append("tx_femanager_validation[user]",void 0!==i?i:""),g.append("tx_femanager_validation[additionalValue]",m||""),g.append("tx_femanager_validation[plugin]",r||""),g.append("tx_femanager_validation[pluginName]",l||""),g.append("tx_femanager_validation[referrerAction]",n||""),fetch(o,{method:"POST",body:g,headers:{"Content-Type":"application/x-www-form-urlencoded"},cache:"no-cache"}).then(e=>e.json()).then(a=>{if(t&&this.requestCallback.addCallbackToQueue(!0),a)try{a.validate?this.cleanErrorMessage(e):this.writeErrorMessage(e,a.message)}catch(t){e.insertAdjacentHTML("beforebegin",data)}}).catch(()=>{this.logAjaxError()})}getFieldName(e){let t="";const a=e.name.split("[");return t=void 0!==a[2]?a[2].replace("]",""):a[1].replace("]",""),t}writeErrorMessage(e,t){this.cleanErrorMessage(e);const a=document.querySelector(".femanager_validation_container");if(!a)return;const r=a.innerHTML.replace("###messages###",t);e.insertAdjacentHTML("beforebegin",r),e.closest(".form-group").classList.add("has-error"),e.classList.add("error")}cleanErrorMessage(e){e.closest(".form-group").classList.remove("has-error"),e.parentNode.querySelectorAll(".alert").forEach(t=>{t!==e&&t.remove()}),e.classList.remove("error")}submitForm(e){if(0===e.querySelectorAll(".error").length)this.submitFormAllowed=!0,e.submit();else{const t=e.querySelector(".error");if(!t)return;t.scrollIntoView({behavior:"smooth"})}}indexOfArray(e,t){for(let a=0;a<e.length;a++)if(-1!==e[a].indexOf(t))return e[a];return""}getValidations(e){return e.getAttribute("data-validation").split(",")}getStringInBrackets(e){let t="";if(-1!==e.indexOf("(")){const a=e.split("(");t=a[1].substr(0,a[1].length-1)}return t}logAjaxError(){"object"==typeof console&&console.log("Error: The called url is not available - if you use TYPO3 in a subfolder, please use config.baseURL in TypoScript")}}function initFemanagerValidation(){document.querySelectorAll(".feManagerValidation").forEach(e
2=>{new FemanagerValidation(e)})}
3document.addEventListener("DOMContentLoaded",function(){var e;function t(e){return(e+="").charAt(0).toLowerCase()+e.substr(1)}e=null!=document.querySelector(".tx-femanager[data-labels]")?JSON.parse(document.querySelector(".tx-femanager[data-labels]").dataset.labels):[],initFemanagerValidation(),document.querySelectorAll("*[data-confirm]").forEach(function(e){e.addEventListener("click",function(t){var n=e.getAttribute("data-confirm");confirm(n)||t.preventDefault()})}),document.querySelectorAll("[data-data-endpoint]").forEach(function(n){var a=function(a){var o={"tx_femanager_data[action]":n.dataset.dataEndpoint,"tx_femanager_data[controller]":"Data"},arguments=JSON.parse(JSON.stringify(n.dataset));for(var r in arguments)if(arguments.hasOwnProperty(r)&&r.match("arguments")){var i=document.getElementById(arguments[r]);if(i)o["tx_femanager_data["+t(r.substr(9))+"]"]=i.value}var d=document.getElementById("femanagerPid"),l=Femanager.getBaseUrl()+"index.php?id="+(d?d.value:"")+"&type=1594138042",s=n.dataset.selectedValue;fetch(l,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams(o),cache:"no-cache"}).then(function(e){if(!e.ok)throw new Error("Network response was not ok");return e.json()}).then(function(t){for(var a in n.disabled=!0,n.options.length=0,""===s||t.hasOwnProperty(s)||(n.options[n.options.length]=new Option(e.please_choose)),t)if(t.hasOwnProperty(a)){var o=a===s;n.options[n.options.length]=new Option(t[a],a,o,o),n.disabled=!1}}).catch(function(e){console.log("Error: The called url is not available - if you use TYPO3 in a subfolder, please use config.baseURL in TypoScript")}),n.disabled=!0,n.options.length=0,n.options[0]=new Option(e.loading_states)},o=n.dataset.triggerFields;void 0!==o?o.split(",").forEach(function(e){var t=document.getElementById(e);void 0!==t&&t.addEventListener("change",a)}):n.addEventListener("change",a),a()})}),window.Femanager={},window.Femanager.getBaseUrl=function(){var e,t=document.querySelector("base");if(t)e=t.href;else if(-1!==window.location.hostname.indexOf("localhost"))e="";else{var n="";window.location.port.length>0&&(n=":"+window.location.port),e="https:"!==window.location.protocol?"http://"+window.location.hostname+n+"/":"https://"+window.location.hostname+n+"/"}return e};
4// Consent class
5const serviceConfigs = JSON.parse(JSON.stringify(allServiceSettings));
6
7// Function to retrieve a cookie by its name
8function getCookie(name) {
9	var nameEQ = name + "=";
10	var ca = document.cookie.split(';');
11	for (var i = 0; i < ca.length; i++) {
12		var c = ca[i];
13		while (c.charAt(0) == ' ') c = c.substring(1);
14		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
15	}
16	return null;
17}
18
19// Function to set a cookie with a specified name, value, and expiration date
20function setCookie(name, value, daysToExpire) {
21	var expires = "";
22	if (daysToExpire) {
23		var date = new Date();
24		date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));
25		expires = "; expires=" + date.toUTCString();
26	}
27	document.cookie = name + "=" + (value || "") + expires + "; path=/";
28}
29
30// Function to evaluate the final consent value based on service settings
31function evaluateFinalValue(serviceSettings, settingKey) {
32	let hasGranted = false;
33	let hasDenied = false;
34	
35	// Iterate through all services and check their consent settings
36	serviceSettings.forEach(settings => {
37		if (settings[settingKey] === 'granted')
38		if (settings[settingKey] === 'granted') hasGranted = true;
39		else if (settings[settingKey] === 'denied') hasDenied = true;
40	});
41	
42	// If there is at least one "denied" value, return "denied"
43	if (hasDenied)  return 'denied';
44	
45	// If there is only one "granted" value, return "granted"
46	if (hasGranted) return 'granted';
47	
48	// If all values are "not set" or there are no explicit "granted"/"denied" values, return "denied"
49	return 'denied';
50}
51
52// Function to update the cookie with the final consent values
53function updateCookieWithFinalConsent(name, daysToExpire, services) {
54	const cookieValue = getCookie(name);
55	if (cookieValue !== null) {
56		const obj = JSON.parse(decodeURIComponent(cookieValue));
57    
58		// Evaluate and set the final values for each consent setting
59		['ad_storage','analytics_storage','ad_user_data','ad_personalization',
60		 'personalization_storage','functionality_storage','security_storage']
61		  .forEach(key => {
62			obj[key] = evaluateFinalValue(services, key);
63		  });
64		
65		setCookie(name, encodeURIComponent(JSON.stringify(obj)), daysToExpire);
66		pushTriggerAfterConsentChanged(obj);
67	} else {
68		console.log("Cookie name '" + name + "' does not exist.");
69	}
70}
71
72// Function to push the trigger for gtm after consent changed
73function pushTriggerAfterConsentChanged(changes) {
74	window.dataLayer = window.dataLayer || [];
75	window.dataLayer.push({
76		event: 'cmp_we_cookie_consent_changed',   // Custom-Event-Name
77		we_consent_state: {                       // Add all final states 
78			ad_storage             : changes.ad_storage,
79			analytics_storage      : changes.analytics_storage,
80			ad_user_data           : changes.ad_user_data,
81			ad_personalization     : changes.ad_personalization,
82			personalization_storage: changes.personalization_storage,
83			functionality_storage  : changes.functionality_storage,
84			security_storage       : changes.security_storage
85		}
86	});
87}
88
89// Debug function to log all stored service settings
90function getAllServiceSettings() {
91	// Log all service settings to the console
92	console.log(allServiceSettings);
93	// Optionally return allServiceSettings;
94	// return allServiceSettings;
95}
96
97// main controller
98let ConsentApp = new function ConsentController() {
99	// public functions
100	/**
101     * Callback function for GoogleTagManager Script to handle consent state changes and fire the dataLayer trigger
102     * @param bool state
103     * @param object service
104     */
105    this.consentChanged = function(state, service) {
106		// Check if the service is related to Google Tag Manager
107		const isGTM = service.name.indexOf('google-tagmanager-service') !== -1;
108		if (isGTM) {
109			// A) Remap all services - only the service that has just been changed receives either its config values (if state=true) or "denied" all-over.
110			allServiceSettings = allServiceSettings.map(tempSettings => {
111				if (tempSettings.serviceId !== service.name) {
112					// Unmodified copy
113					return { 
114						serviceId:               tempSettings.serviceId,
115						serviceConsent:          tempSettings.serviceConsent,
116						ad_storage:              tempSettings.ad_storage,
117						analytics_storage:       tempSettings.analytics_storage,
118						ad_user_data:            tempSettings.ad_user_data,
119						ad_personalization:      tempSettings.ad_personalization,
120						functionality_storage:   tempSettings.functionality_storage,
121						personalization_storage: tempSettings.personalization_storage,
122						security_storage:        tempSettings.security_storage
123					};
124				}
125				
126				// Get the original config
127				const originalConfig = serviceConfigs.find(original => original.serviceId === tempSettings.serviceId);
128				const updated = { serviceId: tempSettings.serviceId, serviceConsent: state };
129				
130				// For every consent type
131				['ad_storage','analytics_storage','ad_user_data','ad_personalization',
132			     'personalization_storage','functionality_storage','security_storage']
133				  .forEach(key => {
134					// if consent is granted: accept from config
135					// if consent is denied: always 'denied'
136					updated[key] = state ? originalConfig[key] : 'denied';
137				});
138
139				return updated;
140			});
141			
142			// B) Evaluate only the granted services
143			// Filter allServiceSettings to include only services with serviceConsent = true
144			// Update cookie
145			const relevantServices = allServiceSettings.filter(relevant => relevant.serviceConsent);
146			updateCookieWithFinalConsent(storageName, cookieExpiresAfterDays, relevantServices);
147			
148			// C) dataLayer-Push based on the state
149			window.dataLayer = window.dataLayer || [];
150			window.dataLayer.push({
151				event: service.gtm.trigger,
152				[service.gtm.variable]: state
153			});
154		}
155				
156		// D) Check if the own callback function is allready defined
157		if (service.ownCallback) {
158			if (typeof window[service.ownCallback] === 'function') {
159				window[service.ownCallback](state, service);
160            } else {
161				console.error('The Callback function ' + service.ownCallback + ' is not yet defined. Please create it first.');
162            }
163        }
164	};
165
166    // constructor (modal and safari)
167	(function contruct() {
168		document.addEventListener('DOMContentLoaded', function () {
169			// Listener for the button on the privacy page, to edit the consent
170			document.addEventListener('click', function (event) {
171				if (event.target.closest('.js-showConsentModal')) {
172					event.preventDefault();
173					klaro.show();
174				}
175			});
176		});
177	})();
178
179    const isSafari = navigator.vendor && 
180        navigator.vendor.indexOf('Apple') > -1 &&
181        navigator.userAgent &&
182        navigator.userAgent.indexOf('CriOS') == -1 &&
183        navigator.userAgent.indexOf('FxiOS') == -1;
184
185	document.addEventListener('DOMContentLoaded', function() {
186		setTimeout(function() {
187
188			setServiceSuccessVarBtn();
189
190			document.addEventListener('click', function (event) {
191				if (event.target.matches('.cn-decline')) {
192					setServiceSuccessVarBtn();
193				}
194			});
195
196			document.addEventListener('click', function (event) {
197				if (event.target.matches('.cm-btn-accept')) {
198					setServiceSuccessVarBtn();
199				}
200			});
201
202			document.addEventListener('click', function (event) {
203				if (event.target.matches('.cm-btn-decline')) {
204					setServiceSuccessVarBtn();
205				}
206			});
207
208			if (isSafari!==true) {
209				document.getElementById('klaro').classList.remove('safari');
210			} else {
211				document.getElementById('klaro').classList.add('safari');
212			}
213		})
214    });
215};
216// End main controller
217
218var optOutLink = document.getElementById("ga-opt-out");
219
220if(optOutLink) {
221	optOutLink.onclick = function() {
222		document.cookie = 'ga-opt-out=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
223		this.innerHTML = "Google Analytics opt-out successful";
224		return false;
225	}
226}
227
228// Functions after window.load():
229window.addEventListener('load', function () {
230	const iframes = document.querySelectorAll('iframe');
231
232	if (iframes.length > 0) {
233		iframes.forEach(function (iframe) {
234			let attrDataSrc = iframe.getAttribute('src');
235			if (!attrDataSrc) {
236				attrDataSrc = iframe.getAttribute('data-src');
237			}
238
239			if (attrDataSrc && (attrDataSrc.includes('youtube') || attrDataSrc.includes('vimeo'))) {
240				// Adjust measures for videoOverlay similar to iframe:
241				const parent = iframe.parentElement;
242				const contextNotice = parent.querySelector('.klaro.cm-as-context-notice');
243
244				if (contextNotice) {
245					iframe.style.display = 'block';
246
247					// Set the width of .klaro.cm-as-context-notice to the iframe's width
248					contextNotice.style.width = iframe.offsetWidth + 'px';
249
250					if (iframe.offsetHeight < contextNotice.offsetHeight) {
251						const cmButtons = contextNotice.querySelector('.cm-buttons');
252						if (cmButtons) {
253							cmButtons.style.marginTop = '1em';
254						}
255					}
256				}
257			}
258		});
259	}
260
261	// Add class for small context-notice box: if video integration within small iframes (width < 300px)
262	document.querySelectorAll('.klaro.we_cookie_consent.cm-as-context-notice').forEach(function(element) {
263		if (element.offsetWidth <= 300) {
264			element.classList.add('notice--minified');
265		}
266	});
267
268	// Add class to avoid Google to crawl consent info text
269	document.querySelectorAll('.klaro.we_cookie_consent .cn-body').forEach(function(element) {
270		element.setAttribute('data-nosnippet', 'data-nosnippet');
271	});
272});
273
274// Workaround: Show "Always" Button for overlay (for example youtube videos) only when the klaro cookie is set
275function setServiceSuccessVarBtn()
276{
277	const klaroCookie = getCookie('klaro');
278
279	if (klaroCookie) {
280		const allServiceSuccessVarBtn = document.querySelectorAll('.cm-btn-success-var');
281		if (allServiceSuccessVarBtn.length > 0) {
282			allServiceSuccessVarBtn.forEach((serviceSuccessVarBtn) => {
283					serviceSuccessVarBtn.style.setProperty('display', 'block', 'important');
284				}
285			)
286		}
287	}
288}
289
290document.addEventListener('DOMContentLoaded', function () {
291
292    if (checkCookieExists('klaro')) {
293        createTooltip();
294    }
295
296    setTimeout(function () {
297        const klaroDiv = document.getElementById('klaro');
298        const buttons = klaroDiv.querySelectorAll('button');
299
300        function handleClick(event) {
301            createTooltip();
302            if (document.querySelector('#klaro .cookie-notice') == null && document.querySelector('#klaro .cookie-modal') == null) {
303            }
304        }
305
306        buttons.forEach(button => {
307            button.addEventListener('click', handleClick);
308        });
309    });
310
311    setTimeout(function () {
312        if (document.querySelector('.cm-link')) {
313            document.querySelector('.cm-link').addEventListener('click', function () {
314                if (document.querySelector('.cm-btn-success')) {
315                    document.querySelector('.cm-btn-success').addEventListener('click', function () {
316                        createTooltip();
317                    });
318                }
319
320                if (document.querySelector('.cn-decline')) {
321                    document.querySelector('.cn-decline').addEventListener('click', function () {
322                        createTooltip();
323                    });
324                }
325
326                if (document.querySelector('.cm-btn-accept-all')) {
327                    document.querySelector('.cm-btn-accept-all').addEventListener('click', function () {
328                        createTooltip();
329                    });
330                }
331            });
332        }
333    }, 1000);
334});
335
336function checkCookieExists(cookieName) {
337    let cookies = document.cookie.split(';');
338
339    for (let i = 0; i < cookies.length; i++) {
340        let cookie = cookies[i];
341        // Remove leading spaces (if any)
342        while (cookie.charAt(0) == ' ') {
343            cookie = cookie.substring(1);
344        }
345        // Check if the cookie name matches
346        if (cookie.indexOf(cookieName + '=') == 0) {
347            return true;
348        }
349    }
350    return false;
351}
352
353function createTooltip() {
354    if (cookieIconPermanentlyAvailable === '1') {
355        let iconTooltip = document.createElement('div');
356        let iconImgTag = document.createElement('img');
357        let iconBtn = document.createElement('button');
358        let iconContainer = document.createElement('div');
359
360        // Button
361        iconBtn.type = 'button';
362        iconBtn.className = 'consent-trigger js-showConsentModal';
363        iconBtn.setAttribute('aria-label', translatedButtonTextCookieSettings);
364        iconBtn.setAttribute('aria-haspopup', 'dialog');
365
366        // Image
367        iconImgTag.src = cookieSettingsImgPathDefault;
368        iconImgTag.alt = '';
369        iconImgTag.setAttribute('aria-hidden', 'true');
370        iconImgTag.width = 85; iconImgTag.height = 85;
371        iconImgTag.style.cssText = 'margin-right:0px;width:85px;height:85px;';
372
373        // Hover/Fokus (Image & Tooltip)
374        function showTip(){ iconTooltip.style.display = 'block'; iconImgTag.src = cookieSettingsImgPathHover; }
375        function hideTip(){ iconTooltip.style.display = 'none';  iconImgTag.src = cookieSettingsImgPathDefault; }
376
377        iconBtn.addEventListener('mouseover', showTip);
378        iconBtn.addEventListener('mouseout',  hideTip);
379        iconBtn.addEventListener('focusin',   showTip);
380        iconBtn.addEventListener('focusout',  hideTip);
381
382        // Tooltip
383        iconTooltip.textContent = translatedButtonTextCookieSettings;
384        iconTooltip.classList.add('consent-cookie-text');
385        iconTooltip.style.cssText = 'display:none;';
386        // (optional ARIA)
387        // tooltip.id = 'consent-tooltip';
388        // tooltip.setAttribute('role', 'tooltip');
389        // btn.setAttribute('aria-describedby', 'consent-tooltip');
390
391        // Container
392        iconContainer.classList.add('consent-cookie');
393        iconContainer.style.cssText = 'display:flex;';
394
395        // DOM
396        iconBtn.appendChild(iconImgTag);
397        iconContainer.appendChild(iconBtn);
398        iconContainer.appendChild(iconTooltip);
399        document.body.appendChild(iconContainer);
400    }
401}
402
403/*! For license information please see mmenu.js.LICENSE.txt */
404(() => {
405  'use strict';
406  const e = { hooks: {}, navbar: { add: !0, title: 'Menu', titleLink: 'parent' }, slidingSubmenus: !0 }, t = {
407    classNames: {
408      divider: 'Divider',
409      nolistview: 'NoListview',
410      nopanel: 'NoPanel',
411      panel: 'Panel',
412      selected: 'Selected',
413      vertical: 'Vertical'
414    },
415    language: null,
416    panelNodetype: ['ul', 'ol', 'div'],
417    screenReader: { closeSubmenu: 'Close submenu', openSubmenu: 'Open submenu', toggleSubmenu: 'Toggle submenu' }
418  }, n = (e, t) => {
419    'object' != s(e) && (e = {}), 'object' != s(t) && (t = {});
420    for (let i in t) t.hasOwnProperty(i) && (void 0 === e[i] ? e[i] = t[i] : 'object' == s(e[i]) && n(e[i], t[i]));
421    return e;
422  }, s = e => ({}.toString.call(e).match(/\s([a-zA-Z]+)/)[1].toLowerCase()), i = () => 'mm-' + a++;
423  let a = 0;
424  const o = e => 'mm-clone-' == e.slice(0, 9) ? e : `mm-clone-${e}`,
425    r = e => 'mm-clone-' == e.slice(0, 9) ? e.slice(9) : e, l = {},
426    m = (e, t) => {void 0 === l[t] && (l[t] = {}), n(l[t], e);}, c = e => {
427      const t = e.split('.'), n = document.createElement(t.shift());
428      return n.classList.add(...t), n;
429    }, d = (e, t) => t.length ? [].slice.call(e.querySelectorAll(t)) : [], h = (e, t) => {
430      const n = Array.prototype.slice.call(e.children);
431      return t ? n.filter((e => e.matches(t))) : n;
432    }, p = (e, t) => {
433      let n = [], s = e.parentElement;
434      for (; s;) n.push(s), s = s.parentElement;
435      return t ? n.filter((e => e.matches(t))) : n;
436    }, u = e => e.filter((e => !e.matches('.mm-hidden'))), f = e => {
437      let t = [];
438      return u(e).forEach((e => {t.push(...h(e, 'a.mm-listitem__text'));})), t.filter((e => !e.matches('.mm-btn--next')));
439    }, b = (e, t, n) => {e.matches('.' + t) && e.classList.add(n);};
440  let v = {};
441  const g = (e, t, n) => {
442    'number' == typeof e && (e = '(min-width: ' + e + 'px)'), v[e] = v[e] || [], v[e].push({
443      yes: t,
444      no: n
445    });
446  }, L = (e, t) => {
447    var n = t.matches ? 'yes' : 'no';
448    for (let t = 0; t < v[e].length; t++) v[e][t][n]();
449  };
450  var _, E, w, P = function (e, t, n) {
451    if (!t.has(e)) throw new TypeError('attempted to set private field on non-instance');
452    return t.set(e, n), n;
453  }, y = function (e, t) {
454    if (!t.has(e)) throw new TypeError('attempted to get private field on non-instance');
455    return t.get(e);
456  };
457  m({
458    'Close submenu': 'Untermenü schließen',
459    Menu: 'Menü',
460    'Open submenu': 'Untermenü öffnen',
461    'Toggle submenu': 'Untermenü wechseln'
462  }, 'de'), m({
463    'Close submenu': 'بستن زیرمنو',
464    Menu: 'منو',
465    'Open submenu': 'بازکردن زیرمنو',
466    'Toggle submenu': 'سوییچ زیرمنو'
467  }, 'fa'), m({
468    'Close submenu': 'Submenu sluiten',
469    Menu: 'Menu',
470    'Open submenu': 'Submenu openen',
471    'Toggle submenu': 'Submenu wisselen'
472  }, 'nl'), m({
473    'Close submenu': 'Fechar submenu',
474    Menu: 'Menu',
475    'Open submenu': 'Abrir submenu',
476    'Toggle submenu': 'Alternar submenu'
477  }, 'pt_br'), m({
478    'Close submenu': 'Закрыть подменю',
479    Menu: 'Меню',
480    'Open submenu': 'Открыть подменю',
481    'Toggle submenu': 'Переключить подменю'
482  }, 'ru'), m({
483    'Close submenu': 'Zatvoriť submenu',
484    Menu: 'Menu',
485    'Open submenu': 'Otvoriť submenu',
486    'Toggle submenu': 'Prepnúť submenu'
487  }, 'sk'), m({
488    'Close submenu': 'Закрити підменю',
489    Menu: 'Меню',
490    'Open submenu': 'Відкрити підменю',
491    'Toggle submenu': 'Перемкнути підменю'
492  }, 'uk');
493
494  class S {
495    constructor (s, i, a) {
496      return _.set(this, void 0), E.set(this, void 0), w.set(this, void 0), this.opts = n(i, e), this.conf = n(a, t), this._api = ['i18n', 'bind', 'openPanel', 'closePanel', 'setSelected'], this.node = {}, this.hook = {}, this.node.menu = 'string' == typeof s ? document.querySelector(s) : s, 'function' == typeof this._deprecatedWarnings && this._deprecatedWarnings(), this.trigger('init:before'), this._initObservers(), this._initAddons(), this._initHooks(), this._initAPI(), this._initMenu(), this._initPanels(), this._initOpened(), (() => {
497        for (let e in v) {
498          let t = window.matchMedia(e);
499          L(e, t), t.onchange = n => {L(e, t);};
500        }
501      })(), this.trigger('init:after'), this;
502    }
503
504    openPanel (e, t = !0, n = !0) {
505      if (!e) return;
506      e = e.closest('.mm-panel'), this.trigger('openPanel:before', [e, { animation: t, setfocus: n }]);
507      const s = e.closest('.mm-listitem--vertical');
508      if (s) {
509        s.classList.add('mm-listitem--opened');
510        const e = s.closest('.mm-panel');
511        this.openPanel(e);
512      } else {
513        const n = h(this.node.pnls, '.mm-panel--opened')[0];
514        e.matches('.mm-panel--parent') && n && n.classList.add('mm-panel--highest');
515        const s = ['mm-panel--opened', 'mm-panel--parent'], i = [];
516        t ? s.push('mm-panel--noanimation') : i.push('mm-panel--noanimation'), h(this.node.pnls, '.mm-panel').forEach((t => {t.classList.add(...i), t.classList.remove(...s), t !== n && t.classList.remove('mm-panel--highest'), t === e ? t.removeAttribute('inert') : t.setAttribute('inert', 'true');})), e.classList.add('mm-panel--opened');
517        let a = d(this.node.pnls, `#${e.dataset.mmParent}`)[0];
518        for (; a;) a = a.closest('.mm-panel'), a.classList.add('mm-panel--parent'), a = d(this.node.pnls, `#${a.dataset.mmParent}`)[0];
519      }
520      this.trigger('openPanel:after', [e, { animation: t, setfocus: n }]);
521    }
522
523    closePanel (e, t = !0, n = !0) {
524      if (e && (e.matches('.mm-panel--opened') || e.parentElement.matches('.mm-listitem--opened'))) {
525        if (this.trigger('closePanel:before', [e]), e.parentElement.matches('.mm-listitem--vertical')) e.parentElement.classList.remove('mm-listitem--opened'); else if (e.dataset.mmParent) {
526          const s = d(this.node.pnls, `#${e.dataset.mmParent}`)[0];
527          this.openPanel(s, t, n);
528        } else {
529          const s = h(this.node.pnls, '.mm-panel--parent').pop();
530          if (s && s !== e) this.openPanel(s, t, n); else {
531            const s = h(this.node.pnls, '.mm-panel')[0];
532            s && s !== e && this.openPanel(s, t, n);
533          }
534        }
535        this.trigger('closePanel:after', [e]);
536      }
537    }
538
539    togglePanel (e) {
540      let t = 'openPanel';
541      (e.parentElement.matches('.mm-listitem--opened') || e.matches('.mm-panel--opened')) && (t = 'closePanel'), this[t](e);
542    }
543
544    setSelected (e) {this.trigger('setSelected:before', [e]), d(this.node.menu, '.mm-listitem--selected').forEach((e => {e.classList.remove('mm-listitem--selected');})), e.classList.add('mm-listitem--selected'), this.trigger('setSelected:after', [e]);}
545
546    bind (e, t) {this.hook[e] = this.hook[e] || [], this.hook[e].push(t);}
547
548    trigger (e, t) {if (this.hook[e]) for (var n = 0, s = this.hook[e].length; n < s; n++) this.hook[e][n].apply(this, t);}
549
550    _initObservers () {P(this, _, new MutationObserver((e => {e.forEach((e => {e.addedNodes.forEach((e => {e.matches(this.conf.panelNodetype.join(', ')) && this._initListview(e);}));}));}))), P(this, E, new MutationObserver((e => {e.forEach((e => {e.addedNodes.forEach((e => {this._initListitem(e);}));}));}))), P(this, w, new MutationObserver((e => {e.forEach((e => {e.addedNodes.forEach((e => {(null == e ? void 0 : e.matches(this.conf.panelNodetype.join(', '))) && this._initSubPanel(e);}));}));})));}
551
552    _initAPI () {
553      const e = this;
554      this.API = {}, this._api.forEach((t => {this.API[t] = function () {return e[t].apply(e, arguments);};})), this.node.menu.mmApi = this.API;
555    }
556
557    _initHooks () {for (let e in this.opts.hooks) this.bind(e, this.opts.hooks[e]);}
558
559    _initAddons () {
560      this.trigger('initAddons:before');
561      for (let e in S.addons) S.addons[e].call(this);
562      this.trigger('initAddons:after');
563    }
564
565    _initMenu () {
566      this.trigger('initMenu:before'), this.node.wrpr = this.node.wrpr || this.node.menu.parentElement, this.node.wrpr.classList.add('mm-wrapper'), this.node.menu.classList.add('mm-menu'), this.node.menu.id = this.node.menu.id || i(), this.node.menu.setAttribute('aria-label', this.i18n(this.opts.navbar.title || 'Menu')), this.node.menu.setAttribute('aria-modal', 'true'), this.node.menu.setAttribute('role', 'dialog');
567      const e = h(this.node.menu).filter((e => e.matches(this.conf.panelNodetype.join(', '))));
568      this.node.pnls = c('div.mm-panels'), this.node.menu.append(this.node.pnls), e.forEach((e => {this._initPanel(e);})), this.trigger('initMenu:after');
569    }
570
571    _initPanels () {
572      this.trigger('initPanels:before'), this.node.menu.addEventListener('click', (e => {
573        var t, n;
574        const s = (null === (n = null === (t = e.target) || void 0 === t ? void 0 : t.closest('a[href]')) || void 0 === n ? void 0 : n.getAttribute('href')) || '';
575        if ('#' === s.slice(0, 1)) try {
576          const t = d(this.node.menu, s)[0];
577          t && (e.preventDefault(), this.togglePanel(t));
578        } catch (e) {}
579      }), { capture: !0 }), this.trigger('initPanels:after');
580    }
581
582    _initPanel (e) {
583      var t;
584      if (!e.matches('.mm-panel') && (b(e, this.conf.classNames.panel, 'mm-panel'), b(e, this.conf.classNames.nopanel, 'mm-nopanel'), !e.matches('.mm-nopanel'))) {
585        if (this.trigger('initPanel:before', [e]), e.id = e.id || i(), e.matches('ul, ol')) {
586          const t = c('div');
587          t.id = e.id, e.removeAttribute('id'), [].slice.call(e.classList).filter((e => 'mm-' === e.slice(0, 3))).forEach((n => {t.classList.add(n), e.classList.remove(n);})), Object.keys(e.dataset).filter((e => 'mm' === e.slice(0, 2))).forEach((n => {t.dataset[n] = e.dataset[n], delete e.dataset[n];})), e.before(t), t.append(e), e = t;
588        }
589        return e.classList.add('mm-panel'), (null === (t = e.parentElement) || void 0 === t ? void 0 : t.matches('.mm-listitem--vertical')) || this.node.pnls.append(e), this._initNavbar(e), h(e, 'ul, ol').forEach((e => {this._initListview(e);})), y(this, _).observe(e, { childList: !0 }), this.trigger('initPanel:after', [e]), e;
590      }
591    }
592
593    _initNavbar (e) {
594      if (h(e, '.mm-navbar').length) return;
595      let t = null, n = null;
596      if (e.dataset.mmParent) for (t = d(this.node.pnls, `#${e.dataset.mmParent}`)[0], n = t.closest('.mm-panel'); n.closest(".mm-listitem--vertical");) n = n.parentElement.closest('.mm-panel');
597      if (null == t ? void 0 : t.matches('.mm-listitem--vertical')) return;
598      this.trigger('initNavbar:before', [e]);
599      const s = c('div.mm-navbar');
600      if (this.opts.navbar.add || s.classList.add('mm-hidden'), n) {
601        const e = c('a.mm-btn.mm-btn--prev.mm-navbar__btn');
602        e.href = `#${n.id}`, e.setAttribute('aria-label', this.i18n(this.conf.screenReader.closeSubmenu)), s.append(e);
603      }
604      let i = null;
605      t ? i = h(t, '.mm-listitem__text')[0] : n && (i = d(n, 'a[href="#' + e.id + '"]')[0]);
606      const a = c('a.mm-navbar__title');
607      switch (a.tabIndex = -1, a.setAttribute('aria-hidden', 'true'), this.opts.navbar.titleLink) {
608        case'anchor':
609          i && (a.href = i.getAttribute('href'));
610          break;
611        case'parent':
612          n && (a.href = `#${n.id}`);
613      }
614      const o = c('span');
615      var r;
616      o.innerHTML = e.dataset.mmTitle || ((r = i) ? [].slice.call(r.childNodes).filter((e => e.nodeType === Node.TEXT_NODE)).map((e => e.nodeValue.trim())).join(' ') : '') || this.i18n(this.opts.navbar.title || 'Menu'), e.prepend(s), s.append(a), a.append(o), this.trigger('initNavbar:after', [e]);
617    }
618
619    _initListview (e) {['htmlulistelement', 'htmlolistelement'].includes(s(e)) && (e.matches('.mm-listview') || (b(e, this.conf.classNames.nolistview, 'mm-nolistview'), e.matches('.mm-nolistview') || (this.trigger('initListview:before', [e]), e.classList.add('mm-listview'), h(e).forEach((e => {this._initListitem(e);})), y(this, E).observe(e, { childList: !0 }), this.trigger('initListview:after', [e]))));}
620
621    _initListitem (e) {['htmllielement'].includes(s(e)) && (e.matches('.mm-listitem') || (b(e, this.conf.classNames.divider, 'mm-divider'), e.matches('.mm-divider') || (this.trigger('initListitem:before', [e]), e.classList.add('mm-listitem'), b(e, this.conf.classNames.selected, 'mm-listitem--selected'), h(e, 'a, span').forEach((e => {e.classList.add('mm-listitem__text');}
621)), h(e, this.conf.panelNodetype.join(', ')).forEach((e => {this._initSubPanel(e);})), y(this, w).observe(e, { childList: !0 }), this.trigger('initListitem:after', [e]))));}
622
623    _initSubPanel (e) {
624      if (e.matches('.mm-panel')) return;
625      const t = e.parentElement;
626      (e.matches('.' + this.conf.classNames.vertical) || !this.opts.slidingSubmenus) && t.classList.add('mm-listitem--vertical'), t.id = t.id || i(), e.id = e.id || i(), t.dataset.mmChild = e.id, e.dataset.mmParent = t.id;
627      let n = h(t, '.mm-btn')[0];
628      n || (n = c('a.mm-btn.mm-btn--next.mm-listitem__btn'), h(t, 'a, span').forEach((e => {e.matches('span') ? (n.classList.add('mm-listitem__text'), n.innerHTML = e.innerHTML, t.insertBefore(n, e.nextElementSibling), e.remove()) : t.insertBefore(n, e.nextElementSibling);})), n.setAttribute('aria-label', this.i18n(this.conf.screenReader[t.matches('.mm-listitem--vertical') ? 'toggleSubmenu' : 'openSubmenu']))), n.href = `#${e.id}`, this._initPanel(e);
629    }
630
631    _initOpened () {
632      this.trigger('initOpened:before');
633      const e = d(this.node.pnls, '.mm-listitem--selected').pop();
634      let t = h(this.node.pnls, '.mm-panel')[0];
635      e && (this.setSelected(e), t = e.closest('.mm-panel')), this.openPanel(t, !1, !1), this.trigger('initOpened:after');
636    }
637
638    i18n (e) {return ((e, t) => 'string' == typeof t && void 0 !== l[t] && l[t][e] || e)(e, this.conf.language);}
639
640    static i18n (e = {}, t = '') {
641      if (!e || !t) return l;
642      m(e, t);
643    }
644  }
645
646  _ = new WeakMap, E = new WeakMap, w = new WeakMap, S.addons = {}, S.node = {}, S.vars = {};
647  const M = { use: !0, position: 'left' }, k = {
648    clone: !1,
649    menu: { insertMethod: 'append', insertSelector: 'body' },
650    page: { nodetype: 'div', selector: null, noSelector: [] },
651    screenReader: { closeMenu: 'Close menu', openMenu: 'Open menu' }
652  }, T = ['left', 'left-front', 'right', 'right-front', 'top', 'bottom'];
653  S.prototype.open = function () {this.node.menu.matches('.mm-menu--opened') || (this.trigger('open:before'), this.node.wrpr.classList.add('mm-wrapper--opened', `mm-wrapper--position-${this.opts.offCanvas.position}`), this.node.menu.classList.add('mm-menu--opened'), this.node.menu.removeAttribute('inert'), S.node.blck.removeAttribute('inert'), S.node.page.setAttribute('inert', 'true'), this.node.open = document.activeElement, this.trigger('open:after'));}, S.prototype.close = function () {
654    var e;
655    this.node.menu.matches('.mm-menu--opened') && (this.trigger('close:before'), this.node.wrpr.classList.remove('mm-wrapper--opened', `mm-wrapper--position-${this.opts.offCanvas.position}`), this.node.menu.classList.remove('mm-menu--opened'), this.node.menu.setAttribute('inert', 'true'), S.node.blck.setAttribute('inert', 'true'), S.node.page.removeAttribute('inert'), null === (e = this.node.open || document.querySelector(`[href="#${this.node.menu.id}"]`) || null) || void 0 === e || e.focus(), document.body.scrollLeft = 0, document.documentElement.scrollLeft = 0, this.trigger('close:after'));
656  }, S.prototype.setPage = function (e) {
657    const t = this.conf.offCanvas;
658    if (!e) {
659      let n = 'string' == typeof t.page.selector ? d(document.body, t.page.selector) : h(document.body, t.page.nodetype);
660      if (n = n.filter((e => !e.matches('.mm-menu, .mm-wrapper__blocker'))), t.page.noSelector.length && (n = n.filter((e => !e.matches(t.page.noSelector.join(', '))))), n.length > 1) {
661        let e = c('div');
662        n[0].before(e), n.forEach((t => {e.append(t);})), n = [e];
663      }
664      e = n[0];
665    }
666    this.trigger('setPage:before', [e]), e.classList.add('mm-page', 'mm-slideout'), e.id = e.id || i(), S.node.blck.setAttribute('href', `#${e.id}`), S.node.page = e, this.trigger('setPage:after', [e]);
667  };
668  const x = { fix: !0 }, A = 'ontouchstart' in window || !!navigator.msMaxTouchPoints || !1,
669    C = ['light', 'dark', 'white', 'black', 'light-contrast', 'dark-contrast', 'white-contrast', 'black-contrast'];
670  S.prototype.theme = function (e = null) {
671    const t = this.opts.theme;
672    if (!e) return t;
673    C.includes(e) && (this.node.menu.classList.remove(`mm-menu--theme-${t}`), this.node.menu.classList.add(`mm-menu--theme-${e}`), this.opts.theme = e);
674  };
675  const N = { close: !1, open: !1 }, $ = { add: !1 },
676    O = { use: !1, top: [], bottom: [], position: 'left', type: 'default' },
677    H = { add: !1, blockPanel: !0, visible: 3 }, q = { breadcrumbs: { separator: '/', removeFirst: !1 } };
678
679  function I () {
680    this.opts.navbars = this.opts.navbars || [], this.conf.navbars = this.conf.navbars || {}, n(this.conf.navbars, q);
681    let e = this.opts.navbars;
682    if (void 0 !== e && (e instanceof Array || (e = [e]), e.length)) {
683      var t = {};
684      e.forEach((e => {
685        if (!(e = function (e) {return 'boolean' == typeof e && e && (e = {}), 'object' != typeof e && (e = {}), void 0 === e.content && (e.content = ['prev', 'title']), e.content instanceof Array || (e.content = [e.content]), void 0 === e.use && (e.use = !0), e;}(e)).use) return;
686        const n = c('div.mm-navbar');
687        let { position: s } = e;
688        'bottom' !== s && (s = 'top'), t[s] || (t[s] = c('div.mm-navbars.mm-navbars--' + s)), t[s].append(n);
689        for (let t = 0, s = e.content.length; t < s; t++) {
690          const s = e.content[t];
691          if ('string' == typeof s) {
692            const e = I.navbarContents[s];
693            if ('function' == typeof e) e.call(this, n); else {
694              let e = c('span');
695              e.innerHTML = s;
696              const t = h(e);
697              1 == t.length && (e = t[0]), n.append(e);
698            }
699          } else n.append(s);
700        }
701        if ('string' == typeof e.type) {
702          const t = I.navbarTypes[e.type];
703          'function' == typeof t && t.call(this, n);
704        }
705        let i = () => {n.classList.remove('mm-hidden');};
706        'boolean' == typeof e.use ? this.bind('initMenu:after', i) : g(e.use, i, (() => {n.classList.add('mm-hidden');}));
707      })), this.bind('initMenu:after', (() => {for (let e in t) this.node.pnls['bottom' == e ? 'after' : 'before'](t[e]);}));
708    }
709  }
710
711  I.navbarContents = {
712    breadcrumbs: function (e) {
713      var t = c('div.mm-navbar__breadcrumbs');
714      e.append(t), this.bind('initNavbar:after', (e => {
715        if (!e.querySelector('.mm-navbar__breadcrumbs')) {
716          h(e, '.mm-navbar')[0].classList.add('mm-hidden');
717          for (var t = [], n = c('span.mm-navbar__breadcrumbs'), s = e, i = !0; s;) {
718            if (!(s = s.closest('.mm-panel')).parentElement.matches('.mm-listitem--vertical')) {
719              let e = d(s, '.mm-navbar__title span')[0];
720              if (e) {
721                let n = e.textContent;
722                n.length && t.unshift(i ? `<span>${n}</span>` : `<a \n                                    href="#${s.id}" \n                                    title="${this.i18n(this.conf.screenReader.openSubmenu)}"\n                                    >${n}</a>`);
723              }
724              i = !1;
725            }
726            s = d(this.node.pnls, `#${s.dataset.mmParent}`)[0];
727          }
728          this.conf.navbars.breadcrumbs.removeFirst && t.shift(), n.innerHTML = t.join('<span class="mm-separator">' + this.conf.navbars.breadcrumbs.separator + '</span>'), h(e, '.mm-navbar')[0].append(n);
729        }
730      })), this.bind('openPanel:before', (e => {
731        var n = e.querySelector('.mm-navbar__breadcrumbs');
732        t.innerHTML = n ? n.innerHTML : '';
733      }));
734    }, close: function (e) {
735      const t = c('a.mm-btn.mm-btn--close.mm-navbar__btn');
736      t.setAttribute('aria-label', this.i18n(this.conf.offCanvas.screenReader.closeMenu)), e.append(t), this.bind('setPage:after', (e => {t.href = `#${e.id}`;}));
737    }, prev: function (e) {
738      let t = c('a.mm-btn.mm-hidden');
739      e.append(t), this.bind('initNavbar:after', (e => {h(e, '.mm-navbar')[0].classList.add('mm-hidden');})), this.bind('openPanel:before', (e => {
740        if (e.parentElement.matches('.mm-listitem--vertical')) return;
741        t.classList.add('mm-hidden');
742        const n = e.querySelector('.mm-navbar__btn.mm-btn--prev');
743        if (n) {
744          const e = n.cloneNode(!0);
745          t.after(e), t.remove(), t = e;
746        }
747      }));
748    }, searchfield: function (e) {
749      let t = c('div.mm-navbar__searchfield');
750      t.id = i(), e.append(t), this.opts.searchfield = this.opts.searchfield || {}, this.opts.searchfield.add = !0, this.opts.searchfield.addTo = `#${t.id}`;
751    }, title: function (e) {
752      let t = c('a.mm-navbar__title');
753      e.append(t), this.bind('openPanel:before', (e => {
754        if (e.parentElement.matches('.mm-listitem--vertical')) return;
755        const n = e.querySelector('.mm-navbar__title');
756        if (n) {
757          const e = n.cloneNode(!0);
758          t.after(e), t.remove(), t = e;
759        }
760      }));
761    }
762  }, I.navbarTypes = {
763    tabs: function (e) {
764      function t (n) {
765        const s = h(e, `.mm-navbar__tab[href="#${n.id}"]`)[0];
766        if (s) s.classList.add('mm-navbar__tab--selected'), s.ariaExpanded = 'true'; else {
767          const e = d(this.node.pnls, `#${n.dataset.mmParent}`)[0];
768          e && t.call(this, e.closest('.mm-panel'));
769        }
770      }
771
772      e.classList.add('mm-navbar--tabs'), e.closest('.mm-navbars').classList.add('mm-navbars--has-tabs'), h(e, 'a').forEach((e => {e.classList.add('mm-navbar__tab');})), this.bind('openPanel:before', (n => {h(e, 'a').forEach((e => {e.classList.remove('mm-navbar__tab--selected'), e.ariaExpanded = 'fal
772se';})), t.call(this, n);})), this.bind('initPanels:after', (() => {
773        e.addEventListener('click', (e => {
774          var t, n, s;
775          const i = null === (n = null === (t = e.target) || void 0 === t ? void 0 : t.closest('.mm-navbar__tab')) || void 0 === n ? void 0 : n.getAttribute('href');
776          try {null === (s = d(this.node.pnls, `${i}.mm-panel`)[0]) || void 0 === s || s.classList.add('mm-panel--noanimation');} catch (e) {}
777        }), { capture: !0 });
778      }));
779    }
780  };
781  const j = { scroll: !1, update: !1 }, B = { scrollOffset: 0, updateOffset: 50 }, R = {
782    add: !1,
783    addTo: 'panels',
784    noResults: 'No results found.',
785    placeholder: 'Search',
786    search: !0,
787    searchIn: 'panels',
788    splash: '',
789    title: 'Search'
790  }, D = { cancel: !0, clear: !0, form: {}, input: {}, panel: {}, submit: !1 };
791  m({
792    cancel: 'abbrechen',
793    'Cancel searching': 'Suche abbrechen',
794    'Clear searchfield': 'Suchfeld löschen',
795    'No results found.': 'Keine Ergebnisse gefunden.',
796    Search: 'Suche'
797  }, 'de'), m({
798    cancel: 'انصراف',
799    'Cancel searching': 'لغو جستجو',
800    'Clear searchfield': 'پاک کردن فیلد جستجو',
801    'No results found.': 'نتیجه‌ای یافت نشد.',
802    Search: 'جستجو'
803  }, 'fa'), m({
804    cancel: 'annuleren',
805    'Cancel searching': 'Zoeken annuleren',
806    'Clear searchfield': 'Zoekveld leeg maken',
807    'No results found.': 'Geen resultaten gevonden.',
808    Search: 'Zoeken'
809  }, 'nl'), m({
810    cancel: 'cancelar',
811    'Cancel searching': 'Cancelar pesquisa',
812    'Clear searchfield': 'Limpar campo de pesquisa',
813    'No results found.': 'Nenhum resultado encontrado.',
814    Search: 'Buscar'
815  }, 'pt_br'), m({
816    cancel: 'отменить',
817    'Cancel searching': 'Отменить поиск',
818    'Clear searchfield': 'Очистить поле поиска',
819    'No results found.': 'Ничего не найдено.',
820    Search: 'Найти'
821  }, 'ru'), m({
822    cancel: 'zrušiť',
823    'Cancel searching': 'Zrušiť vyhľadávanie',
824    'Clear searchfield': 'Vymazať pole vyhľadávania',
825    'No results found.': 'Neboli nájdené žiadne výsledky.',
826    Search: 'Vyhľadávanie'
827  }, 'sk'), m({
828    cancel: 'скасувати',
829    'Cancel searching': 'Скасувати пошук',
830    'Clear searchfield': 'Очистити поле пошуку',
831    'No results found.': 'Нічого не знайдено.',
832    Search: 'Пошук'
833  }, 'uk');
834  const F = function () {
835      const e = this.opts.searchfield, t = this.conf.searchfield;
836      let n = h(this.node.pnls, '.mm-panel--search')[0];
837      return n || (n = c('div.mm-panel--search'), K(n, t.panel), e.title.length && (n.dataset.mmTitle = this.i18n(e.title)), n.append(c('ul')), this._initPanel(n), n);
838    }, Z = function (e) {
839      const t = this.opts.searchfield;
840      if (e.matches(t.addTo)) {
841        const t = e.matches('.mm-panel--search');
842        if (!d(e, '.mm-searchfield').length) {
843          const n = W.call(this, t);
844          t && n.classList.add('mm-searchfield--cancelable'), e.prepend(n), z.call(this, n);
845        }
846      }
847      if (t.splash.length && e.matches('.mm-panel--search') && !d(e, '.mm-panel__splash').length) {
848        const n = c('div.mm-panel__splash');
849        n.innerHTML = t.splash, e.append(n);
850      }
851      if (t.noResults.length && !d(e, '.mm-panel__noresults').length) {
852        const n = c('div.mm-panel__noresults');
853        n.innerHTML = this.i18n(t.noResults), e.append(n);
854      }
855    }, W = function (e = !1) {
856      const t = this.opts.searchfield, n = this.conf.searchfield, s = c('form.mm-searchfield');
857      K(s, n.form);
858      const i = c('div.mm-searchfield__input');
859      s.append(i);
860      const a = c('input');
861      if (i.append(a), a.type = 'text', a.autocomplete = 'off', a.placeholder = this.i18n(t.placeholder), a.setAttribute('aria-label', this.i18n(t.placeholder)), K(a, n.input), n.submit) {
862        const e = c('button.mm-btnreset.mm-btn.mm-btn--next.mm-searchfield__btn');
863        e.type = 'submit', i.append(e);
864      } else if (n.clear) {
865        const e = c('button.mm-btnreset.mm-btn.mm-btn--close.mm-searchfield__btn');
866        e.type = 'reset', e.setAttribute('aria-label', this.i18n('Clear searchfield')), i.append(e), s.addEventListener('reset', (() => {window.requestAnimationFrame((() => {a.dispatchEvent(new Event('input'));}));}));
867      }
868      if (n.cancel && e) {
869        const e = c('a.mm-searchfield__cancel');
870        e.href = '#', e.setAttribute('aria-label', this.i18n('Cancel searching')), e.textContent = this.i18n('cancel'), s.append(e), e.addEventListener('click', (e => {e.preventDefault(), this.closePanel(h(this.node.pnls, '.mm-panel--search')[0], !1);}));
871      }
872      return s;
873    }, z = function (e) {
874      const t = this.opts.searchfield, n = e.closest('.mm-panel') || d(this.node.pnls, '.mm-panel--search')[0],
875        s = d(e, 'input')[0];
876      let i = n.matches('.mm-panel--search') ? h(this.node.pnls, t.searchIn) : [n];
877      i = i.filter((e => !e.matches('.mm-panel--search')));
878      const a = () => {
879        const a = s.value.toLowerCase().trim();
880        if (a.length ? e.classList.add('mm-searchfield--searching') : e.classList.remove('mm-searchfield--searching'), !t.search) return;
881        const o = [];
882        if (i.forEach((e => {e.scrollTop = 0, o.push(...d(e, '.mm-listitem'));})), a.length) {
883          this.trigger('search:before'), n.classList.add('mm-panel--searching'), o.forEach((e => {
884            const t = h(e, '.mm-listitem__text')[0];
885            var n;
886            (!t || (n = t, [].slice.call(n.childNodes).filter((e => !e.ariaHidden)).map((e => e.textContent)).join(' ')).toLowerCase().indexOf(a) > -1) && (e.dataset.mmSearchresult = a);
887          }));
888          let e = 0;
889          e = n.matches('.mm-panel--search') ? V(n, a, i) : Y(a, i), n.classList[0 == e ? 'add' : 'remove']('mm-panel--noresults'), this.trigger('search:after');
890        } else this.trigger('clear:before'), n.classList.remove('mm-panel--searching', 'mm-panel--noresults'), n.matches('.mm-panel--search') ? (U(n), t.splash || this.closePanel(n, !1, !1)) : G(i), this.trigger('clear:after');
891      };
892      s.addEventListener('input', a), a();
893    }, V = (e, t, n) => {
894      const s = d(e, '.mm-listview')[0];
895      s.innerHTML = '';
896      let i = 0;
897      return n.forEach((e => {
898        const n = d(e, `[data-mm-searchresult="${t}"]`);
899        if (i += n.length, n.length) {
900          const t = d(e, '.mm-navbar__title')[0];
901          if (t) {
902            const e = c('li.mm-divider');
903            e.innerHTML = t.innerHTML, s.append(e);
904          }
905          n.forEach((e => {
906            const t = e.cloneNode(!0);
907            s.append(t);
908          }));
909        }
910      })), d(s, '.mm-panel').forEach((e => {e.remove();})), ['id', 'data-mm-parent', 'data-mm-child'].forEach((e => {d(s, `[${e}]`).forEach((t => {t.removeAttribute(e);}));})), d(s, '.mm-listitem--opened').forEach((e => {e.classList.remove('mm-listitem--opened');})), i;
911    }, U = e => {d(e, '.mm-listview')[0].innerHTML = '';}, Y = (e, t) => {
912      let n = 0;
913      return t.forEach((t => {
914        const s = d(t, `[data-mm-searchresult="${e}"]`);
915        n += s.length, s.length && s.forEach((t => {
916          const n = ((e, t) => {
917            let n = [], s = e.previousElementSibling;
918            for (; s;) t && !s.matches(t) || n.push(s), s = s.previousElementSibling;
919            return n;
920          })(t, '.mm-divider')[0];
921          n && (n.dataset.mmSearchresult = e);
922        })), d(t, '.mm-listitem, .mm-divider').forEach((t => {t.classList.add('mm-hidden'), t.dataset.mmSearchresult === e && [t, ...p(t, '.mm-listitem')].forEach((e => {e.classList.remove('mm-hidden');}));}));
923      })), n;
924    },
925    G = e => {e.forEach((e => {d(e, '.mm-listitem, .mm-divider').forEach((e => {e.classList.remove('mm-hidden');}));}));},
926    K = (e, t) => {t && Object.keys(t).forEach((n => {e[n] = t[n];}));}, X = { add: !1, addTo: 'panels' },
927    J = { current: !0, hover: !1, parent: !1 },
928    Q = { collapsed: { use: !1 }, expanded: { use: !1, initial: 'open' } };
929  S.addons = {
930    offcanvas: function () {
931      this.opts.offCanvas = this.opts.offCanvas || {}, this.conf.offCanvas = this.conf.offCanvas || {};
932      const e = n(this.opts.offCanvas, M), t = n(this.conf.offCanvas, k);
933      e.use && (T.includes(e.position) || (e.position = T[0]), this._api.push('open', 'close', 'setPage', 'position'), t.clone && (this.node.menu = this.node.menu.cloneNode(!0), this.node.menu.id && (this.node.menu.id = o(this.node.menu.id)), d(this.node.menu, '[id]').forEach((e => {e.id = o(e.id);}))), this.bind('initMenu:before', (() => {this.node.wrpr = document.querySelector(t.menu.insertSelector), this.node.wrpr[t.menu.insertMethod](this.node.menu);})), S.node.blck || this.bind('initMenu:before', (() => {
934        const e = c('a.mm-wrapper__blocker.mm-blocker.mm-slideout');
935        e.id = i(), e.setAttribute('aria-label', this.i18n(t.screenReader.closeMenu)), e.setAttribute('inert', 'true'), document.querySelector(t.menu.insertSelector).append(e), S.node.blck = e;
936      })), this.bind('initMenu:after', (() => {
937        this.setPage(S.node.page), this.node.menu.classList.add('mm-menu--offcanvas'), this.node.menu.setAttribute('inert', 'true'), T.includes(e.position) && (this.node.wrpr.classList.add(`mm-wrapper--position-${e.position}`), this.node.menu.classList.add(`mm-menu--position-${e.position}`));
938        let t = window.location.hash;
939        if (t) {
940          let e = r(this.node.menu.id);
941          e && e == t.slice(1) && setTimeout((() => {this.open();}), 1e3);
942        }
943      })), document.addEventListener('click', (e => {
944        var t;
945        switch (null === (t = e.target.closest('a')) || void 0 === t ? void 0 : t.getAttribute('href')) {
946          case`#${r(this.node.menu.id)}`:
947            e.preventDefault(), this.open();
948            break;
949          case`#${r(S.node.page.id)}`:
950            e.preventDefault(), this.close();
951        }
952      })), document.addEventListener('keyup', (e => {'Escape' == e.key && this.close();})));
953    },
954    scrollBugFix: function () {
955      if (!A || !this.opts.offCanvas.use) return;
956      if (this.opts.scrollBugFix = this.opts.scrollBugFix || {}, !n(this.opts.scrollBugFix, x).fix) return;
957      const e = (e => {
958        let t = '', n = null;
959        return e.addEventListener('touchstart', (e => {1 === e.touches.length && (t = '', n = e.touches[0].pageY);})), e.addEventListener('touchend', (e => {0 === e.touches.length && (t = '', n = null);})), e.addEventListener('touchmove', (e => {
960          if (t = '', n && 1 === e.touches.length) {
961            const s = e.changedTouches[0].pageY;
962            s > n ? t = 'down' : s < n && (t = 'up'), n = s;
963          }
964        })), { get: () => t };
965      })(this.node.menu);
966      this.node.menu.addEventListener('scroll', (e => {e.preventDefault(), e.stopPropagation();}), { passive: !1 }), this.node.menu.addEventListener('touchmove', (t => {
967        let n = t.target.closest('.mm-panel, .mm-iconbar__top, .mm-iconbar__bottom');
968        n && n.closest('.mm-listitem--vertical') && (n = p(n, '.mm-panel').pop()), n ? (n.scrollHeight === n.offsetHeight || 0 == n.scrollTop && 'down' == e.get() || n.scrollHeight == n.scrollTop + n.offsetHeight && 'up' == e.get()) && t.stopPropagation() : t.stopPropagation();
969      }), { passive: !1 }), this.bind('open:after', (() => {
970        var e = h(this.node.pnls, '.mm-panel--opened')[0];
971        e && (e.scrollTop = 0);
972      })), window.addEventListener('orientationchange', (e => {
973        var t = h(this.node.pnls, '.mm-panel--opened')[0];
974        t && (t.scrollTop = 0, t.style['-webkit-overflow-scrolling'] = 'auto', t.style['-webkit-overflow-scrolling'] = 'touch');
975      }));
976    },
977    theme: function () {
978      this.opts.theme = this.opts.theme || 'light';
979      const e = this.opts.theme;
980      C.includes(e) || (this.opts.theme = C[0]), this._api.push('theme'), this.bind('initMenu:after', (() => {this.theme(this.opts.theme);}));
981    },
982    backButton: function () {
983      if (this.opts.backButton = this.opts.backButton || {}, !this.opts.offCanvas.use) return;
984      const e = n(this.opts.backButton, N), t = `#${this.node.menu.id}`;
985      if (e.close) {
986        let e = [];
987        const n = () => {e = [t], h(this.node.pnls, '.mm-panel--opened, .mm-panel--parent').forEach((t => {e.push('#' + t.id);}));};
988        this.bind('open:after', (() => {history.pushState(null, '', location.pathname + location.search + t);})), this.bind('open:after', n), this.bind('openPanel:after', n), this.bind('close:after', (() => {e = [], history.back(), history.pushState(null, '', location.pathname + location.search);})), window.addEventListener('popstate', (() => {
989          if (this.node.menu.matches('.mm-menu--opened') && e.length) {
990            e = e.slice(0, -1);
991            const n = e[e.length - 1];
992            n == t ? this.close() : (this.openPanel(this.node.menu.querySelector(n)), history.pushState(null, '', location.pathname + location.search + t));
993          }
994        }));
995      }
996      e.open && window.addEventListener('popstate', (e => {this.node.menu.matches('.mm-menu--opened') || location.hash != t || this.open();}));
997    },
998    counters: function () {
999      if (this.opts.counters = this.opts.counters || {}, !n(this.opts.counters, $).add) return;
1000      const e = e => {
1001          const t = this.node.pnls.querySelector(`#${e.dataset.mmParent}`);
1002          if (!t) return;
1003          const n = t.querySelector('.mm-counter');
1004          if (!n) return;
1005          const s = [];
1006          h(e, '.mm-listview').forEach((e => {s.push(...h(e, '.mm-listitem'));})), n.innerHTML = u(s).length.toString();
1007        },
1008        t = new MutationObserver((t => {t.forEach((t => {'class' == t.attributeName && e(t.target.closest('.mm-panel'));}));}));
1009      this.bind('initListview:after', (t => {
1010        const n = t.closest('.mm-panel'), s = this.node.pnls.querySelector(`#${n.dataset.mmParent}`);
1011        if (!s) return;
1012        const i = h(s, '.mm-btn')[0];
1013        if (i) {
1014          if (!h(i, '.mm-counter').length) {
1015            const e = c('span.mm-counter');
1016            e.setAttribute('aria-hidden', 'true'), i.prepend(e);
1017          }
1018          e(n);
1019        }
1020      })), this.bind('initListitem:after', (e => {
1021        const n = e.closest('.mm-panel');
1022        n && this.node.pnls.querySelector(`#${n.dataset.mmParent}`) && t.observe(e, { attributes: !0 });
1023      }));
1024    },
1025    iconbar: function () {
1026      this.opts.iconbar = this.opts.iconbar || {};
1027      const e = n(this.opts.iconbar, O);
1028      if (!e.use) return;
1029      let t;
1030      if (['top', 'bottom'].forEach(((n, i) => {
1031        let a = e[n];
1032        'array' != s(a) && (a = [a]);
1033        const o = c('div.mm-iconbar__' + n);
1034        for (let e = 0, t = a.length; e < t; e++) 'string' == typeof a[e] ? o.innerHTML += a[e] : o.append(a[e]);
1035        o.children.length && (t || (t = c('div.mm-iconbar')), t.append(o));
1036      })), t) {
1037        this.bind('initMenu:after', (() => {this.node.menu.prepend(t);}));
1038        let n = 'mm-menu--iconbar-' + e.position, s = () => {this.node.menu.classList.add(n);},
1039          i = () => {this.node.menu.classList.remove(n);};
1040        if ('boolean' == typeof e.use ? this.bind('initMenu:after', s) : g(e.use, s, i), 'tabs' == e.type) {
1041          t.classList.add('mm-iconbar--tabs'), t.addEventListener('click', (e => {
1042            const t = e.target.closest('.mm-iconbar__tab');
1043            if (t) if (t.matches('.mm-iconbar__tab--selected')) e.stopImmediatePropagation(); else try {
1044              const n = d(this.node.menu, `${t.getAttribute('href')}.mm-panel`)[0];
1045              n && (e.preventDefault(), e.stopImmediatePropagation(), this.openPanel(n, !1));
1046            } catch (e) {}
1047          }));
1048          const e = n => {
1049            d(t, 'a').forEach((e => {e.classList.remove('mm-iconbar__tab--selected');}));
1050            const s = d(t, '[href="#' + n.id + '"]')[0];
1051            if (s) s.classList.add('mm-iconbar__tab--selected'); else {
1052              const t = d(this.node.pnls, `#${n.dataset.mmParent}`)[0];
1053              t && e(t.closest('.mm-panel'));
1054            }
1055          };
1056          this.bind('openPanel:before', e);
1057        }
1058      }
1059    },
1060    iconPanels: function () {
1061      this.opts.iconPanels = this.opts.iconPanels || {};
1062      const e = n(this.opts.iconPanels, H);
1063      let t = !1;
1064      if ('first' == e.visible && (t = !0, e.visible = 1), e.visible = Math.min(3, Math.max(1, e.visible)), e.visible++, e.add) {
1065        this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--iconpanel');}));
1066        const n = ['mm-panel--iconpanel-0', 'mm-panel--iconpanel-1', 'mm-panel--iconpanel-2', 'mm-panel--iconpanel-3'];
1067        t ? this.bind('initMenu:after', (() => {
1068          var e;
1069          null === (e = h(this.node.pnls, '.mm-panel')[0]) || void 0 === e || e.classList.add('mm-panel--iconpanel-first');
1070        })) : this.bind('openPanel:after', (t => {
1071          if (t.closest('.mm-listitem--vertical')) return;
1072          let s = h(this.node.pnls, '.mm-panel');
1073          s = s.filter((e => e.matches('.mm-panel--parent'))), s.push(t), s = s.slice(-e.visible), s.forEac
1073h(((e, t) => {e.classList.remove('mm-panel--iconpanel-first', ...n), e.classList.add(`mm-panel--iconpanel-${t}`);}));
1074        }));
1075      }
1076    },
1077    navbars: I,
1078    pageScroll: function () {
1079      this.opts.pageScroll = this.opts.pageScroll || {}, this.conf.pageScroll = this.conf.pageScroll || {};
1080      const e = n(this.opts.pageScroll, j), t = n(this.conf.pageScroll, B);
1081      var s;
1082
1083      function i () {
1084        s && window.scrollTo({
1085          top: s.getBoundingClientRect().top + document.scrollingElement.scrollTop - t.scrollOffset,
1086          behavior: 'smooth'
1087        }), s = null;
1088      }
1089
1090      function a (e) {
1091        try {if ('#' == e.slice(0, 1)) return d(S.node.page, e)[0];} catch (e) {}
1092        return null;
1093      }
1094
1095      if (this.opts.offCanvas.use && e.scroll && (this.bind('close:after', (() => {i();})), this.node.menu.addEventListener('click', (e => {
1096        var t, n;
1097        const o = (null === (n = null === (t = e.target) || void 0 === t ? void 0 : t.closest('a[href]')) || void 0 === n ? void 0 : n.getAttribute('href')) || '';
1098        (s = a(o)) && (e.preventDefault(), this.node.menu.matches('.mm-menu--sidebar-expanded') && this.node.wrpr.matches('.mm-wrapper--sidebar-expanded') ? i() : this.close());
1099      }))), e.update) {
1100        let e = [];
1101        this.bind('initListview:after', (t => {
1102          const n = h(t, '.mm-listitem');
1103          f(n).forEach((t => {
1104            const n = a(t.getAttribute('href'));
1105            n && e.unshift(n);
1106          }));
1107        }));
1108        let n = -1;
1109        window.addEventListener('scroll', (s => {
1110          const i = window.scrollY;
1111          for (var a = 0; a < e.length; a++) if (e[a].offsetTop < i + t.updateOffset) {
1112            if (n !== a) {
1113              n = a;
1114              let t = h(this.node.pnls, '.mm-panel--opened')[0], s = d(t, '.mm-listitem'), i = f(s);
1115              i = i.filter((t => t.matches('[href="#' + e[a].id + '"]'))), i.length && this.setSelected(i[0].parentElement);
1116            }
1117            break;
1118          }
1119        }), { passive: !0 });
1120      }
1121    },
1122    searchfield: function () {
1123      this.opts.searchfield = this.opts.searchfield || {}, this.conf.searchfield = this.conf.searchfield || {};
1124      const e = n(this.opts.searchfield, R);
1125      if (n(this.conf.searchfield, D), e.add) {
1126        switch (e.addTo) {
1127          case'panels':
1128            e.addTo = '.mm-panel';
1129            break;
1130          case'searchpanel':
1131            e.addTo = '.mm-panel--search';
1132        }
1133        'panels' === e.searchIn && (e.searchIn = '.mm-panel'), this.bind('initPanel:after', (t => {t.matches(e.addTo) && !t.closest('.mm-listitem--vertical') && Z.call(this, t);})), this.bind('initMenu:after', (() => {
1134          const t = F.call(this);
1135          Z.call(this, t), d(this.node.menu, e.addTo).forEach((n => {
1136            if (!n.matches('.mm-panel')) {
1137              const s = W.call(this, !0);
1138              n.append(s);
1139              const i = d(s, 'input')[0];
1140              e.splash.length ? (i.addEventListener('focusin', (() => {this.openPanel(t, !1, !1);})), this.bind('openPanel:after', (e => {e.matches('.mm-panel--search') ? s.classList.add('mm-searchfield--cancelable') : s.classList.remove('mm-searchfield--cancelable');}))) : (this.bind('search:after', (() => {this.openPanel(t, !1, !1);})), i.addEventListener('focusout', (() => {i.value.length || this.closePanel(t, !1);}))), z.call(this, s);
1141            }
1142          }));
1143        })), this.bind('close:before', (() => {d(this.node.menu, '.mm-searchfield input').forEach((e => {e.blur();}));}));
1144      }
1145    },
1146    sectionIndexer: function () {
1147      this.opts.sectionIndexer = this.opts.sectionIndexer || {}, n(this.opts.sectionIndexer, X).add && this.bind('initPanels:after', (() => {
1148        if (!this.node.indx) {
1149          let e = '';
1150          'abcdefghijklmnopqrstuvwxyz'.split('').forEach((t => {e += '<a href="#">' + t + '</a>';}));
1151          let t = c('div.mm-sectionindexer');
1152          t.innerHTML = e, this.node.pnls.prepend(t), this.node.indx = t, this.node.indx.addEventListener('click', (e => {e.target.matches('a') && e.preventDefault();}));
1153          let n = e => {
1154            if (!e.target.matches('a')) return;
1155            const t = e.target.textContent, n = h(this.node.pnls, '.mm-panel--opened')[0];
1156            let s = -1, i = n.scrollTop;
1157            n.scrollTop = 0, d(n, '.mm-divider').filter((e =>
1157 !e.matches('.mm-hidden'))).forEach((e => {s < 0 && t == e.textContent.trim().slice(0, 1).toLowerCase() && (s = e.offsetTop);})), n.scrollTop = s > -1 ? s : i;
1158          };
1159          A ? (this.node.indx.addEventListener('touchstart', n), this.node.indx.addEventListener('touchmove', n)) : this.node.indx.addEventListener('mouseover', n);
1160        }
1161        this.bind('openPanel:before', (e => {
1162          const t = d(e, '.mm-divider').filter((e => !e.matches('.mm-hidden'))).length;
1163          this.node.indx.classList[t ? 'add' : 'remove']('mm-sectionindexer--active');
1164        }));
1165      }));
1166    },
1167    setSelected: function () {
1168      this.opts.setSelected = this.opts.setSelected || {};
1169      const e = n(this.opts.setSelected, J);
1170      if ('detect' == e.current) {
1171        const e = t => {
1172          t = t.split('?')[0].split('#')[0];
1173          const n = this.node.menu.querySelector('a[href="' + t + '"], a[href="' + t + '/"]');
1174          if (n) this.setSelected(n.parentElement); else {
1175            const n = t.split('/').slice(0, -1);
1176            n.length && e(n.join('/'));
1177          }
1178        };
1179        this.bind('initMenu:after', (() => {e.call(this, window.location.href);}));
1180      } else e.current || this.bind('initListview:after', (e => {h(e, '.mm-listitem--selected').forEach((e => {e.classList.remove('mm-listitem--selected');}));}));
1181      e.hover && this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--selected-hover');})), e.parent && (this.bind('openPanel:after', (e => {
1182        d(this.node.pnls, '.mm-listitem--selected-parent').forEach((e => {e.classList.remove('mm-listitem--selected-parent');}));
1183        let t = e;
1184        for (; t;) {
1185          let e = d(this.node.pnls, `#${t.dataset.mmParent}`)[0];
1186          t = null == e ? void 0 : e.closest('.mm-panel'), e && !e.matches('.mm-listitem--vertical') && e.classList.add('mm-listitem--selected-parent');
1187        }
1188      })), this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--selected-parent');})));
1189    },
1190    sidebar: function () {
1191      if (!this.opts.offCanvas.use) return;
1192      this.opts.sidebar = this.opts.sidebar || {};
1193      const e = n(this.opts.sidebar, Q);
1194      if (e.collapsed.use) {
1195        this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--sidebar-collapsed');}));
1196        let t = () => {this.node.wrpr.classList.add('mm-wrapper--sidebar-collapsed');},
1197          n = () => {this.node.wrpr.classList.remove('mm-wrapper--sidebar-collapsed');};
1198        'boolean' == typeof e.collapsed.use ? this.bind('initMenu:after', t) : g(e.collapsed.use, t, n);
1199      }
1200      if (e.expanded.use) {
1201        this.bind('initMenu:after', (() => {this.node.menu.classList.add('mm-menu--sidebar-expanded');}));
1202        let t = !1,
1203          n = () => {t = !0, this.node.wrpr.classList.add('mm-wrapper--sidebar-expanded'), this.node.menu.removeAttribute('aria-modal'), this.open(), S.node.page.removeAttribute('inert');},
1204          s = () => {t = !1, this.node.wrpr.classList.remove('mm-wrapper--sidebar-expanded'), this.node.menu.setAttribute('aria-modal', 'true'), this.close();};
1205        'boolean' == typeof e.expanded.use ? this.bind('initMenu:after', n) : g(e.expanded.use, n, s), this.bind('close:after', (() => {t && window.sessionStorage.setItem('mmenuExpandedState', 'closed');})), this.bind('open:after', (() => {t && (window.sessionStorage.setItem('mmenuExpandedState', 'open'), S.node.page.removeAttribute('inert'));}));
1206        let i = e.expanded.initial;
1207        const a = window.sessionStorage.getItem('mmenuExpandedState');
1208        switch (a) {
1209          case'open':
1210          case'closed':
1211            i = a;
1212        }
1213        'closed' === i && this.bind('init:after', (() => {this.close();}));
1214      }
1215    }
1216  }, window && (window.Mmenu = S);
1217})();
1218
1219document.addEventListener('DOMContentLoaded', function () {
1220    // 1. OBERSTE EBENE: Klick auf <li> öffnet das erste Untermenü, schließt andere
1221    document.querySelectorAll('ul#nav-ul > li').forEach(function (li) {
1222        const submenu = li.querySelector('ul');
1223        if (submenu) {
1224            li.style.cursor = 'pointer';
1225            li.addEventListener('click', function (e) {
1226                // Nicht auslösen, wenn auf einen Link geklickt wird
1227                if (e.target.tagName.toLowerCase() === 'a') return;
1228
1229                const isOpen = li.classList.contains('open');
1230                // Schließe alle anderen Menüpunkte auf derselben Ebene!
1231                document.querySelectorAll('ul#nav-ul > li.open').forEach(function (otherLi) {
1232                    if (otherLi !== li) {
1233                        otherLi.classList.remove('open', 'current');
1234                        const otherSubmenu = otherLi.querySelector('ul');
1235                        if (otherSubmenu) {
1236                            otherSubmenu.classList.remove('show');
1237                            otherSubmenu.style.display = 'none';
1238                        }
1239                    }
1240                });
1241
1242                // Toggle den aktuellen Menüpunkt
1243                li.classList.toggle('open', !isOpen);
1244                li.classList.toggle('current', !isOpen);
1245                submenu.classList.toggle('show', !isOpen);
1246                submenu.style.display = isOpen ? 'none' : 'block';
1247            });
1248        }
1249    });
1250
1251    // 2. UNTERMENÜS: Füge Toggle-Button ein und verwalte aufklappen/zu klappen
1252    document.querySelectorAll('ul#nav-ul ul ul').forEach(function (submenu) {
1253        const li = submenu.parentElement;
1254        if (!li.querySelector('.submenu-toggle')) {
1255            const btn = document.createElement('button');
1256            btn.type = 'button';
1257            btn.className = 'submenu-toggle ToggleBtn clickable';
1258            btn.textContent = '+';
1259            li.insertBefore(btn, submenu);
1260        }
1261    });
1262
1263    // Klick-Handler für die Toggle-Buttons in Untermenüs (ab Ebene 2) — Accordion-Logik:
1264    document.querySelectorAll('.submenu-toggle').forEach(function (btn) {
1265        btn.addEventListener('click', function (e) {
1266            e.preventDefault();
1267            e.stopPropagation();
1268            const li = btn.closest('li');
1269            const submenu = li.querySelector('ul');
1270            const isOpen = li.classList.contains('open');
1271
1272            // Accordion-Logik: schließe alle anderen Untermenüs auf dieser Ebene
1273            const siblingLis = Array.from(li.parentElement.children)
1274                .filter(el => el !== li && el.tagName.toLowerCase() === 'li');
1275            siblingLis.forEach(function (sibling) {
1276                sibling.classList.remove('open', 'current');
1277                const sibSubmenu = sibling.querySelector('ul');
1278                if (sibSubmenu) {
1279                    sibSubmenu.classList.remove('show');
1280                    sibSubmenu.style.display = 'none';
1281                }
1282                const sibBtn = sibling.querySelector('.submenu-toggle');
1283                if (sibBtn) sibBtn.textContent = '+';
1284            });
1285
1286            li.classList.toggle('open', !isOpen);
1287            li.classList.toggle('current', !isOpen);
1288            if (submenu) {
1289                submenu.classList.toggle('show', !isOpen);
1290                submenu.style.display = isOpen ? 'none' : 'block';
1291            }
1292            btn.textContent = isOpen ? '+' : '–';
1293        });
1294    });
1295});
1296
1297/**
1298 * stacktable.js
1299 * Author & copyright (c) 2012: John Polacek
1300 * CardTable by: Justin McNally (2015)
1301 * Dual MIT & GPL license
1302 *
1303 * Page: http://johnpolacek.github.com/stacktable.js
1304 * Repo: https://github.com/johnpolacek/stacktable.js/
1305 *
1306 * jQuery plugin for stacking tables on small screens
1307 * Requires jQuery version 1.7 or above
1308 *
1309 */
1310;(function($) {
1311  $.fn.cardtable = function(options) {
1312    var $tables = this,
1313        defaults = {headIndex:0},
1314        settings = $.extend({}, defaults, options),
1315        headIndex;
1316
1317    // checking the "headIndex" option presence... or defaults it to 0
1318    if(options && options.headIndex)
1319      headIndex = options.headIndex;
1320    else
1321      headIndex = 0;
1322
1323    return $tables.each(function() {
1324      var $table = $(this);
1325      if ($table.hasClass('stacktable')) {
1326        return;
1327      }
1328      var table_css = $(this).prop('class');
1329      var $stacktable = $('<div></div>');
1330      if (typeof settings.myClass !== 'undefined') $stacktable.addClass(settings.myClass);
1331      var markup = '';
1332      var $caption, $topRow, headMarkup, bodyMarkup, tr_class;
1333
1334      $table.addClass('stacktable large-only');
1335
1336      $caption = $table.find(">caption").clone();
1337      $topRow = $table.find('>thead>tr,>tbody>tr,>tfoot>tr,>tr').eq(0);
1338
1339      // avoid duplication when paginating
1340      $table.siblings().filter('.small-only').remove();
1341
1342      // using rowIndex and cellIndex in order to reduce ambiguity
1343      $table.find('>tbody>tr').each(function() {
1344
1345        // declaring headMarkup and bodyMarkup, to be used for separately head and body of single records
1346        headMarkup = '';
1347        bodyMarkup = '';
1348        tr_class = $(this).prop('class');
1349        // for the first row, "headIndex" cell is the head of the table
1350        // for the other rows, put the "headIndex" cell as the head for that row
1351        // then iterate through the key/values
1352        $(this).find('>td,>th').each(function(cellIndex) {
1353          if ($(this).html() !== ''){
1354            bodyMarkup += '<tr class="' + tr_class +'">';
1355            if ($topRow.find('>td,>th').eq(cellIndex).html()){
1356              bodyMarkup += '<td class="st-key">
vendor: 5,006 bytes, lines 1356-1472
1356'+$topRow.find('>td,>th').eq(cellIndex).html()+'</td>';
1357            } else {
1358              bodyMarkup += '<td class="st-key"></td>';
1359            }
1360            bodyMarkup += '<td class="st-val '+$(this).prop('class')  +'">'+$(this).html()+'</td>';
1361            bodyMarkup += '</tr>';
1362          }
1363        });
1364
1365        markup += '<table class=" '+ table_css +' stacktable small-only"><tbody>' + headMarkup + bodyMarkup + '</tbody></table>';
1366      });
1367
1368      $table.find('>tfoot>tr>td').each(function(rowIndex,value) {
1369        if ($.trim($(value).text()) !== '') {
1370          markup += '<table class="'+ table_css + ' stacktable small-only"><tbody><tr><td>' + $(value).html() + '</td></tr></tbody></table>';
1371        }
1372      });
1373
1374      $stacktable.prepend($caption);
1375      $stacktable.append($(markup));
1376      $table.before($stacktable);
1377    });
1378  };
1379
1380  $.fn.stacktable = function(options) {
1381    var $tables = this,
1382        defaults = {headIndex:0,displayHeader:true},
1383        settings = $.extend({}, defaults, options),
1384        headIndex;
1385
1386    // checking the "headIndex" option presence... or defaults it to 0
1387    if(options && options.headIndex)
1388      headIndex = options.headIndex;
1389    else
1390      headIndex = 0;
1391
1392    return $tables.each(function() {
1393      var table_css = $(this).prop('class');
1394      var $stacktable = $('<table class="'+ table_css +' stacktable small-only"><tbody></tbody></table>');
1395      if (typeof settings.myClass !== 'undefined') $stacktable.addClass(settings.myClass);
1396      var markup = '';
1397      var $table, $caption, $topRow, headMarkup, bodyMarkup, tr_class, displayHeader;
1398
1399      $table = $(this);
1400      $table.addClass('stacktable large-only');
1401      $caption = $table.find(">caption").clone();
1402      $topRow = $table.find('>thead>tr,>tbody>tr,>tfoot>tr').eq(0);
1403
1404      displayHeader = $table.data('display-header') === undefined ? settings.displayHeader : $table.data('display-header');
1405
1406      // using rowIndex and cellIndex in order to reduce ambiguity
1407      $table.find('>tbody>tr').each(function(rowIndex) {
1408
1409        // declaring headMarkup and bodyMarkup, to be used for separately head and body of single records
1410        headMarkup = '';
1411        bodyMarkup = '';
1412        tr_class = $(this).prop('class');
1413        
1414        // for the first row, "headIndex" cell is the head of the table
1415        if (rowIndex === 0) {
1416          // the main heading goes into the markup variable
1417          if (displayHeader) {
1418            markup += '<tr class=" '+tr_class +' "><th class="st-head-row st-head-row-main" colspan="2">'+$(this).find('>th,>td').eq(headIndex).html()+'</th></tr>';
1419          }
1420        } else {
1421          // for the other rows, put the "headIndex" cell as the head for that row
1422          // then iterate through the key/values
1423          $(this).find('>td,>th').each(function(cellIndex) {
1424            if (cellIndex === headIndex) {
1425              headMarkup = '<tr class="'+ tr_class+'"><th class="st-head-row" colspan="2">'+$(this).html()+'</th></tr>';
1426            } else {
1427              if ($(this).html() !== ''){
1428                bodyMarkup += '<tr class="' + tr_class +'">';
1429                if ($topRow.find('>td,>th').eq(cellIndex).html()){
1430                  bodyMarkup += '<td class="st-key">'+$topRow.find('>td,>th').eq(cellIndex).html()+'</td>';
1431                } else {
1432                  bodyMarkup += '<td class="st-key"></td>';
1433                }
1434                bodyMarkup += '<td class="st-val '+$(this).prop('class')  +'">'+$(this).html()+'</td>';
1435                bodyMarkup += '</tr>';
1436              }
1437            }
1438          });
1439
1440          markup += headMarkup + bodyMarkup;
1441        }
1442      });
1443
1444      $stacktable.prepend($caption);
1445      $stacktable.append($(markup));
1446      $table.before($stacktable);
1447    });
1448  };
1449
1450 $.fn.stackcolumns = function(options) {
1451    var $tables = this,
1452        defaults = {},
1453        settings = $.extend({}, defaults, options);
1454
1455    return $tables.each(function() {
1456      var $table = $(this);
1457      var num_cols = $table.find('>thead>tr,>tbody>tr,>tfoot>tr').eq(0).find('>td,>th').length; //first table <tr> must not contain colspans, or add sum(colspan-1) here.
1458      if(num_cols<3) //stackcolumns has no effect on tables with less than 3 columns
1459        return;
1460
1461      var $stackcolumns = $('<table class="stacktable small-only"></table>');
1462      if (typeof settings.myClass !== 'undefined') $stackcolumns.addClass(settings.myClass);
1463      $table.addClass('stacktable large-only');
1464      var tb = $('<tbody></tbody>');
1465      var col_i = 1; //col index starts at 0 -> start copy at second column.
1466
1467      while (col_i < num_cols) {
1468        $table.find('>thead>tr,>tbody>tr,>tfoot>tr').each(function(index) {
1469          var tem = $('<tr></tr>'); // todo opt. copy styles of $this; todo check if parent is thead or tfoot to handle accordingly
1470          if(index === 0) tem.addClass("st-head-row st-head-row-main");
1471          var first = $(this).find('>td,>th').eq(0).clone().addClass("st-key");
1472          var target = col_i;
1473          // if colspan apply, recompute target for second cell.
1474          if ($(this).find("*[colspan]").length) {
1475            var i =0;
1476            $(this).find('>td,>th').each(function() {
1477                var cs = $(this).attr("colspan");
1478                if (cs) {
1479                  cs = parseInt(cs, 10);
1480                  target -= cs-1;
1481                  if ((i+cs) > (col_i)) //out of current bounds
1482                    target += i + cs - col_i -1;
1483                  i += cs;
1484                } else {
1485                  i++;
1486                }
1487
1488                if (i > col_i)
1489                  return false; //target is set; break.
1490            });
1491          }
1492          var second = $(this).find('>td,>th').eq(target).clone().addClass("st-val").removeAttr("colspan");
1493          tem.append(first, second);
1494          tb.append(tem);
1495        });
1496        ++col_i;
1497      }
1498
1499      $stackcolumns.append($(tb));
1500      $table.before($stackcolumns);
1501    });
1502  };
1503
1504}(jQuery));
1505
1506document.body.addEventListener("click", BodyClick);
1507
1508function BodyClick(event)
1509{	
1510	var target = event.target || event.srcElement;
1511	if(!target.classList.contains("clickable"))
1512	{
1513		var el = document.getElementsByClassName("level-01");
1514		for(i = 0; i<el.length; i++)
1515		{
1516			el[i].parentNode.classList.remove("active");
1517			el[i].classList.remove("show");
1518		}
1519		el = document.getElementsByClassName("level-02");
1520		for(i = 0; i<el.length; i++)
1521		{
1522			el[i].parentNode.classList.remove("active");
1523			el[i].classList.remove("show");
1524		}
1525		el = document.getElementsByClassName("ToggleBtn");
1526		for(i = 0; i<el.length; i++)
1527		{
1528			el[i].innerHTML = "+";
1529		}
1530	}	
1531}
1532
1533function HideChildLevels(el)
1534{
1535	for(var i = 0; i < el.children.length; i++)
1536	{
1537		el.children[i].lastElementChild.classList.remove("show");
1538	}
1539}
1540
1541function ToggleLevel01(el)
1542{
1543	var co = document.getElementsByClassName("level-01");
1544	if(co)
1545	{
1546		for(var i = 0; i < co.length; i++)
1547		{
1548			if(co[i] != el.nextElementSibling)
1549			{
1550				HideChildLevels(co[i]);
1551				co[i].parentNode.classList.remove("active");
1552				co[i].classList.remove("show");
1553			}			
1554		}
1555	}
1556
1557	var btns = document.getElementsByClassName("ToggleBtn");
1558	for(i = 0; i<btns.length; i++)
1559	{
1560		btns[i].innerHTML = "+";
1561	}
1562	
1563	if(el.nextElementSibling.classList.contains("show"))
1564	{
1565		el.parentNode.classList.remove("active");
1566		el.nextElementSibling.classList.remove("show");
1567	} else {
1568		el.parentNode.classList.add("active");
1569		el.nextElementSibling.classList.add("show");
1570	}
1571}
1572
1573function ToggleLevel02(el)
1574{
1575	var co = document.getElementsByClassName("level-02");
1576	if(co)
1577	{
1578		for(var i = 0; i < co.length; i++)
1579		{
1580			if(co[i] != el.nextElementSibling)
1581			{
1582				if(co[i].previousElementSibling.innerHTML == "-")
1583				{
1584					co[i].previousElementSibling.innerHTML = "+";
1585				}
1586				co[i].parentNode.classList.remove("active");
1587				co[i].classList.remove("show");
1588			}
1589		}
1590	}
1591
1592	if(el.nextElementSibling.classList.contains("show"))
1593	{
1594		el.parentNode.classList.remove("active");
1595		el.nextElementSibling.classList.remove("show");
1596		if(el.innerHTML == "-")
1597		{
1598			el.innerHTML = "+";
1599		}
1600	} else {
1601		el.parentNode.classList.add("active");
1602		el.nextElementSibling.classList.add("show");
1603		if(el.innerHTML == "+")
1604		{
1605			el.innerHTML = "-";
1606		}
1607	}
1608}
1609
1610// Polyfills
1611
1612// Source: https://gist.github.com/k-gun/c2ea7c49edf7b757fe9561ba37cb19ca
1613/**
1614 * Element.prototype.classList for IE8/9, Safari.
1615 * @author    Kerem Güneş <[email protected]>
1616 * @copyright Released under the MIT License <https://opensource.org/licenses/MIT>
1617 * @version   1.2
1618 * @see       https://developer.mozilla.org/en-US/docs/Web/API/Element/classList
1619 */
1620;(function() {
1621    // Helpers.
1622    var trim = function(s) {
1623            return s.replace(/^\s+|\s+$/g, '');
1624        },
1625        regExp = function(name) {
1626            return new RegExp('(^|\\s+)'+ name +'(\\s+|$)');
1627        },
1628        forEach = function(list, fn, scope) {
1629            for (var i = 0; i < list.length; i++) {
1630                fn.call(scope, list[i]);
1631            }
1632        };
1633
1634    // Class list object with basic methods.
1635    function ClassList(element) {
1636        this.element = element;
1637    }
1638
1639    ClassList.prototype = {
1640        add: function() {
1641            forEach(arguments, function(name) {
1642                if (!this.contains(name)) {
1643                    this.element.className = trim(this.element.className +' '+ name);
1644                }
1645            }, this);
1646        },
1647        remove: function() {
1648            forEach(arguments, function(name) {
1649                this.element.className = trim(this.element.className.replace(regExp(name), ' '));
1650            }, this);
1651        },
1652        toggle: function(name) {
1653            return this.contains(name) ? (this.remove(name), false) : (this.add(name), true);
1654        },
1655        contains: function(name) {
1656            return regExp(name).test(this.element.className);
1657        },
1658        item: function(i) {
1659            return this.element.className.split(/\s+/)[i] || null;
1660        },
1661        // bonus
1662        replace: function(oldName, newName) {
1663            this.remove(oldName), this.add(newName);
1664        }
1665    };
1666
1667    // IE8/9, Safari
1668    // Remove this if statements to override native classList.
1669    if (!('classList' in Element.prototype)) {
1670    // Use this if statement to override native classList that does not have for example replace() method.
1671    // See browser compatibility: https://developer.mozilla.org/en-US/docs/Web/API/Element/classList#Browser_compatibility.
1672    // if (!('classList' in Element.prototype) ||
1673    //     !('classList' in Element.prototype && Element.prototype.classList.replace)) {
1674        Object.defineProperty(Element.prototype, 'classList', {
1675            get: function() {
1676                return new ClassList(this);
1677            }
1678        });
1679    }
1680
1681    // For others replace() support.
1682    if (window.DOMTokenList && !DOMTokenList.prototype.replace) {
1683        DOMTokenList.prototype.replace = ClassList.prototype.replace;
1684    }
1685})();
1686/*!
1687* jQuery Cookie Plugin v1.4.0
1688* https://github.com/carhartl/jquery-cookie
1689*
1690* Copyright 2013 Klaus Hartl
1691* Released under the MIT license
1692*/(function(factory){if(typeof define==='function'&&define.amd){define(['jquery'],factory);}else{factory(jQuery);}}(function($){var pluses=/\+/g;function encode(s){return config.raw?s:encodeURIComponent(s);}
1693function decode(s){return config.raw?s:decodeURIComponent(s);}
1694function stringifyCookieValue(value){return encode(config.json?JSON.stringify(value):String(value));}
1695function parseCookieValue(s){if(s.indexOf('"')===0){s=s.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,'\\');}
1696try{s=decodeURIComponent(s.replace(pluses,' '));return config.json?JSON.parse(s):s;}catch(e){}}
1697function read(s,converter){var value=config.raw?s:parseCookieValue(s);return $.isFunction(converter)?converter(value):value;}
1698var config=$.cookie=function(key,value,options){if(value!==undefined&&!$.isFunction(value)){options=$.extend({},config.defaults,options);if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setTime(+t+days*864e+5);}
1699return(document.cookie=[encode(key),'=',stringifyCookieValue(value),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''));}
1700var result=key?undefined:{};var cookies=document.cookie?document.cookie.split('; '):[];for(var i=0,l=cookies.length;i<l;i++){var parts=cookies[i].split('=');var name=decode(parts.shift());var cookie=parts.join('=');if(key&&key===name){result=read(cookie,value);break;}
1701if(!key&&(cookie=read(cookie))!==undefined){result[name]=cookie;}}
1702return result;};config.defaults={};$.removeCookie=function(key,options){if($.cookie(key)===undefined){return false;}
1703$.cookie(key,'',$.extend({},options,{expires:-1}));return!$.cookie(key);};}));
1704document.addEventListener('DOMContentLoaded', () => {
1705  // Select the target element
1706  const element = document.querySelector('.cookie-notice .cn-body');
1707
1708  // Safety check: Only proceed if the element actually exists in the DOM
1709  if (element) {
1710    const heading = document.createElement('h2');
1711    heading.textContent = 'Wir verwenden Cookies';
1712
1713    // Insert the heading as the first child of the element
1714    element.insertAdjacentElement('afterbegin', heading);
1715  }
1716});
1717
1718
1719(function ($) {
1720
1721	'use strict';
1722
1723	$.fn.firstVisitPopup = function (settings) {
1724
1725		var $body = $('body');
1726		var $dialog = $(this);
1727		var $blackout;
1728		var setCookie = function (name, value) {
1729			var date = new Date(),
1730				expires = 'expires=';
1731			date.setTime(date.getTime() + 1);
1732			expires += date.toGMTString();
1733			document.cookie = name + '=' + value + '; ' + expires + '; path=/';
1734		}
1735		var getCookie = function (name) {
1736			var allCookies = document.cookie.split(';'),
1737				cookieCounter = 0,
1738				currentCookie = '';
1739			for (cookieCounter = 0; cookieCounter < allCookies.length; cookieCounter++) {
1740				currentCookie = allCookies[cookieCounter];
1741				while (currentCookie.charAt(0) === ' ') {
1742					currentCookie = currentCookie.substring(1, currentCookie.length);
1743				}
1744				if (currentCookie.indexOf(name + '=') === 0) {
1745					return currentCookie.substring(name.length + 1, currentCookie.length);
1746				}
1747			}
1748			return false;
1749		}
1750		var showMessage = function () {
1751			$blackout.show();
1752			$dialog.show();
1753		}
1754		var hideMessage = function () {
1755			$blackout.hide();
1756			$dialog.hide();
1757			setCookie('fvpp' + settings.cookieName, 'true');
1758		}
1759
1760		$body.append('<div id="fvpp-blackout"></div>');
1761		$dialog.append('<a id="fvpp-close">X</a>');
1762		$blackout = $('#fvpp-blackout');
1763
1764		if (getCookie('fvpp' + settings.cookieName)) {
1765			hideMessage();
1766		} else {
1767			showMessage();
1768		}
1769
1770		$(settings.showAgainSelector).on('click', showMessage);
1771		$body.on('click', '#fvpp-blackout, #fvpp-close', hideMessage);
1772
1773	};
1774
1775})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.