PageSourceSearch

https://w3schoolsapp.com/lib/w3schools_footer.js

js w3schoolsapp.com collected 2026-10-10 00:10:34 UTC 55,291 bytes, 1,236 lines download raw bytes

1if (typeof k42 == "undefined") {k42 = false;}
2if (k42 == true) {
3  var k42ResizeFunc;
4  function k42Resizing() {
5    clearTimeout(k42ResizeFunc);
6    k42ResizeFunc = setTimeout(browserResize, 500);
7  }
8  
9  if (window.addEventListener) {              
10    window.addEventListener("resize", k42Resizing);
11  } else if (window.attachEvent) {                 
12    window.attachEvent("resize", k42Resizing);
13  }
14} else {
15  if (window.addEventListener) {              
16    window.addEventListener("resize", browserResize);
17  } else if (window.attachEvent) {                 
18    window.attachEvent("onresize", browserResize);
19  }
20}
21var xbeforeResize = window.innerWidth;
22var ybeforeResize = window.innerWidth;
23var zbeforeResize = window.innerWidth;
24var sbeforeResize = window.innerWidth;
25var abeforeResize = window.innerWidth;
26var allbeforeResize = window.innerWidth;
27function skyscraperResize() {
28  if (k42 == true) {
29     
30  } else {
31    if (window.innerWidth < 975 + 17 && document.getElementById("div-gpt-ad-1422003450156-5")) {
32      document.getElementById("div-gpt-ad-1422003450156-5").style.minHeight="0";
33    }
34  }
35}
36function browserResize() {
37  if (allbeforeResize == window.innerWidth) { return false; }
38  allbeforeResize = window.innerWidth;
39    if (k42 == true) {
40    if (Number(w3_getStyleValue(document.getElementById("main"), "height").replace("px", "")) > 2200) {
41     
42    }
43    else {
44       
45    }
46  } else {
47    var afterResize = window.innerWidth;
48    if ((xbeforeResize < (1482 + 14) && afterResize >= (1482 + 14)) || (xbeforeResize >= (1482 + 14) && afterResize < (1482 + 14)) ||
49      (xbeforeResize < (732 + 14) && afterResize >= (732 + 14)) || (xbeforeResize >= (732 + 14) && afterResize < (732 + 14)) ||
50      (xbeforeResize < (512 + 17) && afterResize >= (512 + 17)) ||(xbeforeResize >= (512 + 17) && afterResize < (512 + 17))) {
51      xbeforeResize = afterResize;
52      //  g o o g l e t a g . p u b a d s ( ) . r e f r e s h ( [ g p t A d S l o t s [ 0 ] ] );
53    }
54    if ((ybeforeResize < (1683 + 14) && afterResize >= (1683 + 14)) || (ybeforeResize >= (1683 + 14) && afterResize < (1683 + 14)) ||
55      (ybeforeResize < (1108 + 14) && afterResize >= (1108 + 14)) || (ybeforeResize >= (1108 + 14) && afterResize < (1108 + 14)) ||
56      (ybeforeResize < (983 + 17) && afterResize >= (983 + 17)) || (ybeforeResize >= (983 + 17) && afterResize < (983 + 17))) {
57      ybeforeResize = afterResize;
58        skyscraperResize()
59      
60    }
61    if ((zbeforeResize < (1272 + 14) && afterResize >= (1272 + 14)) || (zbeforeResize >= (1272 + 14) && afterResize < (1272 + 14))) {
62      zbeforeResize = afterResize;
63       
64    }
65    if ((sbeforeResize < (1683 + 14) && afterResize >= (1683 + 14)) || (sbeforeResize >= (1683 + 14) && afterResize < (1683 + 14)) ||
66      (sbeforeResize < (1108 + 14) && afterResize >= (1108 + 14)) || (sbeforeResize >= (1108 + 14) && afterResize < (1108 + 14)) ||
67      (sbeforeResize < (983 + 17) && afterResize >= (983 + 17)) || (sbeforeResize >= (983 + 17) && afterResize < (983 + 17))) {
68      sbeforeResize = afterResize;
69       
70    }
71    if ((abeforeResize < (1472 + 14) && afterResize >= (1472 + 14)) || (abeforeResize >= (1472 + 14) && afterResize < (1472 + 14)) ||
72      (abeforeResize < (1167 + 14) && afterResize >= (1167 + 14)) || (abeforeResize >= (1167 + 14) && afterResize < (1167 + 14)) ||
73      (abeforeResize < (1025 + 14) && afterResize >= (1025 + 14)) || (abeforeResize >= (1025 + 14) && afterResize < (1025 + 14)) ||
74      (abeforeResize < (782 + 14) && afterResize >= (782 + 14)) || (abeforeResize >= (782 + 14) && afterResize < (782 + 14)) ||
75      (abeforeResize < (522 + 17) && afterResize >= (522 + 17)) || (abeforeResize >= (522 + 17) && afterResize < (522 + 17))) {
76      abeforeResize = afterResize;
77       
78    }
79  }
80}
81skyscraperResize();
82function open_menu() {
83  var x, m;
84  m = (document.getElementById("leftmenu") || document.getElementById("sidenav"));
85  if (m.style.display == "block") {
86    close_menu();
87  } else {
88    w3_close_all_nav();  
89    m.style.display = "block";
90    if (document.getElementsByClassName) {
91      x = document.getElementsByClassName("chapter")
92      for (i = 0; i < x.length; i++) {
93        x[i].style.visibility = "hidden";
94      }
95      x = document.getElementsByClassName("nav")
96      for (i = 0; i < x.length; i++) {
97        x[i].style.visibility = "hidden";
98      }
99      x = document.getElementsByClassName("sharethis")
100      for (i = 0; i < x.length; i++) {
101        x[i].style.visibility = "hidden";
102      }
103    }
104    fix_sidemenu();
105  }
106}
107function close_menu() {
108  var m;
109  m = (document.getElementById("leftmenu") || document.getElementById("sidenav"));
110  m.style.display = "none";  
111  if (document.getElementsByClassName) {
112    x = document.getElementsByClassName("chapter")
113    for (i = 0; i < x.length; i++) {
114      x[i].style.visibility = "visible";
115    }
116    x = document.getElementsByClassName("nav")
117    for (i = 0; i < x.length; i++) {
118      x[i].style.visibility = "visible";
119    }
120    x = document.getElementsByClassName("sharethis")
121    for (i = 0; i < x.length; i++) {
122      x[i].style.visibility = "visible";
123    }            
124  }
125}
126if (window.addEventListener) {
127  window.addEventListener("scroll", function () {fix_sidemenu(); });
128  window.addEventListener("resize", function () {fix_sidemenu(); });  
129  window.addEventListener("touchmove", function () {fix_sidemenu(); });  
130  window.addEventListener("load", function () {fix_sidemenu(); });
131} else if (window.attachEvent) {
132  window.attachEvent("onscroll", function () {fix_sidemenu(); });
133  window.attachEvent("onresize", function () {fix_sidemenu(); });  
134  window.attachEvent("ontouchmove", function () {fix_sidemenu(); });
135  window.attachEvent("onload", function () {fix_sidemenu(); });
136}
137function fix_sidemenu() {
138  var w, top;
139  w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
140  top = scrolltop()    
141/*  if (w < 993 && w > 600) {
142    if (top == 0) {
143      document.getElementById("sidenav").style.top = "144px";
144    }
145    if (top > 0 && top < 100) {
146      document.getElementById("sidenav").style.top = (144 - top) + "px";      
147    }
148    if (top > 100) {
149      document.getElementById("sidenav").style.top = document.getElementById("topnav").offsetHeight + "px";
150      document.getElementById("belowtopnav").style.paddingTop = "44px";    
151      document.getElementById("topnav").style.position = "fixed";    
152      document.getElementById("topnav").style.top = "0";
153      document.getElementById("googleSearch").style.position = "fixed";
154      document.getElementById("googleSearch").style.top = "0";
155      document.getElementById("google_translate_element").style.position = "fixed";
156      document.getElementById("google_translate_element").style.top = "0";
157    } else {
158      document.getElementById("belowtopnav").style.paddingTop = "0";
159      document.getElementById("topnav").style.position = "relative";
160      document.getElementById("googleSearch").style.position = "absolute";
161      document.getElementById("googleSearch").style.top = "";
162      document.getElementById("google_translate_element").style.position = "absolute";
163      document.getElementById("google_translate_element").style.top = "";
164    }
165    document.getElementById("leftmenuinner").style.paddingTop = "0";
166  } else {*/
167
168
169    if (top == 0) {
170      document.getElementById("sidenav").style.top = "112px";      
171    }
172    if (top > 0 && top < 66) {
173      document.getElementById("sidenav").style.top = (112 - top) + "px";      
174    }
175    if (top > 66) {
176      document.getElementById("sidenav").style.top = "44px";
177      if (w > 992) {document.getElementById("leftmenuinner").style.paddingTop = "44px";}
178      document.getElementById("belowtopnav").style.paddingTop = "44px";    
179      document.getElementById("topnav").style.position = "fixed";
180      document.getElementById("topnav").style.top = "0";
181      document.getElementById("googleSearch").style.position = "fixed";
182      document.getElementById("googleSearch").style.top = "0";
183      document.getElementById("google_translate_element").style.position = "fixed";
184      document.getElementById("google_translate_element").style.top = "0";
185    } else {
186      if (w > 992) {
187        document.getElementById("leftmenuinner").style.paddingTop = (112 - top) + "px";
188      } else { //ELSEN ER NY
189        document.getElementById("leftmenuinner").style.paddingTop = 0;
190      }
191      document.getElementById("belowtopnav").style.paddingTop = "0";
192      document.getElementById("topnav").style.position = "relative";
193      document.getElementById("googleSearch").style.position = "absolute";
194      document.getElementById("googleSearch").style.top = "";
195      document.getElementById("google_translate_element").style.position = "absolute";
196      document.getElementById("google_translate_element").style.top = "";
197    }
198/*  }*/
199}
200function sidemenuitemintoview() {
201  var a, b, i = 0;
202  a = document.getElementById("leftmenuinnerinner");
203  if (!a || !a.getElementsByClassName) {return false;}
204  b = a.getElementsByClassName("active");
205  if (b.length < 1) {return false;}  
206  while (!isIntoView(a, b[0])) {
207    i++
208    if (i > 1000) {break;}
209    a.scrollTop += 10;
210  }
211}
212function isIntoView(x, y) {
213  var a = x.scrollTop;
214  var b = a + window.innerHeight;
215  var ytop = y.offsetTop;
216  var ybottom = ytop + 140;
217  return ((ybottom <= b) && (ytop >= a));
218}
219function scrolltop() {
220  var top = 0;
221  if (typeof(window.pageYOffset) == "number") {
222    top = window.pageYOffset;
223  } else if (document.body && document.body.scrollTop) {
224    top = document.body.scrollTop;
225  } else if (document.documentElement && document.documentElement.scrollTop) {
226    top = document.documentElement.scrollTop;
227  }
228  return top;
229}
230function open_translate(elmnt) {
231  var a = document.getElementById("google_translate_element");
232  if (a.style.display == "") {
233    a.style.display = "none";
234    elmnt.innerHTML = "&#xe801;";
235  } else {
236    a.style.display = "";
237    if (window.innerWidth > 500) {
238      a.style.width = "40%";
239    } else {
240      a.style.width = "100%";
241    }
242    elmnt.innerHTML = "<span style='font-family:verdana;font-weight:bold;'>X</span>";
243  }
244}
245function open_search(elmnt) {
246  var a = document.getElementById("googleSearch");
247  if (a.style.display == "") {
248    a.style.display = "none";
249    a.style.paddingRight = "";
250    elmnt.innerHTML = "&#xe802;";    
251  } else {
252    a.style.display = "";  
253    if (window.innerWidth > 700) {
254      a.style.width = "40%";
255    } else {
256      a.style.width = "80%";
257    }
258    if (document.getElementById("gsc-i-id1")) {document.getElementById("gsc-i-id1").focus(); }
259    elmnt.innerHTML = "<span style='font-family:verdana;font-weight:bold;'>X</span>";
260  }
261}
262function changecodetheme() {
263  var cc = document.body.className;
264  if (cc.indexOf("darktheme") > -1) {
265    document.body.className = cc.replace("darktheme", "");
266    localStorage.setItem("preferredmode", "light");
267  } else {
268    document.body.className += " darktheme";
269    localStorage.setItem("preferredmode", "dark");
270  }
271}
272function w3_open_nav(x) {
273  var contentNode, h, menuHeight;
274  if (document.getElementById("nav_" + x).style.display == "block") {
275    w3_close_nav(x);
276  } else {
277    w3_close_all_nav();
278    document.getElementById("nav_" + x).style.display = "block";    
279    if (document.getElementById("topnavbtn_" + x)) {
280      document.getElementById("topnavbtn_" + x).getElementsByTagName("i")[0].style.display = "none";
281      document.getElementById("topnavbtn_" + x).getElementsByTagName("i")[1].style.display = "inline";        
282      //document.getElementById("nav_" + x).getElementsByTagName("h3")[0].focus();
283    }
284  }
285  h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
286  menuHeight = document.getElementById("nav_" + x).offsetHeight;
287  if (menuHeight > h) {
288    document.getElementById("nav_" + x).style.height = (h - 106) + "px";
289  }
290}
291function w3_close_nav(x) {
292  document.getElementById("nav_" + x).style.display = "none";
293  if (document.getElementById("topnavbtn_" + x)) {
294    document.getElementById("topnavbtn_" + x).getElementsByTagName("i")[0].style.display = "inline";
295    document.getElementById("topnavbtn_" + x).getElementsByTagName("i")[1].style.display = "none";        
296    document.getElementById("nav_" + x).style.height = "";
297  }
298}
299function w3_close_all_nav() {
300  w3_close_all_topnav();
301  close_menu();
302}
303function w3_close_all_topnav() {
304  w3_close_nav("tutorials");
305  w3_close_nav("references");
306  w3_close_nav("exercises");
307}
308(function () {
309  var x, y, i, a, b, c, cc, d, m;
310  m = (document.getElementById("leftmenu") || document.getElementById("sidenav"));
311  x = m.getElementsByTagName("A");
312  d = document.location.href;
313  for (i = 0; i < x.length; i++) {
314    if (d.indexOf(x[i].href) >= 0) {
315      x[i].className = "active";
316      y = x[i].nextElementSibling;
317      if (y && (y.className.indexOf("ref_overview") > -1 || y.className.indexOf("tut_overview") > -1)) {
318        y.style.display = "block";
319        if (y.className.indexOf("tut_overview") > -1) {
320          x[i].className = "active_overview";
321          y.getElementsByTagName("a")[0].className = "active";
322        }
323        if (x[i].addEventListener) {
324          cc = true;
325          x[i].addEventListener("click", function () {
326            if (cc == true) {
327              y.style.display = "none";
328              event.preventDefault();
329              cc = false;
330            } else {
331              y.style.display = "block";
332              cc = true;
333              event.preventDefault();
334            }
335          });
336        }
337      } else if (x[i].parentElement.className.indexOf("ref_overview") > -1) {
338        x[i].parentElement.style.display = "block";
339        x[i].parentElement.previousElementSibling.className = "activesub";
340      } else if (x[i].parentElement.className.indexOf("tut_overview") > -1) {
341        x[i].parentElement.style.display = "block";
342        x[i].parentElement.previousElementSibling.className = "active_overview";
343      }
344      break;
345    } else if (d.indexOf("/tags/att_") > -1) {
346       c = d.substring(d.indexOf("/tags/att_") + 10, d.lastIndexOf("_"));
347       if (x[i].href == d.substr(0, d.indexOf("../tags/index.html")) + "/tags/tag_" + c + ".asp") {
348         x[i].className = "active";
349       }
350    } else if (d.indexOf("/howto/default_page") > -1) {
351       if (x[i].href.indexOf("default.html") > -1) {
352         x[i].className = "active";
353       }
354    }
355  }
356  sidemenuitemintoview()
357  x = document.getElementById("topnav").getElementsByTagName("A");
358  for (i = 0; i < x.length; i++) {
359    a = document.location.pathname;
360    b = x[i].pathname;
361    if ((x[i].parentNode.tagName == "LI" || x[i].parentNode.className.indexOf("w3-bar") > -1) && a.substr(0, a.indexOf("../index.html",1)) ==  b.substr(0, b.indexOf("../index.html",1))) {
362      x[i].className += " active";
363    }
364  }
365  if (window.addEventListener) { 
366    document.getElementById("main").addEventListener("click", w3_close_all_nav, true);
367    m.addEventListener("click", w3_close_all_topnav, true);
368    document.getElementById("right").addEventListener("click", w3_close_all_nav, true);
369    document.getElementById("main").addEventListener("wheel", w3_close_all_nav, true);
370    document.getElementById("main").addEventListener("touchstart", w3_close_all_nav, true);
371  } else if (window.attachEvent) {         
372    document.getElementById("main").attachEvent("onclick", w3_close_all_nav);
373    m.attachEvent("onclick", w3_close_all_topnav);
374    document.getElementById("right").attachEvent("onclick", w3_close_all_nav);
375  }
376  if ('ontouchstart' in window || 'onmsgesturechange' in window) {
377    document.getElementById("leftmenuinnerinner").style.overflowY = "scroll";
378  }
379})();
380//(function() {
381//  var cx = '012971019331610648934:m2tou3_miwy';
382//  var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true;
383//  gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
384//      '//www.google.com/cse/cse.js?cx=' + cx;
385//  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s);
386//})();
387function searchfield_focus(obj) {
388  obj.style.color = "";
389  obj.style.fontStyle = "";
390  if (obj.value == "Search w3schools.com") {obj.value = "";}
391}
392var addr = document.location.href;
393function displayError() {
394//  document.getElementById("err_url").value = addr;
395  document.getElementById("err_form").style.display = "block";
396//  document.getElementById("err_email").focus();
397//  hideSent();
398}
399function hideError() {
400  document.getElementById("err_form").style.display = "none";
401}
402function hideSent() {
403  document.getElementById("err_sent").style.display = "none";
404}
405function sendErr() {
406  var xmlhttp;
407  var err_url = document.getElementById("err_url").value;
408  var err_email = document.getElementById("err_email").value;
409  var err_desc = document.getElementById("err_desc").value;
410  if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
411    xmlhttp = new XMLHttpRequest();
412  } else {// code for IE6, IE5
413    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
414  }
415  xmlhttp.open("POST", "../err_sup.html", true);
416  xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
417  xmlhttp.send("err_url=" + err_url + "&err_email=" + err_email + "&err_desc=" + escape(err_desc));
418  document.getElementById("err_desc").value = "";
419  hideError();
420  document.getElementById("err_sent").style.display = "block";
421}
422function clickFBLike() {
423  document.getElementById("fblikeframe").style.display = 'block';
424  document.getElementById("popupDIV").innerHTML = "<iframe src='/fblike.asp?r=" + Math.random() + "' frameborder='no' style='height:200px;width:250px;'></iframe><br><button onclick='hideFBLike()' class='w3-btn w3-black'>Close</button>";
425}
426function hideFBLike() {
427  document.getElementById("fblikeframe").style.display = 'none';
428}
429function loginCircle(xx, yy, r, aD) {
430  var aR = (aD-90) * Math.PI / 180.0;
431  return {
432    x: xx + (r * Math.cos(aR)),
433    y: yy + (r * Math.sin(aR))
434  };
435}
436function loginDrawCircle(x, y, r, sa, ea){
437    var s = loginCircle(x, y, r, ea);
438    var e = loginCircle(x, y, r, sa);
439    var f = ea - sa <= 180 ? "0" : "1";
440    return ["M", s.x, s.y, "A", r, r, 0, f, 0, e.x, e.y].join(" ");
441}
442function login_user(event) {
443  event.preventDefault();
444  var xhttp = new XMLHttpRequest(), a, b, f, f2, valid = 1;
445  f = document.forms["loginform"];
446  a = f["n"];
447  b = f["p"];
448  if (a.value == "") {
449    a.style.backgroundColor = "#ffcccc";
450    valid = 0;
451  }
452  if (b.value == "") {
453    b.style.backgroundColor = "#ffcccc";
454    valid = 0;
455  }
456  if (valid == 0) {return false;}
457  document.getElementById('login_submit_button').focus();
458  xhttp.onreadystatechange = function() {
459    if (this.readyState == 4 && this.status == 200) {
460      if (this.responseText == "OK") {
461        a.value = "";
462        b.value = "";
463        w3_close_nav("login");
464        loadUser();
465      } else if (this.responseText == "OK2") {
466        document.getElementById("loginerrordiv").innerHTML = "Your account has not been verified yet";
467        document.getElementById("loginerrordiv").style.display = "block";
468      } else if (this.responseText == "NOSUCHUSER") {
469        a.style.backgroundColor = "#ffcccc";
470        b.style.backgroundColor = "#ffcccc";
471        document.getElementById("loginerrordiv").innerHTML = "Wrong Username or Password";
472        document.getElementById("loginerrordiv").style.display = "block";
473      } else {
474        document.getElementById("loginerrordiv").innerHTML = "Ooops! Something went wrong...";
475        document.getElementById("loginerrordiv").style.display = "block";
476      }
477    }
478  };
479  xhttp.open("POST", "../../mypage.w3schools.com/mypage/login_user.html", true);
480  xhttp.withCredentials = true;
481  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
482  // x h t t p.send("n=" + encodeURIComponent(a.value) + "&p=" + encodeURIComponent(b.value));
483
484}
485
486function login_inputGetsFocus(elmnt) {
487  document.forms["loginform"]["n"].style.backgroundColor = "#fff";
488  document.forms["loginform"]["p"].style.backgroundColor = "#fff";
489  if (document.getElementById("loginerrordiv")) {
490    document.getElementById("loginerrordiv").style.display = "none";
491  }
492}
493function googleTranslateElementInit() {
494  new google.translate.TranslateElement({
495    pageLanguage: 'en',
496    autoDisplay: false,
497    gaTrack: true,
498    gaId: 'UA-142508205-4'
499  }, 'google_translate_element');
500}
501function printPage() {
502  var content = document.getElementById("main").innerHTML;
503  var css = "", i, j, c = document.getElementById("main").cloneNode(true);
504  for (i = 0; i < c.childNodes.length; i++) {
505    if (c.childNodes[i].nodeType == 1 && (c.childNodes[i].getAttribute("id") == "mainLeaderboard" || c.childNodes[i].getAttribute("id") == "midcontentadcontainer")) {
506      c.removeChild(c.childNodes[i]);
507      content = c.innerHTML;
508    }
509  }
510  var head = document.getElementsByTagName("head")[0].innerHTML;
511  var myWindow=window.open('','','');
512  myWindow.document.write("<html><head>"+head+"<style>body{padding:15px;}@media print {.printbtn {display:none;}}</style></head><body><button class='printbtn' onclick='window.print()'>Print Page</button><br><br>"+content+"<p><a href='/about/about_copyright.asp'>Copyright 1999-2019</a>
512 by Refsnes Data. All Rights Reserved.</p></body></html>");
513}
514function openGoogleTranslate() {
515  var d = "text/javascript",
516    e = "text/css",
517    f = "stylesheet",
518    g = "script",
519    h = "link",
520    k = "head",
521    l = "complete",
522    m = "UTF-8",
523    n = ".";
524  document.getElementById("google_translate_element").innerHTML = "";
525
526  function p(b) {
527    var a = document.getElementsByTagName(k)[0];
528    a || (a = document.body.parentNode.appendChild(document.createElement(k)));
529    a.appendChild(b)
530  }
531
532  function _loadJs(b) {
533    var a = document.createElement(g);
534    a.type = d;
535    a.charset = m;
536    a.src = b;
537    p(a)
538  }
539
540  function _loadCss(b) {
541    var a = document.createElement(h);
542    a.type = e;
543    a.rel = f;
544    a.charset = m;
545    a.href = b;
546    p(a)
547  }
548
549  function _isNS(b) {
550    b = b.split(n);
551    for (var a = window, c = 0; c < b.length; ++c)
552      if (!(a = a[b[c]])) return !1;
553    return !0
554  }
555
556  function _setupNS(b) {
557    b = b.split(n);
558    for (var a = window, c = 0; c < b.length; ++c) a.hasOwnProperty ? a.hasOwnProperty(b[c]) ? a = a[b[c]] : a = a[b[c]] = {} : a = a[b[c]] || (a[b[c]] = {});
559    return a
560  }
561  window.addEventListener && "undefined" == typeof document.readyState && window.addEventListener("DOMContentLoaded", function() {
562    document.readyState = l
563  }, !1);
564  if (_isNS('google.translate.Element')) {
565    return
566  }(function() {
567    var c = _setupNS('google.translate._const');
568    c._cl = 'no';
569    c._cuc = 'googleTranslateElementInit';
570    c._cac = '';
571    c._cam = '';
572    var h = 'translate.googleapis.com';
573    var s = (true ? 'https' : window.location.protocol == 'https:' ? 'https' : 'http') + '://';
574    var b = s + h;
575    c._pah = h;
576    c._pas = s;
577    c._pbi = b + '/translate_static/img/te_bk.gif';
578    c._pci = b + '/translate_static/img/te_ctrl3.gif';
579    c._pli = b + '/translate_static/img/loading.gif';
580    c._plla = h + '/translate_a/l';
581    c._pmi = b + '/translate_static/img/mini_google.png';
582    c._ps = b + '/translate_static/css/translateelement.css';
583    c._puh = 'translate.google.com';
584    _loadCss(c._ps);
585    _loadJs(b + '/translate_static/js/element/main_no.js');
586  })();
587}
588/* w3codecolor ver 1.32 by w3schools.com */
589(
590function w3CodeColor() {
591  var x, i, j, k, l, modes = ["html", "js", "java", "css", "sql", "python"];
592  if (!document.getElementsByClassName) {return;}
593  k = modes.length;
594  for (j = 0; j < k; j++) {
595    x = document.getElementsByClassName(modes[j] + "High");
596    l = x.length;
597    for (i = 0; i < l; i++) {
598//      if (modes[j] == "react") {
599//        codemirrorize(x[i]);
600//      } else {
601        x[i].innerHTML = w3CodeColorize(x[i].innerHTML + " ", modes[j]);
602//      }
603    }
604}
605/*
606function codemirrorize(x) {
607  var txt = x.innerText;
608  x.innerHTML = "";
609  var myCodeMirror = CodeMirror(x, 
610    {
611      mode: "jsx",
612      value: txt,
613      readOnly: true
614    });
615
616}
617*/
618function w3CodeColorize(x, lang) {
619  var tagcolor = "mediumblue";
620  var tagnamecolor = "brown";
621  var attributecolor = "red";
622  var attributevaluecolor = "mediumblue";
623  var commentcolor = "green";
624  var cssselectorcolor = "brown";
625  var csspropertycolor = "red";
626  var csspropertyvaluecolor = "mediumblue";
627  var cssdelimitercolor = "black";
628  var cssimportantcolor = "red";  
629  var jscolor = "black";
630  var jskeywordcolor = "mediumblue";
631  var jsstringcolor = "brown";
632  var jsnumbercolor = "red";
633  var jspropertycolor = "black";
634  var javacolor = "black";
635  var javakeywordcolor = "mediumblue";
636  var javastringcolor = "brown";
637  var javanumbercolor = "red";
638  var javapropertycolor = "black";
639  var kotlincolor = "black";
640  var kotlinkeywordcolor = "mediumblue";
641  var kotlinstringcolor = "brown";
642  var kotlinnumbercolor = "red";
643  var kotlinpropertycolor = "black";
644  var phptagcolor = "red";
645  var phpcolor = "black";
646  var phpkeywordcolor = "mediumblue";
647  var phpglobalcolor = "goldenrod";
648  var phpstringcolor = "brown";
649  var phpnumbercolor = "red";  
650  var pythoncolor = "black";
651  var pythonkeywordcolor = "mediumblue";
652  var pythonstringcolor = "brown";
653  var pythonnumbercolor = "red";  
654  var angularstatementcolor = "red";
655  var sqlcolor = "black";
656  var sqlkeywordcolor = "mediumblue";
657  var sqlstringcolor = "brown";
658  var sqlnumbercolor = "";  
659  if (!lang) {lang = "html"; }
660  if (lang == "html") {return htmlMode(x);}
661  if (lang == "css") {return cssMode(x);}
662  if (lang == "js") {return jsMode(x);}
663  if (lang == "java") {return javaMode(x);}
664  if (lang == "kotlin") {return kotlinMode(x);}
665  if (lang == "php") {return phpMode(x);}
666  if (lang == "sql") {return sqlMode(x);}  
667  if (lang == "python") {return pythonMode(x);}
668  return x;
669  function extract(str, start, end, func, repl) {
670    var s, e, d = "", a = [];
671    while (str.search(start) > -1) {
672      s = str.search(start);
673      e = str.indexOf(end, s);
674      if (e == -1) {e = str.length;}
675      if (repl) {
676        a.push(func(str.substring(s, e + (end.length))));      
677        str = str.substring(0, s) + repl + str.substr(e + (end.length));
678      } else {
679        d += str.substring(0, s);
680        d += func(str.substring(s, e + (end.length)));
681        str = str.substr(e + (end.length));
682      }
683    }
684    this.rest = d + str;
685    this.arr = a;
686  }
687  function htmlMode(txt) {
688    var rest = txt, done = "", php, comment, angular, startpos, endpos, note, i;
689    php = new extract(rest, "&lt;\\?php", "?&gt;", phpMode, "W3PHPPOS");
690    rest = php.rest;
691    comment = new extract(rest, "&lt;!--", "--&gt;", commentMode, "W3HTMLCOMMENTPOS");
692    rest = comment.rest;
693    while (rest.indexOf("&lt;") > -1) {
694      note = "";
695      startpos = rest.indexOf("&lt;");
696      if (rest.substr(startpos, 9).toUpperCase() == "&LT;STYLE") {note = "css";}
697      if (rest.substr(startpos, 10).toUpperCase() == "&LT;SCRIPT") {note = "javascript";}        
698      endpos = rest.indexOf("&gt;", startpos);
699      if (endpos == -1) {endpos = rest.length;}
700      done += rest.substring(0, startpos);
701      done += tagMode(rest.substring(startpos, endpos + 4));
702      rest = rest.substr(endpos + 4);
703      if (note == "css") {
704        endpos = rest.indexOf("&lt;/style&gt;");
705        if (endpos > -1) {
706          done += cssMode(rest.substring(0, endpos));
707          rest = rest.substr(endpos);
708        }
709      }
710      if (note == "javascript") {
711        endpos = rest.indexOf("&lt;/script&gt;");
712        if (endpos > -1) {
713          done += jsMode(rest.substring(0, endpos));
714          rest = rest.substr(endpos);
715        }
716      }
717    }
718    rest = done + rest;
719    angular = new extract(rest, "{{", "}}", angularMode);
720    rest = angular.rest;
721    for (i = 0; i < comment.arr.length; i++) {
722        rest = rest.replace("W3HTMLCOMMENTPOS", comment.arr[i]);
723    }
724    for (i = 0; i < php.arr.length; i++) {
725        rest = rest.replace("W3PHPPOS", php.arr[i]);
726    }
727    return rest;
728  }
729  function tagMode(txt) {
730    var rest = txt, done = "", startpos, endpos, result;
731    while (rest.search(/(\s|<br>)/) > -1) {    
732      startpos = rest.search(/(\s|<br>)/);
733      endpos = rest.indexOf("&gt;");
734      if (endpos == -1) {endpos = rest.length;}
735      done += rest.substring(0, startpos);
736      done += attributeMode(rest.substring(startpos, endpos));
737      rest = rest.substr(endpos);
738    }
739    result = done + rest;
740    result = "<span class='tagcolor' style=color:" + tagcolor + ">&lt;</span>" + result.substring(4);
741    if (result.substr(result.length - 4, 4) == "&gt;") {
742      result = result.substring(0, result.length - 4) + "<span class='tagcolor' style=color:" + tagcolor + ">&gt;</span>";
743    }
744    return "<span class='tagnamecolor' style=color:" + tagnamecolor + ">" + result + "</span>";
745  }
746  function attributeMode(txt) {
747    var rest = txt, done = "", startpos, endpos, singlefnuttpos, doublefnuttpos, spacepos;
748    while (rest.indexOf("=") > -1) {
749      endpos = -1;
750      startpos = rest.indexOf("=");
751      singlefnuttpos = rest.indexOf("'", startpos);
752      doublefnuttpos = rest.indexOf('"', startpos);
753      spacepos = rest.indexOf(" ", startpos + 2);
754      if (spacepos > -1 && (spacepos < singlefnuttpos || singlefnuttpos == -1) && (spacepos < doublefnuttpos || doublefnuttpos == -1)) {
755        endpos = rest.indexOf(" ", startpos);      
756      } else if (doublefnuttpos > -1 && (doublefnuttpos < singlefnuttpos || singlefnuttpos == -1) && (doublefnuttpos < spacepos || spacepos == -1)) {
757        endpos = rest.indexOf('"', rest.indexOf('"', startpos) + 1);
758      } else if (singlefnuttpos > -1 && (singlefnuttpos < doublefnuttpos || doublefnuttpos == -1) && (singlefnuttpos < spacepos || spacepos == -1)) {
759        endpos = rest.indexOf("'", rest.indexOf("'", startpos) + 1);
760      }
761      if (!endpos || endpos == -1 || endpos < startpos) {endpos = rest.length;}
762      done += rest.substring(0, startpos);
763      done += attributeValueMode(rest.substring(startpos, endpos + 1));
764      rest = rest.substr(endpos + 1);
765    }
766    return "<span class='attributecolor' style=color:" + attributecolor + ">" + done + rest + "</span>";
767  }
768  function attributeValueMode(txt) {
769    return "<span class='attributevaluecolor' style=color:" + attributevaluecolor + ">" + txt + "</span>";
770  }
771  function angularMode(txt) {
772    return "<span class='angularstatementcolor' style=color:" + angularstatementcolor + ">" + txt + "</span>";
773  }
774  function commentMode(txt) {
775    return "<span class='commentcolor' style=color:" + commentcolor + ">" + txt + "</span>";
776  }
777  function cssMode(txt) {
778    var rest = txt, done = "", s, e, comment, i, midz, c, cc;
779    comment = new extract(rest, /\/\*/, "*/", commentMode, "W3CSSCOMMENTPOS");
780    rest = comment.rest;
781    while (rest.search("{") > -1) {
782      s = rest.search("{");
783      midz = rest.substr(s + 1);
784      cc = 1;
785      c = 0;
786      for (i = 0; i < midz.length; i++) {
787        if (midz.substr(i, 1) == "{") {cc++; c++}
788        if (midz.substr(i, 1) == "}") {cc--;}
789        if (cc == 0) {break;}
790      }
791      if (cc != 0) {c = 0;}
792      e = s;
793      for (i = 0; i <= c; i++) {
794        e = rest.indexOf("}", e + 1);
795      }
796      if (e == -1) {e = rest.length;}
797      done += rest.substring(0, s + 1);
798      done += cssPropertyMode(rest.substring(s + 1, e));
799      rest = rest.substr(e);
800    }
801    rest = done + rest;
802    rest = rest.replace(/{/g, "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">
802{</span>");
803    rest = rest.replace(/}/g, "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">}</span>");
804    for (i = 0; i < comment.arr.length; i++) {
805        rest = rest.replace("W3CSSCOMMENTPOS", comment.arr[i]);
806    }
807    return "<span class='cssselectorcolor' style=color:" + cssselectorcolor + ">" + rest + "</span>";
808  }
809  function cssPropertyMode(txt) {
810    var rest = txt, done = "", s, e, n, loop;
811    if (rest.indexOf("{") > -1 ) { return cssMode(rest); }
812    while (rest.search(":") > -1) {
813      s = rest.search(":");
814      loop = true;
815      n = s;
816      while (loop == true) {
817        loop = false;
818        e = rest.indexOf(";", n);
819        if (rest.substring(e - 5, e + 1) == "&nbsp;") {
820          loop = true;
821          n = e + 1;
822        }
823      }
824      if (e == -1) {e = rest.length;}
825      done += rest.substring(0, s);
826      done += cssPropertyValueMode(rest.substring(s, e + 1));
827      rest = rest.substr(e + 1);
828    }
829    return "<span class='csspropertycolor' style=color:" + csspropertycolor + ">" + done + rest + "</span>";
830  }
831  function cssPropertyValueMode(txt) {
832    var rest = txt, done = "", s;
833    rest = "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">:</span>" + rest.substring(1);
834    while (rest.search(/!important/i) > -1) {
835      s = rest.search(/!important/i);
836      done += rest.substring(0, s);
837      done += cssImportantMode(rest.substring(s, s + 10));
838      rest = rest.substr(s + 10);
839    }
840    result = done + rest;    
841    if (result.substr(result.length - 1, 1) == ";" && result.substr(result.length - 6, 6) != "&nbsp;" && result.substr(result.length - 4, 4) != "&lt;" && result.substr(result.length - 4, 4) != "&gt;" && result.substr(result.length - 5, 5) != "&amp;") {
842      result = result.substring(0, result.length - 1) + "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">;</span>";
843    }
844    return "<span class='csspropertyvaluecolor' style=color:" + csspropertyvaluecolor + ">" + result + "</span>";
845  }
846  function cssImportantMode(txt) {
847    return "<span class='cssimportantcolor' style=color:" + cssimportantcolor + ";font-weight:bold;>" + txt + "</span>";
848  }
849  function jsMode(txt) {
850    var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y;
851    for (i = 0; i < rest.length; i++)  {
852      cc = rest.substr(i, 1);
853      if (cc == "\\") {
854        esc.push(rest.substr(i, 2));
855        cc = "W3JSESCAPE";
856        i++;
857      }
858      tt += cc;
859    }
860    rest = tt;
861    y = 1;
862    while (y == 1) {
863      sfnuttpos = getPos(rest, "'", "'", jsStringMode);
864      dfnuttpos = getPos(rest, '"', '"', jsStringMode);
865      compos = getPos(rest, /\/\*/, "*/", commentMode);
866      comlinepos = getPos(rest, /\/\//, "<br>", commentMode);      
867      numpos = getNumPos(rest, jsNumberMode);
868      keywordpos = getKeywordPos("js", rest, jsKeywordMode);
869      dotpos = getDotPos(rest, jsPropertyMode);
870      if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) {break;}
871      mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, dotpos);
872      if (mypos[0] == -1) {break;}
873      if (mypos[0] > -1) {
874        done += rest.substring(0, mypos[0]);
875        done += mypos[2](rest.substring(mypos[0], mypos[1]));
876        rest = rest.substr(mypos[1]);
877      }
878    }
879    rest = done + rest;
880    for (i = 0; i < esc.length; i++) {
881      rest = rest.replace("W3JSESCAPE", esc[i]);
882    }
883    return "<span class='jscolor' style=color:" + jscolor + ">" + rest + "</span>";
884  }
885  function jsStringMode(txt) {
886    return "<span class='jsstringcolor' style=color:" + jsstringcolor + ">" + txt + "</span>";
887  }
888  function jsKeywordMode(txt) {
889    return "<span class='jskeywordcolor' style=color:" + jskeywordcolor + ">" + txt + "</span>";
890  }
891  function jsNumberMode(txt) {
892    return "<span class='jsnumbercolor' style=color:" + jsnumbercolor + ">" + txt + "</span>";
893  }
894  function jsPropertyMode(txt) {
895    return "<span class='jspropertycolor' style=color:" + jspropertycolor + ">" + txt + "</span>";
896  }
897  function getDotPos(txt, func) {
898    var x, i, j, s, e, arr = [".","<", " ", ";", "(", "+", ")", "[", "]", ",", "&", ":", "{", "}", "../index.html" ,"-", "*", "|", "%"];
899    s = txt.indexOf(".");
900    if (s > -1) {
901      x = txt.substr(s + 1);
902      for (j = 0; j < x.length; j++) {
903        cc = x[j];
904        for (i = 0; i < arr.length; i++) {
905          if (cc.indexOf(arr[i]) > -1) {
906            e = j;
907            return [s + 1, e + s + 1, func];
908          }
909        }
910      }
911    }
912    return [-1, -1, func];
913  }
914  function getMinPos() {
915    var i, arr = [];
916    for (i = 0; i < arguments.length; i++) {
917      if (arguments[i][0] > -1) {
918        if (arr.length == 0 || arguments[i][0] < arr[0]) {arr = arguments[i];}
919      }
920    }
921    if (arr.length == 0) {arr = arguments[i];}
922    return arr;
923  }
924  function javaMode(txt) {
925    var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y;
926    for (i = 0; i < rest.length; i++)  {
927      cc = rest.substr(i, 1);
928      if (cc == "\\") {
929        esc.push(rest.substr(i, 2));
930        cc = "W3JSESCAPE";
931        i++;
932      }
933      tt += cc;
934    }
935    rest = tt;
936    y = 1;
937    while (y == 1) {
938      sfnuttpos = getPos(rest, "'", "'", javaStringMode);
939      dfnuttpos = getPos(rest, '"', '"', javaStringMode);
940      compos = getPos(rest, /\/\*/, "*/", commentMode);
941      comlinepos = getPos(rest, /\/\//, "<br>", commentMode);      
942      numpos = getNumPos(rest, javaNumberMode);
943      keywordpos = getKeywordPos("java", rest, javaKeywordMode);
944      dotpos = getDotPos(rest, javaPropertyMode);
945      if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) {break;}
946      mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, dotpos);
947      if (mypos[0] == -1) {break;}
948      if (mypos[0] > -1) {
949        done += rest.substring(0, mypos[0]);
950        done += mypos[2](rest.substring(mypos[0], mypos[1]));
951        rest = rest.substr(mypos[1]);
952      }
953    }
954    rest = done + rest;
955    for (i = 0; i < esc.length; i++) {
956      rest = rest.replace("W3JSESCAPE", esc[i]);
957    }
958    return "<span class='javacolor' style=color:" + javacolor + ">" + rest + "</span>";
959  }
960  function javaStringMode(txt) {
961    return "<span class='javastringcolor' style=color:" + javastringcolor + ">" + txt + "</span>";
962  }
963  function javaKeywordMode(txt) {
964    return "<span class='javakeywordcolor' style=color:" + javakeywordcolor + ">" + txt + "</span>";
965  }
966  function javaNumberMode(txt) {
967    return "<span class='javanumbercolor' style=color:" + javanumbercolor + ">" + txt + "</span>";
968  }
969  function javaPropertyMode(txt) {
970    return "<span class='javapropertycolor' style=color:" + javapropertycolor + ">" + txt + "</span>";
971  }
972  function kotlinMode(txt) {
973    var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y;
974    for (i = 0; i < rest.length; i++)  {
975      cc = rest.substr(i, 1);
976      if (cc == "\\") {
977        esc.push(rest.substr(i, 2));
978        cc = "W3JSESCAPE";
979        i++;
980      }
981      tt += cc;
982    }
983    rest = tt;
984    y = 1;
985    while (y == 1) {
986      sfnuttpos = getPos(rest, "'", "'", kotlinStringMode);
987      dfnuttpos = getPos(rest, '"', '"', kotlinStringMode);
988      compos = getPos(rest, /\/\*/, "*/", commentMode);
989      comlinepos = getPos(rest, /\/\//, "<br>", commentMode);      
990      numpos = getNumPos(rest, kotlinNumberMode);
991      keywordpos = getKeywordPos("kotlin", rest, kotlinKeywordMode);
992      dotpos = getDotPos(rest, kotlinPropertyMode);
993      if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) {break;}
994      mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, dotpos);
995      if (mypos[0] == -1) {break;}
996      if (mypos[0] > -1) {
997        done += rest.substring(0, mypos[0]);
998        done += mypos[2](rest.substring(mypos[0], mypos[1]));
999        rest = rest.substr(mypos[1]);
1000      }
1001    }
1002    rest = done + rest;
1003    for (i = 0; i < esc.length; i++) {
1004      rest = rest.replace("W3JSESCAPE", esc[i]);
1005    }
1006    return "<span class='kotlincolor' style=color:" + kotlincolor + ">" + rest + "</span>";
1007  }
1008  function kotlinStringMode(txt) {
1009    return "<span class='kotlinstringcolor' style=color:" + kotlinstringcolor + ">" + txt + "</span>";
1010  }
1011  function kotlinKeywordMode(txt) {
1012    return "<span class='kotlinkeywordcolor' style=color:" + kotlinkeywordcolor + ">" + txt + "</span>";
1013  }
1014  function kotlinNumberMode(txt) {
1015    return "<span class='kotlinnumbercolor' style=color:" + kotlinnumbercolor + ">" + txt + "</span>";
1016  }
1017  function kotlinPropertyMode(txt) {
1018    return "<span class='kotlinpropertycolor' style=color:" + kotlinpropertycolor + ">" + txt + "</span>";
1019  }
1020  function sqlMode(txt) {
1021    var rest = txt, y, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos;
1022    y = 1;
1023    while (y == 1) {
1024      sfnuttpos = getPos(rest, "'", "'", sqlStringMode);
1025      dfnuttpos = getPos(rest, '"', '"', sqlStringMode);
1026      compos = getPos(rest, /\/\*/, "*/", commentMode);
1027      comlinepos = getPos(rest, /--/, "<br>", commentMode);      
1028      numpos = getNumPos(rest, sqlNumberMode);
1029      keywordpos = getKeywordPos("sql", rest, sqlKeywordMode);
1030      if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0]) == -1) {break;}
1031      mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos);
1032      if (mypos[0] == -1) {break;}
1033      if (mypos[0] > -1) {
1034        done += rest.substring(0, mypos[0]);
1035        done += mypos[2](rest.substring(mypos[0], mypos[1]));
1036        rest = rest.substr(mypos[1]);
1037      }
1038    }
1039    rest = done + rest;
1040    return "<span class='sqlcolor' style=color:" + sqlcolor + ">" + rest + "</span>";
1041  }
1042  function sqlStringMode(txt) {
1043    return "<span class='sqlstringcolor' style=color:" + sqlstringcolor + ">" + txt + "</span>";
1044  }
1045  function sqlKeywordMode(txt) {
1046    return "<span class='sqlkeywordcolor' style=color:" + sqlkeywordcolor + ">" + txt + "</span>";
1047  }
1048  function sqlNumberMode(txt) {
1049    return "<span class='sqlnumbercolor' style=color:" + sqlnumbercolor + ">" + txt + "</span>";
1050  }
1051  function phpMode(txt) {
1052    var rest = txt, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos, mypos, y;
1053    y = 1;
1054    while (y == 1) {
1055      sfnuttpos = getPos(rest, "'", "'", phpStringMode);
1056      dfnuttpos = getPos(rest, '"', '"', phpStringMode);
1057      compos = getPos(rest, /\/\*/, "*/", commentMode);
1058      comlinepos = getPos(rest, /\/\//, "<br>", commentMode);      
1059      comhashpos = getPos(rest, "#", "<br>", commentMode);
1060      numpos = getNumPos(rest, phpNumberMode);
1061      keywordpos = getKeywordPos("php", rest, phpKeywordMode);      
1062      if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], comhashpos[0], keywordpos[0]) == -1) {break;}
1063      mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos);
1064      if (mypos[0] == -1) {break;}
1065      if (mypos[0] > -1) {
1066        done += rest.substring(0, mypos[0]);
1067        done += mypos[2](rest.substring(mypos[0], mypos[1]));
1068        rest = rest.substr(mypos[1]);
1069      }
1070    }
1071    rest = done + rest;
1072    rest = "<span class='phptagcolor' style=color:" + phptagcolor + ">&lt;" + rest.substr(4, 4) + "</span>" + rest.substring(8);
1073    if (rest.substr(rest.length - 5, 5) == "?&gt;") {
1074      rest = rest.substring(0, rest.length - 5) + "<span class='phptagcolor' style=color:" + phptagcolor + ">?&gt;</span>";
1075    }
1076    return "<span class='phpcolor' style=color:" + phpcolor + ">" + rest + "</span>";
1077  }
1078  function phpStringMode(txt) {
1079    return "<span class='phpstringcolor' style=color:" + phpstringcolor + ">" + txt + "</span>";
1080  }
1081  function phpNumberMode(txt) {
1082    return "<span class='phpnumbercolor' style=color:" + phpnumbercolor + ">" + txt + "</span>";
1083  }
1084  function phpKeywordMode(txt) {
1085    var glb = ["$GLOBALS","$_SERVER","$_REQUEST","$_POST","$_GET","$_FILES","$_ENV","$_COOKIE","$_SESSION"];
1086    if (glb.indexOf(txt.toUpperCase()) > -1) {
1087      if (glb.indexOf(txt) > -1) {
1088        return "<span class='phpglobalcolor' style=color:" + phpglobalcolor + ">" + txt + "</span>";
1089      } else {
1090        return txt;
1091      }
1092    } else {
1093      return "<span class='phpkeywordcolor' style=color:" + phpkeywordcolor + ">" + txt + "</span>";
1094    }
1095  }
1096  function pythonMode(txt) {
1097    var rest = txt, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos, mypos, y;
1098    y = 1;
1099    while (y == 1) {
1100      sfnuttpos = getPos(rest, "'", "'", pythonStringMode);
1101      dfnuttpos = getPos(rest, '"', '"', pythonStringMode);
1102      compos = getPos(rest, /\/\*/, "*/", commentMode);
1103      comhashpos = getPos(rest, "#", "<br>", commentMode);
1104      numpos = getNumPos(rest, pythonNumberMode);
1105      keywordpos = getKeywordPos("python", rest, pythonKeywordMode);      
1106      if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comhashpos[0], keywordpos[0]) == -1) {break;}
1107      mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comhashpos, keywordpos);
1108      if (mypos[0] == -1) {break;}
1109      if (mypos[0] > -1) {
1110        done += rest.substring(0, mypos[0]);
1111        done += mypos[2](rest.substring(mypos[0], mypos[1]));
1112        rest = rest.substr(mypos[1]);
1113      }
1114    }
1115    rest = done + rest;
1116    return "<span class='pythoncolor' style=color:" + pythoncolor + ">" + rest + "</span>";
1117  }
1118  function pythonStringMode(txt) {
1119    return "<span class='pythonstringcolor' style=color:" + pythonstringcolor + ">" + txt + "</span>";
1120  }
1121  function pythonNumberMode(txt) {
1122    return "<span class='pythonnumbercolor' style=color:" + pythonnumbercolor + ">" + txt + "</span>";
1123  }
1124  function pythonKeywordMode(txt) {
1125    return "<span class='pythonkeywordcolor' style=color:" + pythonkeywordcolor + ">" + txt + "</span>";
1126  }
1127  function getKeywordPos(typ, txt, func) {
1128    var words, i, pos, rpos = -1, rpos2 = -1, patt;
1129    if (typ == "js") {
1130      words = ["abstract","arguments","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete",
1131      "do","double","else","enum","eval","event","export","extends","false","final","finally","float","for","function","goto","if","implements","import",
1132      "in","instanceof","int","interface","let","long","NaN","native","new","null","package","private","protected","public","return","short","static",
1133      "super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield"];
1134    } else if (typ == "java") {
1135      words = ["abstract","arguments","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete",
1136      "do","double","else","enum","eval","event","export","extends","false","final","finally","float","for","function","goto","if","implements","import",
1137      "in","instanceof","int","interface","let","long","NaN","native","new","null","package","private","protected","public","return","short","static",
1138      "super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield",
1139      "String"];
1140    } else if (typ == "kotlin") {
1141      words = ['package','as','typealias','class','interface','this','super','val','operator','var','fun','for','is','in','This','throw','return',
1142      'annotation','break','continue','object','if','else','while','do','try','when','!in','!is','as?','file','import','where','by','get','
1142set',
1143      'abstract','enum','open','inner','override','private','public','internal','protected','catch','finally','out','final','vararg','reified',
1144      'dynamic','companion','constructor','init','sealed','field','property','receiver','param','sparam','lateinit','data','inline','noinline',
1145      'tailrec','external','annotation','crossinline','const','operator','infix','suspend','actual','expect','setparam','Boolean','Byte','Character',
1146      'CharSequence','Class','ClassLoader','Cloneable','Comparable','Compiler','Double','Exception','Float','Integer','Long','Math','Number','Object',
1147      'Package','Pair','Process','Runtime','Runnable','SecurityManager','Short','StackTraceElement','StrictMath','String','StringBuffer','System',
1148      'Thread','ThreadGroup','ThreadLocal','Throwable','Triple','Void','Annotation','Any','BooleanArray','ByteArray','Char','CharArray',
1149      'DeprecationLevel','DoubleArray','Enum','FloatArray','Function','Int','IntArray','Lazy','LazyThreadSafetyMode','LongArray','Nothing','ShortArray','Unit'];
1150    } else if (typ == "php") {
1151      words = ["$GLOBALS","$_SERVER","$_REQUEST","$_POST","$_GET","$_FILES","$_ENV","$_COOKIE","$_SESSION",
1152      "__halt_compiler","abstract","and","array","as","break","callable","case","catch","class","clone","const","continue","declare","default",
1153      "die","do","echo","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","eval","exit","extends","final","for",
1154      "foreach","function","global","goto","if","implements","include","include_once","instanceof","insteadof","interface","isset","list","namespace","new",
1155      "or","print","private","protected","public","require","require_once","return","static","switch","throw","trait","try","unset","use","var","while","xor"];
1156    } else if (typ == "sql") {
1157      words = ["ADD","EXTERNAL","PROCEDURE","ALL","FETCH","PUBLIC","ALTER","FILE","RAISERROR","AND","FILLFACTOR","READ","ANY","READTEXT","AS","FOREIGN",
1158      "RECONFIGURE","ASC","FREETEXT","REFERENCES","AUTHORIZATION","FREETEXTTABLE","REPLICATION","BACKUP","FROM","RESTORE","BEGIN","FULL","RESTRICT","BETWEEN",
1159      "FUNCTION","RETURN","BREAK","GOTO","REVERT","BROWSE","GRANT","REVOKE","BULK","GROUP","RIGHT","BY","HAVING","ROLLBACK","CASCADE","HOLDLOCK","ROWCOUNT",
1160      "CASE","IDENTITY","ROWGUIDCOL","CHECK","IDENTITY_INSERT","RULE","CHECKPOINT","IDENTITYCOL","SAVE","CLOSE","IF","SCHEMA","CLUSTERED","IN",
1161      "SECURITYAUDIT","COALESCE","INDEX","SELECT","COLLATE","INNER","SEMANTICKEYPHRASETABLE","COLUMN","INSERT","SEMANTICSIMILARITYDETAILSTABLE","COMMIT",
1162      "INTERSECT","SEMANTICSIMILARITYTABLE","COMPUTE","INTO","SESSION_USER","CONSTRAINT","IS","SET","CONTAINS","JOIN","SETUSER","CONTAINSTABLE","KEY",
1163      "SHUTDOWN","CONTINUE","KILL","SOME","CONVERT","LEFT","STATISTICS","CREATE","LIKE","SYSTEM_USER","CROSS","LINENO","TABLE","CURRENT","LOAD","TABLESAMPLE",
1164      "CURRENT_DATE","MERGE","TEXTSIZE","CURRENT_TIME","NATIONAL","THEN","CURRENT_TIMESTAMP","NOCHECK","TO","CURRENT_USER","NONCLUSTERED","TOP","CURSOR",
1165      "NOT","TRAN","DATABASE","NULL","TRANSACTION","DBCC","NULLIF","TRIGGER","DEALLOCATE","OF","TRUNCATE","DECLARE","OFF","TRY_CONVERT","DEFAULT","OFFSETS",
1166      "TSEQUAL","DELETE","ON","UNION","DENY","OPEN","UNIQUE","DESC","OPENDATASOURCE","UNPIVOT","DISK","OPENQUERY","UPDATE","DISTINCT","OPENROWSET",
1167      "UPDATETEXT","DISTRIBUTED","OPENXML","USE","DOUBLE","OPTION","USER","DROP","OR","VALUES","DUMP","ORDER","VARYING","ELSE","OUTER","VIEW","END",
1168      "OVER","WAITFOR","ERRLVL","PERCENT","WHEN","ESCAPE","PIVOT","WHERE","EXCEPT","PLAN","WHILE","EXEC","PRECISION","WITH","EXECUTE","PRIMARY",
1169      "WITHIN GROUP","EXISTS","PRINT","WRITETEXT","EXIT","PROC","LIMIT","MODIFY","COUNT","REPLACE"];
1170    } else if (typ == "python") {
1171      words = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import",
1172      "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in", "abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr",
1173      "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr",
1174      "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max",
1175      "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "print", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice",
1176      "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"];
1177    }
1178    for (i = 0; i < words.length; i++) {
1179      if (typ == "php" || typ == "sql") {
1180        pos = txt.toLowerCase().indexOf(words[i].toLowerCase());
1181      } else {
1182        pos = txt.indexOf(words[i]);
1183      }
1184      if (pos > -1) {
1185        patt = /\W/g;
1186        if (txt.substr(pos + words[i].length,1).match(patt) && txt.substr(pos - 1,1).match(patt)) {
1187          if (pos > -1 && (rpos == -1 || pos < rpos)) {
1188            rpos = pos;
1189            rpos2 = rpos + words[i].length;
1190          }
1191        }
1192      } 
1193    }
1194    return [rpos, rpos2, func];
1195  }
1196  function getPos(txt, start, end, func) {
1197    var s, e;
1198    s = txt.search(start);
1199    e = txt.indexOf(end, s + (end.length));
1200    if (e == -1) {e = txt.length;}
1201    return [s, e + (end.length), func];
1202  }
1203  function getNumPos(txt, func) {
1204    var arr = ["<br>", " ", ";", "(", "+", ")", "[", "]", ",", "&", ":", "{", "}", "../index.html" ,"-", "*", "|", "%", "="], i, j, c, startpos = 0, endpos, word;
1205    for (i = 0; i < txt.length; i++) {
1206      for (j = 0; j < arr.length; j++) {
1207        c = txt.substr(i, arr[j].length);
1208        if (c == arr[j]) {
1209          if (c == "-" && (txt.substr(i - 1, 1) == "e" || txt.substr(i - 1, 1) == "E")) {
1210            continue;
1211          }
1212          endpos = i;
1213          if (startpos < endpos) {
1214            word = txt.substring(startpos, endpos);
1215            if (!isNaN(word)) {return [startpos, endpos, func];}
1216          }
1217          i += arr[j].length;
1218          startpos = i;
1219          i -= 1;
1220          break;
1221        }
1222      }
1223    }  
1224    return [-1, -1, func];
1225  }  
1226}
1227}
1228)();
1229(
1230function setThemeMode() {
1231  var x = localStorage.getItem("preferredmode");
1232  if (x == "dark") {
1233    document.body.className += " darktheme";
1234  }
1235})();
1236document.getElementById("googleSearch").style.display = "none";

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.