PageSourceSearch

https://www.grandannecy.fr/typo3conf/ext/cim_package_grandannecy/R…/section_recherche.min.js?1684912717

js grandannecy.fr collected 2026-09-24 10:06:15 UTC 25,993 bytes, 299 lines download raw bytes

1/*************************************************************************/
2/****************** MOTEUR DE RECHERCHE SENSATION POPIN ******************/
3/*************************************************************************/
4
5	$(document).bind('_js_ready', function(evt) {
6
7
8		/*** GESTION DE LA NAVIGATION AU CLAVIER ***/
9
10			// Gestion tabindex des liens de suggestion
11			let suggestions = $('#suggestions a');
12			function remove_tabindex() { suggestions.removeAttr('tabindex'); }
13			function add_tabindex() { suggestions.attr('tabindex', '-1'); }
14
15			// Piege au focus dans le sensation popin
16			let focused_elt = function(elem) {
17
18				// @INT : liste des éléments tabulables a adapter selon stucture html. Attention à l'ordre des éléments.
19				let tabbable;
20
21				if ($("#show_more_results").is(':visible')) {
22					tabbable = elem.find('#main_search, #bouton_recherche, button, #autocomplete_results ul, #autocomplete_results ul .ui-menu-item a, #show_more_results a, .close-button').filter(':visible');
23				} else {
24					tabbable = elem.find('#main_search, #bouton_recherche, button, .ui-menu-item a, .close-button').filter(':visible');
25				}
26
27
28				let firstTabbable = tabbable.first();
29				let lastTabbable = tabbable.last();
30
31				/* Tabulation sur le dernier element renvoie au premier */
32				lastTabbable.one('keydown', function (e) {
33				   if ((e.which === 9 && !e.shiftKey)) {
34					   e.preventDefault();
35					   firstTabbable.focus();
36					   console.log("to first");
37				   }
38				});
39
40				/* Tabulation inverse sur le premier element renvoie au dernier */
41				firstTabbable.one('keydown', function (e) {
42					if ((e.which === 9 && e.shiftKey)) {
43						e.preventDefault();
44						lastTabbable.focus();
45						console.log("to last");
46					}
47				});
48
49				tabbable.keyup(function(e) {
50					if (e.key === "Escape") {
51						close_bandeau();
52				   }
53			   	});
54			};
55
56		/*** GESTION DE LA SENSATION POPIN / ASPIRATION / ANIMATION ***/
57			// Ajout des infos sensation full screen // Zone moteur dans bandeau image
58			let isKeyUp = false;
59
60			// Moteur recherche bandeau home
61			let bandeau_reset = function () {
62				$("#home .search_area_cont .close-button").on("click",function() {
63					close_bandeau();
64				});
65			};
66
67			let close_bandeau = function () {
68				$("#home .search_area_cont").removeClass("is_search");
69				// $("#home #header").removeClass("open_search");
70				$("#home .search_area_cont #main_search").val('');
71				$('body').removeClass('overflow is-reveal-open');
72				$('main').css('z-index','1');
73				isKeyUp = false;
74				$("#show_more_results").addClass('hide');
75				add_tabindex();
76			}
77
78			let	bandeau_keyup = function() {
79				$("#home .search_area_cont #main_search").keyup(function(evt) {
80					let alreadyFocus = false;
81					if(evt.keyCode != 9 && evt.keyCode != 16){ // BUGFIX do not open sensation popin=when using tabulation
82						if (isKeyUp != true) {
83							$("#home .search_area_cont").addClass("is_search");
84							// $("#home #header").addClass("open_search");
85							$('body').addClass('overflow is-reveal-open');
86							$('main').css('z-index','1006');
87							$("#search_area_cont_append .titre_bloc").attr("aria-level", "2");
88							$("#search_area_cont_append .titre_suggestions").attr("aria-level", "3");
89							bandeau_reset();
90							$("#home .bandeau_page .search_area_cont #main_search").keyup(function(e) {
91								if (e.key === "Escape") {
92									close_bandeau();
93							   }
94						   });
95							remove_tabindex();
96							$(".search_area_cont.is_search #main_search").on("focusout",function() {
97								focused_elt($('#zone_moteur'));
98							});
99							isKeyUp = true;
100						}
101					}
102				});
103			};
104			bandeau_keyup();
105
106			// Popin recherche
107			let popin_reset = function () {
108				$("#popin_recherche .wrap_popin .close-button").on("click",function() {
109					$("#popin_recherche .wrap_popin").removeClass("is_search");
110					$("#popin_recherche #main_search").val('');
111					$('body').removeClass('is-reveal-open');
112					isKeyUp = false;
113					add_tabindex();
114				});
115			};
116
117			let popin_keyup = function() {
118				$("#popin_recherche #main_search").keyup(function() {
119					if (isKeyUp != true) {
120						$("#popin_recherche .wrap_popin").addClass("is_search");
121						$('body').addClass('is-reveal-open');
122						popin_reset();
123						isKeyUp = true;
124					}
125				});
126			};
127
128			let placeholder_moteur = $('#home #zone_moteur #main_search').placeholderTypewriter({
129				delay: 50,
130				pause: 1500,
131				text: [
132					"Que recherchez-vous ?",
133					"Un service ?",
134					"Une information ?"
135				]
136			});
137			placeholder_moteur.init();
138
139		// Gestion aspiration du moteur / popin recherche
140			let popin_home_search = $("#popin_recherche.home_search"),
141				popin_page_search = $("#popin_recherche.page_search");
142
143			// Gestion popin recherche sur la home
144			popin_home_search.on("open.zf.reveal",function(){
145				deleteAutocomplete();
146				remove_tabindex();
147
148				placeholder_moteur.destroy();
149				let search_html = $("#search_area_cont_append").html();
150				$("#zone_moteur #search_area_cont_append *").remove();
151				$("#popin_recherche.home_search .wrap_popin .content").html(search_html);
152				$("#popin_recherche.home_search .titre_bloc").attr("aria-level", "1");
153				$("#popin_recherche.home_search .titre_suggestions").attr("aria-level", "2");
154				bandeau_reset();
155				popin_keyup();
156
157				let placeholder_home_popin = $('#popin_recherche.home_search #main_search').placeholderTypewriter({
158				  delay: 50,
159				  pause: 1500,
160				  text: [
161				    "Je recherche ...",
162				    "Un service ?",
163				    "Une information ?"
164				  ]
165				});
166				placeholder_home_popin.init();
167				$("#main_search").on("focusout",function() {
168					focused_elt($('#popin_recherche .wrap_popin'));
169				});
170
171				bindRecognition();
172				bindAutocomplete();
173				$(".search_area_cont #main_search").on("focusout",function() {
174					focused_elt($('#popin_recherche'));
175				});
176			});
177
178			popin_home_search.on("closed.zf.reveal",function(){
179				deleteAutocomplete();
180				add_tabindex();
181
182				let popin_search_html = $("#popin_recherche.home_search .wrap_popin .content").html();
183				$("#popin_recherche.home_search .wrap_popin .content > *").remove();
184				$("#zone_moteur #search_area_cont_append").html(popin_search_html);
185
186				$("#popin_recherche.home_search .titre_bloc").attr("aria-level", "2");
187				$("#popin_recherche.home_search .titre_suggestions").attr("aria-level", "3");
188
189				popin_reset();
190				bandeau_keyup();
191
192				let placeholder_moteur_2 = $('#home #zone_moteur #main_search').placeholderTypewriter({
193				  delay: 50,
194				  pause: 1500,
195				  text: [
196					"Je recherche ...",
197					"Un service ?",
198					"Une information ?"
199				  ]
200				});
201				placeholder_moteur_2.init();
202
203				bindRecognition();
204				bindAutocomplete();
205			});
206
207		// Gestion popin recherche sur les autres pages
208			let placeholder_popin = $('#popin_recherche #main_search').placeholderTypewriter({
209				delay: 50,
210				pause: 1500,
211				text: [
212					"Que recherchez-vous ?",
213					"Un service ?",
214					"Une information ?"
215				]
216			});
217
218		popin_page_search.on("open.zf.reveal",function(){
219			remove_tabindex();
220			placeholder_popin.init();
221
222			$("#main_search").on("focusout",function() {
223				focused_elt($('#popin_recherche .wrap_popin'));
224			});
225		});
226
227		popin_page_search.on("closed.zf.reveal",function(){
228			placeholder_popin.destroy();
229			add_tabindex();
230		});
231
232		// On ferme la sensation recherche quand le header devient sticky
233		// let header = $("#data-sticky-header");
234		// header.on("sticky.zf.stuckto:top",function(){
235		// 	$("#home .search_area_cont").removeClass("is_search");
236		// 	$("#home #header").removeClass("open_search");
237		// });
238
239		if (Foundation.MediaQuery.current == "small" || Foundation.MediaQuery.current == "medium") {
240			let popin_search = $("#popin_recherche");
241			popin_search.on("open.zf.reveal",function(){
242				$('#offCanvasLeft').foundation('close');
243			});
244		}
245
246	});
247
248
249/*************************************************************************/
250/************************ RECONNAISSANCE VOCALE **************************/
251/*************************************************************************/
252
253	let SpeechRecognition, recognition;
254	let bindRecognition = function() {
255		$("button.vocal").on('click',function(){
256			recognition.abort()
257			$(".search_area_cont #main_search").trigger('keyup');
258			$("button.vocal").addClass("vocalRecognitionOn");
259			recognition.start();
260			recognition.onresult = function(event) {
261				for (i = event.resultIndex; i < event.results.length; i++) {
262					$("#main_search, #main_search_elastic").val(event.results[i][0].transcript);
263					$("#main_search, #main_search_elastic").focus();
264					$("#searchEngineForm").submit();
265					$("#main_search").autocomplete('search');
266				}
267			}
268			recognition.onspeechend = function() {
269				recognition.stop();
270				$("#main_search").autocomplete('search');
271				$("button.vocal").removeClass("vocalRecognitionOn");
272			}
273			recognition.onerror = function(event) {
274				if (event.error=="not-allowed")
275				{
276					alert("Vous n'avez pas autorisé l'utilisation du micro !");
277				}
278				console.log('Error occurred in recognition: ' + event.error);
279				$("button.vocal").removeClass("vocalRecognitionOn");
280			}
281		});
282	}
283
284	$(document).bind('_js_ready', function() {
285		try {
286			//Try to define SpeechRecognition
287			SpeechRecognition = (window.SpeechRecognition || window.webkitSpeechRecognition);
288			recognition = new SpeechRecognition();
289			recognition.lang = 'fr-FR';
290			recognition.interimResults=true;
291			bindRecognition();
292		} catch (e) {
293			// if no SpeechRecognition API delete mic icon from display
294			$("button.vocal").remove();
295			$("#bouton_recherche").addClass("noVocalRecognition");
296		}
297	});
298
299//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJhc3NldHNfc2l0ZV9jb3JlL2pzL21vZHVsZXMvcmVjaGVyY2hlL3NlY3Rpb25fcmVjaGVyY2hlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4vKioqKioqKioqKioqKioqKioqIE1PVEVVUiBERSBSRUNIRVJDSEUgU0VOU0FUSU9OIFBPUElOICoqKioqKioqKioqKioqKioqKi9cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdCQoZG9jdW1lbnQpLmJpbmQoJ19qc19yZWFkeScsIGZ1bmN0aW9uKGV2dCkge1xyXG5cclxuXHJcblx0XHQvKioqIEdFU1RJT04gREUgTEEgTkFWSUdBVElPTiBBVSBDTEFWSUVSICoqKi9cclxuXHJcblx0XHRcdC8vIEdlc3Rpb24gdGFiaW5kZXggZGVzIGxpZW5zIGRlIHN1Z2dlc3Rpb25cclxuXHRcdFx0bGV0IHN1Z2dlc3Rpb25zID0gJCgnI3N1Z2dlc3Rpb25zIGEnKTtcclxuXHRcdFx0ZnVuY3Rpb24gcmVtb3ZlX3RhYmluZGV4KCkgeyBzdWdnZXN0aW9ucy5yZW1vdmVBdHRyKCd0YWJpbmRleCcpOyB9XHJcblx0XHRcdGZ1bmN0aW9uIGFkZF90YWJpbmRleCgpIHsgc3VnZ2VzdGlvbnMuYXR0cigndGFiaW5kZXgnLCAnLTEnKTsgfVxyXG5cclxuXHRcdFx0Ly8gUGllZ2UgYXUgZm9jdXMgZGFucyBsZSBzZW5zYXRpb24gcG9waW5cclxuXHRcdFx0bGV0IGZvY3VzZWRfZWx0ID0gZnVuY3Rpb24oZWxlbSkge1xyXG5cclxuXHRcdFx0XHQvLyBASU5UIDogbGlzdGUgZGVzIMOpbMOpbWVudHMgdGFidWxhYmxlcyBhIGFkYXB0ZXIgc2Vsb24gc3R1Y3R1cmUgaHRtbC4gQXR0ZW50aW9uIMOgIGwnb3JkcmUgZGVzIMOpbMOpbWVudHMuXHJcblx0XHRcdFx0bGV0IHRhYmJhYmxlO1xyXG5cclxuXHRcdFx0XHRpZiAoJChcIiNzaG93X21vcmVfcmVzdWx0c1wiKS5pcygnOnZpc2libGUnKSkge1xyXG5cdFx0XHRcdFx0dGFiYmFibGUgPSBlbGVtLmZpbmQoJyNtYWluX3NlYXJjaCwgI2JvdXRvbl9yZWNoZXJjaGUsIGJ1dHRvbiwgI2F1dG9jb21wbGV0ZV9yZXN1bHRzIHVsLCAjYXV0b2NvbXBsZXRlX3Jlc3VsdHMgdWwgLnVpLW1lbnUtaXRlbSBhLCAjc2hvd19tb3JlX3Jlc3VsdHMgYSwgLmNsb3NlLWJ1dHRvbicpLmZpbHRlcignOnZpc2libGUnKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGFiYmFibGUgPSBlbGVtLmZpbmQoJyNtYWluX3NlYXJjaCwgI2JvdXRvbl9yZWNoZXJjaGUsIGJ1dHRvbiwgLnVpLW1lbnUtaXRlbSBhLCAuY2xvc2UtYnV0dG9uJykuZmlsdGVyKCc6dmlzaWJsZScpO1xyXG5cdFx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHRcdGxldCBmaXJzdFRhYmJhYmxlID0gdGFiYmFibGUuZmlyc3QoKTtcclxuXHRcdFx0XHRsZXQgbGFzdFRhYmJhYmxlID0gdGFiYmFibGUubGFzdCgpO1xyXG5cclxuXHRcdFx0XHQvKiBUYWJ1bGF0aW9uIHN1ciBsZSBkZXJuaWVyIGVsZW1lbnQgcmVudm9pZSBhdSBwcmVtaWVyICovXHJcblx0XHRcdFx0bGFzdF
299RhYmJhYmxlLm9uZSgna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XHJcblx0XHRcdFx0ICAgaWYgKChlLndoaWNoID09PSA5ICYmICFlLnNoaWZ0S2V5KSkge1xyXG5cdFx0XHRcdFx0ICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0ICAgZmlyc3RUYWJiYWJsZS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0ICAgY29uc29sZS5sb2coXCJ0byBmaXJzdFwiKTtcclxuXHRcdFx0XHQgICB9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIFRhYnVsYXRpb24gaW52ZXJzZSBzdXIgbGUgcHJlbWllciBlbGVtZW50IHJlbnZvaWUgYXUgZGVybmllciAqL1xyXG5cdFx0XHRcdGZpcnN0VGFiYmFibGUub25lKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRcdGlmICgoZS53aGljaCA9PT0gOSAmJiBlLnNoaWZ0S2V5KSkge1xyXG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHRcdGxhc3RUYWJiYWJsZS5mb2N1cygpO1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInRvIGxhc3RcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdHRhYmJhYmxlLmtleXVwKGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRcdGlmIChlLmtleSA9PT0gXCJFc2NhcGVcIikge1xyXG5cdFx0XHRcdFx0XHRjbG9zZV9iYW5kZWF1KCk7XHJcblx0XHRcdFx0ICAgfVxyXG5cdFx0XHQgICBcdH0pO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdC8qKiogR0VTVElPTiBERSBMQSBTRU5TQVRJT04gUE9QSU4gLyBBU1BJUkFUSU9OIC8gQU5JTUFUSU9OICoqKi9cclxuXHRcdFx0Ly8gQWpvdXQgZGVzIGluZm9zIHNlbnNhdGlvbiBmdWxsIHNjcmVlbiAvLyBab25lIG1vdGV1ciBkYW5zIGJhbmRlYXUgaW1hZ2VcclxuXHRcdFx0bGV0IGlzS2V5VXAgPSBmYWxzZTtcclxuXHJcblx0XHRcdC8vIE1vdGV1ciByZWNoZXJjaGUgYmFuZGVhdSBob21lXHJcblx0XHRcdGxldCBiYW5kZWF1X3Jlc2V0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdCQoXCIjaG9tZSAuc2VhcmNoX2FyZWFfY29udCAuY2xvc2UtYnV0dG9uXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGNsb3NlX2JhbmRlYXUoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdGxldCBjbG9zZV9iYW5kZWF1ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdCQoXCIjaG9tZSAuc2VhcmNoX2FyZWFfY29udFwiKS5yZW1vdmVDbGFzcyhcImlzX3NlYXJjaFwiKTtcclxuXHRcdFx0XHQvLyAkKFwiI2hvbWUgI2hlYWRlclwiKS5yZW1vdmVDbGFzcyhcIm9wZW5fc2VhcmNoXCIpO1xyXG5cdFx0XHRcdCQoXCIjaG9tZSAuc2VhcmNoX2FyZWFfY29udCAjbWFpbl9zZWFyY2hcIikudmFsKCcnKTtcclxuXHRcdFx0XHQkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ292ZXJmbG93IGlzLXJldmVhbC1vcGVuJyk7XHJcblx0XHRcdFx0JCgnbWFpbicpLmNzcygnei1pbmRleCcsJzEnKTtcclxuXHRcdFx0XHRpc0tleVVwID0gZmFsc2U7XHJcblx0XHRcdFx0JChcIiNzaG93X21vcmVfcmVzdWx0c1wiKS5hZGRDbGFzcygnaGlkZScpO1xyXG5cdFx0XHRcdGFkZF90YWJpbmRleCgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXRcdGJhbmRlYXVfa2V5dXAgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHQkKFwiI2hvbWUgLnNlYXJjaF9hcmVhX2NvbnQgI21haW5fc2VhcmNoXCIpLmtleXVwKGZ1bmN0aW9uKGV2dCkge1xyXG5cdFx0XHRcdFx0bGV0IGFscmVhZHlGb2N1cyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0aWYoZXZ0LmtleUNvZGUgIT0gOSAmJiBldnQua2V5Q29kZSAhPSAxNil7IC8vIEJVR0ZJWCBkbyBub3Qgb3BlbiBzZW5zYXRpb24gcG9waW49d2hlbiB1c2luZyB0YWJ1bGF0aW9uXHJcblx0XHRcdFx0XHRcdGlmIChpc0tleVVwICE9IHRydWUpIHtcclxuXHRcdFx0XHRcdFx0XHQkKFwiI2hvbWUgLnNlYXJjaF9hcmVhX2NvbnRcIikuYWRkQ2xhc3MoXCJpc19zZWFyY2hcIik7XHJcblx0XHRcdFx0XHRcdFx0Ly8gJChcIiNob21lICNoZWFkZXJcIikuYWRkQ2xhc3MoXCJvcGVuX3NlYXJjaFwiKTtcclxuXHRcdFx0XHRcdFx0XHQkKCdib2R5JykuYWRkQ2xhc3MoJ292ZXJmbG93IGlzLXJldmVhbC1vcGVuJyk7XHJcblx0XHRcdFx0XHRcdFx0JCgnbWFpbicpLmNzcygnei1pbmRleCcsJzEwMDYnKTtcclxuXHRcdFx0XHRcdFx0XHQkKFwiI3NlYXJjaF9hcmVhX2NvbnRfYXBwZW5kIC50aXRyZV9ibG9jXCIpLmF0dHIoXCJhcmlhLWxldmVsXCIsIFwiMlwiKTtcclxuXHRcdFx0XHRcdFx0XHQkKFwiI3NlYXJjaF9hcmVhX2NvbnRfYXBwZW5kIC50aXRyZV9zdWdnZXN0aW9uc1wiKS5hdHRyKFwiYXJpYS1sZXZlbFwiLCBcIjNcIik7XHJcblx0XHRcdFx0XHRcdFx0YmFuZGVhdV9yZXNldCgpO1xyXG5cdFx0XHRcdFx0XHRcdCQoXCIjaG9tZSAuYmFuZGVhdV9wYWdlIC5zZWFyY2hfYXJlYV9jb250ICNtYWluX3NlYXJjaFwiKS5rZXl1cChmdW5jdGlvbihlKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VfYmFuZGVhdSgpO1xyXG5cdFx0XHRcdFx0XHRcdCAgIH1cclxuXHRcdFx0XHRcdFx0ICAgfSk7XHJcblx0XHRcdFx0XHRcdFx0cmVtb3ZlX3RhYmluZGV4KCk7XHJcblx0XHRcdFx0XHRcdFx0JChcIi5zZWFyY2hfYXJlYV9jb250LmlzX3NlYXJjaCAjbWFpbl9zZWFyY2hcIikub24oXCJmb2N1c291dFwiLGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9jdXNlZF9lbHQoJCgnI3pvbmVfbW90ZXVyJykpO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdGlzS2V5VXAgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH07XHJcblx0XHRcdGJhbmRlYXVfa2V5dXAoKTtcclxuXHJcblx0XHRcdC8vIFBvcGluIHJlY2hlcmNoZVxyXG5cdFx0XHRsZXQgcG9waW5fcmVzZXQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0JChcIiNwb3Bpbl9yZWNoZXJjaGUgLndyYXBfcG9waW4gLmNsb3NlLWJ1dHRvblwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZSAud3JhcF9wb3BpblwiKS5yZW1vdmVDbGFzcyhcImlzX3NlYXJjaFwiKTtcclxuXHRcdFx0XHRcdCQoXCIjcG9waW5fcmVjaGVyY2hlICNtYWluX3NlYXJjaFwiKS52YWwoJycpO1xyXG5cdFx0XHRcdFx0JCgnYm9keScpLnJlbW92ZUNsYXNzKCdpcy1yZXZlYWwtb3BlbicpO1xyXG5cdFx0XHRcdFx0aXNLZXlVcCA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0YWRkX3RhYmluZGV4KCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRsZXQgcG9waW5fa2V5dXAgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZSAjbWFpbl9zZWFyY2hcIikua2V5dXAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRpZiAoaXNLZXlVcCAhPSB0cnVlKSB7XHJcblx0XHRcdFx0XHRcdCQoXCIjcG9waW5fcmVjaGVyY2hlIC53cmFwX3BvcGluXCIpLmFkZENsYXNzKFwiaXNfc2VhcmNoXCIpO1xyXG5cdFx0XHRcdFx0XHQkKCdib2R5JykuYWRkQ2xhc3MoJ2lzLXJldmVhbC1vcGVuJyk7XHJcblx0XHRcdFx0XHRcdHBvcGluX3Jlc2V0KCk7XHJcblx0XHRcdFx0XHRcdGlzS2V5VXAgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0bGV0IHBsYWNlaG9sZG
299VyX21vdGV1ciA9ICQoJyNob21lICN6b25lX21vdGV1ciAjbWFpbl9zZWFyY2gnKS5wbGFjZWhvbGRlclR5cGV3cml0ZXIoe1xyXG5cdFx0XHRcdGRlbGF5OiA1MCxcclxuXHRcdFx0XHRwYXVzZTogMTUwMCxcclxuXHRcdFx0XHR0ZXh0OiBbXHJcblx0XHRcdFx0XHRcIlF1ZSByZWNoZXJjaGV6LXZvdXMgP1wiLFxyXG5cdFx0XHRcdFx0XCJVbiBzZXJ2aWNlID9cIixcclxuXHRcdFx0XHRcdFwiVW5lIGluZm9ybWF0aW9uID9cIlxyXG5cdFx0XHRcdF1cclxuXHRcdFx0fSk7XHJcblx0XHRcdHBsYWNlaG9sZGVyX21vdGV1ci5pbml0KCk7XHJcblxyXG5cdFx0Ly8gR2VzdGlvbiBhc3BpcmF0aW9uIGR1IG1vdGV1ciAvIHBvcGluIHJlY2hlcmNoZVxyXG5cdFx0XHRsZXQgcG9waW5faG9tZV9zZWFyY2ggPSAkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaFwiKSxcclxuXHRcdFx0XHRwb3Bpbl9wYWdlX3NlYXJjaCA9ICQoXCIjcG9waW5fcmVjaGVyY2hlLnBhZ2Vfc2VhcmNoXCIpO1xyXG5cclxuXHRcdFx0Ly8gR2VzdGlvbiBwb3BpbiByZWNoZXJjaGUgc3VyIGxhIGhvbWVcclxuXHRcdFx0cG9waW5faG9tZV9zZWFyY2gub24oXCJvcGVuLnpmLnJldmVhbFwiLGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0ZGVsZXRlQXV0b2NvbXBsZXRlKCk7XHJcblx0XHRcdFx0cmVtb3ZlX3RhYmluZGV4KCk7XHJcblxyXG5cdFx0XHRcdHBsYWNlaG9sZGVyX21vdGV1ci5kZXN0cm95KCk7XHJcblx0XHRcdFx0bGV0IHNlYXJjaF9odG1sID0gJChcIiNzZWFyY2hfYXJlYV9jb250X2FwcGVuZFwiKS5odG1sKCk7XHJcblx0XHRcdFx0JChcIiN6b25lX21vdGV1ciAjc2VhcmNoX2FyZWFfY29udF9hcHBlbmQgKlwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaCAud3JhcF9wb3BpbiAuY29udGVudFwiKS5odG1sKHNlYXJjaF9odG1sKTtcclxuXHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaCAudGl0cmVfYmxvY1wiKS5hdHRyKFwiYXJpYS1sZXZlbFwiLCBcIjFcIik7XHJcblx0XHRcdFx0JChcIiNwb3Bpbl9yZWNoZXJjaGUuaG9tZV9zZWFyY2ggLnRpdHJlX3N1Z2dlc3Rpb25zXCIpLmF0dHIoXCJhcmlhLWxldmVsXCIsIFwiMlwiKTtcclxuXHRcdFx0XHRiYW5kZWF1X3Jlc2V0KCk7XHJcblx0XHRcdFx0cG9waW5fa2V5dXAoKTtcclxuXHJcblx0XHRcdFx0bGV0IHBsYWNlaG9sZGVyX2hvbWVfcG9waW4gPSAkKCcjcG9waW5fcmVjaGVyY2hlLmhvbWVfc2VhcmNoICNtYWluX3NlYXJjaCcpLnBsYWNlaG9sZGVyVHlwZXdyaXRlcih7XHJcblx0XHRcdFx0ICBkZWxheTogNTAsXHJcblx0XHRcdFx0ICBwYXVzZTogMTUwMCxcclxuXHRcdFx0XHQgIHRleHQ6IFtcclxuXHRcdFx0XHQgICAgXCJKZSByZWNoZXJjaGUgLi4uXCIsXHJcblx0XHRcdFx0ICAgIFwiVW4gc2VydmljZSA/XCIsXHJcblx0XHRcdFx0ICAgIFwiVW5lIGluZm9ybWF0aW9uID9cIlxyXG5cdFx0XHRcdCAgXVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHBsYWNlaG9sZGVyX2hvbWVfcG9waW4uaW5pdCgpO1xyXG5cdFx0XHRcdCQoXCIjbWFpbl9zZWFyY2hcIikub24oXCJmb2N1c291dFwiLGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0Zm9jdXNlZF9lbHQoJCgnI3BvcGluX3JlY2hlcmNoZSAud3JhcF9wb3BpbicpKTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0YmluZFJlY29nbml0aW9uKCk7XHJcblx0XHRcdFx0YmluZEF1dG9jb21wbGV0ZSgpO1xyXG5cdFx0XHRcdCQoXCIuc2VhcmNoX2FyZWFfY29udCAjbWFpbl9zZWFyY2hcIikub24oXCJmb2N1c291dFwiLGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0Zm9jdXNlZF9lbHQoJCgnI3BvcGluX3JlY2hlcmNoZScpKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRwb3Bpbl9ob21lX3NlYXJjaC5vbihcImNsb3NlZC56Zi5yZXZlYWxcIixmdW5jdGlvbigpe1xyXG5cdFx0XHRcdGRlbGV0ZUF1dG9jb21wbGV0ZSgpO1xyXG5cdFx0XHRcdGFkZF90YWJpbmRleCgpO1xyXG5cclxuXHRcdFx0XHRsZXQgcG9waW5fc2VhcmNoX2h0bWwgPSAkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaCAud3JhcF9wb3BpbiAuY29udGVudFwiKS5odG1sKCk7XHJcblx0XHRcdFx0JChcIiNwb3Bpbl9yZWNoZXJjaGUuaG9tZV9zZWFyY2ggLndyYXBfcG9waW4gLmNvbnRlbnQgPiAqXCIpLnJlbW92ZSgpO1xyXG5cdFx0XHRcdCQoXCIjem9uZV9tb3RldXIgI3NlYXJjaF9hcmVhX2NvbnRfYXBwZW5kXCIpLmh0bWwocG9waW5fc2VhcmNoX2h0bWwpO1xyXG5cclxuXHRcdFx0XHQkKFwiI3BvcGluX3JlY2hlcmNoZS5ob21lX3NlYXJjaCAudGl0cmVfYmxvY1wiKS5hdHRyKFwiYXJpYS1sZXZlbFwiLCBcIjJcIik7XHJcblx0XHRcdFx0JChcIiNwb3Bpbl9yZWNoZXJjaGUuaG9tZV9zZWFyY2ggLnRpdHJlX3N1Z2dlc3Rpb25zXCIpLmF0dHIoXCJhcmlhLWxldmVsXCIsIFwiM1wiKTtcclxuXHJcblx0XHRcdFx0cG9waW5fcmVzZXQoKTtcclxuXHRcdFx0XHRiYW5kZWF1X2tleXVwKCk7XHJcblxyXG5cdFx0XHRcdGxldCBwbGFjZWhvbGRlcl9tb3RldXJfMiA9ICQoJyNob21lICN6b25lX21vdGV1ciAjbWFpbl9zZWFyY2gnKS5wbGFjZWhvbGRlclR5cGV3cml0ZXIoe1xyXG5cdFx0XHRcdCAgZGVsYXk6IDUwLFxyXG5cdFx0XHRcdCAgcGF1c2U6IDE1MDAsXHJcblx0XHRcdFx0ICB0ZXh0OiBbXHJcblx0XHRcdFx0XHRcIkplIHJlY2hlcmNoZSAuLi5cIixcclxuXHRcdFx0XHRcdFwiVW4gc2VydmljZSA/XCIsXHJcblx0XHRcdFx0XHRcIlVuZSBpbmZvcm1hdGlvbiA/XCJcclxuXHRcdFx0XHQgIF1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRwbGFjZWhvbGRlcl9tb3RldXJfMi5pbml0KCk7XHJcblxyXG5cdFx0XHRcdGJpbmRSZWNvZ25pdGlvbigpO1xyXG5cdFx0XHRcdGJpbmRBdXRvY29tcGxldGUoKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0Ly8gR2VzdGlvbiBwb3BpbiByZWNoZXJjaGUgc3VyIGxlcyBhdXRyZXMgcGFnZXNcclxuXHRcdFx0bGV0IHBsYWNlaG9sZGVyX3BvcGluID0gJCgnI3BvcGluX3JlY2hlcmNoZSAjbWFpbl9zZWFyY2gnKS5wbGFjZWhvbGRlclR5cGV3cml0ZXIoe1xyXG5cdFx0XHRcdGRlbGF5OiA1MCxcclxuXHRcdFx0XHRwYXVzZTogMTUwMCxcclxuXHRcdFx0XHR0ZXh0OiBbXHJcblx0XHRcdFx0XHRcIlF1ZSByZWNoZXJjaGV6LXZvdXMgP1wiLFxyXG5cdFx0XHRcdFx0XCJVbiBzZXJ2aWNlID9cIixcclxuXHRcdFx0XHRcdFwiVW5lIGluZm9ybWF0aW9uID9cIlxyXG5cdFx0XHRcdF1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0cG9waW5fcGFnZV9zZWFyY2gub24oXCJvcGVuLnpmLnJldmVhbFwiLGZ1bmN0aW9uKCl7XHJcblx0XHRcdHJlbW92ZV90YWJpbmRleCgpO1xyXG5cdFx0XHRwbGFjZWhvbGRlcl9wb3Bpbi5pbml0KCk7XHJcblxyXG5cdFx0XHQkKFwiI21haW5fc2VhcmNoXCIpLm9uKFwiZm9jdXNvdXRcIixmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRmb2N1c2VkX2VsdCgkKCcjcG9waW5fcmVjaGVyY2hlIC53cmFwX3BvcGluJykpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdH
299BvcGluX3BhZ2Vfc2VhcmNoLm9uKFwiY2xvc2VkLnpmLnJldmVhbFwiLGZ1bmN0aW9uKCl7XHJcblx0XHRcdHBsYWNlaG9sZGVyX3BvcGluLmRlc3Ryb3koKTtcclxuXHRcdFx0YWRkX3RhYmluZGV4KCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBPbiBmZXJtZSBsYSBzZW5zYXRpb24gcmVjaGVyY2hlIHF1YW5kIGxlIGhlYWRlciBkZXZpZW50IHN0aWNreVxyXG5cdFx0Ly8gbGV0IGhlYWRlciA9ICQoXCIjZGF0YS1zdGlja3ktaGVhZGVyXCIpO1xyXG5cdFx0Ly8gaGVhZGVyLm9uKFwic3RpY2t5LnpmLnN0dWNrdG86dG9wXCIsZnVuY3Rpb24oKXtcclxuXHRcdC8vIFx0JChcIiNob21lIC5zZWFyY2hfYXJlYV9jb250XCIpLnJlbW92ZUNsYXNzKFwiaXNfc2VhcmNoXCIpO1xyXG5cdFx0Ly8gXHQkKFwiI2hvbWUgI2hlYWRlclwiKS5yZW1vdmVDbGFzcyhcIm9wZW5fc2VhcmNoXCIpO1xyXG5cdFx0Ly8gfSk7XHJcblxyXG5cdFx0aWYgKEZvdW5kYXRpb24uTWVkaWFRdWVyeS5jdXJyZW50ID09IFwic21hbGxcIiB8fCBGb3VuZGF0aW9uLk1lZGlhUXVlcnkuY3VycmVudCA9PSBcIm1lZGl1bVwiKSB7XHJcblx0XHRcdGxldCBwb3Bpbl9zZWFyY2ggPSAkKFwiI3BvcGluX3JlY2hlcmNoZVwiKTtcclxuXHRcdFx0cG9waW5fc2VhcmNoLm9uKFwib3Blbi56Zi5yZXZlYWxcIixmdW5jdGlvbigpe1xyXG5cdFx0XHRcdCQoJyNvZmZDYW52YXNMZWZ0JykuZm91bmRhdGlvbignY2xvc2UnKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdH0pO1xyXG5cclxuXHJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4vKioqKioqKioqKioqKioqKioqKioqKioqIFJFQ09OTkFJU1NBTkNFIFZPQ0FMRSAqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG5cdGxldCBTcGVlY2hSZWNvZ25pdGlvbiwgcmVjb2duaXRpb247XHJcblx0bGV0IGJpbmRSZWNvZ25pdGlvbiA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0JChcImJ1dHRvbi52b2NhbFwiKS5vbignY2xpY2snLGZ1bmN0aW9uKCl7XHJcblx0XHRcdHJlY29nbml0aW9uLmFib3J0KClcclxuXHRcdFx0JChcIi5zZWFyY2hfYXJlYV9jb250ICNtYWluX3NlYXJjaFwiKS50cmlnZ2VyKCdrZXl1cCcpO1xyXG5cdFx0XHQkKFwiYnV0dG9uLnZvY2FsXCIpLmFkZENsYXNzKFwidm9jYWxSZWNvZ25pdGlvbk9uXCIpO1xyXG5cdFx0XHRyZWNvZ25pdGlvbi5zdGFydCgpO1xyXG5cdFx0XHRyZWNvZ25pdGlvbi5vbnJlc3VsdCA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdFx0Zm9yIChpID0gZXZlbnQucmVzdWx0SW5kZXg7IGkgPCBldmVudC5yZXN1bHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHQkKFwiI21haW5fc2VhcmNoLCAjbWFpbl9zZWFyY2hfZWxhc3RpY1wiKS52YWwoZXZlbnQucmVzdWx0c1tpXVswXS50cmFuc2NyaXB0KTtcclxuXHRcdFx0XHRcdCQoXCIjbWFpbl9zZWFyY2gsICNtYWluX3NlYXJjaF9lbGFzdGljXCIpLmZvY3VzKCk7XHJcblx0XHRcdFx0XHQkKFwiI3NlYXJjaEVuZ2luZUZvcm1cIikuc3VibWl0KCk7XHJcblx0XHRcdFx0XHQkKFwiI21haW5fc2VhcmNoXCIpLmF1dG9jb21wbGV0ZSgnc2VhcmNoJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJlY29nbml0aW9uLm9uc3BlZWNoZW5kID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmVjb2duaXRpb24uc3RvcCgpO1xyXG5cdFx0XHRcdCQoXCIjbWFpbl9zZWFyY2hcIikuYXV0b2NvbXBsZXRlKCdzZWFyY2gnKTtcclxuXHRcdFx0XHQkKFwiYnV0dG9uLnZvY2FsXCIpLnJlbW92ZUNsYXNzKFwidm9jYWxSZWNvZ25pdGlvbk9uXCIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJlY29nbml0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHRcdGlmIChldmVudC5lcnJvcj09XCJub3QtYWxsb3dlZFwiKVxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGFsZXJ0KFwiVm91cyBuJ2F2ZXogcGFzIGF1dG9yaXPDqSBsJ3V0aWxpc2F0aW9uIGR1IG1pY3JvICFcIik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZCBpbiByZWNvZ25pdGlvbjogJyArIGV2ZW50LmVycm9yKTtcclxuXHRcdFx0XHQkKFwiYnV0dG9uLnZvY2FsXCIpLnJlbW92ZUNsYXNzKFwidm9jYWxSZWNvZ25pdGlvbk9uXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdCQoZG9jdW1lbnQpLmJpbmQoJ19qc19yZWFkeScsIGZ1bmN0aW9uKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9UcnkgdG8gZGVmaW5lIFNwZWVjaFJlY29nbml0aW9uXHJcblx0XHRcdFNwZWVjaFJlY29nbml0aW9uID0gKHdpbmRvdy5TcGVlY2hSZWNvZ25pdGlvbiB8fCB3aW5kb3cud2Via2l0U3BlZWNoUmVjb2duaXRpb24pO1xyXG5cdFx0XHRyZWNvZ25pdGlvbiA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpO1xyXG5cdFx0XHRyZWNvZ25pdGlvbi5sYW5nID0gJ2ZyLUZSJztcclxuXHRcdFx0cmVjb2duaXRpb24uaW50ZXJpbVJlc3VsdHM9dHJ1ZTtcclxuXHRcdFx0YmluZFJlY29nbml0aW9uKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdC8vIGlmIG5vIFNwZWVjaFJlY29nbml0aW9uIEFQSSBkZWxldGUgbWljIGljb24gZnJvbSBkaXNwbGF5XHJcblx0XHRcdCQoXCJidXR0b24udm9jYWxcIikucmVtb3ZlKCk7XHJcblx0XHRcdCQoXCIjYm91dG9uX3JlY2hlcmNoZVwiKS5hZGRDbGFzcyhcIm5vVm9jYWxSZWNvZ25pdGlvblwiKTtcclxuXHRcdH1cclxuXHR9KTtcclxuIl0sImZpbGUiOiJhc3NldHNfc2l0ZV9jb3JlL2pzL21vZHVsZXMvcmVjaGVyY2hlL3NlY3Rpb25fcmVjaGVyY2hlLm1pbi5qcyJ9

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.