From d9214f1fc5edd01259364ecc87c850bd6d543484 Mon Sep 17 00:00:00 2001 From: Meng-na-mei <139422013+Meng-na-mei@users.noreply.github.com> Date: Wed, 27 Sep 2023 20:55:43 +0800 Subject: [PATCH] Delete js directory --- js/MoveContent.js | 26 - js/ceshi.js | 504 ----------------- js/detect.js | 1196 ----------------------------------------- js/jQuery.js | 2 - js/main_javascript.js | 643 ---------------------- 5 files changed, 2371 deletions(-) delete mode 100644 js/MoveContent.js delete mode 100644 js/ceshi.js delete mode 100644 js/detect.js delete mode 100644 js/jQuery.js delete mode 100644 js/main_javascript.js diff --git a/js/MoveContent.js b/js/MoveContent.js deleted file mode 100644 index 6d4954b..0000000 --- a/js/MoveContent.js +++ /dev/null @@ -1,26 +0,0 @@ -function MoveContentOutside() { - // Script written by Chiel van Amstel to move the inserted content, thereby relieving it from the reign of the iGEM stylesheet. This script is free to be used by others, as long as full credit is given (in the form of this comment). - - inserted_content = document.querySelector('div#mw-content-text').children - head = inserted_content[0].children //
items from inserted html - oldHead = document.querySelector('head').children; - - // move all items to the iGEM section - for (var i = head.length; i > 0; i--) { - el = head[0]; - document.querySelector('head').appendChild(el); - } - - // move all content outside of the iGEM scope (all but 1, because p before inserted content = inserted head) - for (var j = inserted_content.length - 2; j > 0; j--) { - el = inserted_content[1]; - document.querySelector('body').appendChild(el); - } - - // remove the inserted iGEM sections (empty, because content is moved outside now - var leftover = document.querySelector('#globalWrapper>div#content'); - leftover.parentNode.removeChild(leftover); - - // remove padding from top iGEM bar - document.querySelector('div#globalWrapper').style.paddingBottom = "0px"; -} \ No newline at end of file diff --git a/js/ceshi.js b/js/ceshi.js deleted file mode 100644 index f0e0777..0000000 --- a/js/ceshi.js +++ /dev/null @@ -1,504 +0,0 @@ -const PROTOCOL_SLIDE_NUMBER = 1 - -// Loader -$(window).on('load', function () { - $('.loader').css('animation', 'none') - $('.loader-wrapper').fadeOut('slow') -}) - - - -// Modals -var modals = document.getElementsByClassName('modal')// Get the modal - -// Get the button that opens the modal -var btn1 = document.getElementsByClassName('team-box') -var btn2 = document.getElementsByClassName('profile') - -var spans = document.getElementsByClassName('close')// Get the element that closes the modal - -// When the user clicks on the button, open the modal -for (var i = 0; i < btn1.length; i++) { - btn1[i].onclick = function (e) { - e.preventDefault() - let modal = document.querySelector(e.currentTarget.getAttribute('href')) - modal.style.display = 'block' - } -}; -// When the user clicks on the button, open the modal -for (var i = 0; i < btn2.length; i++) { - btn2[i].onclick = function (e) { - e.preventDefault() - let modal = document.querySelector(e.currentTarget.getAttribute('href')) - modal.style.display = 'block' - } -}; -// When the user clicks on (x), close the modal -for (var i = 0; i < spans.length; i++) { - spans[i].onclick = function () { - for (var index in modals) { - if (typeof modals[index].style !== 'undefined') modals[index].style.display = 'none' - } - } -} -// When the user clicks anywhere outside of the modal, close it -window.onclick = function (event) { - if (event.target.classList.contains('modal')) { - for (var index in modals) { - if (typeof modals[index].style !== 'undefined') modals[index].style.display = 'none' - } - } -} - -// Create variable for the navbar -var nav1 = $('#normal-nav') -var nav2 = $('#mobile-nav') -// Add an event upon scrolling -window.addEventListener('scroll', function () { - if (window.pageYOffset > 10) { // if pageYoffset is larger than 10 - nav1.addClass('dark-nav') - nav2.addClass('dark-nav') // add the dark-nav class - } else { - nav1.removeClass('dark-nav') - nav2.removeClass('dark-nav') // else remove the dark-nav class - } -}) - -/* Code for the mobile navbar */ -// set the width of the side nav to 75% upon openNav, if the nabar is already open, close the navbar upon clicking the hamburger menu again. - -function openNav() { - if ($('#side-nav').width() == 0) { - $('#side-nav').css('width', '75%') - } else { - $('#side-nav').css('width', '0') - } -} -// set width to 0 upon closeNav -function closeNav() { - $('#side-nav').css('width', '0') -}; - -// Mobile dropdown menu -$('.mobile-dropdown-menu').children('li').on('click', function () { - $(this).children('ul').slideToggle('slow') -}) - -// Automatic scroll down -$(document).ready(function () { - scrollTo(0, 0) - var myVideo = $('video').first().get(0) - var arrowDown = $('.arrow-down').first().get(0) - if (arrowDown == null) { - return - } - setTimeout(function () { - arrowDown.style.opacity = 1 - }, 3000) - myVideo.addEventListener('loadeddata', function () { - setTimeout(function () { - var jumpPos = $('#home-main-body').offset().top - if ($(document).scrollTop() <= jumpPos) { - var mainbody = document.querySelector('#home-main-body') - var mainbodyTop = mainbody.getBoundingClientRect().top + window.scrollY - scrollTo(0, mainbodyTop - 79) - } - }, 17500) - }, false) -}) - -$(window).on("load", function () { - // Collapsible - function openFirstCollapsible() { - let targetElement = document.querySelector('.collapsible.active') - if (targetElement == null) { - return - } - // console.log(targetElement) - let content = targetElement.nextElementSibling - if (content.style.maxHeight) { - content.style.maxHeight = null - content.style.boxShadow = '0' - } else { - content.style.maxHeight = content.scrollHeight + 'px' - content.style.boxShadow = 'inset 0 0 0 3px #e5e5e5' - } - }; - document.addEventListener('DOMContentLoaded', openFirstCollapsible()) -}); - -function onCollapsibleClick(event) { - if (event.type === 'keypress' && e.key != 'Enter') { - return - } - let targetElement = event.currentTarget - let content = targetElement.nextElementSibling - let otherActiveColl = document.querySelector('.collapsible.active') - // console.log(otherActiveColl) - if (targetElement != otherActiveColl && otherActiveColl != null) { - let content = otherActiveColl.nextElementSibling - content.style.maxHeight = null - content.style.boxShadow = '0' - otherActiveColl.classList.remove('active') - } - targetElement.classList.toggle('active') - if (content.style.maxHeight) { - content.style.maxHeight = null - content.style.boxShadow = '0' - } else { - content.style.maxHeight = content.scrollHeight + 'px' - // content.style.boxShadow = 'inset 0 0 0 3px #e5e5e5' - } -}; - -var coll = document.getElementsByClassName('collapsible') -for (var i = 0; i < coll.length; i++) { - coll[i].addEventListener('click', onCollapsibleClick) - coll[i].addEventListener('keypress', onCollapsibleClick) -}; - -function onExperimentClick(event) { - let clickedExperiment = event.currentTarget - // id of popout containing button and content - let protocolId = clickedExperiment.getAttribute('linkedid') - showProtocol(protocolId) -}; - -function showProtocol(protocolId) { - showDivs(PROTOCOL_SLIDE_NUMBER) - let protocolElement = document.getElementById(protocolId) - let protocolButtonElement = protocolElement.firstElementChild - let opened = protocolButtonElement.classList.contains('active') - if (!opened) { - protocolButtonElement.dispatchEvent(new Event('click')) - } - // scroll to protocol height - setTimeout(function () { - let protocolElementTop = protocolElement.getBoundingClientRect().top - window.scrollTo(0, protocolElementTop + window.scrollY - 80) - }, 400) -}; - -var experiments = document.getElementsByClassName('experiments') -for (var i = 0; i < experiments.length; i++) { - experiments[i].addEventListener('click', onExperimentClick) -}; - -function onMainNavLinkClick(event) { - let clickedMainNavLink = event.currentTarget - let collapsibleId = clickedMainNavLink.getAttribute('linkedid') - // console.log(collapsibleId) - let chapterId = clickedMainNavLink.getAttribute('linkedidchapter') - let chapterIdElement = document.getElementById(chapterId) - // console.log(chapterId) - if (chapterId == 'undefined' || chapterId == null) { - return - } - showCollapsible(collapsibleId) - setTimeout(function () { - let chapterIdElementTop = chapterIdElement.getBoundingClientRect().top + window.scrollY - scrollTo(0, chapterIdElementTop - 79) - }, 300) -} - -let mainNavLink = document.getElementsByClassName('main-nav-link') -for (var i = 0; i < mainNavLink.length; i++) { - mainNavLink[i].addEventListener('click', onMainNavLinkClick) -} -function showCollapsible(collapsibleId) { - if (collapsibleId == 'undefined' || collapsibleId == null) { - return - } - let collapsibleElement = document.getElementById(collapsibleId) - let opened = collapsibleElement.classList.contains('active') - if (!opened) { - collapsibleElement.dispatchEvent(new Event('click')) - } -} -// Collapsible for results -var readmoreButton = document.getElementsByClassName('readmore-button') - -for (var i = 0; i < readmoreButton.length; i++) { - readmoreButton[i].addEventListener('click', function () { - var content = this.nextElementSibling - var buttonText = this.children[0] - var moreLess = buttonText.children[1] - console.log(buttonText) - if (content == null) { - return - } - if (content.style.maxHeight) { - content.style.maxHeight = null - content.style.opacity = null - moreLess.innerHTML = ' +' - } else { - content.style.maxHeight = content.scrollHeight + 'px' - content.style.opacity = '1' - moreLess.innerHTML = ' -' - } - }) -}; - -// Detecting whether the user uses Safari -var user = detect.parse(navigator.userAgent) -if (user.browser.family === 'Safari') { - // Scroll code, that ideally only executes for Safari. - $('a').on('click', function (event) { - // Make sure this.hash has a value before overriding default behavior - if (this.hash !== '') { - // Prevent default anchor click behavior - event.preventDefault() - // Store hash - var hash = this.hash - // Using jQuery's animate() method to add smooth page scroll - // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area - $('html, body').animate({ - scrollTop: $(hash).offset().top - }, 800, function () { - // Add hash (#) to URL when done scrolling (default click behavior) - window.location.hash = hash - }) - } - }) -}; - - -// This code moves the arrow to indicate which chapter we are looking at. -// Give the marker a style of left of the offsetLeft of the event of the indicator -function indicator(e) { - var marker = document.querySelector('#marker') // select the marker - marker.style.left = e.offsetLeft + ((e.offsetWidth / 2) - (marker.offsetWidth / 2)) + 'px' -}; - - -// Keep track of which slide-section is active - -var currentSlideIndex = 0 -showDivs(currentSlideIndex) - -function plusDivs(n) { - showDivs(currentSlideIndex + n) -}; - -function showDivs(slideIndex) { - var i - var sections = $('.slide-sections') // get the sections - var asides = $('aside') // get the asides - var buttons = $('.button-name') // get buttons - var slider = $('.slider') // get slider - // console.log(buttons) - - if (asides.length == 0) { - // Do not do anything as there are no asides. - } else if ($(window).width() >= 800) { // if we're on big screens - for (i = 0; i < sections.length; i++) { - asides[i].style.display = 'none' // don't display the sections. - } - asides[slideIndex].style.display = 'block' - } else { - for (i = 0; i < sections.length; i++) { - asides[i].style.display = 'none' // don't display the sections. - } - } - if (buttons.length == 0) { - - } else { - indicator(buttons[slideIndex]) - buttons[currentSlideIndex].classList.remove('active') - buttons[slideIndex].classList.add('active') - } - - if (asides.length == 0) { - } else { - let mainNavLinks = document.querySelectorAll('aside')[slideIndex].querySelectorAll('div .sub-navigation-chapter a') // get a list of all the nav links - window.addEventListener('scroll', function () { - mainNavLinks.forEach(function (link) { - let chapterId = link.getAttribute('linkedidchapter') - let chapterIdElement = document.getElementById(chapterId) - if ( - chapterIdElement.getBoundingClientRect().top <= 80 && - chapterIdElement.getBoundingClientRect().bottom >= 80 - ) { - link.classList.add('active') - } else { - link.classList.remove('active') - } - }) - }) - } - for (var i = 0; i < sections.length; i++) { - if (i == slideIndex) { - sections[i].style.height = '100%' - slider.css({ - '-webkit-transform': 'translateX(-' + (i * 25) + '%)', - '-ms-transform': 'translateX(-' + (i * 25) + '%)', - 'transform': 'translateX(-' + (i * 25) + '%)' - }) - } else { - sections[i].style.height = '0' - } - } - currentSlideIndex = slideIndex -}; - - - -// Function for whenever the window gets resized -var resizeId - -$(window).resize(function () { - clearTimeout(resizeId) - resizeId = setTimeout(function () { - showDivs(currentSlideIndex) - toggleWidth() - , 1700 - - }) -}) - - - -// Mobile to top arrow -window.addEventListener('scroll', function () { - if (window.pageYOffset > 100) { - document.getElementById('mobile-to-top-arrow').classList.add('active1') - } else { - document.getElementById('mobile-to-top-arrow').classList.remove('active1') - } -}) -// Intersection observer -const sliders = document.querySelectorAll('.slide-in') - -const appearOptions = { - threshold: 0, - rootMargin: '0px 0px 0px 0px' -} - -const appearOnScroll = new IntersectionObserver(function ( - entries, - appearOnScroll -) { - entries.forEach(function (entry) { - if (!entry.isIntersecting) { - return - } else { - entry.target.classList.add('appear') - appearOnScroll.unobserve(entry.target) - } - }) -}, - appearOptions) - -sliders.forEach(function (slider) { - appearOnScroll.observe(slider) -}) - -// Color blindness slider -function initComparisons() { - var x, i; - /*find all elements with an "overlay" class:*/ - x = document.getElementsByClassName("img-comp-overlay"); - for (i = 0; i < x.length; i++) { - /*once for each "overlay" element: - pass the "overlay" element as a parameter when executing the compareImages function:*/ - compareImages(x[i]); - //console.log(x) - } - function compareImages(img) { - var slider, img, clicked = 0, w, h; - /* get the width and height of the img element */ - w = img.offsetWidth; - //console.log(w) - h = img.offsetHeight; - /*set the width of the img element to 50%:*/ - img.style.width = (w / 2) + "px"; - /*create slider:*/ - slider = document.createElement("DIV"); - slider.setAttribute("class", "img-comp-slider"); - /*insert slider*/ - img.parentElement.insertBefore(slider, img); - /*position the slider in the middle:*/ - slider.style.top = (h / 2) - (slider.offsetHeight / 2) + "px"; - slider.style.left = (w / 2) - (slider.offsetWidth / 2) + "px"; - /*execute a function when the mouse button is pressed:*/ - slider.addEventListener("mousedown", slideReady); - /*and another function when the mouse button is released:*/ - window.addEventListener("mouseup", slideFinish); - /*or touched (for touch screens:*/ - slider.addEventListener("touchstart", slideReady); - /*and released (for touch screens:*/ - window.addEventListener("touchend", slideFinish); - function slideReady(e) { - /*prevent any other actions that may occur when moving over the image:*/ - e.preventDefault(); - /*the slider is now clicked and ready to move:*/ - clicked = 1; - /*execute a function when the slider is moved:*/ - window.addEventListener("mousemove", slideMove); - window.addEventListener("touchmove", slideMove); - } - function slideFinish() { - /*the slider is no longer clicked:*/ - clicked = 0; - } - function slideMove(e) { - var pos; - /*if the slider is no longer clicked, exit this function:*/ - if (clicked == 0) return false; - /*get the cursor's x position:*/ - pos = getCursorPos(e) - /*prevent the slider from being positioned outside the image:*/ - if (pos < 0) pos = 0; - if (pos > w) pos = w; - /*execute a function that will resize the overlay image according to the cursor:*/ - slide(pos); - } - function getCursorPos(e) { - var a, x = 0; - e = e || window.event; - /*get the x positions of the image:*/ - a = img.getBoundingClientRect(); - /*calculate the cursor's x coordinate, relative to the image:*/ - x = e.pageX - a.left; - /*consider any page scrolling:*/ - x = x - window.pageXOffset; - return x; - } - function slide(x) { - /*resize the image:*/ - img.style.width = x + "px"; - /*position the slider:*/ - slider.style.left = img.offsetWidth - (slider.offsetWidth / 2) + "px"; - } - } -} - - - -function toggleWidth() { - let sectionsContainer = $(".sections-container") - let asides = $("aside") - if (asides.length < 1) { - let mainBody = $(".main-body") - mainBody.addClass("margin-normal") - return - } - if ($(window).width() > 1240 && asides.parents().is(".new")) { - sectionsContainer.addClass("grid-normal") - let newWrapper = $('.new') - console.log(newWrapper) - newWrapper.addClass("grid-aside") - } else if ($(window).width() > 1240) { - sectionsContainer.addClass("grid-normal") - asides.wrap("") - let newWrapper = $('.new') - console.log(newWrapper) - newWrapper.addClass("grid-aside") - } else if (asides.parents().is(".new")) { - sectionsContainer.removeClass("grid-normal") - asides.unwrap() - } else { - sectionsContainer.removeClass("grid-normal") - } -} -document.addEventListener('DOMContentLoaded', toggleWidth()) \ No newline at end of file diff --git a/js/detect.js b/js/detect.js deleted file mode 100644 index e9d5c12..0000000 --- a/js/detect.js +++ /dev/null @@ -1,1196 +0,0 @@ -/** - * Detect.js: User-Agent Parser - * https://github.com/darcyclarke/Detect.js - * Dual licensed under the MIT and GPL licenses. - * - * @version 2.2.2 - * @author Darcy Clarke - * @url http://darcyclarke.me - * @createdat Mon Oct 26 2015 08:21:54 GMT-0200 (Horário brasileiro de verão) - * - * Based on UA-Parser (https://github.com/tobie/ua-parser) by Tobie Langel - * - * Example Usage: - * var agentInfo = detect.parse(navigator.userAgent); - * console.log(agentInfo.browser.family); // Chrome - * - */ -(function (root, undefined) { - // Shim Array.prototype.map if necessary - // Production steps of ECMA-262, Edition 5, 15.4.4.19 - // Reference: http://es5.github.com/#x15.4.4.19 - if (!Array.prototype.map) { - Array.prototype.map = function (callback, thisArg) { - var T, A, k; - if (this == null) { - throw new TypeError(" this is null or not defined"); - } - // 1. Let O be the result of calling ToObject passing the |this| value as the argument. - var O = Object(this); - // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length". - // 3. Let len be ToUint32(lenValue). - var len = O.length >>> 0; - // 4. If IsCallable(callback) is false, throw a TypeError exception. - // See: http://es5.github.com/#x9.11 - if (typeof callback !== "function") { - throw new TypeError(callback + " is not a function"); - } - // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. - if (thisArg) { - T = thisArg; - } - // 6. Let A be a new array created as if by the expression new Array(len) where Array is - // the standard built-in constructor with that name and len is the value of len. - A = new Array(len); - // 7. Let k be 0 - k = 0; - // 8. Repeat, while k < len - while (k < len) { - var kValue, mappedValue; - // a. Let Pk be ToString(k). - // This is implicit for LHS operands of the in operator - // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk. - // This step can be combined with c - // c. If kPresent is true, then - if (k in O) { - // i. Let kValue be the result of calling the Get internal method of O with argument Pk. - kValue = O[k]; - // ii. Let mappedValue be the result of calling the Call internal method of callback - // with T as the this value and argument list containing kValue, k, and O. - mappedValue = callback.call(T, kValue, k, O); - // iii. Call the DefineOwnProperty internal method of A with arguments - // Pk, Property Descriptor {Value: mappedValue, : true, Enumerable: true, Configurable: true}, - // and false. - // In browsers that support Object.defineProperty, use the following: - // Object.defineProperty(A, Pk, { value: mappedValue, writable: true, enumerable: true, configurable: true }); - // For best browser support, use the following: - A[k] = mappedValue; - } - // d. Increase k by 1. - k++; - } - // 9. return A - return A; - }; - } - // Detect - var detect = root.detect = function () { - // Context - var _this = function () { }; - // Regexes - var regexes = { - browser_parsers: [{ - regex: "^(Opera)/(\\d+)\\.(\\d+) \\(Nintendo Wii", - family_replacement: "Wii", - manufacturer: "Nintendo" - }, { - regex: "(SeaMonkey|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)", - family_replacement: "Camino", - other: true - }, { - regex: "(Pale[Mm]oon)/(\\d+)\\.(\\d+)\\.?(\\d+)?", - family_replacement: "Pale Moon (Firefox Variant)", - other: true - }, { - regex: "(Fennec)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)", - family_replacement: "Firefox Mobile" - }, { - regex: "(Fennec)/(\\d+)\\.(\\d+)(pre)", - family_replacment: "Firefox Mobile" - }, { - regex: "(Fennec)/(\\d+)\\.(\\d+)", - family_replacement: "Firefox Mobile" - }, { - regex: "Mobile.*(Firefox)/(\\d+)\\.(\\d+)", - family_replacement: "Firefox Mobile" - }, { - regex: "(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)", - family_replacement: "Firefox ($1)" - }, { - regex: "(Firefox)/(\\d+)\\.(\\d+)(a\\d+[a-z]*)", - family_replacement: "Firefox Alpha" - }, { - regex: "(Firefox)/(\\d+)\\.(\\d+)(b\\d+[a-z]*)", - family_replacement: "Firefox Beta" - }, { - regex: "(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(a\\d+[a-z]*)", - family_replacement: "Firefox Alpha" - }, { - regex: "(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(b\\d+[a-z]*)", - family_replacement: "Firefox Beta" - }, { - regex: "(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?", - family_replacement: "Firefox ($1)" - }, { - regex: "(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "MicroB", - tablet: true - }, { - regex: "(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?" - }, { - regex: "(Flock)/(\\d+)\\.(\\d+)(b\\d+?)", - family_replacement: "Flock", - other: true - }, { - regex: "(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Rockmelt", - other: true - }, { - regex: "(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Netscape" - }, { - regex: "(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)", - family_replacement: "Netscape" - }, { - regex: "(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Netscape" - }, { - regex: "(MyIBrow)/(\\d+)\\.(\\d+)", - family_replacement: "My Internet Browser", - other: true - }, { - regex: "(Opera Tablet).*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?", - family_replacement: "Opera Tablet", - tablet: true - }, { - regex: "(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)", - family_replacement: "Opera Mobile" - }, { - regex: "Opera Mobi", - family_replacement: "Opera Mobile" - }, { - regex: "(Opera Mini)/(\\d+)\\.(\\d+)", - family_replacement: "Opera Mini" - }, { - regex: "(Opera Mini)/att/(\\d+)\\.(\\d+)", - family_replacement: "Opera Mini" - }, { - regex: "(Opera)/9.80.*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?", - family_replacement: "Opera" - }, { - regex: "(OPR)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?", - family_replacement: "Opera" - }, { - regex: "(webOSBrowser)/(\\d+)\\.(\\d+)", - family_replacement: "webOS" - }, { - regex: "(webOS)/(\\d+)\\.(\\d+)", - family_replacement: "webOS" - }, { - regex: "(wOSBrowser).+TouchPad/(\\d+)\\.(\\d+)", - family_replacement: "webOS TouchPad" - }, { - regex: "(luakit)", - family_replacement: "LuaKit", - other: true - }, { - regex: "(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)", - family_replacement: "Lightning", - other: true - }, { - regex: "(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)", - family_replacement: "Swiftfox", - other: true - }, { - regex: "(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)", - family_replacement: "Swiftfox", - other: true - }, { - regex: "rekonq", - family_replacement: "Rekonq", - other: true - }, { - regex: "(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?", - family_replacement: "Conkeror", - other: true - }, { - regex: "(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Konqueror", - other: true - }, { - regex: "(WeTab)-Browser", - family_replacement: "WeTab", - other: true - }, { - regex: "(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Comodo Dragon", - other: true - }, { - regex: "(YottaaMonitor)", - family_replacement: "Yottaa Monitor", - other: true - }, { - regex: "(Kindle)/(\\d+)\\.(\\d+)", - family_replacement: "Kindle" - }, { - regex: "(Symphony) (\\d+).(\\d+)", - family_replacement: "Symphony", - other: true - }, { - regex: "Minimo", - family_replacement: "Minimo", - other: true - }, { - regex: "(Edge)/(\\d+)\\.(\\d+)", - family_replacement: "Edge" - }, { - regex: "(CrMo)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Chrome Mobile" - }, { - regex: "(CriOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Chrome Mobile iOS" - }, { - regex: "(Chrome)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+) Mobile", - family_replacement: "Chrome Mobile" - }, { - regex: "(chromeframe)/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Chrome Frame" - }, { - regex: "(UC Browser)(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "UC Browser", - other: true - }, { - regex: "(SLP Browser)/(\\d+)\\.(\\d+)", - family_replacement: "Tizen Browser", - other: true - }, { - regex: "(Epiphany)/(\\d+)\\.(\\d+).(\\d+)", - family_replacement: "Epiphany", - other: true - }, { - regex: "(SE 2\\.X) MetaSr (\\d+)\\.(\\d+)", - family_replacement: "Sogou Explorer", - other: true - }, { - regex: "(Pingdom.com_bot_version_)(\\d+)\\.(\\d+)", - family_replacement: "PingdomBot", - other: true - }, { - regex: "(facebookexternalhit)/(\\d+)\\.(\\d+)", - family_replacement: "FacebookBot" - }, { - regex: "(Twitterbot)/(\\d+)\\.(\\d+)", - family_replacement: "TwitterBot" - }, { - regex: "(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iron|Iris|UP\\.Browser|Bunjaloo|Google Earth|Raven for Mac)/(\\d+)\\.(\\d+)\\.(\\d+)" - }, { - regex: "(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Iron|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris)/(\\d+)\\.(\\d+)" - }, { - regex: "(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)" - }, { - regex: "(iCab|Lunascape|Opera|Android|Jasmine|Polaris|BREW) (\\d+)\\.(\\d+)\\.?(\\d+)?" - }, { - regex: "(Android) Donut", - v2_replacement: "2", - v1_replacement: "1" - }, { - regex: "(Android) Eclair", - v2_replacement: "1", - v1_replacement: "2" - }, { - regex: "(Android) Froyo", - v2_replacement: "2", - v1_replacement: "2" - }, { - regex: "(Android) Gingerbread", - v2_replacement: "3", - v1_replacement: "2" - }, { - regex: "(Android) Honeycomb", - v1_replacement: "3" - }, { - regex: "(IEMobile)[ /](\\d+)\\.(\\d+)", - family_replacement: "IE Mobile" - }, { - regex: "(MSIE) (\\d+)\\.(\\d+).*XBLWP7", - family_replacement: "IE Large Screen" - }, { - regex: "(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)" - }, { - regex: "(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?" - }, { - regex: "(Obigo)InternetBrowser", - other: true - }, { - regex: "(Obigo)\\-Browser", - other: true - }, { - regex: "(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?", - other: true - }, { - regex: "(MAXTHON|Maxthon) (\\d+)\\.(\\d+)", - family_replacement: "Maxthon", - other: true - }, { - regex: "(Maxthon|MyIE2|Uzbl|Shiira)", - v1_replacement: "0", - other: true - }, { - regex: "(PLAYSTATION) (\\d+)", - family_replacement: "PlayStation", - manufacturer: "Sony" - }, { - regex: "(PlayStation Portable)[^\\d]+(\\d+).(\\d+)", - manufacturer: "Sony" - }, { - regex: "(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)", - other: true - }, { - regex: "(POLARIS)/(\\d+)\\.(\\d+)", - family_replacement: "Polaris", - other: true - }, { - regex: "(Embider)/(\\d+)\\.(\\d+)", - family_replacement: "Polaris", - other: true - }, { - regex: "(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Bon Echo", - other: true - }, { - regex: "(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Mobile Safari", - manufacturer: "Apple" - }, { - regex: "(iPod).*Version/(\\d+)\\.(\\d+)", - family_replacement: "Mobile Safari", - manufacturer: "Apple" - }, { - regex: "(iPod)", - family_replacement: "Mobile Safari", - manufacturer: "Apple" - }, { - regex: "(iPhone).*Version/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Mobile Safari", - manufacturer: "Apple" - }, { - regex: "(iPhone).*Version/(\\d+)\\.(\\d+)", - family_replacement: "Mobile Safari", - manufacturer: "Apple" - }, { - regex: "(iPhone)", - family_replacement: "Mobile Safari", - manufacturer: "Apple" - }, { - regex: "(iPad).*Version/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Mobile Safari", - tablet: true, - manufacturer: "Apple" - }, { - regex: "(iPad).*Version/(\\d+)\\.(\\d+)", - family_replacement: "Mobile Safari", - tablet: true, - manufacturer: "Apple" - }, { - regex: "(iPad)", - family_replacement: "Mobile Safari", - tablet: true, - manufacturer: "Apple" - }, { - regex: "(AvantGo) (\\d+).(\\d+)", - other: true - }, { - regex: "(Avant)", - v1_replacement: "1", - other: true - }, { - regex: "^(Nokia)", - family_replacement: "Nokia Services (WAP) Browser", - manufacturer: "Nokia" - }, { - regex: "(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)\\.(\\d+)", - manufacturer: "Nokia" - }, { - regex: "(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)", - manufacturer: "Nokia" - }, { - regex: "(NokiaBrowser)/(\\d+)\\.(\\d+)", - manufacturer: "Nokia" - }, { - regex: "(BrowserNG)/(\\d+)\\.(\\d+).(\\d+)", - family_replacement: "NokiaBrowser", - manufacturer: "Nokia" - }, { - regex: "(Series60)/5\\.0", - v2_replacement: "0", - v1_replacement: "7", - family_replacement: "NokiaBrowser", - manufacturer: "Nokia" - }, { - regex: "(Series60)/(\\d+)\\.(\\d+)", - family_replacement: "Nokia OSS Browser", - manufacturer: "Nokia" - }, { - regex: "(S40OviBrowser)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Nokia Series 40 Ovi Browser", - manufacturer: "Nokia" - }, { - regex: "(Nokia)[EN]?(\\d+)", - manufacturer: "Nokia" - }, { - regex: "(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Blackberry WebKit", - tablet: true, - manufacturer: "Nokia" - }, { - regex: "(Black[bB]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)", - family_replacement: "Blackberry WebKit", - manufacturer: "RIM" - }, { - regex: "(Black[bB]erry)\\s?(\\d+)", - family_replacement: "Blackberry", - manufacturer: "RIM" - }, { - regex: "(OmniWeb)/v(\\d+)\\.(\\d+)", - other: true - }, { - regex: "(Blazer)/(\\d+)\\.(\\d+)", - family_replacement: "Palm Blazer", - manufacturer: "Palm" - }, { - regex: "(Pre)/(\\d+)\\.(\\d+)", - family_replacement: "Palm Pre", - manufacturer: "Palm" - }, { - regex: "(Links) \\((\\d+)\\.(\\d+)", - other: true - }, { - regex: "(QtWeb) Internet Browser/(\\d+)\\.(\\d+)", - other: true - }, { - regex: "(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?", - other: true, - tablet: true - }, { - regex: "(AppleWebKit)/(\\d+)\\.?(\\d+)?\\+ .* Version/\\d+\\.\\d+.\\d+ Safari/", - family_replacement: "WebKit Nightly" - }, { - regex: "(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/", - family_replacement: "Safari" - }, { - regex: "(Safari)/\\d+" - }, { - regex: "(OLPC)/Update(\\d+)\\.(\\d+)", - other: true - }, { - regex: "(OLPC)/Update()\\.(\\d+)", - v1_replacement: "0", - other: true - }, { - regex: "(SEMC\\-Browser)/(\\d+)\\.(\\d+)", - other: true - }, { - regex: "(Teleca)", - family_replacement: "Teleca Browser", - other: true - }, { - regex: "Trident(.*)rv.(\\d+)\\.(\\d+)", - family_replacement: "IE" - }, { - regex: "(MSIE) (\\d+)\\.(\\d+)", - family_replacement: "IE" - }], - os_parsers: [{ - regex: "(Android) (\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?" - }, { - regex: "(Android)\\-(\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?" - }, { - regex: "(Android) Donut", - os_v2_replacement: "2", - os_v1_replacement: "1" - }, { - regex: "(Android) Eclair", - os_v2_replacement: "1", - os_v1_replacement: "2" - }, { - regex: "(Android) Froyo", - os_v2_replacement: "2", - os_v1_replacement: "2" - }, { - regex: "(Android) Gingerbread", - os_v2_replacement: "3", - os_v1_replacement: "2" - }, { - regex: "(Android) Honeycomb", - os_v1_replacement: "3" - }, { - regex: "(Silk-Accelerated=[a-z]{4,5})", - os_replacement: "Android" - }, { - regex: "(Windows Phone 6\\.5)" - }, { - regex: "(Windows (?:NT 5\\.2|NT 5\\.1))", - os_replacement: "Windows XP" - }, { - regex: "(XBLWP7)", - os_replacement: "Windows Phone OS" - }, { - regex: "(Windows NT 6\\.1)", - os_replacement: "Windows 7" - }, { - regex: "(Windows NT 6\\.0)", - os_replacement: "Windows Vista" - }, { - regex: "(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\\.0|Windows Vista|Windows 2000)" - }, { - regex: "(Windows NT 6\\.4|Windows NT 10\\.0)", - os_replacement: "Windows 10" - }, { - regex: "(Windows NT 6\\.2)", - os_replacement: "Windows 8" - }, { - regex: "(Windows Phone 8)", - os_replacement: "Windows Phone 8" - }, { - regex: "(Windows NT 5\\.0)", - os_replacement: "Windows 2000" - }, { - regex: "(Windows Phone OS) (\\d+)\\.(\\d+)" - }, { - regex: "(Windows ?Mobile)", - os_replacement: "Windows Mobile" - }, { - regex: "(WinNT4.0)", - os_replacement: "Windows NT 4.0" - }, { - regex: "(Win98)", - os_replacement: "Windows 98" - }, { - regex: "(Tizen)/(\\d+)\\.(\\d+)", - other: true - }, { - regex: "(Mac OS X) (\\d+)[_.](\\d+)(?:[_.](\\d+))?", - manufacturer: "Apple" - }, { - regex: "(?:PPC|Intel) (Mac OS X)", - manufacturer: "Apple" - }, { - regex: "(CPU OS|iPhone OS) (\\d+)_(\\d+)(?:_(\\d+))?", - os_replacement: "iOS", - manufacturer: "Apple" - }, { - regex: "(iPhone|iPad|iPod); Opera", - os_replacement: "iOS", - manufacturer: "Apple" - }, { - regex: "(iPad); Opera", - tablet: true, - manufacturer: "Apple" - }, { - regex: "(iPhone|iPad|iPod).*Mac OS X.*Version/(\\d+)\\.(\\d+)", - os_replacement: "iOS", - manufacturer: "Apple" - }, { - regex: "(CrOS) [a-z0-9_]+ (\\d+)\\.(\\d+)(?:\\.(\\d+))?", - os_replacement: "Chrome OS" - }, { - regex: "(Debian)-(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?", - other: true - }, { - regex: "(Linux Mint)(?:/(\\d+))?", - other: true - }, { - regex: "(Mandriva)(?: Linux)?/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?", - other: true - }, { - regex: "(Symbian[Oo][Ss])/(\\d+)\\.(\\d+)", - os_replacement: "Symbian OS" - }, { - regex: "(Symbian/3).+NokiaBrowser/7\\.3", - os_replacement: "Symbian^3 Anna" - }, { - regex: "(Symbian/3).+NokiaBrowser/7\\.4", - os_replacement: "Symbian^3 Belle" - }, { - regex: "(Symbian/3)", - os_replacement: "Symbian^3" - }, { - regex: "(Series 60|SymbOS|S60)", - os_replacement: "Symbian OS" - }, { - regex: "(MeeGo)", - other: true - }, { - regex: "Symbian [Oo][Ss]", - os_replacement: "Symbian OS" - }, { - regex: "(Black[Bb]erry)[0-9a-z]+/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?", - os_replacement: "BlackBerry OS", - manufacturer: "RIM" - }, { - regex: "(Black[Bb]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?", - os_replacement: "BlackBerry OS", - manufacturer: "RIM" - }, { - regex: "(RIM Tablet OS) (\\d+)\\.(\\d+)\\.(\\d+)", - os_replacement: "BlackBerry Tablet OS", - tablet: true, - manufacturer: "RIM" - }, { - regex: "(Play[Bb]ook)", - os_replacement: "BlackBerry Tablet OS", - tablet: true, - manufacturer: "RIM" - }, { - regex: "(Black[Bb]erry)", - os_replacement: "Blackberry OS", - manufacturer: "RIM" - }, { - regex: "(webOS|hpwOS)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?", - os_replacement: "webOS" - }, { - regex: "(SUSE|Fedora|Red Hat|PCLinuxOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)", - other: true - }, { - regex: "(SUSE|Fedora|Red Hat|Puppy|PCLinuxOS|CentOS)/(\\d+)\\.(\\d+)\\.(\\d+)", - other: true - }, { - regex: "(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\\d+)\\.(\\d+)" - }, { - regex: "(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)" - }, { - regex: "(Linux|BSD)", - other: true - }], - mobile_os_families: ["Windows Phone 6.5", "Windows CE", "Symbian OS"], - device_parsers: [{ - regex: "HTC ([A-Z][a-z0-9]+) Build", - device_replacement: "HTC $1", - manufacturer: "HTC" - }, { - regex: "HTC ([A-Z][a-z0-9 ]+) \\d+\\.\\d+\\.\\d+\\.\\d+", - device_replacement: "HTC $1", - manufacturer: "HTC" - }, { - regex: "HTC_Touch_([A-Za-z0-9]+)", - device_replacement: "HTC Touch ($1)", - manufacturer: "HTC" - }, { - regex: "USCCHTC(\\d+)", - device_replacement: "HTC $1 (US Cellular)", - manufacturer: "HTC" - }, { - regex: "Sprint APA(9292)", - device_replacement: "HTC $1 (Sprint)", - manufacturer: "HTC" - }, { - regex: "HTC ([A-Za-z0-9]+ [A-Z])", - device_replacement: "HTC $1", - manufacturer: "HTC" - }, { - regex: "HTC-([A-Za-z0-9]+)", - device_replacement: "HTC $1", - manufacturer: "HTC" - }, { - regex: "HTC_([A-Za-z0-9]+)", - device_replacement: "HTC $1", - manufacturer: "HTC" - }, { - regex: "HTC ([A-Za-z0-9]+)", - device_replacement: "HTC $1", - manufacturer: "HTC" - }, { - regex: "(ADR[A-Za-z0-9]+)", - device_replacement: "HTC $1", - manufacturer: "HTC" - }, { - regex: "(HTC)", - manufacturer: "HTC" - }, { - regex: "SonyEricsson([A-Za-z0-9]+)/", - device_replacement: "Ericsson $1", - other: true, - manufacturer: "Sony" - }, { - regex: "Android[\\- ][\\d]+\\.[\\d]+\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; WOWMobile (.+) Build" - }, { - regex: "Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build" - }, { - regex: "Android[\\- ][\\d]+\\.[\\d]+\\-update1\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build" - }, { - regex: "Android[\\- ][\\d]+\\.[\\d]+\\; [A-Za-z]{2}\\-[A-Za-z]{2}\\; (.+) Build" - }, { - regex: "Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; (.+) Build" - }, { - regex: "NokiaN([0-9]+)", - device_replacement: "Nokia N$1", - manufacturer: "Nokia" - }, { - regex: "Nokia([A-Za-z0-9\\v-]+)", - device_replacement: "Nokia $1", - manufacturer: "Nokia" - }, { - regex: "NOKIA ([A-Za-z0-9\\-]+)", - device_replacement: "Nokia $1", - manufacturer: "Nokia" - }, { - regex: "Nokia ([A-Za-z0-9\\-]+)", - device_replacement: "Nokia $1", - manufacturer: "Nokia" - }, { - regex: "Lumia ([A-Za-z0-9\\-]+)", - device_replacement: "Lumia $1", - manufacturer: "Nokia" - }, { - regex: "Symbian", - device_replacement: "Nokia", - manufacturer: "Nokia" - }, { - regex: "(PlayBook).+RIM Tablet OS", - device_replacement: "Blackberry Playbook", - tablet: true, - manufacturer: "RIM" - }, { - regex: "(Black[Bb]erry [0-9]+);", - manufacturer: "RIM" - }, { - regex: "Black[Bb]erry([0-9]+)", - device_replacement: "BlackBerry $1", - manufacturer: "RIM" - }, { - regex: "(Pre)/(\\d+)\\.(\\d+)", - device_replacement: "Palm Pre", - manufacturer: "Palm" - }, { - regex: "(Pixi)/(\\d+)\\.(\\d+)", - device_replacement: "Palm Pixi", - manufacturer: "Palm" - }, { - regex: "(Touchpad)/(\\d+)\\.(\\d+)", - device_replacement: "HP Touchpad", - manufacturer: "HP" - }, { - regex: "HPiPAQ([A-Za-z0-9]+)/(\\d+).(\\d+)", - device_replacement: "HP iPAQ $1", - manufacturer: "HP" - }, { - regex: "Palm([A-Za-z0-9]+)", - device_replacement: "Palm $1", - manufacturer: "Palm" - }, { - regex: "Treo([A-Za-z0-9]+)", - device_replacement: "Palm Treo $1", - manufacturer: "Palm" - }, { - regex: "webOS.*(P160UNA)/(\\d+).(\\d+)", - device_replacement: "HP Veer", - manufacturer: "HP" - }, { - regex: "(Kindle Fire)", - manufacturer: "Amazon" - }, { - regex: "(Kindle)", - manufacturer: "Amazon" - }, { - regex: "(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?", - device_replacement: "Kindle Fire", - tablet: true, - manufacturer: "Amazon" - }, { - regex: "(iPad) Simulator;", - manufacturer: "Apple" - }, { - regex: "(iPad);", - manufacturer: "Apple" - }, { - regex: "(iPod);", - manufacturer: "Apple" - }, { - regex: "(iPhone) Simulator;", - manufacturer: "Apple" - }, { - regex: "(iPhone);", - manufacturer: "Apple" - }, { - regex: "Nexus\\ ([A-Za-z0-9\\-]+)", - device_replacement: "Nexus $1" - }, { - regex: "acer_([A-Za-z0-9]+)_", - device_replacement: "Acer $1", - manufacturer: "Acer" - }, { - regex: "acer_([A-Za-z0-9]+)_", - device_replacement: "Acer $1", - manufacturer: "Acer" - }, { - regex: "Amoi\\-([A-Za-z0-9]+)", - device_replacement: "Amoi $1", - other: true, - manufacturer: "Amoi" - }, { - regex: "AMOI\\-([A-Za-z0-9]+)", - device_replacement: "Amoi $1", - other: true, - manufacturer: "Amoi" - }, { - regex: "Asus\\-([A-Za-z0-9]+)", - device_replacement: "Asus $1", - manufacturer: "Asus" - }, { - regex: "ASUS\\-([A-Za-z0-9]+)", - device_replacement: "Asus $1", - manufacturer: "Asus" - }, { - regex: "BIRD\\-([A-Za-z0-9]+)", - device_replacement: "Bird $1", - other: true - }, { - regex: "BIRD\\.([A-Za-z0-9]+)", - device_replacement: "Bird $1", - other: true - }, { - regex: "BIRD ([A-Za-z0-9]+)", - device_replacement: "Bird $1", - other: true - }, { - regex: "Dell ([A-Za-z0-9]+)", - device_replacement: "Dell $1", - manufacturer: "Dell" - }, { - regex: "DoCoMo/2\\.0 ([A-Za-z0-9]+)", - device_replacement: "DoCoMo $1", - other: true - }, { - regex: "([A-Za-z0-9]+)\\_W\\;FOMA", - device_replacement: "DoCoMo $1", - other: true - }, { - regex: "([A-Za-z0-9]+)\\;FOMA", - device_replacement: "DoCoMo $1", - other: true - }, { - regex: "vodafone([A-Za-z0-9]+)", - device_replacement: "Huawei Vodafone $1", - other: true - }, { - regex: "i\\-mate ([A-Za-z0-9]+)", - device_replacement: "i-mate $1", - other: true - }, { - regex: "Kyocera\\-([A-Za-z0-9]+)", - device_replacement: "Kyocera $1", - other: true - }, { - regex: "KWC\\-([A-Za-z0-9]+)", - device_replacement: "Kyocera $1", - other: true - }, { - regex: "Lenovo\\-([A-Za-z0-9]+)", - device_replacement: "Lenovo $1", - manufacturer: "Lenovo" - }, { - regex: "Lenovo\\_([A-Za-z0-9]+)", - device_replacement: "Lenovo $1", - manufacturer: "Levovo" - }, { - regex: "LG/([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "LG-LG([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "LGE-LG([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "LGE VX([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "LG ([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "LGE LG\\-AX([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "LG\\-([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "LGE\\-([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "LG([A-Za-z0-9]+)", - device_replacement: "LG $1", - manufacturer: "LG" - }, { - regex: "(KIN)\\.One (\\d+)\\.(\\d+)", - device_replacement: "Microsoft $1" - }, { - regex: "(KIN)\\.Two (\\d+)\\.(\\d+)", - device_replacement: "Microsoft $1" - }, { - regex: "(Motorola)\\-([A-Za-z0-9]+)", - manufacturer: "Motorola" - }, { - regex: "MOTO\\-([A-Za-z0-9]+)", - device_replacement: "Motorola $1", - manufacturer: "Motorola" - }, { - regex: "MOT\\-([A-Za-z0-9]+)", - device_replacement: "Motorola $1", - manufacturer: "Motorola" - }, { - regex: "Philips([A-Za-z0-9]+)", - device_replacement: "Philips $1", - manufacturer: "Philips" - }, { - regex: "Philips ([A-Za-z0-9]+)", - device_replacement: "Philips $1", - manufacturer: "Philips" - }, { - regex: "SAMSUNG-([A-Za-z0-9\\-]+)", - device_replacement: "Samsung $1", - manufacturer: "Samsung" - }, { - regex: "SAMSUNG\\; ([A-Za-z0-9\\-]+)", - device_replacement: "Samsung $1", - manufacturer: "Samsung" - }, { - regex: "Softbank/1\\.0/([A-Za-z0-9]+)", - device_replacement: "Softbank $1", - other: true - }, { - regex: "Softbank/2\\.0/([A-Za-z0-9]+)", - device_replacement: "Softbank $1", - other: true - }, { - regex: "(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)", - device_replacement: "Generic Smartphone" - }, { - regex: "^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\\-|airn|alav|asus|attw|au\\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\\-n|bw\\-u|beck|benq|bilb|blac|c55/|cdm\\-|chtm|capi|comp|cond|craw|dall|dbte|dc\\-s|dica|ds\\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\\-|fly\\_|g\\-mo|g1 u|g560|gf\\-5|grun|gene|go.w|good|grad|hcit|hd\\-m|hd\\-p|hd\\-t|hei\\-|hp i|hpip|hs\\-c|htc |htc\\-|htca|htcg)", - device_replacement: "Generic Feature Phone" - }, { - regex: "^(htcp|htcs|htct|htc\\_|haie|hita|huaw|hutc|i\\-20|i\\-go|i\\-ma|i230|iac|iac\\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\\-|klon|lexi|lg g|lg\\-a|lg\\-b|lg\\-c|lg\\-d|lg\\-f|lg\\-g|lg\\-k|lg\\-l|lg\\-m|lg\\-o|lg\\-p|lg\\-s|lg\\-t|lg\\-u|lg\\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\\-|lge/|lynx|leno|m1\\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\\-|nem\\-|newg|neon)", - device_replacement: "Generic Feature Phone" - }, { - regex: "^(netf|noki|nzph|o2 x|o2\\-x|opwv|owg1|opti|oran|ot\\-s|p800|pand|pg\\-1|pg\\-2|pg\\-3|pg\\-6|pg\\-8|pg\\-c|pg13|phil|pn\\-2|pt\\-g|palm|pana|pire|pock|pose|psio|qa\\-a|qc\\-2|qc\\-3|qc\\-5|qc\\-7|qc07|qc12|qc21|qc32|qc60|qci\\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\\-|scp\\-|sdk/|se47|sec\\-|sec0|sec1|semc|sgh\\-|shar|sie\\-|sk\\-0|sl45|slid|smb3|smt5|sp01|sph\\-|spv |spv\\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\\-mo|t218|t250|t600|t610|t618|tcl\\-|tdg\\-|telm|tim\\-|ts70|tsm\\-|tsm3|tsm5|tx\\-9|tagt)", - device_replacement: "Generic Feature Phone" - }, { - regex: "^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\\-|your|zte\\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\\-|webc|whit|wmlb|xda\\-|xda\\_)", - device_replacement: "Generic Feature Phone" - }, { - regex: "(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\\-webcrawler|converacrawler|dataparksearch|findlinks)", - device_replacement: "Spider" - }], - mobile_browser_families: ["Firefox Mobile", "Opera Mobile", "Opera Mini", "Mobile Safari", "webOS", "IE Mobile", "Playstation Portable", "Nokia", "Blackberry", "Palm", "Silk", "Android", "Maemo", "Obigo", "Netfront", "AvantGo", "Teleca", "SEMC-Browser", "Bolt", "Iris", "UP.Browser", "Symphony", "Minimo", "Bunjaloo", "Jasmine", "Dolfin", "Polaris", "BREW", "Chrome Mobile", "Chrome Mobile iOS", "UC Browser", "Tizen Browser"] - }; - // Parsers - _this.parsers = ["device_parsers", "browser_parsers", "os_parsers", "mobile_os_families", "mobile_browser_families"]; - // Types - _this.types = ["browser", "os", "device"]; - // Regular Expressions - _this.regexes = regexes || function () { - var results = {}; - _this.parsers.map(function (parser) { - results[parser] = []; - }); - return results; - }(); - // Families - _this.families = function () { - var results = {}; - _this.types.map(function (type) { - results[type] = []; - }); - return results; - }(); - // Utility Variables - var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype, nativeForEach = ArrayProto.forEach, nativeIndexOf = ArrayProto.indexOf; - // Find Utility - var find = function (ua, obj) { - var ret = {}; - for (var i = 0; i < obj.length; i++) { - ret = obj[i](ua); - if (ret) { - break; - } - } - return ret; - }; - // Remove Utility - var remove = function (arr, props) { - each(arr, function (obj) { - each(props, function (prop) { - delete obj[prop]; - }); - }); - }; - // Contains Utility - var contains = function (obj, target) { - var found = false; - if (obj == null) return found; - if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; - found = any(obj, function (value) { - return value === target; - }); - return found; - }; - // Each Utility - var each = forEach = function (obj, iterator, context) { - if (obj == null) return; - if (nativeForEach && obj.forEach === nativeForEach) { - obj.forEach(iterator, context); - } else if (obj.length === +obj.length) { - for (var i = 0, l = obj.length; i < l; i++) { - iterator.call(context, obj[i], i, obj); - } - } else { - for (var key in obj) { - if (_.has(obj, key)) { - iterator.call(context, obj[key], key, obj); - } - } - } - }; - // Extend Utiltiy - var extend = function (obj) { - each(slice.call(arguments, 1), function (source) { - for (var prop in source) { - obj[prop] = source[prop]; - } - }); - return obj; - }; - // Check String Utility - var check = function (str) { - return !!(str && typeof str != "undefined" && str != null); - }; - // To Version String Utility - var toVersionString = function (obj) { - var output = ""; - obj = obj || {}; - if (check(obj)) { - if (check(obj.major)) { - output += obj.major; - if (check(obj.minor)) { - output += "." + obj.minor; - if (check(obj.patch)) { - output += "." + obj.patch; - } - } - } - } - return output; - }; - // To String Utility - var toString = function (obj) { - obj = obj || {}; - var suffix = toVersionString(obj); - if (suffix) suffix = " " + suffix; - return obj && check(obj.family) ? obj.family + suffix : ""; - }; - // Parse User-Agent String - _this.parse = function (ua) { - // Parsers Utility - var parsers = function (type) { - return _this.regexes[type + "_parsers"].map(function (obj) { - var regexp = new RegExp(obj.regex), rep = obj[(type === "browser" ? "family" : type) + "_replacement"], major_rep = obj.major_version_replacement; - function parser(ua) { - var m = ua.match(regexp); - if (!m) return null; - var ret = {}; - ret.family = (rep ? rep.replace("$1", m[1]) : m[1]) || "other"; - ret.major = parseInt(major_rep ? major_rep : m[2]) || null; - ret.minor = m[3] ? parseInt(m[3]) : null; - ret.patch = m[4] ? parseInt(m[4]) : null; - ret.tablet = obj.tablet; - ret.man = obj.manufacturer || null; - return ret; - } - return parser; - }); - }; - // User Agent - var UserAgent = function () { }; - // Browsers Parsed - var browser_parsers = parsers("browser"); - // Operating Systems Parsed - var os_parsers = parsers("os"); - // Devices Parsed - var device_parsers = parsers("device"); - // Set Agent - var a = new UserAgent(); - // Remember the original user agent string - a.source = ua; - // Set Browser - a.browser = find(ua, browser_parsers); - if (check(a.browser)) { - a.browser.name = toString(a.browser); - a.browser.version = toVersionString(a.browser); - } else { - a.browser = {}; - } - // Set OS - a.os = find(ua, os_parsers); - if (check(a.os)) { - a.os.name = toString(a.os); - a.os.version = toVersionString(a.os); - } else { - a.os = {}; - } - // Set Device - a.device = find(ua, device_parsers); - if (check(a.device)) { - a.device.name = toString(a.device); - a.device.version = toVersionString(a.device); - } else { - a.device = { - tablet: false, - family: "Other" - }; - } - // Determine Device Type - var mobile_agents = {}; - var mobile_browser_families = _this.regexes.mobile_browser_families.map(function (str) { - mobile_agents[str] = true; - }); - var mobile_os_families = _this.regexes.mobile_os_families.map(function (str) { - mobile_agents[str] = true; - }); - // Is Spider - if (a.browser.family === "Spider") { - a.device.type = "Spider"; - } else if (a.browser.tablet || a.os.tablet || a.device.tablet) { - a.device.type = "Tablet"; - } else if (mobile_agents.hasOwnProperty(a.browser.family)) { - a.device.type = "Mobile"; - } else { - a.device.type = "Desktop"; - } - // Determine Device Manufacturer - a.device.manufacturer = a.browser.man || a.os.man || a.device.man || null; - // Cleanup Objects - remove([a.browser, a.os, a.device], ["tablet", "man"]); - // Return Agent - return a; - }; - // Return context - return _this; - }(); - // Export the Underscore object for **Node.js** and **"CommonJS"**, - // backwards-compatibility for the old `require()` API. If we're not - // CommonJS, add `_` to the global object via a string identifier - // the Closure Compiler "advanced" mode. Registration as an AMD - // via define() happens at the end of this file - if (typeof exports !== "undefined") { - if (typeof module !== "undefined" && module.exports) { - exports = module.exports = detect; - } - exports.detect = detect; - } else { - root["detect"] = detect; - } - // AMD define happens at the end for compatibility with AMD - // that don't enforce next-turn semantics on modules - if (typeof define === "function" && define.amd) { - define(function (require) { - return detect; - }); - } -})(window); \ No newline at end of file diff --git a/js/jQuery.js b/js/jQuery.js deleted file mode 100644 index be640c1..0000000 --- a/js/jQuery.js +++ /dev/null @@ -1,2 +0,0 @@ -* !jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org / license * / -!function (e, t) { "use strict"; "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function (e) { if (!e.document) throw new Error("jQuery requires a window with a document"); return t(e) } : t(e) }("undefined" != typeof window ? window : this, function (C, e) { "use strict"; var t = [], E = C.document, r = Object.getPrototypeOf, s = t.slice, g = t.concat, u = t.push, i = t.indexOf, n = {}, o = n.toString, v = n.hasOwnProperty, a = v.toString, l = a.call(Object), y = {}, m = function (e) { return "function" == typeof e && "number" != typeof e.nodeType }, x = function (e) { return null != e && e === e.window }, c = { type: !0, src: !0, nonce: !0, noModule: !0 }; function b(e, t, n) { var r, i, o = (n = n || E).createElement("script"); if (o.text = e, t) for (r in c) (i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i); n.head.appendChild(o).parentNode.removeChild(o) } function w(e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e } var f = "3.4.1", k = function (e, t) { return new k.fn.init(e, t) }, p = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; function d(e) { var t = !!e && "length" in e && e.length, n = w(e); return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e) } k.fn = k.prototype = { jquery: f, constructor: k, length: 0, toArray: function () { return s.call(this) }, get: function (e) { return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e] }, pushStack: function (e) { var t = k.merge(this.constructor(), e); return t.prevObject = this, t }, each: function (e) { return k.each(this, e) }, map: function (n) { return this.pushStack(k.map(this, function (e, t) { return n.call(e, t, e) })) }, slice: function () { return this.pushStack(s.apply(this, arguments)) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, eq: function (e) { var t = this.length, n = +e + (e < 0 ? t : 0); return this.pushStack(0 <= n && n < t ? [this[n]] : []) }, end: function () { return this.prevObject || this.constructor() }, push: u, sort: t.sort, splice: t.splice }, k.extend = k.fn.extend = function () { var e, t, n, r, i, o, a = arguments[0] || {}, s = 1, u = arguments.length, l = !1; for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++)if (null != (e = arguments[s])) for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (k.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || k.isPlainObject(n) ? n : {}, i = !1, a[t] = k.extend(l, o, r)) : void 0 !== r && (a[t] = r)); return a }, k.extend({ expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) { throw new Error(e) }, noop: function () { }, isPlainObject: function (e) { var t, n; return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof (n = v.call(t, "constructor") && t.constructor) && a.call(n) === l) }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0 }, globalEval: function (e, t) { b(e, { nonce: t && t.nonce }) }, each: function (e, t) { var n, r = 0; if (d(e)) { for (n = e.length; r < n; r++)if (!1 === t.call(e[r], r, e[r])) break } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break; return e }, trim: function (e) { return null == e ? "" : (e + "").replace(p, "") }, makeArray: function (e, t) { var n = t || []; return null != e && (d(Object(e)) ? k.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n }, inArray: function (e, t, n) { return null == t ? -1 : i.call(t, e, n) }, merge: function (e, t) { for (var n = +t.length, r = 0, i = e.length; r < n; r++)e[i++] = t[r]; return e.length = i, e }, grep: function (e, t, n) { for (var r = [], i = 0, o = e.length, a = !n; i < o; i++)!t(e[i], i) !== a && r.push(e[i]); return r }, map: function (e, t, n) { var r, i, o = 0, a = []; if (d(e)) for (r = e.length; o < r; o++)null != (i = t(e[o], o, n)) && a.push(i); else for (o in e) null != (i = t(e[o], o, n)) && a.push(i); return g.apply([], a) }, guid: 1, support: y }), "function" == typeof Symbol && (k.fn[Symbol.iterator] = t[Symbol.iterator]), k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) { n["[object " + t + "]"] = t.toLowerCase() }); var h = function (n) { var e, d, b, o, i, h, f, g, w, u, l, T, C, a, E, v, s, c, y, k = "sizzle" + 1 * new Date, m = n.document, S = 0, r = 0, p = ue(), x = ue(), N = ue(), A = ue(), D = function (e, t) { return e === t && (l = !0), 0 }, j = {}.hasOwnProperty, t = [], q = t.pop, L = t.push, H = t.push, O = t.slice, P = function (e, t) { for (var n = 0, r = e.length; n < r; n++)if (e[n] === t) return n; return -1 }, R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", M = "[\\x20\\t\\r\\n\\f]", I = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]", $ = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)", F = new RegExp(M + "+", "g"), B = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"), _ = new RegExp("^" + M + "*," + M + "*"), z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"), U = new RegExp(M + "|>"), X = new RegExp($), V = new RegExp("^" + I + "$"), G = { ID: new RegExp("^#(" + I + ")"), CLASS: new RegExp("^\\.(" + I + ")"), TAG: new RegExp("^(" + I + "|[*])"), ATTR: new RegExp("^" + W), PSEUDO: new RegExp("^" + $), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"), bool: new RegExp("^(?:" + R + ")$", "i"), needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i") }, Y = /HTML$/i, Q = /^(?:input|select|textarea|button)$/i, J = /^h\d$/i, K = /^[^{]+\{\s*\[native \w/, Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ee = /[+~]/, te = new RegExp("\\\\([\\da-f]{1,6}" + M + "?|(" + M + ")|.)", "ig"), ne = function (e, t, n) { var r = "0x" + t - 65536; return r != r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320) }, re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, ie = function (e, t) { return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e }, oe = function () { T() }, ae = be(function (e) { return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase() }, { dir: "parentNode", next: "legend" }); try { H.apply(t = O.call(m.childNodes), m.childNodes), t[m.childNodes.length].nodeType } catch (e) { H = { apply: t.length ? function (e, t) { L.apply(e, O.call(t)) } : function (e, t) { var n = e.length, r = 0; while (e[n++] = t[r++]); e.length = n - 1 } } } function se(t, e, n, r) { var i, o, a, s, u, l, c, f = e && e.ownerDocument, p = e ? e.nodeType : 9; if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n; if (!r && ((e ? e.ownerDocument || e : m) !== C && T(e), e = e || C, E)) { if (11 !== p && (u = Z.exec(t))) if (i = u[1]) { if (9 === p) { if (!(a = e.getElementById(i))) return n; if (a.id === i) return n.push(a), n } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n } else { if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n; if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n } if (d.qsa && !A[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) { if (c = t, f = e, 1 === p && U.test(t)) { (s = e.getAttribute("id")) ? s = s.replace(re, ie) : e.setAttribute("id", s = k), o = (l = h(t)).length; while (o--) l[o] = "#" + s + " " + xe(l[o]); c = l.join(","), f = ee.test(t) && ye(e.parentNode) || e } try { return H.apply(n, f.querySelectorAll(c)), n } catch (e) { A(t, !0) } finally { s === k && e.removeAttribute("id") } } } return g(t.replace(B, "$1"), e, n, r) } function ue() { var r = []; return function e(t, n) { return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n } } function le(e) { return e[k] = !0, e } function ce(e) { var t = C.createElement("fieldset"); try { return !!e(t) } catch (e) { return !1 } finally { t.parentNode && t.parentNode.removeChild(t), t = null } } function fe(e, t) { var n = e.split("|"), r = n.length; while (r--) b.attrHandle[n[r]] = t } function pe(e, t) { var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex; if (r) return r; if (n) while (n = n.nextSibling) if (n === t) return -1; return e ? 1 : -1 } function de(t) { return function (e) { return "input" === e.nodeName.toLowerCase() && e.type === t } } function he(n) { return function (e) { var t = e.nodeName.toLowerCase(); return ("input" === t || "button" === t) && e.type === n } } function ge(t) { return function (e) { return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t : "label" in e && e.disabled === t } } function ve(a) { return le(function (o) { return o = +o, le(function (e, t) { var n, r = a([], e.length, o), i = r.length; while (i--) e[n = r[i]] && (e[n] = !(t[n] = e[n])) }) }) } function ye(e) { return e && "undefined" != typeof e.getElementsByTagName && e } for (e in d = se.support = {}, i = se.isXML = function (e) { var t = e.namespaceURI, n = (e.ownerDocument || e).documentElement; return !Y.test(t || n && n.nodeName || "HTML") }, T = se.setDocument = function (e) { var t, n, r = e ? e.ownerDocument || e : m; return r !== C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), m !== C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent && n.attachEvent("onunload", oe)), d.attributes = ce(function (e) { return e.className = "i", !e.getAttribute("className") }), d.getElementsByTagName = ce(function (e) { return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length }), d.getElementsByClassName = K.test(C.getElementsByClassName), d.getById = ce(function (e) { return a.appendChild(e).id = k, !C.getElementsByName || !C.getElementsByName(k).length }), d.getById ? (b.filter.ID = function (e) { var t = e.replace(te, ne); return function (e) { return e.getAttribute("id") === t } }, b.find.ID = function (e, t) { if ("undefined" != typeof t.getElementById && E) { var n = t.getElementById(e); return n ? [n] : [] } }) : (b.filter.ID = function (e) { var n = e.replace(te, ne); return function (e) { var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id"); return t && t.value === n } }, b.find.ID = function (e, t) { if ("undefined" != typeof t.getElementById && E) { var n, r, i, o = t.getElementById(e); if (o) { if ((n = o.getAttributeNode("id")) && n.value === e) return [o]; i = t.getElementsByName(e), r = 0; while (o = i[r++]) if ((n = o.getAttributeNode("id")) && n.value === e) return [o] } return [] } }), b.find.TAG = d.getElementsByTagName ? function (e, t) { return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0 } : function (e, t) { var n, r = [], i = 0, o = t.getElementsByTagName(e); if ("*" === e) { while (n = o[i++]) 1 === n.nodeType && r.push(n); return r } return o }, b.find.CLASS = d.getElementsByClassName && function (e, t) { if ("undefined" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e) }, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function (e) { a.appendChild(e).innerHTML = "", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll("[id~=" + k + "-]").length || v.push("~="), e.querySelectorAll(":checked").length || v.push(":checked"), e.querySelectorAll("a#" + k + "+*").length || v.push(".#.+[+~]") }), ce(function (e) { e.innerHTML = ""; var t = C.createElement("input"); t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"), a.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:") })), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector)) && ce(function (e) { d.disconnectedMatch = c.call(e, "*"), c.call(e, "[s!='']:x"), s.push("!=", $) }), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.contains) ? function (e, t) { var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode; return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))) } : function (e, t) { if (t) while (t = t.parentNode) if (t === e) return !0; return !1 }, D = t ? function (e, t) { if (e === t) return l = !0, 0; var n = !e.compareDocumentPosition - !t.compareDocumentPosition; return n || (1 & (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e === C || e.ownerDocument === m && y(m, e) ? -1 : t === C || t.ownerDocument === m && y(m, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1) } : function (e, t) { if (e === t) return l = !0, 0; var n, r = 0, i = e.parentNode, o = t.parentNode, a = [e], s = [t]; if (!i || !o) return e === C ? -1 : t === C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0; if (i === o) return pe(e, t); n = e; while (n = n.parentNode) a.unshift(n); n = t; while (n = n.parentNode) s.unshift(n); while (a[r] === s[r]) r++; return r ? pe(a[r], s[r]) : a[r] === m ? -1 : s[r] === m ? 1 : 0 }), C }, se.matches = function (e, t) { return se(e, null, null, t) }, se.matchesSelector = function (e, t) { if ((e.ownerDocument || e) !== C && T(e), d.matchesSelector && E && !A[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t))) try { var n = c.call(e, t); if (n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n } catch (e) { A(t, !0) } return 0 < se(t, C, null, [e]).length }, se.contains = function (e, t) { return (e.ownerDocument || e) !== C && T(e), y(e, t) }, se.attr = function (e, t) { (e.ownerDocument || e) !== C && T(e); var n = b.attrHandle[t.toLowerCase()], r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0; return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null }, se.escape = function (e) { return (e + "").replace(re, ie) }, se.error = function (e) { throw new Error("Syntax error, unrecognized expression: " + e) }, se.uniqueSort = function (e) { var t, n = [], r = 0, i = 0; if (l = !d.detectDuplicates, u = !d.sortStable && e.slice(0), e.sort(D), l) { while (t = e[i++]) t === e[i] && (r = n.push(i)); while (r--) e.splice(n[r], 1) } return u = null, e }, o = se.getText = function (e) { var t, n = "", r = 0, i = e.nodeType; if (i) { if (1 === i || 9 === i || 11 === i) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling)n += o(e) } else if (3 === i || 4 === i) return e.nodeValue } else while (t = e[r++]) n += o(t); return n }, (b = se.selectors = { cacheLength: 50, createPseudo: le, match: G, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (e) { return e[1] = e[1].replace(te, ne), e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4) }, CHILD: function (e) { return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && se.error(e[0]), e }, PSEUDO: function (e) { var t, n = !e[6] && e[2]; return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) } }, filter: { TAG: function (e) { var t = e.replace(te, ne).toLowerCase(); return "*" === e ? function () { return !0 } : function (e) { return e.nodeName && e.nodeName.toLowerCase() === t } }, CLASS: function (e) { var t = p[e + " "]; return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && p(e, function (e) { return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "") }) }, ATTR: function (n, r, i) { return function (e) { var t = se.attr(e, n); return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(F, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-")) } }, CHILD: function (h, e, t, g, v) { var y = "nth" !== h.slice(0, 3), m = "last" !== h.slice(-4), x = "of-type" === e; return 1 === g && 0 === v ? function (e) { return !!e.parentNode } : function (e, t, n) { var r, i, o, a, s, u, l = y !== m ? "nextSibling" : "previousSibling", c = e.parentNode, f = x && e.nodeName.toLowerCase(), p = !n && !x, d = !1; if (c) { if (y) { while (l) { a = e; while (a = a[l]) if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1; u = l = "only" === h && !u && "nextSibling" } return !0 } if (u = [m ? c.firstChild : c.lastChild], m && p) { d = (s = (r = (i = (o = (a = c)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === S && r[1]) && r[2], a = s && c.childNodes[s]; while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) if (1 === a.nodeType && ++d && a === e) { i[h] = [S, s, d]; break } } else if (p && (d = s = (r = (i = (o = (a = e)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === S && r[1]), !1 === d) while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [S, d]), a === e)) break; return (d -= v) === g || d % g == 0 && 0 <= d / g } } }, PSEUDO: function (e, o) { var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e); return a[k] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function (e, t) { var n, r = a(e, o), i = r.length; while (i--) e[n = P(e, r[i])] = !(t[n] = r[i]) }) : function (e) { return a(e, 0, t) }) : a } }, pseudos: { not: le(function (e) { var r = [], i = [], s = f(e.replace(B, "$1")); return s[k] ? le(function (e, t, n, r) { var i, o = s(e, null, r, []), a = e.length; while (a--) (i = o[a]) && (e[a] = !(t[a] = i)) }) : function (e, t, n) { return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop() } }), has: le(function (t) { return function (e) { return 0 < se(t, e).length } }), contains: le(function (t) { return t = t.replace(te, ne), function (e) { return -1 < (e.textContent || o(e)).indexOf(t) } }), lang: le(function (n) { return V.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(te, ne).toLowerCase(), function (e) { var t; do { if (t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-") } while ((e = e.parentNode) && 1 === e.nodeType); return !1 } }), target: function (e) { var t = n.location && n.location.hash; return t && t.slice(1) === e.id }, root: function (e) { return e === a }, focus: function (e) { return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) }, enabled: ge(!1), disabled: ge(!0), checked: function (e) { var t = e.nodeName.toLowerCase(); return "input" === t && !!e.checked || "option" === t && !!e.selected }, selected: function (e) { return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected }, empty: function (e) { for (e = e.firstChild; e; e = e.nextSibling)if (e.nodeType < 6) return !1; return !0 }, parent: function (e) { return !b.pseudos.empty(e) }, header: function (e) { return J.test(e.nodeName) }, input: function (e) { return Q.test(e.nodeName) }, button: function (e) { var t = e.nodeName.toLowerCase(); return "input" === t && "button" === e.type || "button" === t }, text: function (e) { var t; return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()) }, first: ve(function () { return [0] }), last: ve(function (e, t) { return [t - 1] }), eq: ve(function (e, t, n) { return [n < 0 ? n + t : n] }), even: ve(function (e, t) { for (var n = 0; n < t; n += 2)e.push(n); return e }), odd: ve(function (e, t) { for (var n = 1; n < t; n += 2)e.push(n); return e }), lt: ve(function (e, t, n) { for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;)e.push(r); return e }), gt: ve(function (e, t, n) { for (var r = n < 0 ? n + t : n; ++r < t;)e.push(r); return e }) } }).pseudos.nth = b.pseudos.eq, { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) b.pseudos[e] = de(e); for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e); function me() { } function xe(e) { for (var t = 0, n = e.length, r = ""; t < n; t++)r += e[t].value; return r } function be(s, e, t) { var u = e.dir, l = e.next, c = l || u, f = t && "parentNode" === c, p = r++; return e.first ? function (e, t, n) { while (e = e[u]) if (1 === e.nodeType || f) return s(e, t, n); return !1 } : function (e, t, n) { var r, i, o, a = [S, p]; if (n) { while (e = e[u]) if ((1 === e.nodeType || f) && s(e, t, n)) return !0 } else while (e = e[u]) if (1 === e.nodeType || f) if (i = (o = e[k] || (e[k] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), l && l === e.nodeName.toLowerCase()) e = e[u] || e; else { if ((r = i[c]) && r[0] === S && r[1] === p) return a[2] = r[2]; if ((i[c] = a)[2] = s(e, t, n)) return !0 } return !1 } } function we(i) { return 1 < i.length ? function (e, t, n) { var r = i.length; while (r--) if (!i[r](e, t, n)) return !1; return !0 } : i[0] } function Te(e, t, n, r, i) { for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s))); return a } function Ce(d, h, g, v, y, e) { return v && !v[k] && (v = Ce(v)), y && !y[k] && (y = Ce(y, e)), le(function (e, t, n, r) { var i, o, a, s = [], u = [], l = t.length, c = e || function (e, t, n) { for (var r = 0, i = t.length; r < i; r++)se(e, t[r], n); return n }(h || "*", n.nodeType ? [n] : n, []), f = !d || !e && h ? c : Te(c, s, d, n, r), p = g ? y || (e ? d : l || v) ? [] : t : f; if (g && g(f, p, n, r), v) { i = Te(p, u), v(i, [], n, r), o = i.length; while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a)) } if (e) { if (y || d) { if (y) { i = [], o = p.length; while (o--) (a = p[o]) && i.push(f[o] = a); y(null, p = [], i, r) } o = p.length; while (o--) (a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a)) } } else p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p) }) } function Ee(e) { for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function (e) { return e === i }, a, !0), l = be(function (e) { return -1 < P(i, e) }, a, !0), c = [function (e, t, n) { var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n)); return i = null, r }]; s < r; s++)if (t = b.relative[e[s].type]) c = [be(we(c), t)]; else { if ((t = b.filter[e[s].type].apply(null, e[s].matches))[k]) { for (n = ++s; n < r; n++)if (b.relative[e[n].type]) break; return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({ value: " " === e[s - 2].type ? "*" : "" })).replace(B, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e)) } c.push(t) } return we(c) } return me.prototype = b.filters = b.pseudos, b.setFilters = new me, h = se.tokenize = function (e, t) { var n, r, i, o, a, s, u, l = x[e + " "]; if (l) return t ? 0 : l.slice(0); a = e, s = [], u = b.preFilter; while (a) { for (o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({ value: n, type: r[0].replace(B, " ") }), a = a.slice(n.length)), b.filter) !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({ value: n, type: o, matches: r }), a = a.slice(n.length)); if (!n) break } return t ? a.length : a ? se.error(e) : x(e, s).slice(0) }, f = se.compile = function (e, t) { var n, v, y, m, x, r, i = [], o = [], a = N[e + " "]; if (!a) { t || (t = h(e)), n = t.length; while (n--) (a = Ee(t[n]))[k] ? i.push(a) : o.push(a); (a = N(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function (e, t, n, r, i) { var o, a, s, u = 0, l = "0", c = e && [], f = [], p = w, d = e || x && b.find.TAG("*", i), h = S += null == p ? 1 : Math.random() || .1, g = d.length; for (i && (w = t === C || t || i); l !== g && null != (o = d[l]); l++) { if (x && o) { a = 0, t || o.ownerDocument === C || (T(o), n = !E); while (s = v[a++]) if (s(o, t || C, n)) { r.push(o); break } i && (S = h) } m && ((o = !s && o) && u--, e && c.push(o)) } if (u += l, m && l !== u) { a = 0; while (s = y[a++]) s(c, f, t, n); if (e) { if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r)); f = Te(f) } H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r) } return i && (S = h, w = p), c }, m ? le(r) : r))).selector = e } return a }, g = se.select = function (e, t, n, r) { var i, o, a, s, u, l = "function" == typeof e && e, c = !r && h(e = l.selector || e); if (n = n || [], 1 === c.length) { if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) { if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n; l && (t = t.parentNode), e = e.slice(o.shift().value.length) } i = G.needsContext.test(e) ? 0 : o.length; while (i--) { if (a = o[i], b.relative[s = a.type]) break; if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) || t))) { if (o.splice(i, 1), !(e = r.length && xe(o))) return H.apply(n, r), n; break } } } return (l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t), n }, d.sortStable = k.split("").sort(D).join("") === k, d.detectDuplicates = !!l, T(), d.sortDetached = ce(function (e) { return 1 & e.compareDocumentPosition(C.createElement("fieldset")) }), ce(function (e) { return e.innerHTML = "", "#" === e.firstChild.getAttribute("href") }) || fe("type|href|height|width", function (e, t, n) { if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2) }), d.attributes && ce(function (e) { return e.innerHTML = "", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value") }) || fe("value", function (e, t, n) { if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue }), ce(function (e) { return null == e.getAttribute("disabled") }) || fe(R, function (e, t, n) { var r; if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null }), se }(C); k.find = h, k.expr = h.selectors, k.expr[":"] = k.expr.pseudos, k.uniqueSort = k.unique = h.uniqueSort, k.text = h.getText, k.isXMLDoc = h.isXML, k.contains = h.contains, k.escapeSelector = h.escape; var T = function (e, t, n) { var r = [], i = void 0 !== n; while ((e = e[t]) && 9 !== e.nodeType) if (1 === e.nodeType) { if (i && k(e).is(n)) break; r.push(e) } return r }, S = function (e, t) { for (var n = []; e; e = e.nextSibling)1 === e.nodeType && e !== t && n.push(e); return n }, N = k.expr.match.needsContext; function A(e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() } var D = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; function j(e, n, r) { return m(n) ? k.grep(e, function (e, t) { return !!n.call(e, t, e) !== r }) : n.nodeType ? k.grep(e, function (e) { return e === n !== r }) : "string" != typeof n ? k.grep(e, function (e) { return -1 < i.call(n, e) !== r }) : k.filter(n, e, r) } k.filter = function (e, t, n) { var r = t[0]; return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? k.find.matchesSelector(r, e) ? [r] : [] : k.find.matches(e, k.grep(t, function (e) { return 1 === e.nodeType })) }, k.fn.extend({ find: function (e) { var t, n, r = this.length, i = this; if ("string" != typeof e) return this.pushStack(k(e).filter(function () { for (t = 0; t < r; t++)if (k.contains(i[t], this)) return !0 })); for (n = this.pushStack([]), t = 0; t < r; t++)k.find(e, i[t], n); return 1 < r ? k.uniqueSort(n) : n }, filter: function (e) { return this.pushStack(j(this, e || [], !1)) }, not: function (e) { return this.pushStack(j(this, e || [], !0)) }, is: function (e) { return !!j(this, "string" == typeof e && N.test(e) ? k(e) : e || [], !1).length } }); var q, L = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; (k.fn.init = function (e, t, n) { var r, i; if (!e) return this; if (n = n || q, "string" == typeof e) { if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : L.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); if (r[1]) { if (t = t instanceof k ? t[0] : t, k.merge(this, k.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), D.test(r[1]) && k.isPlainObject(t)) for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); return this } return (i = E.getElementById(r[2])) && (this[0] = i, this.length = 1), this } return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(k) : k.makeArray(e, this) }).prototype = k.fn, q = k(E); var H = /^(?:parents|prev(?:Until|All))/, O = { children: !0, contents: !0, next: !0, prev: !0 }; function P(e, t) { while ((e = e[t]) && 1 !== e.nodeType); return e } k.fn.extend({ has: function (e) { var t = k(e, this), n = t.length; return this.filter(function () { for (var e = 0; e < n; e++)if (k.contains(this, t[e])) return !0 }) }, closest: function (e, t) { var n, r = 0, i = this.length, o = [], a = "string" != typeof e && k(e); if (!N.test(e)) for (; r < i; r++)for (n = this[r]; n && n !== t; n = n.parentNode)if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && k.find.matchesSelector(n, e))) { o.push(n); break } return this.pushStack(1 < o.length ? k.uniqueSort(o) : o) }, index: function (e) { return e ? "string" == typeof e ? i.call(k(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function (e, t) { return this.pushStack(k.uniqueSort(k.merge(this.get(), k(e, t)))) }, addBack: function (e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) } }), k.each({ parent: function (e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null }, parents: function (e) { return T(e, "parentNode") }, parentsUntil: function (e, t, n) { return T(e, "parentNode", n) }, next: function (e) { return P(e, "nextSibling") }, prev: function (e) { return P(e, "previousSibling") }, nextAll: function (e) { return T(e, "nextSibling") }, prevAll: function (e) { return T(e, "previousSibling") }, nextUntil: function (e, t, n) { return T(e, "nextSibling", n) }, prevUntil: function (e, t, n) { return T(e, "previousSibling", n) }, siblings: function (e) { return S((e.parentNode || {}).firstChild, e) }, children: function (e) { return S(e.firstChild) }, contents: function (e) { return "undefined" != typeof e.contentDocument ? e.contentDocument : (A(e, "template") && (e = e.content || e), k.merge([], e.childNodes)) } }, function (r, i) { k.fn[r] = function (e, t) { var n = k.map(this, i, e); return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = k.filter(t, n)), 1 < this.length && (O[r] || k.uniqueSort(n), H.test(r) && n.reverse()), this.pushStack(n) } }); var R = /[^\x20\t\r\n\f]+/g; function M(e) { return e } function I(e) { throw e } function W(e, t, n, r) { var i; try { e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r)) } catch (e) { n.apply(void 0, [e]) } } k.Callbacks = function (r) { var e, n; r = "string" == typeof r ? (e = r, n = {}, k.each(e.match(R) || [], function (e, t) { n[t] = !0 }), n) : k.extend({}, r); var i, t, o, a, s = [], u = [], l = -1, c = function () { for (a = a || r.once, o = i = !0; u.length; l = -1) { t = u.shift(); while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1) } r.memory || (t = !1), i = !1, a && (s = t ? [] : "") }, f = { add: function () { return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) { k.each(e, function (e, t) { m(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t) }) }(arguments), t && !i && c()), this }, remove: function () { return k.each(arguments, function (e, t) { var n; while (-1 < (n = k.inArray(t, s, n))) s.splice(n, 1), n <= l && l-- }), this }, has: function (e) { return e ? -1 < k.inArray(e, s) : 0 < s.length }, empty: function () { return s && (s = []), this }, disable: function () { return a = u = [], s = t = "", this }, disabled: function () { return !s }, lock: function () { return a = u = [], t || i || (s = t = ""), this }, locked: function () { return !!a }, fireWith: function (e, t) { return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this }, fire: function () { return f.fireWith(this, arguments), this }, fired: function () { return !!o } }; return f }, k.extend({ Deferred: function (e) { var o = [["notify", "progress", k.Callbacks("memory"), k.Callbacks("memory"), 2], ["resolve", "done", k.Callbacks("once memory"), k.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", k.Callbacks("once memory"), k.Callbacks("once memory"), 1, "rejected"]], i = "pending", a = { state: function () { return i }, always: function () { return s.done(arguments).fail(arguments), this }, "catch": function (e) { return a.then(null, e) }, pipe: function () { var i = arguments; return k.Deferred(function (r) { k.each(o, function (e, t) { var n = m(i[t[4]]) && i[t[4]]; s[t[1]](function () { var e = n && n.apply(this, arguments); e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments) }) }), i = null }).promise() }, then: function (t, n, r) { var u = 0; function l(i, o, a, s) { return function () { var n = this, r = arguments, e = function () { var e, t; if (!(i < u)) { if ((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution"); t = e && ("object" == typeof e || "function" == typeof e) && e.then, m(t) ? s ? t.call(e, l(u, o, M, s), l(u, o, I, s)) : (u++, t.call(e, l(u, o, M, s), l(u, o, I, s), l(u, o, M, o.notifyWith))) : (a !== M && (n = void 0, r = [e]), (s || o.resolveWith)(n, r)) } }, t = s ? e : function () { try { e() } catch (e) { k.Deferred.exceptionHook && k.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== I && (n = void 0, r = [e]), o.rejectWith(n, r)) } }; i ? t() : (k.Deferred.getStackHook && (t.stackTrace = k.Deferred.getStackHook()), C.setTimeout(t)) } } return k.Deferred(function (e) { o[0][3].add(l(0, e, m(r) ? r : M, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : M)), o[2][3].add(l(0, e, m(n) ? n : I)) }).promise() }, promise: function (e) { return null != e ? k.extend(e, a) : a } }, s = {}; return k.each(o, function (e, t) { var n = t[2], r = t[5]; a[t[1]] = n.add, r && n.add(function () { i = r }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function () { return s[t[0] + "With"](this === s ? void 0 : this, arguments), this }, s[t[0] + "With"] = n.fireWith }), a.promise(s), e && e.call(s, s), s }, when: function (e) { var n = arguments.length, t = n, r = Array(t), i = s.call(arguments), o = k.Deferred(), a = function (t) { return function (e) { r[t] = this, i[t] = 1 < arguments.length ? s.call(arguments) : e, --n || o.resolveWith(r, i) } }; if (n <= 1 && (W(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then))) return o.then(); while (t--) W(i[t], a(t), o.reject); return o.promise() } }); var $ = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; k.Deferred.exceptionHook = function (e, t) { C.console && C.console.warn && e && $.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t) }, k.readyException = function (e) { C.setTimeout(function () { throw e }) }; var F = k.Deferred(); function B() { E.removeEventListener("DOMContentLoaded", B), C.removeEventListener("load", B), k.ready() } k.fn.ready = function (e) { return F.then(e)["catch"](function (e) { k.readyException(e) }), this }, k.extend({ isReady: !1, readyWait: 1, ready: function (e) { (!0 === e ? --k.readyWait : k.isReady) || (k.isReady = !0) !== e && 0 < --k.readyWait || F.resolveWith(E, [k]) } }), k.ready.then = F.then, "complete" === E.readyState || "loading" !== E.readyState && !E.documentElement.doScroll ? C.setTimeout(k.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B)); var _ = function (e, t, n, r, i, o, a) { var s = 0, u = e.length, l = null == n; if ("object" === w(n)) for (s in i = !0, n) _(e, t, s, n[s], !0, o, a); else if (void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) { return l.call(k(e), n) })), t)) for (; s < u; s++)t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n))); return i ? e : l ? t.call(e) : u ? t(e[0], n) : o }, z = /^-ms-/, U = /-([a-z])/g; function X(e, t) { return t.toUpperCase() } function V(e) { return e.replace(z, "ms-").replace(U, X) } var G = function (e) { return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType }; function Y() { this.expando = k.expando + Y.uid++ } Y.uid = 1, Y.prototype = { cache: function (e) { var t = e[this.expando]; return t || (t = {}, G(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t }, set: function (e, t, n) { var r, i = this.cache(e); if ("string" == typeof t) i[V(t)] = n; else for (r in t) i[V(r)] = t[r]; return i }, get: function (e, t) { return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][V(t)] }, access: function (e, t, n) { return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t) }, remove: function (e, t) { var n, r = e[this.expando]; if (void 0 !== r) { if (void 0 !== t) { n = (t = Array.isArray(t) ? t.map(V) : (t = V(t)) in r ? [t] : t.match(R) || []).length; while (n--) delete r[t[n]] } (void 0 === t || k.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando]) } }, hasData: function (e) { var t = e[this.expando]; return void 0 !== t && !k.isEmptyObject(t) } }; var Q = new Y, J = new Y, K = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, Z = /[A-Z]/g; function ee(e, t, n) { var r, i; if (void 0 === n && 1 === e.nodeType) if (r = "data-" + t.replace(Z, "-$&").toLowerCase(), "string" == typeof (n = e.getAttribute(r))) { try { n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : K.test(i) ? JSON.parse(i) : i) } catch (e) { } J.set(e, t, n) } else n = void 0; return n } k.extend({ hasData: function (e) { return J.hasData(e) || Q.hasData(e) }, data: function (e, t, n) { return J.access(e, t, n) }, removeData: function (e, t) { J.remove(e, t) }, _data: function (e, t, n) { return Q.access(e, t, n) }, _removeData: function (e, t) { Q.remove(e, t) } }), k.fn.extend({ data: function (n, e) { var t, r, i, o = this[0], a = o && o.attributes; if (void 0 === n) { if (this.length && (i = J.get(o), 1 === o.nodeType && !Q.get(o, "hasDataAttrs"))) { t = a.length; while (t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = V(r.slice(5)), ee(o, r, i[r])); Q.set(o, "hasDataAttrs", !0) } return i } return "object" == typeof n ? this.each(function () { J.set(this, n) }) : _(this, function (e) { var t; if (o && void 0 === e) return void 0 !== (t = J.get(o, n)) ? t : void 0 !== (t = ee(o, n)) ? t : void 0; this.each(function () { J.set(this, n, e) }) }, null, e, 1 < arguments.length, null, !0) }, removeData: function (e) { return this.each(function () { J.remove(this, e) }) } }), k.extend({ queue: function (e, t, n) { var r; if (e) return t = (t || "fx") + "queue", r = Q.get(e, t), n && (!r || Array.isArray(n) ? r = Q.access(e, t, k.makeArray(n)) : r.push(n)), r || [] }, dequeue: function (e, t) { t = t || "fx"; var n = k.queue(e, t), r = n.length, i = n.shift(), o = k._queueHooks(e, t); "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function () { k.dequeue(e, t) }, o)), !r && o && o.empty.fire() }, _queueHooks: function (e, t) { var n = t + "queueHooks"; return Q.get(e, n) || Q.access(e, n, { empty: k.Callbacks("once memory").add(function () { Q.remove(e, [t + "queue", n]) }) }) } }), k.fn.extend({ queue: function (t, n) { var e = 2; return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? k.queue(this[0], t) : void 0 === n ? this : this.each(function () { var e = k.queue(this, t, n); k._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && k.dequeue(this, t) }) }, dequeue: function (e) { return this.each(function () { k.dequeue(this, e) }) }, clearQueue: function (e) { return this.queue(e || "fx", []) }, promise: function (e, t) { var n, r = 1, i = k.Deferred(), o = this, a = this.length, s = function () { --r || i.resolveWith(o, [o]) }; "string" != typeof e && (t = e, e = void 0), e = e || "fx"; while (a--) (n = Q.get(o[a], e + "queueHooks")) && n.empty && (r++, n.empty.add(s)); return s(), i.promise(t) } }); var te = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, ne = new RegExp("^(?:([+-])=|)(" + te + ")([a-z%]*)$", "i"), re = ["Top", "Right", "Bottom", "Left"], ie = E.documentElement, oe = function (e) { return k.contains(e.ownerDocument, e) }, ae = { composed: !0 }; ie.getRootNode && (oe = function (e) { return k.contains(e.ownerDocument, e) || e.getRootNode(ae) === e.ownerDocument }); var se = function (e, t) { return "none" === (e = t || e).style.display || "" === e.style.display && oe(e) && "none" === k.css(e, "display") }, ue = function (e, t, n, r) { var i, o, a = {}; for (o in t) a[o] = e.style[o], e.style[o] = t[o]; for (o in i = n.apply(e, r || []), t) e.style[o] = a[o]; return i }; function le(e, t, n, r) { var i, o, a = 20, s = r ? function () { return r.cur() } : function () { return k.css(e, t, "") }, u = s(), l = n && n[3] || (k.cssNumber[t] ? "" : "px"), c = e.nodeType && (k.cssNumber[t] || "px" !== l && +u) && ne.exec(k.css(e, t)); if (c && c[3] !== l) { u /= 2, l = l || c[3], c = +u || 1; while (a--) k.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o; c *= 2, k.style(e, t, c + l), n = n || [] } return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i } var ce = {}; function fe(e, t) { for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)(r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Q.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && se(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ce[s]) || (o = a.body.appendChild(a.createElement(s)), u = k.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"), ce[s] = u)))) : "none" !== n && (l[c] = "none", Q.set(r, "display", n))); for (c = 0; c < f; c++)null != l[c] && (e[c].style.display = l[c]); return e } k.fn.extend({ show: function () { return fe(this, !0) }, hide: function () { return fe(this) }, toggle: function (e) { return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () { se(this) ? k(this).show() : k(this).hide() }) } }); var pe = /^(?:checkbox|radio)$/i, de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, he = /^$|^module$|\/(?:java|ecma)script/i, ge = { option: [1, ""], thead: [1, "