МАОН первой серии
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3011 lines
175KB

  1. var модуль = gitjs.мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  2. // // // //
  3. // MARK: https://bitbucket.org/gitjs/jquery/raw/3.5.1/0000
  4. // // // //
  5. /*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
  6. !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=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},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},E=C.document,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.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(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)}S.fn=S.prototype={jquery:f,constructor:S,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=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.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)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},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},S.extend=S.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&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.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,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(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},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.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(p(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(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=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="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),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-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|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(p.childNodes),p.childNodes),t[p.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&&(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&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$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[S]=!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:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),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=S,!C.getElementsByName||!C.getElementsByName(S).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){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";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("!=",F)}),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==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,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]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[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){N(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=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(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(B," ")+" ").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)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&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]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&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[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,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[S]?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($,"$1"));return s[S]?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=[k,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[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&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[S]&&(v=Ce(v)),y&&!y[S]&&(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))[S]){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($,"$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($," ")}),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=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(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=k+=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&&(k=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&&(k=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=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===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="<input/>",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);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.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 S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.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(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.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&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(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(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(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])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.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){S.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 S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.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},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.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 S.Deferred(function(r){S.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,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.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=S.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&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.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(S(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},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(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[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(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(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.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&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.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=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.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=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.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 ue={};function le(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]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
  7. // // // //
  8. // MARK: https://bitbucket.org/gitjs/uikit/raw/3.2.0/0000
  9. // // // //
  10. // MARK: /🎬.js
  11. УстановитьUIkit = function(мир)
  12. {
  13. var модуль = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  14. var css = модуль.содержимое["/uikit_3.2.0_uikit.min.css"];
  15. var js = модуль.содержимое["/uikit_3.2.0_uikit.min.js"];
  16. var iconsJS = модуль.содержимое["/uikit_3.2.0_uikit-icons.min.js"];
  17. // Применить стиль.
  18. var style = document.createElement("style");
  19. document.head.appendChild(style);
  20. style.innerHTML = css;
  21. function загрузитьСкрипт(код)
  22. {
  23. var скрипт = document.createElement("script");
  24. скрипт.innerHTML = код;
  25. document.body.appendChild(скрипт);
  26. }
  27. загрузитьСкрипт(js);
  28. загрузитьСкрипт(iconsJS);
  29. };
  30. // MARK: /🎬.череда
  31. gitjs.мир.разобрать(`
  32. ручной пуск
  33. установить UIkit
  34. `);
  35. // // // //
  36. // MARK: https://git.opengamestudio.org/mahjong/mahjong-raskladka-layout/raw/branch/master/0000
  37. // // // //
  38. // MARK: /🎬.js
  39. разобратьРаскладкуKMahjongg = function(содержимое)
  40. {
  41. this.__преобразоватьСодержимоеВСтроки = () =>
  42. {
  43. var строки = содержимое.split(/\n/);
  44. this.строки = [];
  45. for (var номер in строки)
  46. {
  47. var строка = строки[номер].trim();
  48. // Пропускаем комментарии и пустые строки.
  49. if (строка.startsWith("#") || !строка.length)
  50. {
  51. continue;
  52. }
  53. this.строки.push(строка);
  54. }
  55. };
  56. this.__разобратьПараметры = () =>
  57. {
  58. var параметры = {
  59. "ширина": 32,
  60. "высота": 16,
  61. "глубина": 0,
  62. "версия": "1.0",
  63. };
  64. var префиксы = {
  65. "версия": "kmahjongg-layout-v",
  66. "глубина": "d",
  67. "ширина": "w",
  68. "высота": "h",
  69. };
  70. var удалитьЭлементов = 0;
  71. var строки = this.строки;
  72. for (var номер in строки)
  73. {
  74. var строка = строки[номер];
  75. // Версия.
  76. if (строка.startsWith(префиксы.версия))
  77. {
  78. параметры.версия = строка.substring(префиксы.версия.length);
  79. }
  80. // Глубина.
  81. else if (строка.startsWith(префиксы.глубина))
  82. {
  83. параметры.глубина = строка.substring(префиксы.глубина.length);
  84. }
  85. // Ширина.
  86. else if (строка.startsWith(префиксы.ширина))
  87. {
  88. параметры.ширина = строка.substring(префиксы.ширина.length);
  89. }
  90. // Высота.
  91. else if (строка.startsWith(префиксы.высота))
  92. {
  93. параметры.высота = строка.substring(префиксы.высота.length);
  94. }
  95. else
  96. {
  97. удалитьЭлементов = номер;
  98. break;
  99. }
  100. }
  101. this.строки.splice(0, удалитьЭлементов);
  102. if (параметры.глубина == 0)
  103. {
  104. параметры.глубина = this.строки.length / параметры.высота;
  105. }
  106. this.параметры = параметры;
  107. };
  108. this.__разобратьПозиции = () =>
  109. {
  110. const параметры = this.параметры;
  111. const строки = this.строки;
  112. var позиции = [];
  113. for (var номерСлоя = 0; номерСлоя < параметры.глубина; ++номерСлоя)
  114. {
  115. for (var ряд = 0; ряд < параметры.высота - 1; ++ряд)
  116. {
  117. for (var столбец = 0; столбец < параметры.ширина - 1; ++столбец)
  118. {
  119. const рядСлоя = ряд + (номерСлоя * параметры.высота);
  120. if (
  121. (строки[рядСлоя][столбец] == '1') &&
  122. (строки[рядСлоя][столбец + 1] == '2') &&
  123. (строки[рядСлоя + 1][столбец] == '4') &&
  124. (строки[рядСлоя + 1][столбец + 1] == '3')
  125. ) {
  126. позиции.push([номерСлоя, ряд, столбец]);
  127. }
  128. }
  129. }
  130. }
  131. this.позиции = позиции;
  132. };
  133. // Исполняем.
  134. this.__преобразоватьСодержимоеВСтроки();
  135. this.__разобратьПараметры();
  136. this.__разобратьПозиции();
  137. return this.позиции;
  138. };
  139. // // // //
  140. // MARK: https://git.opengamestudio.org/mahjong/povtorniy-repeating-ui/raw/branch/master/0000
  141. // // // //
  142. // MARK: /плавно-отобразить-скрыть|smoothly-show-hide.js
  143. ПлавноОтобразитьСкрыть = function(элемент, настройки = null)
  144. {
  145. this.отобразить = () =>
  146. {
  147. this.показываем = true;
  148. элемент.style.display = "block";
  149. this.преобразования.innerHTML = `
  150. #${элемент.id}
  151. {
  152. opacity: 0;
  153. animation: ${элемент.id}ПлавноОтобразить 0.4s ease;
  154. animation-fill-mode: forwards;
  155. animation-delay: ${this.настройки.задержка}s;
  156. }
  157. `;
  158. };
  159. this.скрыть = () =>
  160. {
  161. this.показываем = false;
  162. this.преобразования.innerHTML = `
  163. #${элемент.id}
  164. {
  165. opacity: ${this.настройки.прозрачность};
  166. animation: ${элемент.id}ПлавноСкрыть 0.4s ease;
  167. animation-fill-mode: forwards;
  168. animation-delay: ${this.настройки.задержка}s;
  169. }
  170. `;
  171. };
  172. this.__задатьНастройкиПоУмолчанию = () =>
  173. {
  174. var умолчание = {
  175. "задержка": 0,
  176. "прозрачность": 1,
  177. "отклик": {},
  178. };
  179. if (!настройки)
  180. {
  181. this.настройки = умолчание;
  182. }
  183. else
  184. {
  185. this.настройки = настройки;
  186. }
  187. for (var ключ in умолчание)
  188. {
  189. if (!(ключ in this.настройки))
  190. {
  191. this.настройки[ключ] = умолчание[ключ];
  192. }
  193. }
  194. };
  195. this.__создатьКадры = () =>
  196. {
  197. this.кадры = document.createElement("style");
  198. document.head.appendChild(this.кадры);
  199. this.кадры.innerHTML = `
  200. @keyframes ${элемент.id}ПлавноОтобразить
  201. {
  202. 0%
  203. {
  204. opacity: 0;
  205. }
  206. 100%
  207. {
  208. opacity: ${this.настройки.прозрачность};
  209. }
  210. }
  211. @keyframes ${элемент.id}ПлавноСкрыть
  212. {
  213. 0%
  214. {
  215. opacity: ${this.настройки.прозрачность};
  216. }
  217. 100%
  218. {
  219. opacity: 0;
  220. }
  221. }
  222. `;
  223. };
  224. this.__создатьПреобразования = () =>
  225. {
  226. this.преобразования = document.createElement("style");
  227. document.head.appendChild(this.преобразования);
  228. };
  229. this.__отслеживатьЗавершениеАнимации = () =>
  230. {
  231. this.показываем = true;
  232. var тут = this;
  233. элемент.addEventListener(
  234. "animationend",
  235. function()
  236. {
  237. if (тут.показываем && тут.настройки.отклик.отображение)
  238. {
  239. тут.настройки.отклик.отображение();
  240. }
  241. else if (!тут.показываем)
  242. {
  243. элемент.style.display = "none";
  244. if (тут.настройки.отклик.скрытие)
  245. {
  246. тут.настройки.отклик.скрытие();
  247. }
  248. }
  249. }
  250. );
  251. };
  252. // Конструктор.
  253. this.__задатьНастройкиПоУмолчанию();
  254. this.__создатьКадры();
  255. this.__создатьПреобразования();
  256. this.__отслеживатьЗавершениеАнимации();
  257. };
  258. // Часто используемые варианты в одну строку.
  259. // 常用的单线变型
  260. // Frequently used single line variants.
  261. плавноСкрытьИУдалить = (id, настройки = null) =>
  262. {
  263. var элемент = $(`#${id}`);
  264. var плавно = new ПлавноОтобразитьСкрыть(элемент.get(0), настройки);
  265. плавно.настройки.отклик.скрытие = function() {
  266. элемент.remove();
  267. };
  268. плавно.скрыть();
  269. };
  270. // // // //
  271. плавноСкрыть = (id, настройки = null) =>
  272. {
  273. var элемент = $(`#${id}`);
  274. var плавно = new ПлавноОтобразитьСкрыть(элемент.get(0), настройки);
  275. плавно.скрыть();
  276. };
  277. // MARK: /таблица|table.js
  278. Таблица = function(id)
  279. {
  280. this.задатьЗаголовки = (заголовки) =>
  281. {
  282. this.заголовки = заголовки;
  283. this.__пересобрать();
  284. };
  285. this.задатьСтроки = (строки) =>
  286. {
  287. this.строки = строки;
  288. this.__пересобрать();
  289. };
  290. this.элемент = (номер) =>
  291. {
  292. return $(`#${id}-${номер}`);
  293. };
  294. this.__пересобрать = () =>
  295. {
  296. this.__задатьСодержимое();
  297. this.__отслеживатьВыбор();
  298. };
  299. this.__задатьСодержимое = () =>
  300. {
  301. var содержимое = "";
  302. if (this.заголовки && this.заголовки.length)
  303. {
  304. var заголовок = "";
  305. for (var номер in this.заголовки)
  306. {
  307. var значение = this.заголовки[номер];
  308. заголовок += `<th>${значение}</th>`
  309. }
  310. содержимое += `
  311. <thead>
  312. <tr>
  313. ${заголовок}
  314. </tr>
  315. </thead>
  316. `;
  317. }
  318. if (this.строки && this.строки.length)
  319. {
  320. var тело = "";
  321. for (var номер in this.строки)
  322. {
  323. var столбцы = this.строки[номер];
  324. var строка = "";
  325. for (var н in столбцы)
  326. {
  327. var значение = столбцы[н];
  328. строка += `<td>${значение}</td>`;
  329. }
  330. тело += `<tr id="${id}-${номер}">${строка}</tr>`;
  331. }
  332. содержимое += `<tbody>${тело}</tbody>`;
  333. }
  334. $(`#${id}`).html(содержимое);
  335. };
  336. this.__отслеживатьВыбор = () =>
  337. {
  338. if (!(this.строки && this.строки.length))
  339. {
  340. return;
  341. }
  342. var тут = this;
  343. for (var номер in this.строки)
  344. {
  345. const номерСтроки = номер;
  346. $(`#${id}-${номер}`).click(function() {
  347. if (тут.выбор)
  348. {
  349. тут.выбор(номерСтроки);
  350. }
  351. });
  352. }
  353. };
  354. };
  355. // // // //
  356. // MARK: https://git.opengamestudio.org/PuCOBATEJlb/PuCOBATEJlb/raw/branch/master/0000
  357. // // // //
  358. // MARK: /base64js.min.js
  359. //https://github.com/beatgammit/base64-js
  360. (function(r){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=r()}else if(typeof define==="function"&&define.amd){define([],r)}else{var e;if(typeof window!=="undefined"){e=window}else if(typeof global!=="undefined"){e=global}else if(typeof self!=="undefined"){e=self}else{e=this}e.base64js=r()}})(function(){var r,e,n;return function(){function d(a,f,i){function u(n,r){if(!f[n]){if(!a[n]){var e="function"==typeof require&&require;if(!r&&e)return e(n,!0);if(v)return v(n,!0);var t=new Error("Cannot find module '"+n+"'");throw t.code="MODULE_NOT_FOUND",t}var o=f[n]={exports:{}};a[n][0].call(o.exports,function(r){var e=a[n][1][r];return u(e||r)},o,o.exports,d,a,f,i)}return f[n].exports}for(var v="function"==typeof require&&require,r=0;r<i.length;r++)u(i[r]);return u}return d}()({"/":[function(r,e,n){"use strict";n.byteLength=f;n.toByteArray=i;n.fromByteArray=p;var u=[];var v=[];var d=typeof Uint8Array!=="undefined"?Uint8Array:Array;var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var o=0,a=t.length;o<a;++o){u[o]=t[o];v[t.charCodeAt(o)]=o}v["-".charCodeAt(0)]=62;v["_".charCodeAt(0)]=63;function c(r){var e=r.length;if(e%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}var n=r.indexOf("=");if(n===-1)n=e;var t=n===e?0:4-n%4;return[n,t]}function f(r){var e=c(r);var n=e[0];var t=e[1];return(n+t)*3/4-t}function h(r,e,n){return(e+n)*3/4-n}function i(r){var e;var n=c(r);var t=n[0];var o=n[1];var a=new d(h(r,t,o));var f=0;var i=o>0?t-4:t;var u;for(u=0;u<i;u+=4){e=v[r.charCodeAt(u)]<<18|v[r.charCodeAt(u+1)]<<12|v[r.charCodeAt(u+2)]<<6|v[r.charCodeAt(u+3)];a[f++]=e>>16&255;a[f++]=e>>8&255;a[f++]=e&255}if(o===2){e=v[r.charCodeAt(u)]<<2|v[r.charCodeAt(u+1)]>>4;a[f++]=e&255}if(o===1){e=v[r.charCodeAt(u)]<<10|v[r.charCodeAt(u+1)]<<4|v[r.charCodeAt(u+2)]>>2;a[f++]=e>>8&255;a[f++]=e&255}return a}function s(r){return u[r>>18&63]+u[r>>12&63]+u[r>>6&63]+u[r&63]}function l(r,e,n){var t;var o=[];for(var a=e;a<n;a+=3){t=(r[a]<<16&16711680)+(r[a+1]<<8&65280)+(r[a+2]&255);o.push(s(t))}return o.join("")}function p(r){var e;var n=r.length;var t=n%3;var o=[];var a=16383;for(var f=0,i=n-t;f<i;f+=a){o.push(l(r,f,f+a>i?i:f+a))}if(t===1){e=r[n-1];o.push(u[e>>2]+u[e<<4&63]+"==")}else if(t===2){e=(r[n-2]<<8)+r[n-1];o.push(u[e>>10]+u[e>>4&63]+u[e<<2&63]+"=")}return o.join("")}},{}]},{},[])("/")});
  361. // MARK: /⨐.js
  362. рисовательПоддерживаетИзображениеСИменемФайла = (файл) =>
  363. {
  364. var форматы = поддерживаемыеРисователемФорматыИзображений();
  365. for (var окончание in форматы)
  366. {
  367. if (файл.endsWith(окончание))
  368. {
  369. return true;
  370. }
  371. }
  372. return false;
  373. };
  374. // // // //
  375. поддерживаемыеРисователемФорматыИзображений = () =>
  376. {
  377. return {
  378. ".png": "png",
  379. ".jpg": "jpeg",
  380. ".jpeg": "jpeg",
  381. ".gif": "gif",
  382. };
  383. };
  384. // // // //
  385. загрузитьРесурсыПоследовательно = (мир, функция, словарь, событие) =>
  386. {
  387. var список = словарьРесурсовВСписок(словарь);
  388. function загрузить(мир, список, номер, успех, провал)
  389. {
  390. const э = список[номер];
  391. функция(
  392. мир,
  393. э.указатель,
  394. э.файл,
  395. function(ресурс) {
  396. словарь[э.указатель][э.файл] = ресурс;
  397. успех();
  398. },
  399. function() {
  400. успех();
  401. }
  402. );
  403. }
  404. сделатьПоследовательно(
  405. мир,
  406. список,
  407. загрузить,
  408. function() {
  409. мир.уведомить(событие);
  410. }
  411. );
  412. };
  413. // // // //
  414. словарьРесурсовВСписок = словарь =>
  415. {
  416. var список = [];
  417. for (var указатель in словарь)
  418. {
  419. for (var файл in словарь[указатель])
  420. {
  421. список.push({
  422. "указатель": указатель,
  423. "файл": файл,
  424. });
  425. }
  426. }
  427. return список;
  428. };
  429. // // // //
  430. форматИзображенияДляБазы64 = файл =>
  431. {
  432. var форматы = поддерживаемыеРисователемФорматыИзображений();
  433. for (var окончание in форматы)
  434. {
  435. if (файл.toLowerCase().endsWith(окончание))
  436. {
  437. return форматы[окончание];
  438. }
  439. }
  440. return null;
  441. };
  442. // // // //
  443. загрузитьТекстуру = (мир, указатель, файл, откликУспех, откликПровал = null) =>
  444. {
  445. var модуль = мир.модули.модульПоУказателю(указатель);
  446. var содержимое = модуль.содержимое[файл];
  447. var представление = мир.база64ИзДвоичногоМассива(new Uint8Array(содержимое));
  448. var формат = форматИзображенияДляБазы64(файл);
  449. var адрес = `data:image/${формат};base64,${представление}`;
  450. мир.текстурщик.load(
  451. адрес,
  452. function(текстура) {
  453. текстура.flipY = false;
  454. откликУспех(текстура);
  455. },
  456. null,
  457. function(error) {
  458. var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Не удалось загрузить текстуру ⚬ 无法加载纹理 ⚬ Could not load texture";
  459. console.error(ошибка, указатель, файл);
  460. if (откликПровал)
  461. {
  462. откликПровал();
  463. }
  464. }
  465. );
  466. };
  467. // // // //
  468. загрузитьПолигональнуюСетку = (мир, указатель, файл, откликУспех, откликПровал = null) =>
  469. {
  470. var м = мир.модули.модульПоУказателю(указатель);
  471. var адрес = `${window.location.origin}${файл}`;
  472. THREE.Cache.enabled = true;
  473. THREE.Cache.add(адрес, м.содержимое[файл]);
  474. мир.модельер.load(
  475. адрес,
  476. function(gltf) {
  477. THREE.Cache.remove(адрес);
  478. // Вычленяем полигональную сетку.
  479. // Take polygon mesh.
  480. var успех = false;
  481. gltf.scene.traverse(function(ребёнок) {
  482. if (!успех && ребёнок.isMesh)
  483. {
  484. откликУспех(ребёнок);
  485. успех = true;
  486. }
  487. });
  488. if (успех)
  489. {
  490. return;
  491. }
  492. var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Отсутствует полигональная сетка ⚬ 不存在多边形网格 ⚬ Polygon mesh is absent";
  493. console.error(ошибка, указатель, файл);
  494. if (откликПровал)
  495. {
  496. откликПровал();
  497. }
  498. },
  499. null,
  500. function(error) {
  501. var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Не удалось загрузить полигональную сетку ⚬ 无法加载多边形网格 ⚬ Could not load polygon mesh";
  502. console.error(ошибка, указатель, файл);
  503. if (откликПровал)
  504. {
  505. откликПровал();
  506. }
  507. }
  508. );
  509. };
  510. // MARK: /🎬.js
  511. // // // //
  512. ОтслеживатьНажатияВРисователе = мир =>
  513. {
  514. мир.отслеживатьНажатияВРисователе = true;
  515. уведомитьОНажатии = (событие) =>
  516. {
  517. if (!мир.отслеживатьНажатияВРисователе)
  518. {
  519. return;
  520. }
  521. var позиция = new THREE.Vector2();
  522. var ширина = мир.ширинаОкна;
  523. var высота = мир.высотаОкна;
  524. позиция.x = ((событие.clientX + window.pageXOffset) / ширина ) * 2 - 1;
  525. позиция.y = - ((событие.clientY + window.pageYOffset) / высота) * 2 + 1;
  526. мир.позицияНажатияВРисователе = позиция;
  527. мир.уведомить("нажатие в рисователе");
  528. };
  529. // Палец.
  530. window.addEventListener(
  531. "touchstart",
  532. function(событие) {
  533. уведомитьОНажатии(событие.touches[0]);
  534. }
  535. );
  536. // Мышь.
  537. window.addEventListener(
  538. "click",
  539. function(событие) {
  540. уведомитьОНажатии(событие);
  541. }
  542. );
  543. // iOS.
  544. // https://stackoverflow.com/a/31459240/3404710
  545. мир.рисователь.domElement.style.cursor = "pointer";
  546. };
  547. // // // //
  548. ЗапуститьРисователя = мир =>
  549. {
  550. function отрисовать(время)
  551. {
  552. requestAnimationFrame(отрисовать);
  553. мир.рисователь.render(мир.сцена, мир.камера);
  554. мир.времяРисования = время;
  555. мир.уведомить("отрисовали кадр");
  556. }
  557. отрисовать();
  558. };
  559. // // // //
  560. ПрименитьРазмерРисователя = мир =>
  561. {
  562. мир.камера.aspect = мир.ширинаОкна / мир.высотаОкна;
  563. мир.камера.updateProjectionMatrix();
  564. var чёткостьApple = 2;
  565. мир.рисователь.setSize(мир.ширинаОкна * чёткостьApple, мир.высотаОкна * чёткостьApple);
  566. мир.канва.style = `
  567. position: absolute;
  568. left: 0;
  569. top: 0;
  570. width: ${мир.ширинаОкнаПроц}%;
  571. max-width: ${мир.ширинаОкнаПроц}%;
  572. height: ${мир.высотаОкнаПроц}%;
  573. max-height: ${мир.высотаОкнаПроц}%;
  574. `;
  575. };
  576. // // // //
  577. ИзменитьРазмерРисователя = мир =>
  578. {
  579. мир.ширинаОкна = window.innerWidth * мир.масштаб;
  580. мир.высотаОкна = window.innerHeight * мир.масштаб;
  581. мир.ширинаОкнаПроц = мир.масштаб * 100;
  582. мир.высотаОкнаПроц = мир.масштаб * 100;
  583. };
  584. // // // //
  585. ОтслеживатьИзменениеРазмераОкнаБраузера = мир =>
  586. {
  587. window.addEventListener(
  588. "resize",
  589. function() {
  590. мир.уведомить("изменили размер окна браузера");
  591. }
  592. );
  593. };
  594. // // // //
  595. НастроитьРисователя = мир =>
  596. {
  597. мир.сцена = new THREE.Scene();
  598. мир.камера = new THREE.PerspectiveCamera(45, 1, 0.1, 1000);
  599. мир.ловец = new THREE.Raycaster();
  600. мир.модельер = new THREE.GLTFLoader();
  601. мир.текстурщик = new THREE.TextureLoader();
  602. мир.масштаб = 1;
  603. мир.канва = document.createElement("canvas");
  604. document.body.prepend(мир.канва);
  605. мир.рисователь = new THREE.WebGLRenderer({canvas: мир.канва, antialias: true});
  606. };
  607. // // // //
  608. УстановитьBase64JS = мир =>
  609. {
  610. /*
  611. var модуль = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  612. var содержимое = модуль.содержимое["/base64js.min.js"];
  613. eval(содержимое);
  614. */
  615. мир.база64ИзДвоичногоМассива = base64js.fromByteArray;
  616. мир.база64ВДвоичныйМассив = base64js.toByteArray;
  617. };
  618. // // // //
  619. УстановитьThreeJS = мир =>
  620. {
  621. var модуль = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  622. var код = модуль.содержимое["/three.js"];
  623. var скрипт = document.createElement("script");
  624. скрипт.innerHTML = код;
  625. document.body.appendChild(скрипт);
  626. };
  627. // MARK: /🎬.череда
  628. gitjs.мир.разобрать(`
  629. ручной пуск
  630. установить ThreeJS
  631. установить Base64JS
  632. настроить рисователя
  633. отслеживать изменение размера окна браузера
  634. изменить размер рисователя
  635. применить размер рисователя
  636. отслеживать нажатия в рисователе
  637. запустить рисователя
  638. изменили размер окна браузера
  639. изменить размер рисователя
  640. применить размер рисователя
  641. изменили масштаб
  642. изменить размер рисователя
  643. применить размер рисователя
  644. `);
  645. // MARK: /📖.js
  646. // // // //
  647. ВыбратьУзелСцены = мир =>
  648. {
  649. мир.выбранныйУзел = null;
  650. мир.ловец.setFromCamera(мир.позицияНажатияВРисователе, мир.камера);
  651. var пересечения = мир.ловец.intersectObjects(мир.выборныеУзлы);
  652. if (пересечения.length)
  653. {
  654. мир.выбранныйУзел = пересечения[0].object;
  655. мир.уведомить("выбрали узел сцены");
  656. }
  657. };
  658. // // // //
  659. ЗагрузитьТекстуры = мир =>
  660. {
  661. загрузитьРесурсыПоследовательно(
  662. мир,
  663. загрузитьТекстуру,
  664. мир.текстуры,
  665. "загрузили текстуры"
  666. );
  667. };
  668. // // // //
  669. ЗагрузитьПолигональныеСетки = мир =>
  670. {
  671. загрузитьРесурсыПоследовательно(
  672. мир,
  673. загрузитьПолигональнуюСетку,
  674. мир.полигональныеСетки,
  675. "загрузили полигональные сетки"
  676. );
  677. };
  678. // // // //
  679. // MARK: https://git.opengamestudio.org/MAOH/MEXMA/raw/branch/master/0000
  680. // // // //
  681. // MARK: /⨐.js
  682. фишкуМаджонгаМожноВыбрать = (индексы, индекс) =>
  683. {
  684. var позиция = позицияИндексаФишкиМаджонга(индекс);
  685. // Проверяем заблокированность фишки одновременно с обеих сторон.
  686. var слева = уФишкиМаджонгаЕстьСоседи(индексы, позиция, 0, -2);
  687. var справа = уФишкиМаджонгаЕстьСоседи(индексы, позиция, 0, 2);
  688. if (слева && справа)
  689. {
  690. return false;
  691. }
  692. // Проверяем заблокированность сверху.
  693. for (var смещениеСтолбца = -1; смещениеСтолбца < 2; ++смещениеСтолбца)
  694. {
  695. if (уФишкиМаджонгаЕстьСоседи(индексы, позиция, 1, смещениеСтолбца))
  696. {
  697. return false;
  698. }
  699. }
  700. return true;
  701. };
  702. // // // //
  703. уФишкиМаджонгаЕстьСоседи = (индексы, позиция, смещениеСлоя, смещениеСтолбца) =>
  704. {
  705. for (var смещениеРяда = -1; смещениеРяда < 2; ++смещениеРяда)
  706. {
  707. var позицияСоседа = [
  708. позиция[0] + смещениеСлоя,
  709. позиция[1] + смещениеРяда,
  710. позиция[2] + смещениеСтолбца,
  711. ];
  712. var индексСоседа = индексПозицииФишкиМаджонга(позицияСоседа);
  713. if (индексСоседа in индексы)
  714. {
  715. return true;
  716. }
  717. }
  718. return false;
  719. };
  720. // // // //
  721. позицияИндексаФишкиМаджонга = (индекс) =>
  722. {
  723. const x = Math.round(индекс / 1000000);
  724. const y = Math.round((индекс - x * 1000000) / 1000);
  725. const z = индекс - x * 1000000 - y * 1000;
  726. return [x, y, z];
  727. };
  728. // // // //
  729. индексПозицииФишкиМаджонга = (позиция) =>
  730. {
  731. return позиция[0] * 1000000 + позиция[1] * 1000 + позиция[2];
  732. };
  733. // MARK: /🎬.js
  734. const ЗАДЕРЖКА = 100;
  735. // // // //
  736. УведомитьОРезультатеЕслиКонец = мир =>
  737. {
  738. if (мир.количествоХодовВМаджонге != 0)
  739. {
  740. return;
  741. }
  742. var фишкиОстались = Object.keys(мир.индексыФишекМаджонга).length > 0;
  743. if (фишкиОстались)
  744. {
  745. мир.уведомить("поражение в маджонге");
  746. }
  747. else
  748. {
  749. мир.уведомить("победа в маджонге");
  750. }
  751. };
  752. // // // //
  753. ПодсчитатьКоличествоХодовВМаджонге = мир =>
  754. {
  755. var номера = мир.доступныеДляВыбораНомераФишекМаджонга;
  756. var фишки = мир.фишкиМаджонга;
  757. var ходов = 0;
  758. for (var н0 in номера)
  759. {
  760. н0 = Number(н0);
  761. // Исключаем уже просмотренные номера.
  762. for (var н1 = н0 + 1; н1 < номера.length; ++н1)
  763. {
  764. var номер0 = номера[н0];
  765. var номер1 = номера[н1];
  766. var группа0 = фишки[номер0]["🚩"];
  767. var группа1 = фишки[номер1]["🚩"];
  768. if (группа0 == группа1)
  769. {
  770. ++ходов;
  771. }
  772. }
  773. }
  774. мир.количествоХодовВМаджонге = ходов;
  775. мир.уведомить("изменили количество ходов в маджонге");
  776. };
  777. // // // //
  778. СобратьДоступныеДляВыбораНомераФишекМаджонга = мир =>
  779. {
  780. var индексы = мир.индексыФишекМаджонга;
  781. var номера = [];
  782. for (индекс in индексы)
  783. {
  784. if (фишкуМаджонгаМожноВыбрать(индексы, индекс))
  785. {
  786. var номер = индексы[индекс];
  787. номера.push(номер);
  788. }
  789. }
  790. мир.доступныеДляВыбораНомераФишекМаджонга = номера;
  791. };
  792. // // // //
  793. ОчиститьИндексыФишекМаджонгаОтУбранных = мир =>
  794. {
  795. for (var номер in мир.убранныеФишкиМаджонга)
  796. {
  797. var н = мир.убранныеФишкиМаджонга[номер];
  798. var позиция = мир.фишкиМаджонга[н]["📍"];
  799. var индекс = индексПозицииФишкиМаджонга(позиция);
  800. delete мир.индексыФишекМаджонга[индекс];
  801. }
  802. };
  803. // // // //
  804. УбратьВыбраннуюПаруФишекМаджонгаСЗадержкой = мир =>
  805. {
  806. setTimeout(
  807. function() {
  808. мир.убранныеФишкиМаджонга = мир.выбранныеФишкиМаджонга.slice();
  809. мир.выбранныеФишкиМаджонга = [];
  810. мир.уведомить("изменили выбранные фишки маджонга");
  811. мир.уведомить("убрали фишки маджонга");
  812. },
  813. мир.задержкаУбиранияФишекМаджонга
  814. );
  815. };
  816. // // // //
  817. ИсключитьИзВыбранныхФишекМаджонгаПервую = мир =>
  818. {
  819. мир.выбранныеФишкиМаджонга.shift();
  820. мир.уведомить("изменили выбранные фишки маджонга");
  821. };
  822. // // // //
  823. СравнитьПаруВыбранныхФишекМаджонга = мир =>
  824. {
  825. // Удостоверяемся в наличии двух фишек.
  826. if (мир.выбранныеФишкиМаджонга.length != 2)
  827. {
  828. return;
  829. }
  830. var н1 = мир.выбранныеФишкиМаджонга[0];
  831. var н2 = мир.выбранныеФишкиМаджонга[1];
  832. var г1 = мир.фишкиМаджонга[н1]["🚩"];
  833. var г2 = мир.фишкиМаджонга[н2]["🚩"];
  834. if (г1 == г2)
  835. {
  836. мир.уведомить("выбрали пару фишек маджонга одной группы");
  837. }
  838. else
  839. {
  840. мир.уведомить("выбрали пару фишек маджонга разных групп");
  841. }
  842. };
  843. // // // //
  844. ПодготовитьМеханикуМаджонга = мир =>
  845. {
  846. мир.выбранныеФишкиМаджонга = [];
  847. мир.задержкаУбиранияФишекМаджонга = ЗАДЕРЖКА;
  848. };
  849. // MARK: /🎬.череда
  850. gitjs.мир.разобрать(`
  851. ручной пуск
  852. подготовить механику маджонга
  853. изменили выбранные фишки маджонга
  854. сравнить пару выбранных фишек маджонга
  855. выбрали пару фишек маджонга разных групп
  856. исключить из выбранных фишек маджонга первую
  857. выбрали пару фишек маджонга одной группы
  858. убрать выбранную пару фишек маджонга с задержкой
  859. убрали фишки маджонга
  860. очистить индексы фишек маджонга от убранных
  861. собрать доступные для выбора номера фишек маджонга
  862. подсчитать количество ходов в маджонге
  863. изменили количество ходов в маджонге
  864. уведомить о результате если конец
  865. `);
  866. // MARK: /📖.js
  867. СоздатьИндексыФишекМаджонга = мир =>
  868. {
  869. мир.индексыФишекМаджонга = {};
  870. for (var н in мир.фишкиМаджонга)
  871. {
  872. var позиция = мир.фишкиМаджонга[н]["📍"];
  873. var индекс = индексПозицииФишкиМаджонга(позиция);
  874. мир.индексыФишекМаджонга[индекс] = н;
  875. };
  876. };
  877. // // // //
  878. ВыбратьФишкуМаджонга = мир =>
  879. {
  880. var номер = мир.фишкаМаджонгаДляВыбора;
  881. // Отсекаем выбор одной и той же фишки.
  882. if (
  883. мир.выбраннаяФишкаМаджонга &&
  884. мир.выбраннаяФишкаМаджонга == номер
  885. ) {
  886. return;
  887. }
  888. // Проверяем доступность с точки зрения правил Маджонга.
  889. var позиция = мир.фишкиМаджонга[номер]["📍"];
  890. var индекс = индексПозицииФишкиМаджонга(позиция);
  891. if (!фишкуМаджонгаМожноВыбрать(мир.индексыФишекМаджонга, индекс))
  892. {
  893. return;
  894. }
  895. мир.выбраннаяФишкаМаджонга = номер;
  896. мир.выбранныеФишкиМаджонга.push(номер);
  897. мир.уведомить("изменили выбранные фишки маджонга");
  898. };
  899. // // // //
  900. // MARK: https://git.opengamestudio.org/MAOH/CEHMA/raw/branch/master/0000
  901. // // // //
  902. // MARK: /🎬.js
  903. const ОТСТУП_МЕЖДУ_ФИШКАМИ = 0.02;
  904. const КОЭФФИЦИЕНТ_ВЫСОТЫ = 1.5;
  905. // // // //
  906. РасположитьКамеруСцены = мир =>
  907. {
  908. var р = мир.размерПоляФишек;
  909. var расстояние = р.макс.z - р.мин.z;
  910. мир.камера.position.y = расстояние * КОЭФФИЦИЕНТ_ВЫСОТЫ;
  911. мир.камера.position.z = расстояние;
  912. мир.камера.lookAt(new THREE.Vector3(0, 0, 0));
  913. };
  914. // // // //
  915. ЦентрироватьФишкиСцены = мир =>
  916. {
  917. // Возвращаем в центр.
  918. мир.сценаМаджонга.position.x = 0;
  919. мир.сценаМаджонга.position.z = 0;
  920. var р = мир.размерПоляФишек;
  921. // Убираем пустоту слева.
  922. мир.сценаМаджонга.position.x -= р.мин.x;
  923. мир.сценаМаджонга.position.z -= р.мин.z;
  924. // Центрируем остаток.
  925. мир.сценаМаджонга.position.x -= (р.макс.x - р.мин.x) / 2;
  926. мир.сценаМаджонга.position.z -= (р.макс.z - р.мин.z) / 2;
  927. };
  928. // // // //
  929. ПосчитатьРазмерПоляФишек = мир =>
  930. {
  931. var мин = {
  932. "x": 1000000,
  933. "z": 1000000,
  934. };
  935. var макс = {
  936. "x": 0,
  937. "z": 0,
  938. };
  939. for (var номер in мир.фишкиМаджонга)
  940. {
  941. const ф = мир.фишкиСцены[номер];
  942. if (ф.position.x < мин.x)
  943. {
  944. мин.x = ф.position.x;
  945. }
  946. if (ф.position.x > макс.x)
  947. {
  948. макс.x = ф.position.x;
  949. }
  950. if (ф.position.z < мин.z)
  951. {
  952. мин.z = ф.position.z;
  953. }
  954. if (ф.position.z > макс.z)
  955. {
  956. макс.z = ф.position.z;
  957. }
  958. }
  959. мир.размерПоляФишек = {
  960. "мин": мин,
  961. "макс": макс,
  962. };
  963. };
  964. // // // //
  965. ЗадатьМатериалыФишкамСцены = мир =>
  966. {
  967. for (var н in мир.фишкиМаджонга)
  968. {
  969. var ф = мир.фишкиСцены[н];
  970. var г = мир.фишкиМаджонга[н]["🚩"];
  971. var м = мир.материалыФишекСцены[г];
  972. ф.material = м;
  973. }
  974. };
  975. // // // //
  976. ПерезадатьФишкиСцены = мир =>
  977. {
  978. var фишка = мир.модельФишкиСцены;
  979. var границы = фишка.geometry.boundingBox;
  980. var размеры = [
  981. (границы.max.x - границы.min.x) / 2,
  982. (границы.max.z - границы.min.z) / 2,
  983. (границы.max.y - границы.min.y),
  984. ];
  985. var отступ = мир.отступМеждуФишкамиСцены;
  986. for (var номер in мир.фишкиМаджонга)
  987. {
  988. // Узел сцены.
  989. var ф = мир.фишкиСцены[номер];
  990. ф.layers.set(0);
  991. ф.userData = номер;
  992. // Расположение.
  993. var фм = мир.фишкиМаджонга[номер];
  994. var п = фм["📍"];
  995. var слой = п[0];
  996. var ряд = п[1];
  997. var столбец = п[2];
  998. ф.position.x = столбец * (размеры[0] + отступ);
  999. ф.position.z = ряд * (размеры[1] + отступ);
  1000. ф.position.y = слой * (размеры[2] + отступ);
  1001. }
  1002. };
  1003. // // // //
  1004. СкрытьФишкиСцены = мир =>
  1005. {
  1006. var фишки = мир.фишкиСцены;
  1007. for (var н in фишки)
  1008. {
  1009. var ф = фишки[н];
  1010. ф.layers.set(1);
  1011. }
  1012. };
  1013. // // // //
  1014. ДосоздатьФишкиСцены = мир =>
  1015. {
  1016. // Если фишек в сцене уже достаточно, то ничего не делаем.
  1017. if (мир.фишкиСцены.length >= мир.фишкиМаджонга.length)
  1018. {
  1019. return;
  1020. }
  1021. var фишка = мир.модельФишкиСцены;
  1022. var колво = мир.фишкиМаджонга.length - мир.фишкиСцены.length;
  1023. for (var н = 0; н < колво; ++н)
  1024. {
  1025. var ф = фишка.clone();
  1026. мир.фишкиСцены.push(ф);
  1027. мир.кореньСценыМаджонга.add(ф);
  1028. }
  1029. }
  1030. // // // //
  1031. ПодготовитьСценуМаджонга = мир =>
  1032. {
  1033. мир.отступМеждуФишкамиСцены = ОТСТУП_МЕЖДУ_ФИШКАМИ;
  1034. мир.сценаМаджонга = new THREE.Group();
  1035. мир.фишкиСцены = [];
  1036. };
  1037. // MARK: /🎬.череда
  1038. gitjs.мир.разобрать(`
  1039. ручной пуск
  1040. подготовить сцену маджонга
  1041. надо создать фишки в сцене
  1042. # засечь время Б
  1043. досоздать фишки сцены
  1044. скрыть фишки сцены
  1045. # засечь время Б
  1046. перезадать фишки сцены
  1047. # засечь время Б
  1048. посчитать размер поля фишек
  1049. # засечь время Б
  1050. центрировать фишки сцены
  1051. # засечь время Б
  1052. расположить камеру сцены
  1053. # засечь время Б
  1054. задать материалы фишкам сцены
  1055. # засечь время Б
  1056. # создать отладочную сферу в центре корня
  1057. `);
  1058. // MARK: /📖.js
  1059. УдалитьФишкиСцены = мир =>
  1060. {
  1061. if (мир.сценаМаджонга.children.length)
  1062. {
  1063. мир.сценаМаджонга.remove(мир.кореньСценыМаджонга);
  1064. }
  1065. мир.кореньСценыМаджонга = new THREE.Group();
  1066. мир.сценаМаджонга.add(мир.кореньСценыМаджонга);
  1067. мир.фишкиСцены = [];
  1068. };
  1069. // // // //
  1070. СкрытьУбранныеФишкиВСцене = мир =>
  1071. {
  1072. for (var номер in мир.убранныеФишкиМаджонга)
  1073. {
  1074. var н = мир.убранныеФишкиМаджонга[номер];
  1075. // Перемещаем фишку на другой слой для исключения из отрисовки и выбора.
  1076. var ф = мир.фишкиСцены[н];
  1077. ф.layers.set(1);
  1078. }
  1079. }
  1080. // // // //
  1081. ВыделитьВыбранныеФишкиВСцене = мир =>
  1082. {
  1083. for (var номер in мир.выбранныеФишкиМаджонга)
  1084. {
  1085. var н = мир.выбранныеФишкиМаджонга[номер];
  1086. var ф = мир.фишкиСцены[н];
  1087. var г = мир.фишкиМаджонга[н]["🚩"];
  1088. var м = мир.выбранныеМатериалыФишекСцены[г];
  1089. ф.material = м;
  1090. }
  1091. };
  1092. // // // //
  1093. СоздатьФишкиВСцене = мир =>
  1094. {
  1095. мир.уведомить("надо создать фишки в сцене");
  1096. };
  1097. // // // //
  1098. // MARK: https://git.opengamestudio.org/MAOH/MOPMA/raw/branch/master/0000
  1099. // // // //
  1100. // MARK: /ƒ.js
  1101. создатьОкно = (мир, id, файлHTML = null, файлCSS = null) =>
  1102. {
  1103. // Структура.
  1104. var окно = document.createElement("div");
  1105. окно.id = id;
  1106. окно.style.display = "none";
  1107. document.body.appendChild(окно);
  1108. // Вид.
  1109. if (файлHTML || файлCSS)
  1110. {
  1111. var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  1112. if (файлHTML)
  1113. {
  1114. окно.innerHTML = м.содержимое[файлHTML];
  1115. }
  1116. if (файлCSS)
  1117. {
  1118. добавитьCSS(м.содержимое[файлCSS]);
  1119. }
  1120. }
  1121. // Функциональность.
  1122. окно.плавно = new ПлавноОтобразитьСкрыть(окно);
  1123. return окно;
  1124. };
  1125. // // // //
  1126. добавитьCSS = содержимое =>
  1127. {
  1128. var вид = document.createElement("style");
  1129. document.head.appendChild(вид);
  1130. вид.innerHTML = содержимое;
  1131. return вид;
  1132. };
  1133. // MARK: /🎛️.css
  1134. модуль.содержимое["/🎛️.css"] = `
  1135. #окно-управления
  1136. {
  1137. position: absolute;
  1138. left: 0;
  1139. top: 0;
  1140. right: 0;
  1141. bottom: 0;
  1142. }
  1143. #кнопка-темы-отобразить
  1144. {
  1145. position: fixed;
  1146. left: 0;
  1147. bottom: 1.25em;
  1148. font-size: 2em;
  1149. padding: 0.25em 0.25em;
  1150. margin-left: 0.33em;
  1151. }
  1152. #кнопка-раскладки-отобразить
  1153. {
  1154. position: fixed;
  1155. right: 0;
  1156. bottom: 1.25em;
  1157. font-size: 2em;
  1158. padding: 0.25em 0.25em;
  1159. margin-right: 0.33em;
  1160. }
  1161. #кнопки-масштаба
  1162. {
  1163. position: fixed;
  1164. right: 1em;
  1165. top: 3em;
  1166. }
  1167. #счёт
  1168. {
  1169. position: fixed;
  1170. top: 0;
  1171. margin-top: 0;
  1172. left: 50%;
  1173. transform: translateX(-50%);
  1174. }
  1175. `;
  1176. // MARK: /🎛️.html
  1177. модуль.содержимое["/🎛️.html"] = `
  1178. <a id="кнопка-темы-отобразить" class="uk-button uk-button-default">🀄</a>
  1179. <a id="кнопка-раскладки-отобразить" class="uk-button uk-button-default">📍</a>
  1180. <!--
  1181. <ul id="кнопки-масштаба" class="uk-iconnav uk-iconnav-vertical">
  1182. <li><a id="увеличить-масштаб" uk-icon="icon: plus; ratio: 2"></a></li>
  1183. <li><a id="уменьшить-масштаб" uk-icon="icon: minus; ratio: 2"></a></li>
  1184. </ul>
  1185. -->
  1186. <div id="счёт" class="uk-text-normal">
  1187. 🎳 <span id="счёт-ходов">?</span>
  1188. 🥅 <span id="счёт-фишек">?/?</span>
  1189. </div>
  1190. `;
  1191. // MARK: /🎞️.css
  1192. модуль.содержимое["/🎞️.css"] = `
  1193. #окно-подложка
  1194. {
  1195. position: fixed;
  1196. left: 0;
  1197. top: 0;
  1198. right: 0;
  1199. bottom: 0;
  1200. background-color: white;
  1201. pointer-events: none;
  1202. }
  1203. `;
  1204. // MARK: /🎬.js
  1205. СкрытьОкноУправления = мир =>
  1206. {
  1207. мир.окноУправления.плавно.скрыть();
  1208. };
  1209. // // // //
  1210. ОтобразитьОкноУправления = мир =>
  1211. {
  1212. мир.окноУправления.плавно.отобразить();
  1213. };
  1214. // // // //
  1215. СкрытьОкноПодложку = мир =>
  1216. {
  1217. мир.окноПодложка.плавно.скрыть();
  1218. };
  1219. // // // //
  1220. ОтобразитьОкноПодложку = мир =>
  1221. {
  1222. мир.окноПодложка.плавно.отобразить();
  1223. };
  1224. // // // //
  1225. СкрытьОкноТем = мир =>
  1226. {
  1227. мир.окноТем.плавно.скрыть();
  1228. };
  1229. // // // //
  1230. ОтобразитьОкноТем = мир =>
  1231. {
  1232. мир.окноТем.плавно.отобразить();
  1233. };
  1234. // // // //
  1235. СкрытьОкноРаскладок = мир =>
  1236. {
  1237. мир.окноРаскладок.плавно.скрыть();
  1238. };
  1239. // // // //
  1240. ОтобразитьОкноРаскладок = мир =>
  1241. {
  1242. мир.окноРаскладок.плавно.отобразить();
  1243. };
  1244. // // // //
  1245. СоздатьОкноТем = мир =>
  1246. {
  1247. мир.окноТем = создатьОкно(мир, "окно-темы", "/🖼️.html", "/🖼️.css");
  1248. мир.таблицаОкнаТем = new Таблица("окно-темы-список");
  1249. $("#кнопка-темы-скрыть").click(function() {
  1250. мир.уведомить("кнопка темы скрыть");
  1251. });
  1252. мир.таблицаОкнаТем.выбор = (номер) =>
  1253. {
  1254. // Игнорируем повторный выбор.
  1255. if (
  1256. мир.номерВыбраннойТемыМаджонга &&
  1257. мир.номерВыбраннойТемыМаджонга == номер
  1258. ) {
  1259. return;
  1260. }
  1261. мир.номерВыбраннойТемыМаджонга = номер;
  1262. мир.уведомить("изменили номер выбранной темы маджонга");
  1263. };
  1264. };
  1265. // // // //
  1266. СоздатьОкноРаскладок = мир =>
  1267. {
  1268. мир.окноРаскладок = создатьОкно(мир, "окно-раскладки", "/📍.html", "/📍.css");
  1269. мир.таблицаОкнаРаскладок = new Таблица("окно-раскладки-список");
  1270. $("#кнопка-раскладки-скрыть").click(function() {
  1271. мир.уведомить("кнопка раскладки скрыть");
  1272. });
  1273. мир.таблицаОкнаРаскладок.выбор = (номер) =>
  1274. {
  1275. // Игнорируем повторный выбор.
  1276. if (
  1277. мир.номерВыбраннойРаскладкиМаджонга &&
  1278. мир.номерВыбраннойРаскладкиМаджонга == номер
  1279. ) {
  1280. return;
  1281. }
  1282. мир.номерВыбраннойРаскладкиМаджонга = номер;
  1283. мир.уведомить("изменили номер выбранной раскладки маджонга");
  1284. };
  1285. };
  1286. // // // //
  1287. СоздатьОкноПодложку = мир =>
  1288. {
  1289. мир.окноПодложка = создатьОкно(мир, "окно-подложка", null, "/🎞️.css")
  1290. мир.окноПодложка.плавно = new ПлавноОтобразитьСкрыть(
  1291. мир.окноПодложка,
  1292. {
  1293. "прозрачность": 0.5,
  1294. }
  1295. );
  1296. };
  1297. // // // //
  1298. СоздатьОкноУправления = мир =>
  1299. {
  1300. мир.окноУправления = создатьОкно(мир, "окно-управления", "/🎛️.html", "/🎛️.css")
  1301. $("#кнопка-раскладки-отобразить").click(function() {
  1302. мир.уведомить("кнопка раскладки отобразить");
  1303. });
  1304. $("#кнопка-темы-отобразить").click(function() {
  1305. мир.уведомить("кнопка темы отобразить");
  1306. });
  1307. $(`#увеличить-масштаб`).click(function() {
  1308. мир.уведомить("кнопка увеличения масштаба");
  1309. });
  1310. $(`#уменьшить-масштаб`).click(function() {
  1311. мир.уведомить("кнопка уменьшения масштаба");
  1312. });
  1313. };
  1314. // // // //
  1315. ЗадатьСтилиМордыМаджонга = мир =>
  1316. {
  1317. var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  1318. добавитьCSS(м.содержимое["/🙈MOPMA.css"]);
  1319. };
  1320. // MARK: /🎬.череда
  1321. gitjs.мир.разобрать(`
  1322. ручной пуск
  1323. задать стили морды маджонга
  1324. создать окно управления
  1325. создать окно подложку
  1326. создать окно раскладок
  1327. создать окно тем
  1328. кнопка раскладки отобразить
  1329. отобразить окно подложку
  1330. отобразить окно раскладок
  1331. скрыть окно управления
  1332. кнопка раскладки скрыть
  1333. скрыть окно подложку
  1334. скрыть окно раскладок
  1335. отобразить окно управления
  1336. кнопка темы отобразить
  1337. отобразить окно подложку
  1338. отобразить окно тем
  1339. скрыть окно управления
  1340. кнопка темы скрыть
  1341. скрыть окно подложку
  1342. скрыть окно тем
  1343. отобразить окно управления
  1344. `);
  1345. // MARK: /📍.css
  1346. модуль.содержимое["/📍.css"] = `
  1347. #окно-раскладки
  1348. {
  1349. position: fixed;
  1350. left: 1em;
  1351. top: 3em;
  1352. bottom: 3em;
  1353. right: 1em;
  1354. }
  1355. #окно-раскладки-заголовок
  1356. {
  1357. float: right;
  1358. }
  1359. #кнопка-раскладки-скрыть
  1360. {
  1361. position: fixed;
  1362. right: 0;
  1363. bottom: 2em;
  1364. margin: 1em;
  1365. }
  1366. `;
  1367. // MARK: /📍.html
  1368. модуль.содержимое["/📍.html"] = `
  1369. <div id="окно-раскладки-заголовок">
  1370. <span class="uk-text-large">Раскладки</span>
  1371. ⚬ <span class="uk-text-large uk-text-bold">键盘布局</span> ⚬
  1372. <span class="uk-text-large">Layouts</span>
  1373. </div>
  1374. <div id="окно-раскладки-список-родитель" class="прокрутка ширина-по-содержимому">
  1375. <table id="окно-раскладки-список" class="uk-table uk-table-divider"></table>
  1376. </div>
  1377. <a id="кнопка-раскладки-скрыть" uk-icon="icon: close; ratio: 2"></a>
  1378. `;
  1379. // MARK: /📖.js
  1380. ОтобразитьПоражение = мир =>
  1381. {
  1382. var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  1383. var сообщение = м.содержимое["/😭.html"];
  1384. UIkit.modal.alert(сообщение);
  1385. };
  1386. // // // //
  1387. ОтобразитьПобеду = мир =>
  1388. {
  1389. var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  1390. var сообщение = м.содержимое["/😀.html"];
  1391. UIkit.modal.alert(сообщение);
  1392. };
  1393. // // // //
  1394. ОтобразитьТекущееЗначениеМасштаба = мир =>
  1395. {
  1396. var масштаб = мир.масштаб * 100;
  1397. var сообщение = `🔍 ${масштаб}%`;
  1398. UIkit.notification({
  1399. message: сообщение,
  1400. timeout: 500
  1401. });
  1402. };
  1403. // // // //
  1404. ОтобразитьКоличествоФишекМаджонга = мир =>
  1405. {
  1406. $("#счёт-фишек").html(мир.количествоФишекМаджонга);
  1407. };
  1408. // // // //
  1409. ОтобразитьКоличествоХодовВМаджонге = мир =>
  1410. {
  1411. $("#счёт-ходов").html(мир.количествоХодовВМаджонге);
  1412. };
  1413. // // // //
  1414. ОтобразитьВыборТемыМаджонга = мир =>
  1415. {
  1416. var таблица = мир.таблицаОкнаТем;
  1417. // Очистить выбор.
  1418. for (var номер in таблица.строки)
  1419. {
  1420. var элемент = таблица.элемент(номер);
  1421. элемент.removeClass("выбранный-элемент-таблицы");
  1422. }
  1423. // Задать выбор.
  1424. var элемент = таблица.элемент(мир.номерВыбраннойТемыМаджонга);
  1425. элемент.addClass("выбранный-элемент-таблицы");
  1426. };
  1427. // // // //
  1428. ЗадатьСписокТемМаджонга = мир =>
  1429. {
  1430. var список = мир.списокТемМаджонга;
  1431. var номераНазвания = [];
  1432. for (var н in список)
  1433. {
  1434. var название = список[н];
  1435. var номер = Number(н) + 1;
  1436. номераНазвания.push([номер, название]);
  1437. }
  1438. мир.таблицаОкнаТем.задатьСтроки(номераНазвания);
  1439. };
  1440. // // // //
  1441. ОтобразитьВыборРаскладкиМаджонга = мир =>
  1442. {
  1443. var таблица = мир.таблицаОкнаРаскладок;
  1444. // Очистить выбор.
  1445. for (var номер in таблица.строки)
  1446. {
  1447. var элемент = таблица.элемент(номер);
  1448. элемент.removeClass("выбранный-элемент-таблицы");
  1449. }
  1450. // Задать выбор.
  1451. var элемент = таблица.элемент(мир.номерВыбраннойРаскладкиМаджонга);
  1452. элемент.addClass("выбранный-элемент-таблицы");
  1453. };
  1454. // // // //
  1455. ЗадатьСписокРаскладокМаджонга = мир =>
  1456. {
  1457. var список = мир.списокРаскладокМаджонга;
  1458. var номераНазвания = [];
  1459. for (var н in список)
  1460. {
  1461. var название = список[н];
  1462. var номер = Number(н) + 1;
  1463. номераНазвания.push([номер, название]);
  1464. }
  1465. мир.таблицаОкнаРаскладок.задатьСтроки(номераНазвания);
  1466. };
  1467. // // // //
  1468. ОтобразитьОкноУправления = мир =>
  1469. {
  1470. мир.окноУправления.плавно.отобразить();
  1471. }
  1472. // MARK: /🖼️.css
  1473. модуль.содержимое["/🖼️.css"] = `
  1474. #окно-темы
  1475. {
  1476. position: fixed;
  1477. left: 1em;
  1478. top: 3em;
  1479. bottom: 3em;
  1480. right: 1em;
  1481. }
  1482. #окно-темы-заголовок
  1483. {
  1484. float: left;
  1485. }
  1486. #кнопка-темы-скрыть
  1487. {
  1488. position: fixed;
  1489. left: 0;
  1490. bottom: 2em;
  1491. margin: 1em;
  1492. }
  1493. #окно-темы-список-родитель
  1494. {
  1495. float: right;
  1496. };
  1497. `;
  1498. // MARK: /🖼️.html
  1499. модуль.содержимое["/🖼️.html"] = `
  1500. <div id="окно-темы-заголовок">
  1501. <span class="uk-text-large">Темы</span>
  1502. ⚬ <span class="uk-text-large uk-text-bold">主题</span> ⚬
  1503. <span class="uk-text-large">Themes</span>
  1504. </div>
  1505. <div id="окно-темы-список-родитель" class="прокрутка ширина-по-содержимому">
  1506. <table id="окно-темы-список" class="uk-table uk-table-divider"></table>
  1507. </div>
  1508. <a id="кнопка-темы-скрыть" uk-icon="icon: close; ratio: 2"></a>
  1509. `;
  1510. // MARK: /😀.html
  1511. модуль.содержимое["/😀.html"] = `
  1512. <center>
  1513. <span class="uk-text-large">Победа</span>
  1514. <span class="uk-text-large">胜利</span>
  1515. <span class="uk-text-large">Victory</span>
  1516. </center>
  1517. `;
  1518. // MARK: /😭.html
  1519. модуль.содержимое["/😭.html"] = `
  1520. <center>
  1521. <span class="uk-text-large">Поражение</span>
  1522. <span class="uk-text-large">失败</span>
  1523. <span class="uk-text-large">Defeat</span>
  1524. </center>
  1525. `;
  1526. // MARK: /🙈MOPMA.css
  1527. модуль.содержимое["/🙈MOPMA.css"] = `
  1528. .окно-с-отступами
  1529. {
  1530. position: fixed;
  1531. left: 1em;
  1532. top: 1em;
  1533. bottom: 1em;
  1534. right: 1em;
  1535. }
  1536. .прокрутка
  1537. {
  1538. overflow: auto;
  1539. height: 100%;
  1540. }
  1541. .ширина-по-содержимому
  1542. {
  1543. display: inline-block;
  1544. }
  1545. .выбранный-элемент-таблицы
  1546. {
  1547. background: #eeeeee;
  1548. }
  1549. `;
  1550. // // // //
  1551. // MARK: https://git.opengamestudio.org/MAOH/PEEMA/raw/branch/master/0000
  1552. // // // //
  1553. // MARK: /🎬.js
  1554. ОбновитьСписокТемМаджонга = мир =>
  1555. {
  1556. темы = {};
  1557. for (var указатель in мир.модули.модули)
  1558. {
  1559. var м = мир.модули.модули[указатель];
  1560. var файлы = Object.keys(м.структура).sort();
  1561. // Проверяем наличие не менее 43 файлов (42 текстуры и 1 фишка).
  1562. if (файлы.length < 43)
  1563. {
  1564. continue;
  1565. }
  1566. // Проверяем наличие 42 изображений.
  1567. естьТекстура = (файл) => { return рисовательПоддерживаетИзображениеСИменемФайла(файл); };
  1568. if (файлы.filter(естьТекстура).length < 42)
  1569. {
  1570. continue;
  1571. }
  1572. // Проверяем наличие хотя бы одного файла `*.gltf`.
  1573. естьФишка = (файл) => { return файл.endsWith(".gltf"); };
  1574. if (!файлы.filter(естьФишка).length)
  1575. {
  1576. continue;
  1577. }
  1578. темы[указатель] = {
  1579. "📁": файлы,
  1580. };
  1581. }
  1582. мир.реестрМаджонга["🀄"] = темы;
  1583. console.debug("темы:", темы);
  1584. };
  1585. // // // //
  1586. ОбновитьСписокРаскладокМаджонга = мир =>
  1587. {
  1588. раскладки = {};
  1589. for (var указатель in мир.модули.модули)
  1590. {
  1591. var м = мир.модули.модули[указатель];
  1592. var файлы = Object.keys(м.структура).sort();
  1593. var лишьРаскладки = true;
  1594. for (var н in файлы)
  1595. {
  1596. var файл = файлы[н];
  1597. if (!файл.endsWith(".layout"))
  1598. {
  1599. лишьРаскладки = false;
  1600. break;
  1601. }
  1602. }
  1603. if (лишьРаскладки)
  1604. {
  1605. раскладки[указатель] = {
  1606. "📁": файлы,
  1607. };
  1608. }
  1609. }
  1610. мир.реестрМаджонга["📍"] = раскладки;
  1611. console.debug("раскладки:", раскладки);
  1612. };
  1613. // // // //
  1614. ОбновитьРеестрМаджонга = мир =>
  1615. {
  1616. мир.уведомить("надо обновить реестр маджонга");
  1617. };
  1618. // // // //
  1619. ПодготовитьРеестрМаджонга = мир =>
  1620. {
  1621. мир.реестрМаджонга = {
  1622. "📍": {},
  1623. "🀄": {},
  1624. };
  1625. };
  1626. // MARK: /🎬.череда
  1627. gitjs.мир.разобрать(`
  1628. ручной пуск
  1629. подготовить реестр маджонга
  1630. обновить реестр маджонга
  1631. надо обновить реестр маджонга
  1632. обновить список раскладок маджонга
  1633. обновить список тем маджонга
  1634. `);
  1635. // // // //
  1636. // MARK: https://git.opengamestudio.org/MAOH/CYMA/raw/branch/master/0000
  1637. // // // //
  1638. // MARK: /🎬.js
  1639. const ТЕМА_ПО_УМОЛЧАНИЮ = "https://git.opengamestudio.org/MAOH/TEMA_M1K/raw/branch/master/0000";
  1640. const РАСК_ПО_УМОЛЧАНИЮ = "https://git.opengamestudio.org/MAOH/PACK_M1/raw/branch/master/0000";
  1641. // // // //
  1642. ЦентрироватьОкноВПортретномРежиме = мир =>
  1643. {
  1644. if (!мир.ориентацияПортретная)
  1645. {
  1646. return;
  1647. }
  1648. var смещение = (мир.ширинаОкна - window.innerWidth * мир.масштаб) / 2;
  1649. window.scrollTo(смещение, 0);
  1650. };
  1651. // // // //
  1652. ЗадатьКоличествоФишекДляОтображения = мир =>
  1653. {
  1654. var всего = мир.фишкиМаджонга.length;
  1655. var доступно = Object.keys(мир.индексыФишекМаджонга).length;
  1656. var убрано = всего - доступно;
  1657. мир.количествоФишекМаджонга = `${убрано}/${всего}`;
  1658. };
  1659. // // // //
  1660. УменьшитьМасштаб = мир =>
  1661. {
  1662. мир.масштаб -= 0.5;
  1663. if (мир.масштаб < 1)
  1664. {
  1665. мир.масштаб = 1;
  1666. }
  1667. мир.уведомить("изменили масштаб");
  1668. };
  1669. // // // //
  1670. УвеличитьМасштаб = мир =>
  1671. {
  1672. мир.масштаб += 0.5;
  1673. мир.уведомить("изменили масштаб");
  1674. };
  1675. // // // //
  1676. РазрешитьВыборФишек = мир =>
  1677. {
  1678. мир.отслеживатьНажатияВРисователе = true;
  1679. };
  1680. // // // //
  1681. ЗапретитьВыборФишек = мир =>
  1682. {
  1683. мир.отслеживатьНажатияВРисователе = false;
  1684. };
  1685. // // // //
  1686. ОбновитьСчётчикКадров = мир =>
  1687. {
  1688. var время = Math.floor(мир.времяРисования / 1000.0);
  1689. // Первый вызов. Создаём.
  1690. if (!мир.счётчикКадров)
  1691. {
  1692. var счётчик = document.createElement("div");
  1693. счётчик.style = "position: fixed; left: 0; bottom: 0;";
  1694. document.body.appendChild(счётчик);
  1695. мир.счётчикКадров = счётчик;
  1696. мир.счётчикКадровВремя = время;
  1697. мир.счётчикКадровРазы = 0;
  1698. return;
  1699. }
  1700. // Последующие вызовы.
  1701. ++мир.счётчикКадровРазы;
  1702. if (время - мир.счётчикКадровВремя)
  1703. {
  1704. мир.счётчикКадров.innerHTML = мир.счётчикКадровРазы;
  1705. мир.счётчикКадровВремя = время;
  1706. мир.счётчикКадровРазы = 0;
  1707. }
  1708. };
  1709. // // // //
  1710. ИспользоватьВыбраннуюТему = мир =>
  1711. {
  1712. var э = мир.списокТем[мир.номерВыбраннойТемыМаджонга];
  1713. var файлыТемы = мир.реестрМаджонга["🀄"][э[1]]["📁"];
  1714. мир.настройкиМаджонга["🀄/📦"] = э[1];
  1715. мир.настройкиМаджонга["🀄/📁"] = файлыТемы[42];
  1716. мир.уведомить("изменили настройки маджонга");
  1717. };
  1718. // // // //
  1719. ИспользоватьВыбраннуюРаскладку = мир =>
  1720. {
  1721. var э = мир.списокРаскладок[мир.номерВыбраннойРаскладкиМаджонга];
  1722. мир.настройкиМаджонга["📍/📦"] = э[1];
  1723. мир.настройкиМаджонга["📍/📁"] = э[0];
  1724. мир.уведомить("изменили настройки маджонга");
  1725. };
  1726. // // // //
  1727. ВывестиПоражение = мир =>
  1728. {
  1729. console.debug("ПОРАЖЕНИЕ");
  1730. };
  1731. // // // //
  1732. ВывестиПобеду = мир =>
  1733. {
  1734. console.debug("ПОБЕДА");
  1735. };
  1736. // // // //
  1737. ЗадатьФишкуДляВыбора = мир =>
  1738. {
  1739. var номер = мир.выбранныйУзел.userData;
  1740. мир.фишкаМаджонгаДляВыбора = номер;
  1741. }
  1742. // // // //
  1743. ПодготовитьФишкиКВыбору = мир =>
  1744. {
  1745. мир.выборныеУзлы = мир.фишкиСцены;
  1746. };
  1747. // // // //
  1748. ПодготовитьсяКСозданиюФишек = мир =>
  1749. {
  1750. var настройки = мир.настройкиМаджонга;
  1751. var позиции = мир.позицииФишек;
  1752. var фишки = [];
  1753. var группа = 0;
  1754. for (var номер in позиции)
  1755. {
  1756. var п = позиции[номер];
  1757. фишки.push({
  1758. "📍": [п[0], п[1], п[2]],
  1759. "🚩": группа,
  1760. });
  1761. if (номер % 2)
  1762. {
  1763. ++группа;
  1764. if (группа > 41)
  1765. {
  1766. группа = 0;
  1767. }
  1768. }
  1769. };
  1770. мир.фишкиМаджонга = фишки;
  1771. мир.модельФишкиСцены = мир.полигональныеСетки[настройки["🀄/📦"]][настройки["🀄/📁"]];
  1772. мир.сцена.add(мир.сценаМаджонга);
  1773. };
  1774. // // // //
  1775. ПеремешатьПозицииФишек = мир =>
  1776. {
  1777. var настройки = мир.настройкиМаджонга;
  1778. var м = мир.модули.модульПоУказателю(настройки["📍/📦"]);
  1779. var содержимое = м.содержимое[настройки["📍/📁"]];
  1780. var было = разобратьРаскладкуKMahjongg(содержимое);
  1781. var стало = [];
  1782. // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#Getting_a_random_integer_between_two_values
  1783. function getRandomInt(min, max) {
  1784. min = Math.ceil(min);
  1785. max = Math.floor(max);
  1786. return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive
  1787. }
  1788. // Перемешиваем.
  1789. while (было.length)
  1790. {
  1791. var н = getRandomInt(0, было.length);
  1792. стало.push(было[н]);
  1793. было.splice(н, 1);
  1794. }
  1795. мир.позицииФишек = стало;
  1796. };
  1797. // // // //
  1798. СоздатьФишки = мир =>
  1799. {
  1800. мир.уведомить("надо создать фишки");
  1801. };
  1802. // // // //
  1803. СоздатьМатериалыФишек = мир =>
  1804. {
  1805. var настройки = мир.настройкиМаджонга;
  1806. мир.материалыФишекСцены = [];
  1807. мир.выбранныеМатериалыФишекСцены = [];
  1808. var текстуры = мир.текстуры[настройки["🀄/📦"]];
  1809. for (var имя in текстуры)
  1810. {
  1811. var текстура = текстуры[имя];
  1812. var материал = new THREE.MeshLambertMaterial({
  1813. map: текстура,
  1814. color: new THREE.Color(0xCCCCCC),
  1815. });
  1816. мир.материалыФишекСцены.push(материал);
  1817. var выбранныйМатериал = new THREE.MeshLambertMaterial({
  1818. map: текстура,
  1819. color: new THREE.Color(0xFFFFFF),
  1820. });
  1821. мир.выбранныеМатериалыФишекСцены.push(выбранныйМатериал);
  1822. }
  1823. };
  1824. // // // //
  1825. ПодготовитьсяКЗагрузкеРесурсов = мир =>
  1826. {
  1827. var настройки = мир.настройкиМаджонга;
  1828. мир.полигональныеСетки = {
  1829. [настройки["🀄/📦"]]: {
  1830. [настройки["🀄/📁"]]: null,
  1831. },
  1832. };
  1833. мир.текстуры = {
  1834. [настройки["🀄/📦"]]: { },
  1835. };
  1836. var м = мир.модули.модульПоУказателю(настройки["🀄/📦"]);
  1837. var файлы = Object.keys(м.структура).sort();
  1838. var колво = 42;
  1839. for (var номер = 0; номер < колво; ++номер)
  1840. {
  1841. var файл = файлы[номер];
  1842. мир.текстуры[настройки["🀄/📦"]][файл] = null;
  1843. }
  1844. };
  1845. // // // //
  1846. ПроверитьНеобходимостьЗагрузкиРесурсов = мир =>
  1847. {
  1848. var настройки = мир.настройкиМаджонга;
  1849. if (
  1850. мир.полигональныеСетки &&
  1851. настройки["🀄/📦"] in мир.полигональныеСетки &&
  1852. настройки["🀄/📁"] in мир.полигональныеСетки[настройки["🀄/📦"]] &&
  1853. мир.текстуры &&
  1854. настройки["🀄/📦"] in мир.текстуры
  1855. ) {
  1856. мир.уведомить("ресурсы не нужно загружать");
  1857. }
  1858. else
  1859. {
  1860. мир.уведомить("ресурсы нужно загружать");
  1861. }
  1862. };
  1863. // // // //
  1864. ЗагрузитьМодулиРесурсов = мир =>
  1865. {
  1866. var указатели = мир.списокМодулейРесурсовДляЗагрузки;
  1867. var сообщение = "Загрузка модулей ресурсов ⚬ 加载资源模块 ⚬ Loading resource modules";
  1868. console.debug(сообщение, указатели);
  1869. мир.модули.использовали.подписатьРаз(function() {
  1870. мир.уведомить("загрузили модули ресурсов");
  1871. });
  1872. мир.модули.использовать(указатели);
  1873. };
  1874. // // // //
  1875. ПроверитьНеобходимостьЗагрузкиМодулейРесурсов = мир =>
  1876. {
  1877. if (мир.списокМодулейРесурсовДляЗагрузки.length)
  1878. {
  1879. мир.уведомить("модули ресурсов нужно загружать");
  1880. }
  1881. else
  1882. {
  1883. мир.уведомить("модули ресурсов не нужно загружать");
  1884. }
  1885. }
  1886. // // // //
  1887. ПодготовитьПредставлениеСпискаТем = мир =>
  1888. {
  1889. var список = мир.списокТем;
  1890. var названия = [];
  1891. for (var н in список)
  1892. {
  1893. var название = список[н][0];
  1894. названия.push(название);
  1895. }
  1896. мир.списокТемМаджонга = названия;
  1897. };
  1898. // // // //
  1899. ПодготовитьСписокТем = мир =>
  1900. {
  1901. var темы = мир.реестрМаджонга["🀄"];
  1902. var список = [];
  1903. var указатели = Object.keys(темы).sort();
  1904. for (var н in указатели)
  1905. {
  1906. var указатель = указатели[н];
  1907. var м = мир.модули.модульПоУказателю(указатель);
  1908. список.push([м.имя, указатель]);
  1909. }
  1910. мир.списокТем = список;
  1911. };
  1912. // // // //
  1913. ПодготовитьСписокМодулейРесурсовДляЗагрузки = мир =>
  1914. {
  1915. var проверить = [
  1916. мир.настройкиМаджонга["🀄/📦"],
  1917. мир.настройкиМаджонга["📍/📦"],
  1918. ];
  1919. var загрузить = [];
  1920. for (var н in проверить)
  1921. {
  1922. var указатель = проверить[н];
  1923. var м = мир.модули.модульПоУказателю(указатель);
  1924. // Модуль не загружен.
  1925. if (!м.содержимое)
  1926. {
  1927. загрузить.push(указатель);
  1928. }
  1929. }
  1930. мир.списокМодулейРесурсовДляЗагрузки = загрузить;
  1931. };
  1932. // // // //
  1933. ПодготовитьПредставлениеСпискаРаскладок = мир =>
  1934. {
  1935. var список = мир.списокРаскладок;
  1936. var названия = [];
  1937. for (var н in список)
  1938. {
  1939. var файл = список[н][0];
  1940. var название = файл
  1941. .substring(1)
  1942. .replace(".layout", "");
  1943. названия.push(название);
  1944. }
  1945. мир.списокРаскладокМаджонга = названия;
  1946. };
  1947. // // // //
  1948. ПодготовитьСписокРаскладок = мир =>
  1949. {
  1950. var раскладки = мир.реестрМаджонга["📍"];
  1951. var список = [];
  1952. var указатели = Object.keys(раскладки).sort();
  1953. for (var н in указатели)
  1954. {
  1955. var указатель = указатели[н];
  1956. var файлы = раскладки[указатель]["📁"];
  1957. for (var номер in файлы)
  1958. {
  1959. var файл = файлы[номер];
  1960. список.push([файл, указатель]);
  1961. }
  1962. }
  1963. мир.списокРаскладок = список;
  1964. };
  1965. // // // //
  1966. ЗадатьНастройкиМаджонгаПоУмолчанию = мир =>
  1967. {
  1968. var файлыТемы = мир.реестрМаджонга["🀄"][ТЕМА_ПО_УМОЛЧАНИЮ]["📁"];
  1969. var файлыРаскладок = мир.реестрМаджонга["📍"][РАСК_ПО_УМОЛЧАНИЮ]["📁"];
  1970. мир.настройкиМаджонга = {
  1971. "🀄/📦": ТЕМА_ПО_УМОЛЧАНИЮ,
  1972. "🀄/📁": файлыТемы[42],
  1973. "📍/📦": РАСК_ПО_УМОЛЧАНИЮ,
  1974. "📍/📁": файлыРаскладок[0],
  1975. }
  1976. мир.номерВыбраннойРаскладкиМаджонга = 0;
  1977. мир.номерВыбраннойТемыМаджонга = 0;
  1978. мир.уведомить("изменили настройки маджонга");
  1979. };
  1980. // // // //
  1981. СоздатьПримерСцены = мир =>
  1982. {
  1983. мир.сцена.background = new THREE.Color(0xFFFFFF);
  1984. мир.свет = new THREE.DirectionalLight(0xFFFFFF, 1);
  1985. мир.свет.position.set(-0.5, 1, 0.5).normalize();
  1986. мир.сцена.add(мир.свет);
  1987. };
  1988. // // // //
  1989. ПлавноУбратьСтраницуЗагрузкиИСкрытьКрутилку = мир =>
  1990. {
  1991. плавноСкрытьИУдалить("экран-загрузки", { "задержка": 0.4 });
  1992. плавноСкрыть("крутилка", { "задержка": 0.4 });
  1993. };
  1994. // MARK: /🎬.череда
  1995. gitjs.мир.разобрать(`
  1996. надо окончить загрузку приложения
  1997. плавно убрать страницу загрузки и скрыть крутилку
  1998. создать пример сцены
  1999. подготовить список раскладок
  2000. подготовить представление списка раскладок
  2001. задать список раскладок маджонга
  2002. подготовить список тем
  2003. подготовить представление списка тем
  2004. задать список тем маджонга
  2005. отобразить окно управления
  2006. задать настройки маджонга по умолчанию
  2007. изменили настройки маджонга
  2008. # засечь время А
  2009. отобразить выбор раскладки маджонга
  2010. отобразить выбор темы маджонга
  2011. подготовить список модулей ресурсов для загрузки
  2012. # засечь время А
  2013. проверить необходимость загрузки модулей ресурсов
  2014. модули ресурсов не нужно загружать
  2015. проверить необходимость загрузки ресурсов
  2016. модули ресурсов нужно загружать
  2017. загрузить модули ресурсов
  2018. загрузили модули ресурсов
  2019. проверить необходимость загрузки ресурсов
  2020. ресурсы не нужно загружать
  2021. создать фишки
  2022. ресурсы нужно загружать
  2023. подготовиться к загрузке ресурсов
  2024. загрузить полигональные сетки
  2025. загрузили полигональные сетки
  2026. загрузить текстуры
  2027. загрузили текстуры
  2028. удалить фишки сцены
  2029. создать материалы фишек
  2030. создать фишки
  2031. надо создать фишки
  2032. # засечь время А
  2033. перемешать позиции фишек
  2034. подготовиться к созданию фишек
  2035. создать фишки в сцене
  2036. создать индексы фишек маджонга
  2037. подготовить фишки к выбору
  2038. # засечь время А
  2039. собрать доступные для выбора номера фишек маджонга
  2040. подсчитать количество ходов в маджонге
  2041. задать количество фишек для отображения
  2042. отобразить количество фишек маджонга
  2043. # засечь время А
  2044. # вывести времена
  2045. изменили номер выбранной раскладки маджонга
  2046. использовать выбранную раскладку
  2047. изменили номер выбранной темы маджонга
  2048. использовать выбранную тему
  2049. нажатие в рисователе
  2050. выбрать узел сцены
  2051. выбрали узел сцены
  2052. задать фишку для выбора
  2053. выбрать фишку маджонга
  2054. изменили выбранные фишки маджонга
  2055. задать материалы фишкам сцены
  2056. выделить выбранные фишки в сцене
  2057. убрали фишки маджонга
  2058. скрыть убранные фишки в сцене
  2059. победа в маджонге
  2060. вывести победу
  2061. отобразить победу
  2062. поражение в маджонге
  2063. вывести поражение
  2064. отобразить поражение
  2065. отрисовали кадр
  2066. обновить счётчик кадров
  2067. кнопка раскладки отобразить
  2068. запретить выбор фишек
  2069. кнопка раскладки скрыть
  2070. разрешить выбор фишек
  2071. кнопка темы отобразить
  2072. запретить выбор фишек
  2073. кнопка темы скрыть
  2074. разрешить выбор фишек
  2075. кнопка увеличения масштаба
  2076. увеличить масштаб
  2077. кнопка уменьшения масштаба
  2078. уменьшить масштаб
  2079. изменили масштаб
  2080. отобразить текущее значение масштаба
  2081. изменили ориентацию
  2082. центрировать окно в портретном режиме
  2083. изменили количество ходов в маджонге
  2084. отобразить количество ходов в маджонге
  2085. задать количество фишек для отображения
  2086. отобразить количество фишек маджонга
  2087. `);
  2088. // MARK: /🔨.js
  2089. // // // //
  2090. // Рисователь. Поддержка портретного режима
  2091. // // // //
  2092. ИзменитьРазмерРисователя = мир =>
  2093. {
  2094. var ширина = window.innerWidth * мир.масштаб;
  2095. var высота = window.innerHeight * мир.масштаб;
  2096. var отношение = ширина / высота;
  2097. // Портрет.
  2098. if (отношение < 1)
  2099. {
  2100. мир.высотаОкна = высота;
  2101. мир.высотаОкнаПроц = 100;
  2102. мир.ширинаОкна = высота * 1.5;
  2103. мир.ширинаОкнаПроц = мир.ширинаОкна * 100 / ширина;
  2104. // Уведомляем.
  2105. мир.ориентацияПортретная = true;
  2106. мир.уведомить("изменили ориентацию");
  2107. }
  2108. // Ландшафт.
  2109. else
  2110. {
  2111. мир.ширинаОкна = window.innerWidth * мир.масштаб;
  2112. мир.высотаОкна = window.innerHeight * мир.масштаб;
  2113. мир.ширинаОкнаПроц = мир.масштаб * 100;
  2114. мир.высотаОкнаПроц = мир.масштаб * 100;
  2115. // Уведомляем.
  2116. мир.ориентацияПортретная = false;
  2117. мир.уведомить("изменили ориентацию");
  2118. }
  2119. };
  2120. // // // //
  2121. // MARK: https://git.opengamestudio.org/MAOH/MAOH/raw/branch/master/0000
  2122. // // // //
  2123. // MARK: /📦
  2124. модуль.содержимое["/📦"] = `
  2125. # Список указателей на модули для загрузки во время пуска
  2126. # 启动时要加载的模块指针列表
  2127. # List of module pointers to load at startup
  2128. https://git.opengamestudio.org/MAOH/TEMA_M1K/raw/branch/master/0000
  2129. https://git.opengamestudio.org/MAOH/PACK_M1/raw/branch/master/0000
  2130. # Убрать после отладки
  2131. https://git.opengamestudio.org/MAOH/TEMA_OT/raw/branch/master/0000
  2132. #https://git.opengamestudio.org/MAOH/PACK_OT/raw/branch/master/0000
  2133. `;
  2134. // MARK: /🙈.html
  2135. модуль.содержимое["/🙈.html"] = `
  2136. <center>
  2137. <p>Маджонг ⚬ 麻将 ⚬ Mahjong</p>
  2138. <h1>🀄 МАОН</h1>
  2139. <p>${версия}</p>
  2140. </center>
  2141. `;
  2142. // MARK: /🙈.css
  2143. модуль.содержимое["/🙈.css"] = `
  2144. .фон-экрана
  2145. {
  2146. background-color: white;
  2147. position: fixed;
  2148. left: 0;
  2149. top: 0;
  2150. right: 0;
  2151. bottom: 0;
  2152. width: 100%;
  2153. height: 100%;
  2154. }
  2155. `;
  2156. // MARK: /🎬.js
  2157. ЗадатьЗаголовок = мир =>
  2158. {
  2159. document.title = "🀄 МАОН";
  2160. };
  2161. // // // //
  2162. ОтобразитьСтраницуЗагрузки = мир =>
  2163. {
  2164. var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  2165. var вид = document.createElement("style");
  2166. document.head.appendChild(вид);
  2167. вид.innerHTML = м.содержимое["/🙈.css"];
  2168. var структура = м.содержимое["/🙈.html"]
  2169. .replace(/\${версия}/g, м.версия);
  2170. // Вставляем содержимое в рамку, чтобы применяемые стили UIkit не
  2171. // дёргали надписи.
  2172. // https://stackoverflow.com/a/8322025
  2173. var рамка = "<iframe id='экран-загрузки' class='фон-экрана' frameBorder='0'></iframe>";
  2174. document.body.insertAdjacentHTML("afterbegin", рамка);
  2175. document.getElementById("экран-загрузки").src = "data:text/html;charset=utf-8," + структура;
  2176. };
  2177. // MARK: /🎬.череда
  2178. gitjs.мир.разобрать(`
  2179. пуск
  2180. задать заголовок
  2181. отобразить страницу загрузки
  2182. `);
  2183. // MARK: /📦.js
  2184. ОкончитьЗагрузкуПриложения = мир =>
  2185. {
  2186. мир.уведомить("надо окончить загрузку приложения");
  2187. };
  2188. // // // //
  2189. ЗагрузитьБиблиотекиПриложения = мир =>
  2190. {
  2191. var указатели = [];
  2192. var м = мир.модули.модульПоУказателю(УКАЗАТЕЛЬ_ЭТОГО_МОДУЛЯ);
  2193. var содержимое = м.содержимое["/📦"];
  2194. var строки = содержимое.split(/\n/);
  2195. for (var номер in строки)
  2196. {
  2197. var строка = строки[номер];
  2198. if (!строка.startsWith("#") && строка.length)
  2199. {
  2200. указатели.push(строка);
  2201. }
  2202. }
  2203. if (указатели.length)
  2204. {
  2205. var сообщение = "Загрузка библиотек ⚬ 加载库 ⚬ Loading libraries";
  2206. console.debug(сообщение, указатели);
  2207. мир.модули.использовали.подписатьРаз(function() {
  2208. мир.уведомить("ручной пуск");
  2209. мир.уведомить("загрузили библиотеки приложения");
  2210. });
  2211. мир.модули.использовать(указатели);
  2212. }
  2213. else
  2214. {
  2215. мир.уведомить("загрузили библиотеки приложения");
  2216. }
  2217. };
  2218. // // // //
  2219. ПроверитьНаличиеОбновленийПриложения = мир =>
  2220. {
  2221. // Эта функция находится вне "/🔄.js", т.к. "/🔄.js" отключаем,
  2222. // отчего этой функции просто не будет в пространстве имён.
  2223. var событие = "надо обновить приложение при наличии обновлений";
  2224. if (событие in мир.события)
  2225. {
  2226. мир.уведомить(событие);
  2227. }
  2228. else
  2229. {
  2230. мир.уведомить("обновления приложения отсутствуют");
  2231. }
  2232. };
  2233. // // // //
  2234. ПроверитьНаличиеПриложения = мир =>
  2235. {
  2236. // Эта функция находится вне "/🗜️.js", т.к. /🗜.js" отключаем,
  2237. // отчего этой функции просто не будет в пространстве имён.
  2238. var событие = "надо скачать архив приложения в случае его отсутствия";
  2239. if (событие in мир.события)
  2240. {
  2241. мир.уведомить(событие);
  2242. }
  2243. else
  2244. {
  2245. мир.уведомить("приложение присутствует");
  2246. }
  2247. };
  2248. // MARK: /📦.череда
  2249. gitjs.мир.разобрать(`
  2250. пуск
  2251. проверить наличие приложения
  2252. приложение присутствует
  2253. проверить наличие обновлений приложения
  2254. обновления приложения отсутствуют
  2255. загрузить библиотеки приложения
  2256. загрузили библиотеки приложения
  2257. окончить загрузку приложения
  2258. `);