2013-10-10 18:38:30 +03:00
( function ( window , undefined ) { var readyList , rootjQuery , core _strundefined = typeof undefined , document = window . document , location = window . location , _jQuery = window . jQuery , _$ = window . $ , class2type = { } , core _deletedIds = [ ] , core _version = "1.9.1" , core _concat = core _deletedIds . concat , core _push = core _deletedIds . push , core _slice = core _deletedIds . slice , core _indexOf = core _deletedIds . indexOf , core _toString = class2type . toString , core _hasOwn = class2type . hasOwnProperty , core _trim = core _version . trim , jQuery = function ( selector , context ) { return new jQuery . fn . init ( selector ,
context , rootjQuery ) } , core _pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ . source , core _rnotwhite = /\S+/g , rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g , rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/ , rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/ , rvalidchars = /^[\],:{}\s]*$/ , rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g , rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g , rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g , rmsPrefix = /^-ms-/ , rdashAlpha = /-([\da-z])/gi , fcamelCase = function ( all , letter ) { return letter . toUpperCase ( ) } ,
completed = function ( event ) { if ( document . addEventListener || event . type === "load" || document . readyState === "complete" ) { detach ( ) ; jQuery . ready ( ) } } , detach = function ( ) { if ( document . addEventListener ) { document . removeEventListener ( "DOMContentLoaded" , completed , false ) ; window . removeEventListener ( "load" , completed , false ) } else { document . detachEvent ( "onreadystatechange" , completed ) ; window . detachEvent ( "onload" , completed ) } } ; jQuery . fn = jQuery . prototype = { jquery : core _version , constructor : jQuery , init : function ( selector , context , rootjQuery ) { var match ,
elem ; if ( ! selector ) return this ; if ( typeof selector === "string" ) { if ( selector . charAt ( 0 ) === "<" && selector . charAt ( selector . length - 1 ) === ">" && selector . length >= 3 ) match = [ null , selector , null ] ; else match = rquickExpr . exec ( selector ) ; if ( match && ( match [ 1 ] || ! context ) ) if ( match [ 1 ] ) { context = context instanceof jQuery ? context [ 0 ] : context ; jQuery . merge ( this , jQuery . parseHTML ( match [ 1 ] , context && context . nodeType ? context . ownerDocument || context : document , true ) ) ; if ( rsingleTag . test ( match [ 1 ] ) && jQuery . isPlainObject ( context ) ) for ( match in context ) if ( jQuery . isFunction ( this [ match ] ) ) this [ match ] ( context [ match ] ) ;
else this . attr ( match , context [ match ] ) ; return this } else { elem = document . getElementById ( match [ 2 ] ) ; if ( elem && elem . parentNode ) { if ( elem . id !== match [ 2 ] ) return rootjQuery . find ( selector ) ; this . length = 1 ; this [ 0 ] = elem } this . context = document ; this . selector = selector ; return this } else if ( ! context || context . jquery ) return ( context || rootjQuery ) . find ( selector ) ; else return this . constructor ( context ) . find ( selector ) } else if ( selector . nodeType ) { this . context = this [ 0 ] = selector ; this . length = 1 ; return this } else if ( jQuery . isFunction ( selector ) ) return rootjQuery . ready ( selector ) ;
if ( selector . selector !== undefined ) { this . selector = selector . selector ; this . context = selector . context } return jQuery . makeArray ( selector , this ) } , selector : "" , length : 0 , size : function ( ) { return this . length } , toArray : function ( ) { return core _slice . call ( this ) } , get : function ( num ) { return num == null ? this . toArray ( ) : num < 0 ? this [ this . length + num ] : this [ num ] } , pushStack : function ( elems ) { var ret = jQuery . merge ( this . constructor ( ) , elems ) ; ret . prevObject = this ; ret . context = this . context ; return ret } , each : function ( callback , args ) { return jQuery . each ( this ,
callback , args ) } , ready : function ( fn ) { jQuery . ready . promise ( ) . done ( fn ) ; return this } , slice : function ( ) { return this . pushStack ( core _slice . apply ( this , arguments ) ) } , first : function ( ) { return this . eq ( 0 ) } , last : function ( ) { return this . eq ( - 1 ) } , eq : function ( i ) { var len = this . length , j = + i + ( i < 0 ? len : 0 ) ; return this . pushStack ( j >= 0 && j < len ? [ this [ j ] ] : [ ] ) } , map : function ( callback ) { return this . pushStack ( jQuery . map ( this , function ( elem , i ) { return callback . call ( elem , i , elem ) } ) ) } , end : function ( ) { return this . prevObject || this . constructor ( null ) } ,
push : core _push , sort : [ ] . sort , splice : [ ] . splice } ; jQuery . fn . init . prototype = jQuery . fn ; jQuery . extend = jQuery . fn . extend = function ( ) { var src , copyIsArray , copy , name , options , clone , target = arguments [ 0 ] || { } , i = 1 , length = arguments . length , deep = false ; if ( typeof target === "boolean" ) { deep = target ; target = arguments [ 1 ] || { } ; i = 2 } if ( typeof target !== "object" && ! jQuery . isFunction ( target ) ) target = { } ; if ( length === i ) { target = this ; -- i } for ( ; i < length ; i ++ ) if ( ( options = arguments [ i ] ) != null ) for ( name in options ) { src = target [ name ] ; copy = options [ name ] ;
if ( target === copy ) continue ; if ( deep && copy && ( jQuery . isPlainObject ( copy ) || ( copyIsArray = jQuery . isArray ( copy ) ) ) ) { if ( copyIsArray ) { copyIsArray = false ; clone = src && jQuery . isArray ( src ) ? src : [ ] } else clone = src && jQuery . isPlainObject ( src ) ? src : { } ; target [ name ] = jQuery . extend ( deep , clone , copy ) } else if ( copy !== undefined ) target [ name ] = copy } return target } ; jQuery . extend ( { noConflict : function ( deep ) { if ( window . $ === jQuery ) window . $ = _$ ; if ( deep && window . jQuery === jQuery ) window . jQuery = _jQuery ; return jQuery } , isReady : false , readyWait : 1 , holdReady : function ( hold ) { if ( hold ) jQuery . readyWait ++ ;
else jQuery . ready ( true ) } , ready : function ( wait ) { if ( wait === true ? -- jQuery . readyWait : jQuery . isReady ) return ; if ( ! document . body ) return setTimeout ( jQuery . ready ) ; jQuery . isReady = true ; if ( wait !== true && -- jQuery . readyWait > 0 ) return ; readyList . resolveWith ( document , [ jQuery ] ) ; if ( jQuery . fn . trigger ) jQuery ( document ) . trigger ( "ready" ) . off ( "ready" ) } , isFunction : function ( obj ) { return jQuery . type ( obj ) === "function" } , isArray : Array . isArray || function ( obj ) { return jQuery . type ( obj ) === "array" } , isWindow : function ( obj ) { return obj != null &&
obj == obj . window } , isNumeric : function ( obj ) { return ! isNaN ( parseFloat ( obj ) ) && isFinite ( obj ) } , type : function ( obj ) { if ( obj == null ) return String ( obj ) ; return typeof obj === "object" || typeof obj === "function" ? class2type [ core _toString . call ( obj ) ] || "object" : typeof obj } , isPlainObject : function ( obj ) { if ( ! obj || jQuery . type ( obj ) !== "object" || obj . nodeType || jQuery . isWindow ( obj ) ) return false ; try { if ( obj . constructor && ! core _hasOwn . call ( obj , "constructor" ) && ! core _hasOwn . call ( obj . constructor . prototype , "isPrototypeOf" ) ) return false } catch ( e ) { return false } var key ;
for ( key in obj ) ; return key === undefined || core _hasOwn . call ( obj , key ) } , isEmptyObject : function ( obj ) { var name ; for ( name in obj ) return false ; return true } , error : function ( msg ) { throw new Error ( msg ) ; } , parseHTML : function ( data , context , keepScripts ) { if ( ! data || typeof data !== "string" ) return null ; if ( typeof context === "boolean" ) { keepScripts = context ; context = false } context = context || document ; var parsed = rsingleTag . exec ( data ) , scripts = ! keepScripts && [ ] ; if ( parsed ) return [ context . createElement ( parsed [ 1 ] ) ] ; parsed = jQuery . buildFragment ( [ data ] ,
context , scripts ) ; if ( scripts ) jQuery ( scripts ) . remove ( ) ; return jQuery . merge ( [ ] , parsed . childNodes ) } , parseJSON : function ( data ) { if ( window . JSON && window . JSON . parse ) return window . JSON . parse ( data ) ; if ( data === null ) return data ; if ( typeof data === "string" ) { data = jQuery . trim ( data ) ; if ( data ) if ( rvalidchars . test ( data . replace ( rvalidescape , "@" ) . replace ( rvalidtokens , "]" ) . replace ( rvalidbraces , "" ) ) ) return ( new Function ( "return " + data ) ) ( ) } jQuery . error ( "Invalid JSON: " + data ) } , parseXML : function ( data ) { var xml , tmp ; if ( ! data || typeof data !==
"string" ) return null ; try { if ( window . DOMParser ) { tmp = new DOMParser ; xml = tmp . parseFromString ( data , "text/xml" ) } else { xml = new ActiveXObject ( "Microsoft.XMLDOM" ) ; xml . async = "false" ; xml . loadXML ( data ) } } catch ( e ) { xml = undefined } if ( ! xml || ! xml . documentElement || xml . getElementsByTagName ( "parsererror" ) . length ) jQuery . error ( "Invalid XML: " + data ) ; return xml } , noop : function ( ) { } , globalEval : function ( data ) { if ( data && jQuery . trim ( data ) ) ( window . execScript || function ( data ) { window [ "eval" ] . call ( window , data ) } ) ( data ) } , camelCase : function ( string ) { return string . replace ( rmsPrefix ,
"ms-" ) . replace ( rdashAlpha , fcamelCase ) } , nodeName : function ( elem , name ) { return elem . nodeName && elem . nodeName . toLowerCase ( ) === name . toLowerCase ( ) } , each : function ( obj , callback , args ) { var value , i = 0 , length = obj . length , isArray = isArraylike ( obj ) ; if ( args ) if ( isArray ) for ( ; i < length ; i ++ ) { value = callback . apply ( obj [ i ] , args ) ; if ( value === false ) break } else for ( i in obj ) { value = callback . apply ( obj [ i ] , args ) ; if ( value === false ) break } else if ( isArray ) for ( ; i < length ; i ++ ) { value = callback . call ( obj [ i ] , i , obj [ i ] ) ; if ( value === false ) break } else for ( i in obj ) { value =
callback . call ( obj [ i ] , i , obj [ i ] ) ; if ( value === false ) break } return obj } , trim : core _trim && ! core _trim . call ( " " ) ? function ( text ) { return text == null ? "" : core _trim . call ( text ) } : function ( text ) { return text == null ? "" : ( text + "" ) . replace ( rtrim , "" ) } , makeArray : function ( arr , results ) { var ret = results || [ ] ; if ( arr != null ) if ( isArraylike ( Object ( arr ) ) ) jQuery . merge ( ret , typeof arr === "string" ? [ arr ] : arr ) ; else core _push . call ( ret , arr ) ; return ret } , inArray : function ( elem , arr , i ) { var len ; if ( arr ) { if ( core _indexOf ) return core _indexOf . call ( arr ,
elem , i ) ; len = arr . length ; i = i ? i < 0 ? Math . max ( 0 , len + i ) : i : 0 ; for ( ; i < len ; i ++ ) if ( i in arr && arr [ i ] === elem ) return i } return - 1 } , merge : function ( first , second ) { var l = second . length , i = first . length , j = 0 ; if ( typeof l === "number" ) for ( ; j < l ; j ++ ) first [ i ++ ] = second [ j ] ; else while ( second [ j ] !== undefined ) first [ i ++ ] = second [ j ++ ] ; first . length = i ; return first } , grep : function ( elems , callback , inv ) { var retVal , ret = [ ] , i = 0 , length = elems . length ; inv = ! ! inv ; for ( ; i < length ; i ++ ) { retVal = ! ! callback ( elems [ i ] , i ) ; if ( inv !== retVal ) ret . push ( elems [ i ] ) } return ret } ,
map : function ( elems , callback , arg ) { var value , i = 0 , length = elems . length , isArray = isArraylike ( elems ) , ret = [ ] ; if ( isArray ) for ( ; i < length ; i ++ ) { value = callback ( elems [ i ] , i , arg ) ; if ( value != null ) ret [ ret . length ] = value } else for ( i in elems ) { value = callback ( elems [ i ] , i , arg ) ; if ( value != null ) ret [ ret . length ] = value } return core _concat . apply ( [ ] , ret ) } , guid : 1 , proxy : function ( fn , context ) { var args , proxy , tmp ; if ( typeof context === "string" ) { tmp = fn [ context ] ; context = fn ; fn = tmp } if ( ! jQuery . isFunction ( fn ) ) return undefined ; args = core _slice . call ( arguments ,
2 ) ; proxy = function ( ) { return fn . apply ( context || this , args . concat ( core _slice . call ( arguments ) ) ) } ; proxy . guid = fn . guid = fn . guid || jQuery . guid ++ ; return proxy } , access : function ( elems , fn , key , value , chainable , emptyGet , raw ) { var i = 0 , length = elems . length , bulk = key == null ; if ( jQuery . type ( key ) === "object" ) { chainable = true ; for ( i in key ) jQuery . access ( elems , fn , i , key [ i ] , true , emptyGet , raw ) } else if ( value !== undefined ) { chainable = true ; if ( ! jQuery . isFunction ( value ) ) raw = true ; if ( bulk ) if ( raw ) { fn . call ( elems , value ) ; fn = null } else { bulk = fn ; fn =
function ( elem , key , value ) { return bulk . call ( jQuery ( elem ) , value ) } } if ( fn ) for ( ; i < length ; i ++ ) fn ( elems [ i ] , key , raw ? value : value . call ( elems [ i ] , i , fn ( elems [ i ] , key ) ) ) } return chainable ? elems : bulk ? fn . call ( elems ) : length ? fn ( elems [ 0 ] , key ) : emptyGet } , now : function ( ) { return ( new Date ) . getTime ( ) } } ) ; jQuery . ready . promise = function ( obj ) { if ( ! readyList ) { readyList = jQuery . Deferred ( ) ; if ( document . readyState === "complete" ) setTimeout ( jQuery . ready ) ; else if ( document . addEventListener ) { document . addEventListener ( "DOMContentLoaded" , completed ,
false ) ; window . addEventListener ( "load" , completed , false ) } else { document . attachEvent ( "onreadystatechange" , completed ) ; window . attachEvent ( "onload" , completed ) ; var top = false ; try { top = window . frameElement == null && document . documentElement } catch ( e ) { } if ( top && top . doScroll ) ( function doScrollCheck ( ) { if ( ! jQuery . isReady ) { try { top . doScroll ( "left" ) } catch ( e ) { return setTimeout ( doScrollCheck , 50 ) } detach ( ) ; jQuery . ready ( ) } } ) ( ) } } return readyList . promise ( obj ) } ; jQuery . each ( "Boolean Number String Function Array Date RegExp Object Error" . split ( " " ) ,
function ( i , name ) { class2type [ "[object " + name + "]" ] = name . toLowerCase ( ) } ) ; function isArraylike ( obj ) { var length = obj . length , type = jQuery . type ( obj ) ; if ( jQuery . isWindow ( obj ) ) return false ; if ( obj . nodeType === 1 && length ) return true ; return type === "array" || type !== "function" && ( length === 0 || typeof length === "number" && length > 0 && length - 1 in obj ) } rootjQuery = jQuery ( document ) ; var optionsCache = { } ; function createOptions ( options ) { var object = optionsCache [ options ] = { } ; jQuery . each ( options . match ( core _rnotwhite ) || [ ] , function ( _ , flag ) { object [ flag ] =
true } ) ; return object } jQuery . Callbacks = function ( options ) { options = typeof options === "string" ? optionsCache [ options ] || createOptions ( options ) : jQuery . extend ( { } , options ) ; var firing , memory , fired , firingLength , firingIndex , firingStart , list = [ ] , stack = ! options . once && [ ] , fire = function ( data ) { memory = options . memory && data ; fired = true ; firingIndex = firingStart || 0 ; firingStart = 0 ; firingLength = list . length ; firing = true ; for ( ; list && firingIndex < firingLength ; firingIndex ++ ) if ( list [ firingIndex ] . apply ( data [ 0 ] , data [ 1 ] ) === false && options . stopOnFalse ) { memory =
false ; break } firing = false ; if ( list ) if ( stack ) { if ( stack . length ) fire ( stack . shift ( ) ) } else if ( memory ) list = [ ] ; else self . disable ( ) } , self = { add : function ( ) { if ( list ) { var start = list . length ; ( function add ( args ) { jQuery . each ( args , function ( _ , arg ) { var type = jQuery . type ( arg ) ; if ( type === "function" ) { if ( ! options . unique || ! self . has ( arg ) ) list . push ( arg ) } else if ( arg && arg . length && type !== "string" ) add ( arg ) } ) } ) ( arguments ) ; if ( firing ) firingLength = list . length ; else if ( memory ) { firingStart = start ; fire ( memory ) } } return this } , remove : function ( ) { if ( list ) jQuery . each ( arguments ,
function ( _ , arg ) { var index ; while ( ( index = jQuery . inArray ( arg , list , index ) ) > - 1 ) { list . splice ( index , 1 ) ; if ( firing ) { if ( index <= firingLength ) firingLength -- ; if ( index <= firingIndex ) firingIndex -- } } } ) ; return this } , has : function ( fn ) { return fn ? jQuery . inArray ( fn , list ) > - 1 : ! ! ( list && list . length ) } , empty : function ( ) { list = [ ] ; return this } , disable : function ( ) { list = stack = memory = undefined ; return this } , disabled : function ( ) { return ! list } , lock : function ( ) { stack = undefined ; if ( ! memory ) self . disable ( ) ; return this } , locked : function ( ) { return ! stack } ,
fireWith : function ( context , args ) { args = args || [ ] ; args = [ context , args . slice ? args . slice ( ) : args ] ; if ( list && ( ! fired || stack ) ) if ( firing ) stack . push ( args ) ; else fire ( args ) ; return this } , fire : function ( ) { self . fireWith ( this , arguments ) ; return this } , fired : function ( ) { return ! ! fired } } ; return self } ; jQuery . extend ( { Deferred : function ( func ) { var tuples = [ [ "resolve" , "done" , jQuery . Callbacks ( "once memory" ) , "resolved" ] , [ "reject" , "fail" , jQuery . Callbacks ( "once memory" ) , "rejected" ] , [ "notify" , "progress" , jQuery . Callbacks ( "memory" ) ] ] , state =
"pending" , promise = { state : function ( ) { return state } , always : function ( ) { deferred . done ( arguments ) . fail ( arguments ) ; return this } , then : function ( ) { var fns = arguments ; return jQuery . Deferred ( function ( newDefer ) { jQuery . each ( tuples , function ( i , tuple ) { var action = tuple [ 0 ] , fn = jQuery . isFunction ( fns [ i ] ) && fns [ i ] ; deferred [ tuple [ 1 ] ] ( function ( ) { var returned = fn && fn . apply ( this , arguments ) ; if ( returned && jQuery . isFunction ( returned . promise ) ) returned . promise ( ) . done ( newDefer . resolve ) . fail ( newDefer . reject ) . progress ( newDefer . notify ) ;
else newDefer [ action + "With" ] ( this === promise ? newDefer . promise ( ) : this , fn ? [ returned ] : arguments ) } ) } ) ; fns = null } ) . promise ( ) } , promise : function ( obj ) { return obj != null ? jQuery . extend ( obj , promise ) : promise } } , deferred = { } ; promise . pipe = promise . then ; jQuery . each ( tuples , function ( i , tuple ) { var list = tuple [ 2 ] , stateString = tuple [ 3 ] ; promise [ tuple [ 1 ] ] = list . add ; if ( stateString ) list . add ( function ( ) { state = stateString } , tuples [ i ^ 1 ] [ 2 ] . disable , tuples [ 2 ] [ 2 ] . lock ) ; deferred [ tuple [ 0 ] ] = function ( ) { deferred [ tuple [ 0 ] + "With" ] ( this === deferred ?
promise : this , arguments ) ; return this } ; deferred [ tuple [ 0 ] + "With" ] = list . fireWith } ) ; promise . promise ( deferred ) ; if ( func ) func . call ( deferred , deferred ) ; return deferred } , when : function ( subordinate ) { var i = 0 , resolveValues = core _slice . call ( arguments ) , length = resolveValues . length , remaining = length !== 1 || subordinate && jQuery . isFunction ( subordinate . promise ) ? length : 0 , deferred = remaining === 1 ? subordinate : jQuery . Deferred ( ) , updateFunc = function ( i , contexts , values ) { return function ( value ) { contexts [ i ] = this ; values [ i ] = arguments . length >
1 ? core _slice . call ( arguments ) : value ; if ( values === progressValues ) deferred . notifyWith ( contexts , values ) ; else if ( ! -- remaining ) deferred . resolveWith ( contexts , values ) } } , progressValues , progressContexts , resolveContexts ; if ( length > 1 ) { progressValues = new Array ( length ) ; progressContexts = new Array ( length ) ; resolveContexts = new Array ( length ) ; for ( ; i < length ; i ++ ) if ( resolveValues [ i ] && jQuery . isFunction ( resolveValues [ i ] . promise ) ) resolveValues [ i ] . promise ( ) . done ( updateFunc ( i , resolveContexts , resolveValues ) ) . fail ( deferred . reject ) . progress ( updateFunc ( i ,
progressContexts , progressValues ) ) ; else -- remaining } if ( ! remaining ) deferred . resolveWith ( resolveContexts , resolveValues ) ; return deferred . promise ( ) } } ) ; jQuery . support = function ( ) { var support , all , a , input , select , fragment , opt , eventName , isSupported , i , div = document . createElement ( "div" ) ; div . setAttribute ( "className" , "t" ) ; div . innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>" ; all = div . getElementsByTagName ( "*" ) ; a = div . getElementsByTagName ( "a" ) [ 0 ] ; if ( ! all || ! a || ! all . length ) return { } ; select = document . createElement ( "select" ) ;
opt = select . appendChild ( document . createElement ( "option" ) ) ; input = div . getElementsByTagName ( "input" ) [ 0 ] ; a . style . cssText = "top:1px;float:left;opacity:.5" ; support = { getSetAttribute : div . className !== "t" , leadingWhitespace : div . firstChild . nodeType === 3 , tbody : ! div . getElementsByTagName ( "tbody" ) . length , htmlSerialize : ! ! div . getElementsByTagName ( "link" ) . length , style : /top/ . test ( a . getAttribute ( "style" ) ) , hrefNormalized : a . getAttribute ( "href" ) === "/a" , opacity : /^0.5/ . test ( a . style . opacity ) , cssFloat : ! ! a . style . cssFloat , checkOn : ! ! input . value ,
optSelected : opt . selected , enctype : ! ! document . createElement ( "form" ) . enctype , html5Clone : document . createElement ( "nav" ) . cloneNode ( true ) . outerHTML !== "<:nav></:nav>" , boxModel : document . compatMode === "CSS1Compat" , deleteExpando : true , noCloneEvent : true , inlineBlockNeedsLayout : false , shrinkWrapBlocks : false , reliableMarginRight : true , boxSizingReliable : true , pixelPosition : false } ; input . checked = true ; support . noCloneChecked = input . cloneNode ( true ) . checked ; select . disabled = true ; support . optDisabled = ! opt . disabled ; try { delete div . test } catch ( e ) { support . deleteExpando =
false } input = document . createElement ( "input" ) ; input . setAttribute ( "value" , "" ) ; support . input = input . getAttribute ( "value" ) === "" ; input . value = "t" ; input . setAttribute ( "type" , "radio" ) ; support . radioValue = input . value === "t" ; input . setAttribute ( "checked" , "t" ) ; input . setAttribute ( "name" , "t" ) ; fragment = document . createDocumentFragment ( ) ; fragment . appendChild ( input ) ; support . appendChecked = input . checked ; support . checkClone = fragment . cloneNode ( true ) . cloneNode ( true ) . lastChild . checked ; if ( div . attachEvent ) { div . attachEvent ( "onclick" ,
function ( ) { support . noCloneEvent = false } ) ; div . cloneNode ( true ) . click ( ) } for ( i in { submit : true , change : true , focusin : true } ) { div . setAttribute ( eventName = "on" + i , "t" ) ; support [ i + "Bubbles" ] = eventName in window || div . attributes [ eventName ] . expando === false } div . style . backgroundClip = "content-box" ; div . cloneNode ( true ) . style . backgroundClip = "" ; support . clearCloneStyle = div . style . backgroundClip === "content-box" ; jQuery ( function ( ) { var container , marginDiv , tds , divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;" ,
body = document . getElementsByTagName ( "body" ) [ 0 ] ; if ( ! body ) return ; container = document . createElement ( "div" ) ; container . style . cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px" ; body . appendChild ( container ) . appendChild ( div ) ; div . innerHTML = "<table><tr><td></td><td>t</td></tr></table>" ; tds = div . getElementsByTagName ( "td" ) ; tds [ 0 ] . style . cssText = "padding:0;margin:0;border:0;display:none" ; isSupported = tds [ 0 ] . offsetHeight === 0 ; tds [ 0 ] . style . display = "" ; tds [ 1 ] . style . display = "none" ; support . reliableHiddenOffsets =
isSupported && tds [ 0 ] . offsetHeight === 0 ; div . innerHTML = "" ; div . style . cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;" ; support . boxSizing = div . offsetWidth === 4 ; support . doesNotIncludeMarginInBodyOffset = body . offsetTop !== 1 ; if ( window . getComputedStyle ) { support . pixelPosition = ( window . getComputedStyle ( div , null ) || { } ) . top !== "1%" ; support . boxSizingReliable = ( window . getComputedStyle ( div , null ) ||
{ width : "4px" } ) . width === "4px" ; marginDiv = div . appendChild ( document . createElement ( "div" ) ) ; marginDiv . style . cssText = div . style . cssText = divReset ; marginDiv . style . marginRight = marginDiv . style . width = "0" ; div . style . width = "1px" ; support . reliableMarginRight = ! parseFloat ( ( window . getComputedStyle ( marginDiv , null ) || { } ) . marginRight ) } if ( typeof div . style . zoom !== core _strundefined ) { div . innerHTML = "" ; div . style . cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1" ; support . inlineBlockNeedsLayout = div . offsetWidth === 3 ; div . style . display =
"block" ; div . innerHTML = "<div></div>" ; div . firstChild . style . width = "5px" ; support . shrinkWrapBlocks = div . offsetWidth !== 3 ; if ( support . inlineBlockNeedsLayout ) body . style . zoom = 1 } body . removeChild ( container ) ; container = div = tds = marginDiv = null } ) ; all = select = fragment = opt = a = input = null ; return support } ( ) ; var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/ , rmultiDash = /([A-Z])/g ; function internalData ( elem , name , data , pvt ) { if ( ! jQuery . acceptData ( elem ) ) return ; var thisCache , ret , internalKey = jQuery . expando , getByName = typeof name === "string" ,
isNode = elem . nodeType , cache = isNode ? jQuery . cache : elem , id = isNode ? elem [ internalKey ] : elem [ internalKey ] && internalKey ; if ( ( ! id || ! cache [ id ] || ! pvt && ! cache [ id ] . data ) && getByName && data === undefined ) return ; if ( ! id ) if ( isNode ) elem [ internalKey ] = id = core _deletedIds . pop ( ) || jQuery . guid ++ ; else id = internalKey ; if ( ! cache [ id ] ) { cache [ id ] = { } ; if ( ! isNode ) cache [ id ] . toJSON = jQuery . noop } if ( typeof name === "object" || typeof name === "function" ) if ( pvt ) cache [ id ] = jQuery . extend ( cache [ id ] , name ) ; else cache [ id ] . data = jQuery . extend ( cache [ id ] . data ,
name ) ; thisCache = cache [ id ] ; if ( ! pvt ) { if ( ! thisCache . data ) thisCache . data = { } ; thisCache = thisCache . data } if ( data !== undefined ) thisCache [ jQuery . camelCase ( name ) ] = data ; if ( getByName ) { ret = thisCache [ name ] ; if ( ret == null ) ret = thisCache [ jQuery . camelCase ( name ) ] } else ret = thisCache ; return ret } function internalRemoveData ( elem , name , pvt ) { if ( ! jQuery . acceptData ( elem ) ) return ; var i , l , thisCache , isNode = elem . nodeType , cache = isNode ? jQuery . cache : elem , id = isNode ? elem [ jQuery . expando ] : jQuery . expando ; if ( ! cache [ id ] ) return ; if ( name ) { thisCache =
pvt ? cache [ id ] : cache [ id ] . data ; if ( thisCache ) { if ( ! jQuery . isArray ( name ) ) if ( name in thisCache ) name = [ name ] ; else { name = jQuery . camelCase ( name ) ; if ( name in thisCache ) name = [ name ] ; else name = name . split ( " " ) } else name = name . concat ( jQuery . map ( name , jQuery . camelCase ) ) ; for ( i = 0 , l = name . length ; i < l ; i ++ ) delete thisCache [ name [ i ] ] ; if ( ! ( pvt ? isEmptyDataObject : jQuery . isEmptyObject ) ( thisCache ) ) return } } if ( ! pvt ) { delete cache [ id ] . data ; if ( ! isEmptyDataObject ( cache [ id ] ) ) return } if ( isNode ) jQuery . cleanData ( [ elem ] , true ) ; else if ( jQuery . support . deleteExpando ||
cache != cache . window ) delete cache [ id ] ; else cache [ id ] = null } jQuery . extend ( { cache : { } , expando : "jQuery" + ( core _version + Math . random ( ) ) . replace ( /\D/g , "" ) , noData : { "embed" : true , "object" : "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" , "applet" : true } , hasData : function ( elem ) { elem = elem . nodeType ? jQuery . cache [ elem [ jQuery . expando ] ] : elem [ jQuery . expando ] ; return ! ! elem && ! isEmptyDataObject ( elem ) } , data : function ( elem , name , data ) { return internalData ( elem , name , data ) } , removeData : function ( elem , name ) { return internalRemoveData ( elem ,
name ) } , _data : function ( elem , name , data ) { return internalData ( elem , name , data , true ) } , _removeData : function ( elem , name ) { return internalRemoveData ( elem , name , true ) } , acceptData : function ( elem ) { if ( elem . nodeType && elem . nodeType !== 1 && elem . nodeType !== 9 ) return false ; var noData = elem . nodeName && jQuery . noData [ elem . nodeName . toLowerCase ( ) ] ; return ! noData || noData !== true && elem . getAttribute ( "classid" ) === noData } } ) ; jQuery . fn . extend ( { data : function ( key , value ) { var attrs , name , elem = this [ 0 ] , i = 0 , data = null ; if ( key === undefined ) { if ( this . length ) { data =
jQuery . data ( elem ) ; if ( elem . nodeType === 1 && ! jQuery . _data ( elem , "parsedAttrs" ) ) { attrs = elem . attributes ; for ( ; i < attrs . length ; i ++ ) { name = attrs [ i ] . name ; if ( ! name . indexOf ( "data-" ) ) { name = jQuery . camelCase ( name . slice ( 5 ) ) ; dataAttr ( elem , name , data [ name ] ) } } jQuery . _data ( elem , "parsedAttrs" , true ) } } return data } if ( typeof key === "object" ) return this . each ( function ( ) { jQuery . data ( this , key ) } ) ; return jQuery . access ( this , function ( value ) { if ( value === undefined ) return elem ? dataAttr ( elem , key , jQuery . data ( elem , key ) ) : null ; this . each ( function ( ) { jQuery . data ( this ,
key , value ) } ) } , null , value , arguments . length > 1 , null , true ) } , removeData : function ( key ) { return this . each ( function ( ) { jQuery . removeData ( this , key ) } ) } } ) ; function dataAttr ( elem , key , data ) { if ( data === undefined && elem . nodeType === 1 ) { var name = "data-" + key . replace ( rmultiDash , "-$1" ) . toLowerCase ( ) ; data = elem . getAttribute ( name ) ; if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : + data + "" === data ? + data : rbrace . test ( data ) ? jQuery . parseJSON ( data ) : data } catch ( e ) { } jQuery . data ( elem , key , data ) } else data =
undefined } return data } function isEmptyDataObject ( obj ) { var name ; for ( name in obj ) { if ( name === "data" && jQuery . isEmptyObject ( obj [ name ] ) ) continue ; if ( name !== "toJSON" ) return false } return true } jQuery . extend ( { queue : function ( elem , type , data ) { var queue ; if ( elem ) { type = ( type || "fx" ) + "queue" ; queue = jQuery . _data ( elem , type ) ; if ( data ) if ( ! queue || jQuery . isArray ( data ) ) queue = jQuery . _data ( elem , type , jQuery . makeArray ( data ) ) ; else queue . push ( data ) ; return queue || [ ] } } , dequeue : function ( elem , type ) { type = type || "fx" ; var queue = jQuery . queue ( elem ,
type ) , startLength = queue . length , fn = queue . shift ( ) , hooks = jQuery . _queueHooks ( elem , type ) , next = function ( ) { jQuery . dequeue ( elem , type ) } ; if ( fn === "inprogress" ) { fn = queue . shift ( ) ; startLength -- } hooks . cur = fn ; if ( fn ) { if ( type === "fx" ) queue . unshift ( "inprogress" ) ; delete hooks . stop ; fn . call ( elem , next , hooks ) } if ( ! startLength && hooks ) hooks . empty . fire ( ) } , _queueHooks : function ( elem , type ) { var key = type + "queueHooks" ; return jQuery . _data ( elem , key ) || jQuery . _data ( elem , key , { empty : jQuery . Callbacks ( "once memory" ) . add ( function ( ) { jQuery . _removeData ( elem ,
type + "queue" ) ; jQuery . _removeData ( elem , key ) } ) } ) } } ) ; jQuery . fn . extend ( { queue : function ( type , data ) { var setter = 2 ; if ( typeof type !== "string" ) { data = type ; type = "fx" ; setter -- } if ( arguments . length < setter ) return jQuery . queue ( this [ 0 ] , type ) ; return data === undefined ? this : this . each ( function ( ) { var queue = jQuery . queue ( this , type , data ) ; jQuery . _queueHooks ( this , type ) ; if ( type === "fx" && queue [ 0 ] !== "inprogress" ) jQuery . dequeue ( this , type ) } ) } , dequeue : function ( type ) { return this . each ( function ( ) { jQuery . dequeue ( this , type ) } ) } , delay : function ( time ,
type ) { time = jQuery . fx ? jQuery . fx . speeds [ time ] || time : time ; type = type || "fx" ; return this . queue ( type , function ( next , hooks ) { var timeout = setTimeout ( next , time ) ; hooks . stop = function ( ) { clearTimeout ( timeout ) } } ) } , clearQueue : function ( type ) { return this . queue ( type || "fx" , [ ] ) } , promise : function ( type , obj ) { var tmp , count = 1 , defer = jQuery . Deferred ( ) , elements = this , i = this . length , resolve = function ( ) { if ( ! -- count ) defer . resolveWith ( elements , [ elements ] ) } ; if ( typeof type !== "string" ) { obj = type ; type = undefined } type = type || "fx" ; while ( i -- ) { tmp =
jQuery . _data ( elements [ i ] , type + "queueHooks" ) ; if ( tmp && tmp . empty ) { count ++ ; tmp . empty . add ( resolve ) } } resolve ( ) ; return defer . promise ( obj ) } } ) ; var nodeHook , boolHook , rclass = /[\t\r\n]/g , rreturn = /\r/g , rfocusable = /^(?:input|select|textarea|button|object)$/i , rclickable = /^(?:a|area)$/i , rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i , ruseDefault = /^(?:checked|selected)$/i , getSetAttribute = jQuery . support . getSetAttribute , getSetInput =
jQuery . support . input ; jQuery . fn . extend ( { attr : function ( name , value ) { return jQuery . access ( this , jQuery . attr , name , value , arguments . length > 1 ) } , removeAttr : function ( name ) { return this . each ( function ( ) { jQuery . removeAttr ( this , name ) } ) } , prop : function ( name , value ) { return jQuery . access ( this , jQuery . prop , name , value , arguments . length > 1 ) } , removeProp : function ( name ) { name = jQuery . propFix [ name ] || name ; return this . each ( function ( ) { try { this [ name ] = undefined ; delete this [ name ] } catch ( e ) { } } ) } , addClass : function ( value ) { var classes , elem ,
cur , clazz , j , i = 0 , len = this . length , proceed = typeof value === "string" && value ; if ( jQuery . isFunction ( value ) ) return this . each ( function ( j ) { jQuery ( this ) . addClass ( value . call ( this , j , this . className ) ) } ) ; if ( proceed ) { classes = ( value || "" ) . match ( core _rnotwhite ) || [ ] ; for ( ; i < len ; i ++ ) { elem = this [ i ] ; cur = elem . nodeType === 1 && ( elem . className ? ( " " + elem . className + " " ) . replace ( rclass , " " ) : " " ) ; if ( cur ) { j = 0 ; while ( clazz = classes [ j ++ ] ) if ( cur . indexOf ( " " + clazz + " " ) < 0 ) cur += clazz + " " ; elem . className = jQuery . trim ( cur ) } } } return this } , removeClass : function ( value ) { var classes ,
elem , cur , clazz , j , i = 0 , len = this . length , proceed = arguments . length === 0 || typeof value === "string" && value ; if ( jQuery . isFunction ( value ) ) return this . each ( function ( j ) { jQuery ( this ) . removeClass ( value . call ( this , j , this . className ) ) } ) ; if ( proceed ) { classes = ( value || "" ) . match ( core _rnotwhite ) || [ ] ; for ( ; i < len ; i ++ ) { elem = this [ i ] ; cur = elem . nodeType === 1 && ( elem . className ? ( " " + elem . className + " " ) . replace ( rclass , " " ) : "" ) ; if ( cur ) { j = 0 ; while ( clazz = classes [ j ++ ] ) while ( cur . indexOf ( " " + clazz + " " ) >= 0 ) cur = cur . replace ( " " + clazz + " " , " " ) ; elem . className =
value ? jQuery . trim ( cur ) : "" } } } return this } , toggleClass : function ( value , stateVal ) { var type = typeof value , isBool = typeof stateVal === "boolean" ; if ( jQuery . isFunction ( value ) ) return this . each ( function ( i ) { jQuery ( this ) . toggleClass ( value . call ( this , i , this . className , stateVal ) , stateVal ) } ) ; return this . each ( function ( ) { if ( type === "string" ) { var className , i = 0 , self = jQuery ( this ) , state = stateVal , classNames = value . match ( core _rnotwhite ) || [ ] ; while ( className = classNames [ i ++ ] ) { state = isBool ? state : ! self . hasClass ( className ) ; self [ state ?
"addClass" : "removeClass" ] ( className ) } } else if ( type === core _strundefined || type === "boolean" ) { if ( this . className ) jQuery . _data ( this , "__className__" , this . className ) ; this . className = this . className || value === false ? "" : jQuery . _data ( this , "__className__" ) || "" } } ) } , hasClass : function ( selector ) { var className = " " + selector + " " , i = 0 , l = this . length ; for ( ; i < l ; i ++ ) if ( this [ i ] . nodeType === 1 && ( " " + this [ i ] . className + " " ) . replace ( rclass , " " ) . indexOf ( className ) >= 0 ) return true ; return false } , val : function ( value ) { var ret , hooks , isFunction ,
elem = this [ 0 ] ; if ( ! arguments . length ) { if ( elem ) { hooks = jQuery . valHooks [ elem . type ] || jQuery . valHooks [ elem . nodeName . toLowerCase ( ) ] ; if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , "value" ) ) !== undefined ) return ret ; ret = elem . value ; return typeof ret === "string" ? ret . replace ( rreturn , "" ) : ret == null ? "" : ret } return } isFunction = jQuery . isFunction ( value ) ; return this . each ( function ( i ) { var val , self = jQuery ( this ) ; if ( this . nodeType !== 1 ) return ; if ( isFunction ) val = value . call ( this , i , self . val ( ) ) ; else val = value ; if ( val == null ) val = "" ; else if ( typeof val ===
"number" ) val += "" ; else if ( jQuery . isArray ( val ) ) val = jQuery . map ( val , function ( value ) { return value == null ? "" : value + "" } ) ; hooks = jQuery . valHooks [ this . type ] || jQuery . valHooks [ this . nodeName . toLowerCase ( ) ] ; if ( ! hooks || ! ( "set" in hooks ) || hooks . set ( this , val , "value" ) === undefined ) this . value = val } ) } } ) ; jQuery . extend ( { valHooks : { option : { get : function ( elem ) { var val = elem . attributes . value ; return ! val || val . specified ? elem . value : elem . text } } , select : { get : function ( elem ) { var value , option , options = elem . options , index = elem . selectedIndex ,
one = elem . type === "select-one" || index < 0 , values = one ? null : [ ] , max = one ? index + 1 : options . length , i = index < 0 ? max : one ? index : 0 ; for ( ; i < max ; i ++ ) { option = options [ i ] ; if ( ( option . selected || i === index ) && ( jQuery . support . optDisabled ? ! option . disabled : option . getAttribute ( "disabled" ) === null ) && ( ! option . parentNode . disabled || ! jQuery . nodeName ( option . parentNode , "optgroup" ) ) ) { value = jQuery ( option ) . val ( ) ; if ( one ) return value ; values . push ( value ) } } return values } , set : function ( elem , value ) { var values = jQuery . makeArray ( value ) ; jQuery ( elem ) . find ( "option" ) . each ( function ( ) { this . selected =
jQuery . inArray ( jQuery ( this ) . val ( ) , values ) >= 0 } ) ; if ( ! values . length ) elem . selectedIndex = - 1 ; return values } } } , attr : function ( elem , name , value ) { var hooks , notxml , ret , nType = elem . nodeType ; if ( ! elem || nType === 3 || nType === 8 || nType === 2 ) return ; if ( typeof elem . getAttribute === core _strundefined ) return jQuery . prop ( elem , name , value ) ; notxml = nType !== 1 || ! jQuery . isXMLDoc ( elem ) ; if ( notxml ) { name = name . toLowerCase ( ) ; hooks = jQuery . attrHooks [ name ] || ( rboolean . test ( name ) ? boolHook : nodeHook ) } if ( value !== undefined ) if ( value === null ) jQuery . removeAttr ( elem ,
name ) ; else if ( hooks && notxml && "set" in hooks && ( ret = hooks . set ( elem , value , name ) ) !== undefined ) return ret ; else { elem . setAttribute ( name , value + "" ) ; return value } else if ( hooks && notxml && "get" in hooks && ( ret = hooks . get ( elem , name ) ) !== null ) return ret ; else { if ( typeof elem . getAttribute !== core _strundefined ) ret = elem . getAttribute ( name ) ; return ret == null ? undefined : ret } } , removeAttr : function ( elem , value ) { var name , propName , i = 0 , attrNames = value && value . match ( core _rnotwhite ) ; if ( attrNames && elem . nodeType === 1 ) while ( name = attrNames [ i ++ ] ) { propName =
jQuery . propFix [ name ] || name ; if ( rboolean . test ( name ) ) if ( ! getSetAttribute && ruseDefault . test ( name ) ) elem [ jQuery . camelCase ( "default-" + name ) ] = elem [ propName ] = false ; else elem [ propName ] = false ; else jQuery . attr ( elem , name , "" ) ; elem . removeAttribute ( getSetAttribute ? name : propName ) } } , attrHooks : { type : { set : function ( elem , value ) { if ( ! jQuery . support . radioValue && value === "radio" && jQuery . nodeName ( elem , "input" ) ) { var val = elem . value ; elem . setAttribute ( "type" , value ) ; if ( val ) elem . value = val ; return value } } } } , propFix : { tabindex : "tabIndex" ,
readonly : "readOnly" , "for" : "htmlFor" , "class" : "className" , maxlength : "maxLength" , cellspacing : "cellSpacing" , cellpadding : "cellPadding" , rowspan : "rowSpan" , colspan : "colSpan" , usemap : "useMap" , frameborder : "frameBorder" , contenteditable : "contentEditable" } , prop : function ( elem , name , value ) { var ret , hooks , notxml , nType = elem . nodeType ; if ( ! elem || nType === 3 || nType === 8 || nType === 2 ) return ; notxml = nType !== 1 || ! jQuery . isXMLDoc ( elem ) ; if ( notxml ) { name = jQuery . propFix [ name ] || name ; hooks = jQuery . propHooks [ name ] } if ( value !== undefined ) if ( hooks &&
"set" in hooks && ( ret = hooks . set ( elem , value , name ) ) !== undefined ) return ret ; else return elem [ name ] = value ; else if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , name ) ) !== null ) return ret ; else return elem [ name ] } , propHooks : { tabIndex : { get : function ( elem ) { var attributeNode = elem . getAttributeNode ( "tabindex" ) ; return attributeNode && attributeNode . specified ? parseInt ( attributeNode . value , 10 ) : rfocusable . test ( elem . nodeName ) || rclickable . test ( elem . nodeName ) && elem . href ? 0 : undefined } } } } ) ; boolHook = { get : function ( elem , name ) { var prop =
jQuery . prop ( elem , name ) , attr = typeof prop === "boolean" && elem . getAttribute ( name ) , detail = typeof prop === "boolean" ? getSetInput && getSetAttribute ? attr != null : ruseDefault . test ( name ) ? elem [ jQuery . camelCase ( "default-" + name ) ] : ! ! attr : elem . getAttributeNode ( name ) ; return detail && detail . value !== false ? name . toLowerCase ( ) : undefined } , set : function ( elem , value , name ) { if ( value === false ) jQuery . removeAttr ( elem , name ) ; else if ( getSetInput && getSetAttribute || ! ruseDefault . test ( name ) ) elem . setAttribute ( ! getSetAttribute && jQuery . propFix [ name ] ||
name , name ) ; else elem [ jQuery . camelCase ( "default-" + name ) ] = elem [ name ] = true ; return name } } ; if ( ! getSetInput || ! getSetAttribute ) jQuery . attrHooks . value = { get : function ( elem , name ) { var ret = elem . getAttributeNode ( name ) ; return jQuery . nodeName ( elem , "input" ) ? elem . defaultValue : ret && ret . specified ? ret . value : undefined } , set : function ( elem , value , name ) { if ( jQuery . nodeName ( elem , "input" ) ) elem . defaultValue = value ; else return nodeHook && nodeHook . set ( elem , value , name ) } } ; if ( ! getSetAttribute ) { nodeHook = jQuery . valHooks . button = { get : function ( elem ,
name ) { var ret = elem . getAttributeNode ( name ) ; return ret && ( name === "id" || name === "name" || name === "coords" ? ret . value !== "" : ret . specified ) ? ret . value : undefined } , set : function ( elem , value , name ) { var ret = elem . getAttributeNode ( name ) ; if ( ! ret ) elem . setAttributeNode ( ret = elem . ownerDocument . createAttribute ( name ) ) ; ret . value = value += "" ; return name === "value" || value === elem . getAttribute ( name ) ? value : undefined } } ; jQuery . attrHooks . contenteditable = { get : nodeHook . get , set : function ( elem , value , name ) { nodeHook . set ( elem , value === "" ? false :
value , name ) } } ; jQuery . each ( [ "width" , "height" ] , function ( i , name ) { jQuery . attrHooks [ name ] = jQuery . extend ( jQuery . attrHooks [ name ] , { set : function ( elem , value ) { if ( value === "" ) { elem . setAttribute ( name , "auto" ) ; return value } } } ) } ) } if ( ! jQuery . support . hrefNormalized ) { jQuery . each ( [ "href" , "src" , "width" , "height" ] , function ( i , name ) { jQuery . attrHooks [ name ] = jQuery . extend ( jQuery . attrHooks [ name ] , { get : function ( elem ) { var ret = elem . getAttribute ( name , 2 ) ; return ret == null ? undefined : ret } } ) } ) ; jQuery . each ( [ "href" , "src" ] , function ( i , name ) { jQuery . propHooks [ name ] =
{ get : function ( elem ) { return elem . getAttribute ( name , 4 ) } } } ) } if ( ! jQuery . support . style ) jQuery . attrHooks . style = { get : function ( elem ) { return elem . style . cssText || undefined } , set : function ( elem , value ) { return elem . style . cssText = value + "" } } ; if ( ! jQuery . support . optSelected ) jQuery . propHooks . selected = jQuery . extend ( jQuery . propHooks . selected , { get : function ( elem ) { var parent = elem . parentNode ; if ( parent ) { parent . selectedIndex ; if ( parent . parentNode ) parent . parentNode . selectedIndex } return null } } ) ; if ( ! jQuery . support . enctype ) jQuery . propFix . enctype =
"encoding" ; if ( ! jQuery . support . checkOn ) jQuery . each ( [ "radio" , "checkbox" ] , function ( ) { jQuery . valHooks [ this ] = { get : function ( elem ) { return elem . getAttribute ( "value" ) === null ? "on" : elem . value } } } ) ; jQuery . each ( [ "radio" , "checkbox" ] , function ( ) { jQuery . valHooks [ this ] = jQuery . extend ( jQuery . valHooks [ this ] , { set : function ( elem , value ) { if ( jQuery . isArray ( value ) ) return elem . checked = jQuery . inArray ( jQuery ( elem ) . val ( ) , value ) >= 0 } } ) } ) ; var rformElems = /^(?:input|select|textarea)$/i , rkeyEvent = /^key/ , rmouseEvent = /^(?:mouse|contextmenu)|click/ ,
rfocusMorph = /^(?:focusinfocus|focusoutblur)$/ , rtypenamespace = /^([^.]*)(?:\.(.+)|)$/ ; function returnTrue ( ) { return true } function returnFalse ( ) { return false } jQuery . event = { global : { } , add : function ( elem , types , handler , data , selector ) { var tmp , events , t , handleObjIn , special , eventHandle , handleObj , handlers , type , namespaces , origType , elemData = jQuery . _data ( elem ) ; if ( ! elemData ) return ; if ( handler . handler ) { handleObjIn = handler ; handler = handleObjIn . handler ; selector = handleObjIn . selector } if ( ! handler . guid ) handler . guid = jQuery . guid ++ ;
if ( ! ( events = elemData . events ) ) events = elemData . events = { } ; if ( ! ( eventHandle = elemData . handle ) ) { eventHandle = elemData . handle = function ( e ) { return typeof jQuery !== core _strundefined && ( ! e || jQuery . event . triggered !== e . type ) ? jQuery . event . dispatch . apply ( eventHandle . elem , arguments ) : undefined } ; eventHandle . elem = elem } types = ( types || "" ) . match ( core _rnotwhite ) || [ "" ] ; t = types . length ; while ( t -- ) { tmp = rtypenamespace . exec ( types [ t ] ) || [ ] ; type = origType = tmp [ 1 ] ; namespaces = ( tmp [ 2 ] || "" ) . split ( "." ) . sort ( ) ; special = jQuery . event . special [ type ] ||
{ } ; type = ( selector ? special . delegateType : special . bindType ) || type ; special = jQuery . event . special [ type ] || { } ; handleObj = jQuery . extend ( { type : type , origType : origType , data : data , handler : handler , guid : handler . guid , selector : selector , needsContext : selector && jQuery . expr . match . needsContext . test ( selector ) , namespace : namespaces . join ( "." ) } , handleObjIn ) ; if ( ! ( handlers = events [ type ] ) ) { handlers = events [ type ] = [ ] ; handlers . delegateCount = 0 ; if ( ! special . setup || special . setup . call ( elem , data , namespaces , eventHandle ) === false ) if ( elem . addEventListener ) elem . addEventListener ( type ,
eventHandle , false ) ; else if ( elem . attachEvent ) elem . attachEvent ( "on" + type , eventHandle ) } if ( special . add ) { special . add . call ( elem , handleObj ) ; if ( ! handleObj . handler . guid ) handleObj . handler . guid = handler . guid } if ( selector ) handlers . splice ( handlers . delegateCount ++ , 0 , handleObj ) ; else handlers . push ( handleObj ) ; jQuery . event . global [ type ] = true } elem = null } , remove : function ( elem , types , handler , selector , mappedTypes ) { var j , handleObj , tmp , origCount , t , events , special , handlers , type , namespaces , origType , elemData = jQuery . hasData ( elem ) &&
jQuery . _data ( elem ) ; if ( ! elemData || ! ( events = elemData . events ) ) return ; types = ( types || "" ) . match ( core _rnotwhite ) || [ "" ] ; t = types . length ; while ( t -- ) { tmp = rtypenamespace . exec ( types [ t ] ) || [ ] ; type = origType = tmp [ 1 ] ; namespaces = ( tmp [ 2 ] || "" ) . split ( "." ) . sort ( ) ; if ( ! type ) { for ( type in events ) jQuery . event . remove ( elem , type + types [ t ] , handler , selector , true ) ; continue } special = jQuery . event . special [ type ] || { } ; type = ( selector ? special . delegateType : special . bindType ) || type ; handlers = events [ type ] || [ ] ; tmp = tmp [ 2 ] && new RegExp ( "(^|\\.)" + namespaces . join ( "\\.(?:.*\\.|)" ) +
"(\\.|$)" ) ; origCount = j = handlers . length ; while ( j -- ) { handleObj = handlers [ j ] ; if ( ( mappedTypes || origType === handleObj . origType ) && ( ! handler || handler . guid === handleObj . guid ) && ( ! tmp || tmp . test ( handleObj . namespace ) ) && ( ! selector || selector === handleObj . selector || selector === "**" && handleObj . selector ) ) { handlers . splice ( j , 1 ) ; if ( handleObj . selector ) handlers . delegateCount -- ; if ( special . remove ) special . remove . call ( elem , handleObj ) } } if ( origCount && ! handlers . length ) { if ( ! special . teardown || special . teardown . call ( elem , namespaces , elemData . handle ) ===
false ) jQuery . removeEvent ( elem , type , elemData . handle ) ; delete events [ type ] } } if ( jQuery . isEmptyObject ( events ) ) { delete elemData . handle ; jQuery . _removeData ( elem , "events" ) } } , trigger : function ( event , data , elem , onlyHandlers ) { var handle , ontype , cur , bubbleType , special , tmp , i , eventPath = [ elem || document ] , type = core _hasOwn . call ( event , "type" ) ? event . type : event , namespaces = core _hasOwn . call ( event , "namespace" ) ? event . namespace . split ( "." ) : [ ] ; cur = tmp = elem = elem || document ; if ( elem . nodeType === 3 || elem . nodeType === 8 ) return ; if ( rfocusMorph . test ( type +
jQuery . event . triggered ) ) return ; if ( type . indexOf ( "." ) >= 0 ) { namespaces = type . split ( "." ) ; type = namespaces . shift ( ) ; namespaces . sort ( ) } ontype = type . indexOf ( ":" ) < 0 && "on" + type ; event = event [ jQuery . expando ] ? event : new jQuery . Event ( type , typeof event === "object" && event ) ; event . isTrigger = true ; event . namespace = namespaces . join ( "." ) ; event . namespace _re = event . namespace ? new RegExp ( "(^|\\.)" + namespaces . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null ; event . result = undefined ; if ( ! event . target ) event . target = elem ; data = data == null ? [ event ] : jQuery . makeArray ( data ,
[ event ] ) ; special = jQuery . event . special [ type ] || { } ; if ( ! onlyHandlers && special . trigger && special . trigger . apply ( elem , data ) === false ) return ; if ( ! onlyHandlers && ! special . noBubble && ! jQuery . isWindow ( elem ) ) { bubbleType = special . delegateType || type ; if ( ! rfocusMorph . test ( bubbleType + type ) ) cur = cur . parentNode ; for ( ; cur ; cur = cur . parentNode ) { eventPath . push ( cur ) ; tmp = cur } if ( tmp === ( elem . ownerDocument || document ) ) eventPath . push ( tmp . defaultView || tmp . parentWindow || window ) } i = 0 ; while ( ( cur = eventPath [ i ++ ] ) && ! event . isPropagationStopped ( ) ) { event . type =
i > 1 ? bubbleType : special . bindType || type ; handle = ( jQuery . _data ( cur , "events" ) || { } ) [ event . type ] && jQuery . _data ( cur , "handle" ) ; if ( handle ) handle . apply ( cur , data ) ; handle = ontype && cur [ ontype ] ; if ( handle && jQuery . acceptData ( cur ) && handle . apply && handle . apply ( cur , data ) === false ) event . preventDefault ( ) } event . type = type ; if ( ! onlyHandlers && ! event . isDefaultPrevented ( ) ) if ( ( ! special . _default || special . _default . apply ( elem . ownerDocument , data ) === false ) && ! ( type === "click" && jQuery . nodeName ( elem , "a" ) ) && jQuery . acceptData ( elem ) ) if ( ontype &&
elem [ type ] && ! jQuery . isWindow ( elem ) ) { tmp = elem [ ontype ] ; if ( tmp ) elem [ ontype ] = null ; jQuery . event . triggered = type ; try { elem [ type ] ( ) } catch ( e ) { } jQuery . event . triggered = undefined ; if ( tmp ) elem [ ontype ] = tmp } return event . result } , dispatch : function ( event ) { event = jQuery . event . fix ( event ) ; var i , ret , handleObj , matched , j , handlerQueue = [ ] , args = core _slice . call ( arguments ) , handlers = ( jQuery . _data ( this , "events" ) || { } ) [ event . type ] || [ ] , special = jQuery . event . special [ event . type ] || { } ; args [ 0 ] = event ; event . delegateTarget = this ; if ( special . preDispatch &&
special . preDispatch . call ( this , event ) === false ) return ; handlerQueue = jQuery . event . handlers . call ( this , event , handlers ) ; i = 0 ; while ( ( matched = handlerQueue [ i ++ ] ) && ! event . isPropagationStopped ( ) ) { event . currentTarget = matched . elem ; j = 0 ; while ( ( handleObj = matched . handlers [ j ++ ] ) && ! event . isImmediatePropagationStopped ( ) ) if ( ! event . namespace _re || event . namespace _re . test ( handleObj . namespace ) ) { event . handleObj = handleObj ; event . data = handleObj . data ; ret = ( ( jQuery . event . special [ handleObj . origType ] || { } ) . handle || handleObj . handler ) . apply ( matched . elem ,
args ) ; if ( ret !== undefined ) if ( ( event . result = ret ) === false ) { event . preventDefault ( ) ; event . stopPropagation ( ) } } } if ( special . postDispatch ) special . postDispatch . call ( this , event ) ; return event . result } , handlers : function ( event , handlers ) { var sel , handleObj , matches , i , handlerQueue = [ ] , delegateCount = handlers . delegateCount , cur = event . target ; if ( delegateCount && cur . nodeType && ( ! event . button || event . type !== "click" ) ) for ( ; cur != this ; cur = cur . parentNode || this ) if ( cur . nodeType === 1 && ( cur . disabled !== true || event . type !== "click" ) ) { matches =
[ ] ; for ( i = 0 ; i < delegateCount ; i ++ ) { handleObj = handlers [ i ] ; sel = handleObj . selector + " " ; if ( matches [ sel ] === undefined ) matches [ sel ] = handleObj . needsContext ? jQuery ( sel , this ) . index ( cur ) >= 0 : jQuery . find ( sel , this , null , [ cur ] ) . length ; if ( matches [ sel ] ) matches . push ( handleObj ) } if ( matches . length ) handlerQueue . push ( { elem : cur , handlers : matches } ) } if ( delegateCount < handlers . length ) handlerQueue . push ( { elem : this , handlers : handlers . slice ( delegateCount ) } ) ; return handlerQueue } , fix : function ( event ) { if ( event [ jQuery . expando ] ) return event ;
var i , prop , copy , type = event . type , originalEvent = event , fixHook = this . fixHooks [ type ] ; if ( ! fixHook ) this . fixHooks [ type ] = fixHook = rmouseEvent . test ( type ) ? this . mouseHooks : rkeyEvent . test ( type ) ? this . keyHooks : { } ; copy = fixHook . props ? this . props . concat ( fixHook . props ) : this . props ; event = new jQuery . Event ( originalEvent ) ; i = copy . length ; while ( i -- ) { prop = copy [ i ] ; event [ prop ] = originalEvent [ prop ] } if ( ! event . target ) event . target = originalEvent . srcElement || document ; if ( event . target . nodeType === 3 ) event . target = event . target . parentNode ; event . metaKey =
! ! event . metaKey ; return fixHook . filter ? fixHook . filter ( event , originalEvent ) : event } , props : "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which" . split ( " " ) , fixHooks : { } , keyHooks : { props : "char charCode key keyCode" . split ( " " ) , filter : function ( event , original ) { if ( event . which == null ) event . which = original . charCode != null ? original . charCode : original . keyCode ; return event } } , mouseHooks : { props : "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement" . split ( " " ) ,
filter : function ( event , original ) { var body , eventDoc , doc , button = original . button , fromElement = original . fromElement ; if ( event . pageX == null && original . clientX != null ) { eventDoc = event . target . ownerDocument || document ; doc = eventDoc . documentElement ; body = eventDoc . body ; event . pageX = original . clientX + ( doc && doc . scrollLeft || body && body . scrollLeft || 0 ) - ( doc && doc . clientLeft || body && body . clientLeft || 0 ) ; event . pageY = original . clientY + ( doc && doc . scrollTop || body && body . scrollTop || 0 ) - ( doc && doc . clientTop || body && body . clientTop || 0 ) } if ( ! event . relatedTarget &&
fromElement ) event . relatedTarget = fromElement === event . target ? original . toElement : fromElement ; if ( ! event . which && button !== undefined ) event . which = button & 1 ? 1 : button & 2 ? 3 : button & 4 ? 2 : 0 ; return event } } , special : { load : { noBubble : true } , click : { trigger : function ( ) { if ( jQuery . nodeName ( this , "input" ) && this . type === "checkbox" && this . click ) { this . click ( ) ; return false } } } , focus : { trigger : function ( ) { if ( this !== document . activeElement && this . focus ) try { this . focus ( ) ; return false } catch ( e ) { } } , delegateType : "focusin" } , blur : { trigger : function ( ) { if ( this ===
document . activeElement && this . blur ) { this . blur ( ) ; return false } } , delegateType : "focusout" } , beforeunload : { postDispatch : function ( event ) { if ( event . result !== undefined ) event . originalEvent . returnValue = event . result } } } , simulate : function ( type , elem , event , bubble ) { var e = jQuery . extend ( new jQuery . Event , event , { type : type , isSimulated : true , originalEvent : { } } ) ; if ( bubble ) jQuery . event . trigger ( e , null , elem ) ; else jQuery . event . dispatch . call ( elem , e ) ; if ( e . isDefaultPrevented ( ) ) event . preventDefault ( ) } } ; jQuery . removeEvent = document . removeEventListener ?
function ( elem , type , handle ) { if ( elem . removeEventListener ) elem . removeEventListener ( type , handle , false ) } : function ( elem , type , handle ) { var name = "on" + type ; if ( elem . detachEvent ) { if ( typeof elem [ name ] === core _strundefined ) elem [ name ] = null ; elem . detachEvent ( name , handle ) } } ; jQuery . Event = function ( src , props ) { if ( ! ( this instanceof jQuery . Event ) ) return new jQuery . Event ( src , props ) ; if ( src && src . type ) { this . originalEvent = src ; this . type = src . type ; this . isDefaultPrevented = src . defaultPrevented || src . returnValue === false || src . getPreventDefault &&
src . getPreventDefault ( ) ? returnTrue : returnFalse } else this . type = src ; if ( props ) jQuery . extend ( this , props ) ; this . timeStamp = src && src . timeStamp || jQuery . now ( ) ; this [ jQuery . expando ] = true } ; jQuery . Event . prototype = { isDefaultPrevented : returnFalse , isPropagationStopped : returnFalse , isImmediatePropagationStopped : returnFalse , preventDefault : function ( ) { var e = this . originalEvent ; this . isDefaultPrevented = returnTrue ; if ( ! e ) return ; if ( e . preventDefault ) e . preventDefault ( ) ; else e . returnValue = false } , stopPropagation : function ( ) { var e =
this . originalEvent ; this . isPropagationStopped = returnTrue ; if ( ! e ) return ; if ( e . stopPropagation ) e . stopPropagation ( ) ; e . cancelBubble = true } , stopImmediatePropagation : function ( ) { this . isImmediatePropagationStopped = returnTrue ; this . stopPropagation ( ) } } ; jQuery . each ( { mouseenter : "mouseover" , mouseleave : "mouseout" } , function ( orig , fix ) { jQuery . event . special [ orig ] = { delegateType : fix , bindType : fix , handle : function ( event ) { var ret , target = this , related = event . relatedTarget , handleObj = event . handleObj ; if ( ! related || related !== target &&
! jQuery . contains ( target , related ) ) { event . type = handleObj . origType ; ret = handleObj . handler . apply ( this , arguments ) ; event . type = fix } return ret } } } ) ; if ( ! jQuery . support . submitBubbles ) jQuery . event . special . submit = { setup : function ( ) { if ( jQuery . nodeName ( this , "form" ) ) return false ; jQuery . event . add ( this , "click._submit keypress._submit" , function ( e ) { var elem = e . target , form = jQuery . nodeName ( elem , "input" ) || jQuery . nodeName ( elem , "button" ) ? elem . form : undefined ; if ( form && ! jQuery . _data ( form , "submitBubbles" ) ) { jQuery . event . add ( form ,
"submit._submit" , function ( event ) { event . _submit _bubble = true } ) ; jQuery . _data ( form , "submitBubbles" , true ) } } ) } , postDispatch : function ( event ) { if ( event . _submit _bubble ) { delete event . _submit _bubble ; if ( this . parentNode && ! event . isTrigger ) jQuery . event . simulate ( "submit" , this . parentNode , event , true ) } } , teardown : function ( ) { if ( jQuery . nodeName ( this , "form" ) ) return false ; jQuery . event . remove ( this , "._submit" ) } } ; if ( ! jQuery . support . changeBubbles ) jQuery . event . special . change = { setup : function ( ) { if ( rformElems . test ( this . nodeName ) ) { if ( this . type ===
"checkbox" || this . type === "radio" ) { jQuery . event . add ( this , "propertychange._change" , function ( event ) { if ( event . originalEvent . propertyName === "checked" ) this . _just _changed = true } ) ; jQuery . event . add ( this , "click._change" , function ( event ) { if ( this . _just _changed && ! event . isTrigger ) this . _just _changed = false ; jQuery . event . simulate ( "change" , this , event , true ) } ) } return false } jQuery . event . add ( this , "beforeactivate._change" , function ( e ) { var elem = e . target ; if ( rformElems . test ( elem . nodeName ) && ! jQuery . _data ( elem , "changeBubbles" ) ) { jQuery . event . add ( elem ,
"change._change" , function ( event ) { if ( this . parentNode && ! event . isSimulated && ! event . isTrigger ) jQuery . event . simulate ( "change" , this . parentNode , event , true ) } ) ; jQuery . _data ( elem , "changeBubbles" , true ) } } ) } , handle : function ( event ) { var elem = event . target ; if ( this !== elem || event . isSimulated || event . isTrigger || elem . type !== "radio" && elem . type !== "checkbox" ) return event . handleObj . handler . apply ( this , arguments ) } , teardown : function ( ) { jQuery . event . remove ( this , "._change" ) ; return ! rformElems . test ( this . nodeName ) } } ; if ( ! jQuery . support . focusinBubbles ) jQuery . each ( { focus : "focusin" ,
blur : "focusout" } , function ( orig , fix ) { var attaches = 0 , handler = function ( event ) { jQuery . event . simulate ( fix , event . target , jQuery . event . fix ( event ) , true ) } ; jQuery . event . special [ fix ] = { setup : function ( ) { if ( attaches ++ === 0 ) document . addEventListener ( orig , handler , true ) } , teardown : function ( ) { if ( -- attaches === 0 ) document . removeEventListener ( orig , handler , true ) } } } ) ; jQuery . fn . extend ( { on : function ( types , selector , data , fn , one ) { var type , origFn ; if ( typeof types === "object" ) { if ( typeof selector !== "string" ) { data = data || selector ; selector =
undefined } for ( type in types ) this . on ( type , selector , data , types [ type ] , one ) ; return this } if ( data == null && fn == null ) { fn = selector ; data = selector = undefined } else if ( fn == null ) if ( typeof selector === "string" ) { fn = data ; data = undefined } else { fn = data ; data = selector ; selector = undefined } if ( fn === false ) fn = returnFalse ; else if ( ! fn ) return this ; if ( one === 1 ) { origFn = fn ; fn = function ( event ) { jQuery ( ) . off ( event ) ; return origFn . apply ( this , arguments ) } ; fn . guid = origFn . guid || ( origFn . guid = jQuery . guid ++ ) } return this . each ( function ( ) { jQuery . event . add ( this ,
types , fn , data , selector ) } ) } , one : function ( types , selector , data , fn ) { return this . on ( types , selector , data , fn , 1 ) } , off : function ( types , selector , fn ) { var handleObj , type ; if ( types && types . preventDefault && types . handleObj ) { handleObj = types . handleObj ; jQuery ( types . delegateTarget ) . off ( handleObj . namespace ? handleObj . origType + "." + handleObj . namespace : handleObj . origType , handleObj . selector , handleObj . handler ) ; return this } if ( typeof types === "object" ) { for ( type in types ) this . off ( type , selector , types [ type ] ) ; return this } if ( selector ===
false || typeof selector === "function" ) { fn = selector ; selector = undefined } if ( fn === false ) fn = returnFalse ; return this . each ( function ( ) { jQuery . event . remove ( this , types , fn , selector ) } ) } , bind : function ( types , data , fn ) { return this . on ( types , null , data , fn ) } , unbind : function ( types , fn ) { return this . off ( types , null , fn ) } , delegate : function ( selector , types , data , fn ) { return this . on ( types , selector , data , fn ) } , undelegate : function ( selector , types , fn ) { return arguments . length === 1 ? this . off ( selector , "**" ) : this . off ( types , selector || "**" , fn ) } ,
trigger : function ( type , data ) { return this . each ( function ( ) { jQuery . event . trigger ( type , data , this ) } ) } , triggerHandler : function ( type , data ) { var elem = this [ 0 ] ; if ( elem ) return jQuery . event . trigger ( type , data , elem , true ) } } ) ; ( function ( window , undefined ) { var i , cachedruns , Expr , getText , isXML , compile , hasDuplicate , outermostContext , setDocument , document , docElem , documentIsXML , rbuggyQSA , rbuggyMatches , matches , contains , sortOrder , expando = "sizzle" + - new Date , preferredDoc = window . document , support = { } , dirruns = 0 , done = 0 , classCache = createCache ( ) ,
tokenCache = createCache ( ) , compilerCache = createCache ( ) , strundefined = typeof undefined , MAX _NEGATIVE = 1 << 31 , arr = [ ] , pop = arr . pop , push = arr . push , slice = arr . slice , indexOf = arr . indexOf || function ( elem ) { var i = 0 , len = this . length ; for ( ; i < len ; i ++ ) if ( this [ i ] === elem ) return i ; return - 1 } , whitespace = "[\\x20\\t\\r\\n\\f]" , characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" , identifier = characterEncoding . replace ( "w" , "w#" ) , operators = "([*^$|!~]?=)" , attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + "*(?:" + operators +
whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]" , pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes . replace ( 3 , 8 ) + ")*)|.*)\\)|)" , rtrim = new RegExp ( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$" , "g" ) , rcomma = new RegExp ( "^" + whitespace + "*," + whitespace + "*" ) , rcombinators = new RegExp ( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ) , rpseudo = new RegExp ( pseudos ) , ridentifier = new RegExp ( "^" + identifier +
"$" ) , matchExpr = { "ID" : new RegExp ( "^#(" + characterEncoding + ")" ) , "CLASS" : new RegExp ( "^\\.(" + characterEncoding + ")" ) , "NAME" : new RegExp ( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ) , "TAG" : new RegExp ( "^(" + characterEncoding . replace ( "w" , "w*" ) + ")" ) , "ATTR" : new RegExp ( "^" + attributes ) , "PSEUDO" : new RegExp ( "^" + pseudos ) , "CHILD" : new RegExp ( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)" , "i" ) ,
"needsContext" : new RegExp ( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)" , "i" ) } , rsibling = /[\x20\t\r\n\f]*[+~]/ , rnative = /^[^{]+\{\s*\[native code/ , rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/ , rinputs = /^(?:input|select|textarea|button)$/i , rheader = /^h\d$/i , rescape = /'|\\/g , rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g , runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g , funescape = function ( _ , escaped ) { var high =
"0x" + escaped - 65536 ; return high !== high ? escaped : high < 0 ? String . fromCharCode ( high + 65536 ) : String . fromCharCode ( high >> 10 | 55296 , high & 1023 | 56320 ) } ; try { slice . call ( preferredDoc . documentElement . childNodes , 0 ) [ 0 ] . nodeType } catch ( e ) { slice = function ( i ) { var elem , results = [ ] ; while ( elem = this [ i ++ ] ) results . push ( elem ) ; return results } } function isNative ( fn ) { return rnative . test ( fn + "" ) } function createCache ( ) { var cache , keys = [ ] ; return cache = function ( key , value ) { if ( keys . push ( key += " " ) > Expr . cacheLength ) delete cache [ keys . shift ( ) ] ;
return cache [ key ] = value } } function markFunction ( fn ) { fn [ expando ] = true ; return fn } function assert ( fn ) { var div = document . createElement ( "div" ) ; try { return fn ( div ) } catch ( e ) { return false } finally { div = null } } function Sizzle ( selector , context , results , seed ) { var match , elem , m , nodeType , i , groups , old , nid , newContext , newSelector ; if ( ( context ? context . ownerDocument || context : preferredDoc ) !== document ) setDocument ( context ) ; context = context || document ; results = results || [ ] ; if ( ! selector || typeof selector !== "string" ) return results ; if ( ( nodeType =
context . nodeType ) !== 1 && nodeType !== 9 ) return [ ] ; if ( ! documentIsXML && ! seed ) { if ( match = rquickExpr . exec ( selector ) ) if ( m = match [ 1 ] ) if ( nodeType === 9 ) { elem = context . getElementById ( m ) ; if ( elem && elem . parentNode ) { if ( elem . id === m ) { results . push ( elem ) ; return results } } else return results } else { if ( context . ownerDocument && ( elem = context . ownerDocument . getElementById ( m ) ) && contains ( context , elem ) && elem . id === m ) { results . push ( elem ) ; return results } } else if ( match [ 2 ] ) { push . apply ( results , slice . call ( context . getElementsByTagName ( selector ) ,
0 ) ) ; return results } else if ( ( m = match [ 3 ] ) && support . getByClassName && context . getElementsByClassName ) { push . apply ( results , slice . call ( context . getElementsByClassName ( m ) , 0 ) ) ; return results } if ( support . qsa && ! rbuggyQSA . test ( selector ) ) { old = true ; nid = expando ; newContext = context ; newSelector = nodeType === 9 && selector ; if ( nodeType === 1 && context . nodeName . toLowerCase ( ) !== "object" ) { groups = tokenize ( selector ) ; if ( old = context . getAttribute ( "id" ) ) nid = old . replace ( rescape , "\\$&" ) ; else context . setAttribute ( "id" , nid ) ; nid = "[id='" + nid +
"'] " ; i = groups . length ; while ( i -- ) groups [ i ] = nid + toSelector ( groups [ i ] ) ; newContext = rsibling . test ( selector ) && context . parentNode || context ; newSelector = groups . join ( "," ) } if ( newSelector ) try { push . apply ( results , slice . call ( newContext . querySelectorAll ( newSelector ) , 0 ) ) ; return results } catch ( qsaError ) { } finally { if ( ! old ) context . removeAttribute ( "id" ) } } } return select ( selector . replace ( rtrim , "$1" ) , context , results , seed ) } isXML = Sizzle . isXML = function ( elem ) { var documentElement = elem && ( elem . ownerDocument || elem ) . documentElement ;
return documentElement ? documentElement . nodeName !== "HTML" : false } ; setDocument = Sizzle . setDocument = function ( node ) { var doc = node ? node . ownerDocument || node : preferredDoc ; if ( doc === document || doc . nodeType !== 9 || ! doc . documentElement ) return document ; document = doc ; docElem = doc . documentElement ; documentIsXML = isXML ( doc ) ; support . tagNameNoComments = assert ( function ( div ) { div . appendChild ( doc . createComment ( "" ) ) ; return ! div . getElementsByTagName ( "*" ) . length } ) ; support . attributes = assert ( function ( div ) { div . innerHTML = "<select></select>" ;
var type = typeof div . lastChild . getAttribute ( "multiple" ) ; return type !== "boolean" && type !== "string" } ) ; support . getByClassName = assert ( function ( div ) { div . innerHTML = "<div class='hidden e'></div><div class='hidden'></div>" ; if ( ! div . getElementsByClassName || ! div . getElementsByClassName ( "e" ) . length ) return false ; div . lastChild . className = "e" ; return div . getElementsByClassName ( "e" ) . length === 2 } ) ; support . getByName = assert ( function ( div ) { div . id = expando + 0 ; div . innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>" ;
docElem . insertBefore ( div , docElem . firstChild ) ; var pass = doc . getElementsByName && doc . getElementsByName ( expando ) . length === 2 + doc . getElementsByName ( expando + 0 ) . length ; support . getIdNotName = ! doc . getElementById ( expando ) ; docElem . removeChild ( div ) ; return pass } ) ; Expr . attrHandle = assert ( function ( div ) { div . innerHTML = "<a href='#'></a>" ; return div . firstChild && typeof div . firstChild . getAttribute !== strundefined && div . firstChild . getAttribute ( "href" ) === "#" } ) ? { } : { "href" : function ( elem ) { return elem . getAttribute ( "href" , 2 ) } , "type" : function ( elem ) { return elem . getAttribute ( "type" ) } } ;
if ( support . getIdNotName ) { Expr . find [ "ID" ] = function ( id , context ) { if ( typeof context . getElementById !== strundefined && ! documentIsXML ) { var m = context . getElementById ( id ) ; return m && m . parentNode ? [ m ] : [ ] } } ; Expr . filter [ "ID" ] = function ( id ) { var attrId = id . replace ( runescape , funescape ) ; return function ( elem ) { return elem . getAttribute ( "id" ) === attrId } } } else { Expr . find [ "ID" ] = function ( id , context ) { if ( typeof context . getElementById !== strundefined && ! documentIsXML ) { var m = context . getElementById ( id ) ; return m ? m . id === id || typeof m . getAttributeNode !==
strundefined && m . getAttributeNode ( "id" ) . value === id ? [ m ] : undefined : [ ] } } ; Expr . filter [ "ID" ] = function ( id ) { var attrId = id . replace ( runescape , funescape ) ; return function ( elem ) { var node = typeof elem . getAttributeNode !== strundefined && elem . getAttributeNode ( "id" ) ; return node && node . value === attrId } } } Expr . find [ "TAG" ] = support . tagNameNoComments ? function ( tag , context ) { if ( typeof context . getElementsByTagName !== strundefined ) return context . getElementsByTagName ( tag ) } : function ( tag , context ) { var elem , tmp = [ ] , i = 0 , results = context . getElementsByTagName ( tag ) ;
if ( tag === "*" ) { while ( elem = results [ i ++ ] ) if ( elem . nodeType === 1 ) tmp . push ( elem ) ; return tmp } return results } ; Expr . find [ "NAME" ] = support . getByName && function ( tag , context ) { if ( typeof context . getElementsByName !== strundefined ) return context . getElementsByName ( name ) } ; Expr . find [ "CLASS" ] = support . getByClassName && function ( className , context ) { if ( typeof context . getElementsByClassName !== strundefined && ! documentIsXML ) return context . getElementsByClassName ( className ) } ; rbuggyMatches = [ ] ; rbuggyQSA = [ ":focus" ] ; if ( support . qsa = isNative ( doc . querySelectorAll ) ) { assert ( function ( div ) { div . innerHTML =
"<select><option selected=''></option></select>" ; if ( ! div . querySelectorAll ( "[selected]" ) . length ) rbuggyQSA . push ( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ) ; if ( ! div . querySelectorAll ( ":checked" ) . length ) rbuggyQSA . push ( ":checked" ) } ) ; assert ( function ( div ) { div . innerHTML = "<input type='hidden' i=''/>" ; if ( div . querySelectorAll ( "[i^='']" ) . length ) rbuggyQSA . push ( "[*^$]=" + whitespace + "*(?:\"\"|'')" ) ; if ( ! div . querySelectorAll ( ":enabled" ) . length ) rbuggyQSA . push ( ":enabled" , ":disabled" ) ;
div . querySelectorAll ( "*,:x" ) ; rbuggyQSA . push ( ",.*:" ) } ) } if ( support . matchesSelector = isNative ( matches = docElem . matchesSelector || docElem . mozMatchesSelector || docElem . webkitMatchesSelector || docElem . oMatchesSelector || docElem . msMatchesSelector ) ) assert ( function ( div ) { support . disconnectedMatch = matches . call ( div , "div" ) ; matches . call ( div , "[s!='']:x" ) ; rbuggyMatches . push ( "!=" , pseudos ) } ) ; rbuggyQSA = new RegExp ( rbuggyQSA . join ( "|" ) ) ; rbuggyMatches = new RegExp ( rbuggyMatches . join ( "|" ) ) ; contains = isNative ( docElem . contains ) || docElem . compareDocumentPosition ?
function ( a , b ) { var adown = a . nodeType === 9 ? a . documentElement : a , bup = b && b . parentNode ; return a === bup || ! ! ( bup && bup . nodeType === 1 && ( adown . contains ? adown . contains ( bup ) : a . compareDocumentPosition && a . compareDocumentPosition ( bup ) & 16 ) ) } : function ( a , b ) { if ( b ) while ( b = b . parentNode ) if ( b === a ) return true ; return false } ; sortOrder = docElem . compareDocumentPosition ? function ( a , b ) { var compare ; if ( a === b ) { hasDuplicate = true ; return 0 } if ( compare = b . compareDocumentPosition && a . compareDocumentPosition && a . compareDocumentPosition ( b ) ) { if ( compare &
1 || a . parentNode && a . parentNode . nodeType === 11 ) { if ( a === doc || contains ( preferredDoc , a ) ) return - 1 ; if ( b === doc || contains ( preferredDoc , b ) ) return 1 ; return 0 } return compare & 4 ? - 1 : 1 } return a . compareDocumentPosition ? - 1 : 1 } : function ( a , b ) { var cur , i = 0 , aup = a . parentNode , bup = b . parentNode , ap = [ a ] , bp = [ b ] ; if ( a === b ) { hasDuplicate = true ; return 0 } else if ( ! aup || ! bup ) return a === doc ? - 1 : b === doc ? 1 : aup ? - 1 : bup ? 1 : 0 ; else if ( aup === bup ) return siblingCheck ( a , b ) ; cur = a ; while ( cur = cur . parentNode ) ap . unshift ( cur ) ; cur = b ; while ( cur = cur . parentNode ) bp . unshift ( cur ) ;
while ( ap [ i ] === bp [ i ] ) i ++ ; return i ? siblingCheck ( ap [ i ] , bp [ i ] ) : ap [ i ] === preferredDoc ? - 1 : bp [ i ] === preferredDoc ? 1 : 0 } ; hasDuplicate = false ; [ 0 , 0 ] . sort ( sortOrder ) ; support . detectDuplicates = hasDuplicate ; return document } ; Sizzle . matches = function ( expr , elements ) { return Sizzle ( expr , null , null , elements ) } ; Sizzle . matchesSelector = function ( elem , expr ) { if ( ( elem . ownerDocument || elem ) !== document ) setDocument ( elem ) ; expr = expr . replace ( rattributeQuotes , "='$1']" ) ; if ( support . matchesSelector && ! documentIsXML && ( ! rbuggyMatches || ! rbuggyMatches . test ( expr ) ) &&
! rbuggyQSA . test ( expr ) ) try { var ret = matches . call ( elem , expr ) ; if ( ret || support . disconnectedMatch || elem . document && elem . document . nodeType !== 11 ) return ret } catch ( e ) { } return Sizzle ( expr , document , null , [ elem ] ) . length > 0 } ; Sizzle . contains = function ( context , elem ) { if ( ( context . ownerDocument || context ) !== document ) setDocument ( context ) ; return contains ( context , elem ) } ; Sizzle . attr = function ( elem , name ) { var val ; if ( ( elem . ownerDocument || elem ) !== document ) setDocument ( elem ) ; if ( ! documentIsXML ) name = name . toLowerCase ( ) ; if ( val = Expr . attrHandle [ name ] ) return val ( elem ) ;
if ( documentIsXML || support . attributes ) return elem . getAttribute ( name ) ; return ( ( val = elem . getAttributeNode ( name ) ) || elem . getAttribute ( name ) ) && elem [ name ] === true ? name : val && val . specified ? val . value : null } ; Sizzle . error = function ( msg ) { throw new Error ( "Syntax error, unrecognized expression: " + msg ) ; } ; Sizzle . uniqueSort = function ( results ) { var elem , duplicates = [ ] , i = 1 , j = 0 ; hasDuplicate = ! support . detectDuplicates ; results . sort ( sortOrder ) ; if ( hasDuplicate ) { for ( ; elem = results [ i ] ; i ++ ) if ( elem === results [ i - 1 ] ) j = duplicates . push ( i ) ;
while ( j -- ) results . splice ( duplicates [ j ] , 1 ) } return results } ; function siblingCheck ( a , b ) { var cur = b && a , diff = cur && ( ~ b . sourceIndex || MAX _NEGATIVE ) - ( ~ a . sourceIndex || MAX _NEGATIVE ) ; if ( diff ) return diff ; if ( cur ) while ( cur = cur . nextSibling ) if ( cur === b ) return - 1 ; return a ? 1 : - 1 } function createInputPseudo ( type ) { return function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return name === "input" && elem . type === type } } function createButtonPseudo ( type ) { return function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return ( name === "input" ||
name === "button" ) && elem . type === type } } function createPositionalPseudo ( fn ) { return markFunction ( function ( argument ) { argument = + argument ; return markFunction ( function ( seed , matches ) { var j , matchIndexes = fn ( [ ] , seed . length , argument ) , i = matchIndexes . length ; while ( i -- ) if ( seed [ j = matchIndexes [ i ] ] ) seed [ j ] = ! ( matches [ j ] = seed [ j ] ) } ) } ) } getText = Sizzle . getText = function ( elem ) { var node , ret = "" , i = 0 , nodeType = elem . nodeType ; if ( ! nodeType ) for ( ; node = elem [ i ] ; i ++ ) ret += getText ( node ) ; else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) if ( typeof elem . textContent ===
"string" ) return elem . textContent ; else for ( elem = elem . firstChild ; elem ; elem = elem . nextSibling ) ret += getText ( elem ) ; else if ( nodeType === 3 || nodeType === 4 ) return elem . nodeValue ; return ret } ; Expr = Sizzle . selectors = { cacheLength : 50 , createPseudo : markFunction , match : matchExpr , find : { } , relative : { ">" : { dir : "parentNode" , first : true } , " " : { dir : "parentNode" } , "+" : { dir : "previousSibling" , first : true } , "~" : { dir : "previousSibling" } } , preFilter : { "ATTR" : function ( match ) { match [ 1 ] = match [ 1 ] . replace ( runescape , funescape ) ; match [ 3 ] = ( match [ 4 ] ||
match [ 5 ] || "" ) . replace ( runescape , funescape ) ; if ( match [ 2 ] === "~=" ) match [ 3 ] = " " + match [ 3 ] + " " ; return match . slice ( 0 , 4 ) } , "CHILD" : function ( match ) { match [ 1 ] = match [ 1 ] . toLowerCase ( ) ; if ( match [ 1 ] . slice ( 0 , 3 ) === "nth" ) { if ( ! match [ 3 ] ) Sizzle . error ( match [ 0 ] ) ; match [ 4 ] = + ( match [ 4 ] ? match [ 5 ] + ( match [ 6 ] || 1 ) : 2 * ( match [ 3 ] === "even" || match [ 3 ] === "odd" ) ) ; match [ 5 ] = + ( match [ 7 ] + match [ 8 ] || match [ 3 ] === "odd" ) } else if ( match [ 3 ] ) Sizzle . error ( match [ 0 ] ) ; return match } , "PSEUDO" : function ( match ) { var excess , unquoted = ! match [ 5 ] && match [ 2 ] ; if ( matchExpr [ "CHILD" ] . test ( match [ 0 ] ) ) return null ;
if ( match [ 4 ] ) match [ 2 ] = match [ 4 ] ; else if ( unquoted && rpseudo . test ( unquoted ) && ( excess = tokenize ( unquoted , true ) ) && ( excess = unquoted . indexOf ( ")" , unquoted . length - excess ) - unquoted . length ) ) { match [ 0 ] = match [ 0 ] . slice ( 0 , excess ) ; match [ 2 ] = unquoted . slice ( 0 , excess ) } return match . slice ( 0 , 3 ) } } , filter : { "TAG" : function ( nodeName ) { if ( nodeName === "*" ) return function ( ) { return true } ; nodeName = nodeName . replace ( runescape , funescape ) . toLowerCase ( ) ; return function ( elem ) { return elem . nodeName && elem . nodeName . toLowerCase ( ) === nodeName } } , "CLASS" : function ( className ) { var pattern =
classCache [ className + " " ] ; return pattern || ( pattern = new RegExp ( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" ) ) && classCache ( className , function ( elem ) { return pattern . test ( elem . className || typeof elem . getAttribute !== strundefined && elem . getAttribute ( "class" ) || "" ) } ) } , "ATTR" : function ( name , operator , check ) { return function ( elem ) { var result = Sizzle . attr ( elem , name ) ; if ( result == null ) return operator === "!=" ; if ( ! operator ) return true ; result += "" ; return operator === "=" ? result === check : operator === "!=" ? result !== check :
operator === "^=" ? check && result . indexOf ( check ) === 0 : operator === "*=" ? check && result . indexOf ( check ) > - 1 : operator === "$=" ? check && result . slice ( - check . length ) === check : operator === "~=" ? ( " " + result + " " ) . indexOf ( check ) > - 1 : operator === "|=" ? result === check || result . slice ( 0 , check . length + 1 ) === check + "-" : false } } , "CHILD" : function ( type , what , argument , first , last ) { var simple = type . slice ( 0 , 3 ) !== "nth" , forward = type . slice ( - 4 ) !== "last" , ofType = what === "of-type" ; return first === 1 && last === 0 ? function ( elem ) { return ! ! elem . parentNode } : function ( elem ,
context , xml ) { var cache , outerCache , node , diff , nodeIndex , start , dir = simple !== forward ? "nextSibling" : "previousSibling" , parent = elem . parentNode , name = ofType && elem . nodeName . toLowerCase ( ) , useCache = ! xml && ! ofType ; if ( parent ) { if ( simple ) { while ( dir ) { node = elem ; while ( node = node [ dir ] ) if ( ofType ? node . nodeName . toLowerCase ( ) === name : node . nodeType === 1 ) return false ; start = dir = type === "only" && ! start && "nextSibling" } return true } start = [ forward ? parent . firstChild : parent . lastChild ] ; if ( forward && useCache ) { outerCache = parent [ expando ] || ( parent [ expando ] =
{ } ) ; cache = outerCache [ type ] || [ ] ; nodeIndex = cache [ 0 ] === dirruns && cache [ 1 ] ; diff = cache [ 0 ] === dirruns && cache [ 2 ] ; node = nodeIndex && parent . childNodes [ nodeIndex ] ; while ( node = ++ nodeIndex && node && node [ dir ] || ( diff = nodeIndex = 0 ) || start . pop ( ) ) if ( node . nodeType === 1 && ++ diff && node === elem ) { outerCache [ type ] = [ dirruns , nodeIndex , diff ] ; break } } else if ( useCache && ( cache = ( elem [ expando ] || ( elem [ expando ] = { } ) ) [ type ] ) && cache [ 0 ] === dirruns ) diff = cache [ 1 ] ; else while ( node = ++ nodeIndex && node && node [ dir ] || ( diff = nodeIndex = 0 ) || start . pop ( ) ) if ( ( ofType ?
node . nodeName . toLowerCase ( ) === name : node . nodeType === 1 ) && ++ diff ) { if ( useCache ) ( node [ expando ] || ( node [ expando ] = { } ) ) [ type ] = [ dirruns , diff ] ; if ( node === elem ) break } diff -= last ; return diff === first || diff % first === 0 && diff / first >= 0 } } } , "PSEUDO" : function ( pseudo , argument ) { var args , fn = Expr . pseudos [ pseudo ] || Expr . setFilters [ pseudo . toLowerCase ( ) ] || Sizzle . error ( "unsupported pseudo: " + pseudo ) ; if ( fn [ expando ] ) return fn ( argument ) ; if ( fn . length > 1 ) { args = [ pseudo , pseudo , "" , argument ] ; return Expr . setFilters . hasOwnProperty ( pseudo . toLowerCase ( ) ) ?
markFunction ( function ( seed , matches ) { var idx , matched = fn ( seed , argument ) , i = matched . length ; while ( i -- ) { idx = indexOf . call ( seed , matched [ i ] ) ; seed [ idx ] = ! ( matches [ idx ] = matched [ i ] ) } } ) : function ( elem ) { return fn ( elem , 0 , args ) } } return fn } } , pseudos : { "not" : markFunction ( function ( selector ) { var input = [ ] , results = [ ] , matcher = compile ( selector . replace ( rtrim , "$1" ) ) ; return matcher [ expando ] ? markFunction ( function ( seed , matches , context , xml ) { var elem , unmatched = matcher ( seed , null , xml , [ ] ) , i = seed . length ; while ( i -- ) if ( elem = unmatched [ i ] ) seed [ i ] =
! ( matches [ i ] = elem ) } ) : function ( elem , context , xml ) { input [ 0 ] = elem ; matcher ( input , null , xml , results ) ; return ! results . pop ( ) } } ) , "has" : markFunction ( function ( selector ) { return function ( elem ) { return Sizzle ( selector , elem ) . length > 0 } } ) , "contains" : markFunction ( function ( text ) { return function ( elem ) { return ( elem . textContent || elem . innerText || getText ( elem ) ) . indexOf ( text ) > - 1 } } ) , "lang" : markFunction ( function ( lang ) { if ( ! ridentifier . test ( lang || "" ) ) Sizzle . error ( "unsupported lang: " + lang ) ; lang = lang . replace ( runescape , funescape ) . toLowerCase ( ) ;
return function ( elem ) { var elemLang ; do if ( elemLang = documentIsXML ? elem . getAttribute ( "xml:lang" ) || elem . getAttribute ( "lang" ) : elem . lang ) { elemLang = elemLang . toLowerCase ( ) ; return elemLang === lang || elemLang . indexOf ( lang + "-" ) === 0 } while ( ( elem = elem . parentNode ) && elem . nodeType === 1 ) ; return false } } ) , "target" : function ( elem ) { var hash = window . location && window . location . hash ; return hash && hash . slice ( 1 ) === elem . id } , "root" : function ( elem ) { return elem === docElem } , "focus" : function ( elem ) { return elem === document . activeElement && ( ! document . hasFocus ||
document . hasFocus ( ) ) && ! ! ( elem . type || elem . href || ~ elem . tabIndex ) } , "enabled" : function ( elem ) { return elem . disabled === false } , "disabled" : function ( elem ) { return elem . disabled === true } , "checked" : function ( elem ) { var nodeName = elem . nodeName . toLowerCase ( ) ; return nodeName === "input" && ! ! elem . checked || nodeName === "option" && ! ! elem . selected } , "selected" : function ( elem ) { if ( elem . parentNode ) elem . parentNode . selectedIndex ; return elem . selected === true } , "empty" : function ( elem ) { for ( elem = elem . firstChild ; elem ; elem = elem . nextSibling ) if ( elem . nodeName >
"@" || elem . nodeType === 3 || elem . nodeType === 4 ) return false ; return true } , "parent" : function ( elem ) { return ! Expr . pseudos [ "empty" ] ( elem ) } , "header" : function ( elem ) { return rheader . test ( elem . nodeName ) } , "input" : function ( elem ) { return rinputs . test ( elem . nodeName ) } , "button" : function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return name === "input" && elem . type === "button" || name === "button" } , "text" : function ( elem ) { var attr ; return elem . nodeName . toLowerCase ( ) === "input" && elem . type === "text" && ( ( attr = elem . getAttribute ( "type" ) ) ==
null || attr . toLowerCase ( ) === elem . type ) } , "first" : createPositionalPseudo ( function ( ) { return [ 0 ] } ) , "last" : createPositionalPseudo ( function ( matchIndexes , length ) { return [ length - 1 ] } ) , "eq" : createPositionalPseudo ( function ( matchIndexes , length , argument ) { return [ argument < 0 ? argument + length : argument ] } ) , "even" : createPositionalPseudo ( function ( matchIndexes , length ) { var i = 0 ; for ( ; i < length ; i += 2 ) matchIndexes . push ( i ) ; return matchIndexes } ) , "odd" : createPositionalPseudo ( function ( matchIndexes , length ) { var i = 1 ; for ( ; i < length ; i += 2 ) matchIndexes . push ( i ) ;
return matchIndexes } ) , "lt" : createPositionalPseudo ( function ( matchIndexes , length , argument ) { var i = argument < 0 ? argument + length : argument ; for ( ; -- i >= 0 ; ) matchIndexes . push ( i ) ; return matchIndexes } ) , "gt" : createPositionalPseudo ( function ( matchIndexes , length , argument ) { var i = argument < 0 ? argument + length : argument ; for ( ; ++ i < length ; ) matchIndexes . push ( i ) ; return matchIndexes } ) } } ; for ( i in { radio : true , checkbox : true , file : true , password : true , image : true } ) Expr . pseudos [ i ] = createInputPseudo ( i ) ; for ( i in { submit : true , reset : true } ) Expr . pseudos [ i ] =
createButtonPseudo ( i ) ; function tokenize ( selector , parseOnly ) { var matched , match , tokens , type , soFar , groups , preFilters , cached = tokenCache [ selector + " " ] ; if ( cached ) return parseOnly ? 0 : cached . slice ( 0 ) ; soFar = selector ; groups = [ ] ; preFilters = Expr . preFilter ; while ( soFar ) { if ( ! matched || ( match = rcomma . exec ( soFar ) ) ) { if ( match ) soFar = soFar . slice ( match [ 0 ] . length ) || soFar ; groups . push ( tokens = [ ] ) } matched = false ; if ( match = rcombinators . exec ( soFar ) ) { matched = match . shift ( ) ; tokens . push ( { value : matched , type : match [ 0 ] . replace ( rtrim , " " ) } ) ;
soFar = soFar . slice ( matched . length ) } for ( type in Expr . filter ) if ( ( match = matchExpr [ type ] . exec ( soFar ) ) && ( ! preFilters [ type ] || ( match = preFilters [ type ] ( match ) ) ) ) { matched = match . shift ( ) ; tokens . push ( { value : matched , type : type , matches : match } ) ; soFar = soFar . slice ( matched . length ) } if ( ! matched ) break } return parseOnly ? soFar . length : soFar ? Sizzle . error ( selector ) : tokenCache ( selector , groups ) . slice ( 0 ) } function toSelector ( tokens ) { var i = 0 , len = tokens . length , selector = "" ; for ( ; i < len ; i ++ ) selector += tokens [ i ] . value ; return selector } function addCombinator ( matcher ,
combinator , base ) { var dir = combinator . dir , checkNonElements = base && dir === "parentNode" , doneName = done ++ ; return combinator . first ? function ( elem , context , xml ) { while ( elem = elem [ dir ] ) if ( elem . nodeType === 1 || checkNonElements ) return matcher ( elem , context , xml ) } : function ( elem , context , xml ) { var data , cache , outerCache , dirkey = dirruns + " " + doneName ; if ( xml ) while ( elem = elem [ dir ] ) { if ( elem . nodeType === 1 || checkNonElements ) if ( matcher ( elem , context , xml ) ) return true } else while ( elem = elem [ dir ] ) if ( elem . nodeType === 1 || checkNonElements ) { outerCache =
elem [ expando ] || ( elem [ expando ] = { } ) ; if ( ( cache = outerCache [ dir ] ) && cache [ 0 ] === dirkey ) { if ( ( data = cache [ 1 ] ) === true || data === cachedruns ) return data === true } else { cache = outerCache [ dir ] = [ dirkey ] ; cache [ 1 ] = matcher ( elem , context , xml ) || cachedruns ; if ( cache [ 1 ] === true ) return true } } } } function elementMatcher ( matchers ) { return matchers . length > 1 ? function ( elem , context , xml ) { var i = matchers . length ; while ( i -- ) if ( ! matchers [ i ] ( elem , context , xml ) ) return false ; return true } : matchers [ 0 ] } function condense ( unmatched , map , filter , context , xml ) { var elem ,
newUnmatched = [ ] , i = 0 , len = unmatched . length , mapped = map != null ; for ( ; i < len ; i ++ ) if ( elem = unmatched [ i ] ) if ( ! filter || filter ( elem , context , xml ) ) { newUnmatched . push ( elem ) ; if ( mapped ) map . push ( i ) } return newUnmatched } function setMatcher ( preFilter , selector , matcher , postFilter , postFinder , postSelector ) { if ( postFilter && ! postFilter [ expando ] ) postFilter = setMatcher ( postFilter ) ; if ( postFinder && ! postFinder [ expando ] ) postFinder = setMatcher ( postFinder , postSelector ) ; return markFunction ( function ( seed , results , context , xml ) { var temp , i , elem ,
preMap = [ ] , postMap = [ ] , preexisting = results . length , elems = seed || multipleContexts ( selector || "*" , context . nodeType ? [ context ] : context , [ ] ) , matcherIn = preFilter && ( seed || ! selector ) ? condense ( elems , preMap , preFilter , context , xml ) : elems , matcherOut = matcher ? postFinder || ( seed ? preFilter : preexisting || postFilter ) ? [ ] : results : matcherIn ; if ( matcher ) matcher ( matcherIn , matcherOut , context , xml ) ; if ( postFilter ) { temp = condense ( matcherOut , postMap ) ; postFilter ( temp , [ ] , context , xml ) ; i = temp . length ; while ( i -- ) if ( elem = temp [ i ] ) matcherOut [ postMap [ i ] ] =
! ( matcherIn [ postMap [ i ] ] = elem ) } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { temp = [ ] ; i = matcherOut . length ; while ( i -- ) if ( elem = matcherOut [ i ] ) temp . push ( matcherIn [ i ] = elem ) ; postFinder ( null , matcherOut = [ ] , temp , xml ) } i = matcherOut . length ; while ( i -- ) if ( ( elem = matcherOut [ i ] ) && ( temp = postFinder ? indexOf . call ( seed , elem ) : preMap [ i ] ) > - 1 ) seed [ temp ] = ! ( results [ temp ] = elem ) } } else { matcherOut = condense ( matcherOut === results ? matcherOut . splice ( preexisting , matcherOut . length ) : matcherOut ) ; if ( postFinder ) postFinder ( null , results , matcherOut ,
xml ) ; else push . apply ( results , matcherOut ) } } ) } function matcherFromTokens ( tokens ) { var checkContext , matcher , j , len = tokens . length , leadingRelative = Expr . relative [ tokens [ 0 ] . type ] , implicitRelative = leadingRelative || Expr . relative [ " " ] , i = leadingRelative ? 1 : 0 , matchContext = addCombinator ( function ( elem ) { return elem === checkContext } , implicitRelative , true ) , matchAnyContext = addCombinator ( function ( elem ) { return indexOf . call ( checkContext , elem ) > - 1 } , implicitRelative , true ) , matchers = [ function ( elem , context , xml ) { return ! leadingRelative &&
( xml || context !== outermostContext ) || ( ( checkContext = context ) . nodeType ? matchContext ( elem , context , xml ) : matchAnyContext ( elem , context , xml ) ) } ] ; for ( ; i < len ; i ++ ) if ( matcher = Expr . relative [ tokens [ i ] . type ] ) matchers = [ addCombinator ( elementMatcher ( matchers ) , matcher ) ] ; else { matcher = Expr . filter [ tokens [ i ] . type ] . apply ( null , tokens [ i ] . matches ) ; if ( matcher [ expando ] ) { j = ++ i ; for ( ; j < len ; j ++ ) if ( Expr . relative [ tokens [ j ] . type ] ) break ; return setMatcher ( i > 1 && elementMatcher ( matchers ) , i > 1 && toSelector ( tokens . slice ( 0 , i - 1 ) ) . replace ( rtrim ,
"$1" ) , matcher , i < j && matcherFromTokens ( tokens . slice ( i , j ) ) , j < len && matcherFromTokens ( tokens = tokens . slice ( j ) ) , j < len && toSelector ( tokens ) ) } matchers . push ( matcher ) } return elementMatcher ( matchers ) } function matcherFromGroupMatchers ( elementMatchers , setMatchers ) { var matcherCachedRuns = 0 , bySet = setMatchers . length > 0 , byElement = elementMatchers . length > 0 , superMatcher = function ( seed , context , xml , results , expandContext ) { var elem , j , matcher , setMatched = [ ] , matchedCount = 0 , i = "0" , unmatched = seed && [ ] , outermost = expandContext != null ,
contextBackup = outermostContext , elems = seed || byElement && Expr . find [ "TAG" ] ( "*" , expandContext && context . parentNode || context ) , dirrunsUnique = dirruns += contextBackup == null ? 1 : Math . random ( ) || 0.1 ; if ( outermost ) { outermostContext = context !== document && context ; cachedruns = matcherCachedRuns } for ( ; ( elem = elems [ i ] ) != null ; i ++ ) { if ( byElement && elem ) { j = 0 ; while ( matcher = elementMatchers [ j ++ ] ) if ( matcher ( elem , context , xml ) ) { results . push ( elem ) ; break } if ( outermost ) { dirruns = dirrunsUnique ; cachedruns = ++ matcherCachedRuns } } if ( bySet ) { if ( elem =
! matcher && elem ) matchedCount -- ; if ( seed ) unmatched . push ( elem ) } } matchedCount += i ; if ( bySet && i !== matchedCount ) { j = 0 ; while ( matcher = setMatchers [ j ++ ] ) matcher ( unmatched , setMatched , context , xml ) ; if ( seed ) { if ( matchedCount > 0 ) while ( i -- ) if ( ! ( unmatched [ i ] || setMatched [ i ] ) ) setMatched [ i ] = pop . call ( results ) ; setMatched = condense ( setMatched ) } push . apply ( results , setMatched ) ; if ( outermost && ! seed && setMatched . length > 0 && matchedCount + setMatchers . length > 1 ) Sizzle . uniqueSort ( results ) } if ( outermost ) { dirruns = dirrunsUnique ; outermostContext =
contextBackup } return unmatched } ; return bySet ? markFunction ( superMatcher ) : superMatcher } compile = Sizzle . compile = function ( selector , group ) { var i , setMatchers = [ ] , elementMatchers = [ ] , cached = compilerCache [ selector + " " ] ; if ( ! cached ) { if ( ! group ) group = tokenize ( selector ) ; i = group . length ; while ( i -- ) { cached = matcherFromTokens ( group [ i ] ) ; if ( cached [ expando ] ) setMatchers . push ( cached ) ; else elementMatchers . push ( cached ) } cached = compilerCache ( selector , matcherFromGroupMatchers ( elementMatchers , setMatchers ) ) } return cached } ; function multipleContexts ( selector ,
contexts , results ) { var i = 0 , len = contexts . length ; for ( ; i < len ; i ++ ) Sizzle ( selector , contexts [ i ] , results ) ; return results } function select ( selector , context , results , seed ) { var i , tokens , token , type , find , match = tokenize ( selector ) ; if ( ! seed ) if ( match . length === 1 ) { tokens = match [ 0 ] = match [ 0 ] . slice ( 0 ) ; if ( tokens . length > 2 && ( token = tokens [ 0 ] ) . type === "ID" && context . nodeType === 9 && ! documentIsXML && Expr . relative [ tokens [ 1 ] . type ] ) { context = Expr . find [ "ID" ] ( token . matches [ 0 ] . replace ( runescape , funescape ) , context ) [ 0 ] ; if ( ! context ) return results ;
selector = selector . slice ( tokens . shift ( ) . value . length ) } i = matchExpr [ "needsContext" ] . test ( selector ) ? 0 : tokens . length ; while ( i -- ) { token = tokens [ i ] ; if ( Expr . relative [ type = token . type ] ) break ; if ( find = Expr . find [ type ] ) if ( seed = find ( token . matches [ 0 ] . replace ( runescape , funescape ) , rsibling . test ( tokens [ 0 ] . type ) && context . parentNode || context ) ) { tokens . splice ( i , 1 ) ; selector = seed . length && toSelector ( tokens ) ; if ( ! selector ) { push . apply ( results , slice . call ( seed , 0 ) ) ; return results } break } } } compile ( selector , match ) ( seed , context , documentIsXML ,
results , rsibling . test ( selector ) ) ; return results } Expr . pseudos [ "nth" ] = Expr . pseudos [ "eq" ] ; function setFilters ( ) { } Expr . filters = setFilters . prototype = Expr . pseudos ; Expr . setFilters = new setFilters ; setDocument ( ) ; Sizzle . attr = jQuery . attr ; jQuery . find = Sizzle ; jQuery . expr = Sizzle . selectors ; jQuery . expr [ ":" ] = jQuery . expr . pseudos ; jQuery . unique = Sizzle . uniqueSort ; jQuery . text = Sizzle . getText ; jQuery . isXMLDoc = Sizzle . isXML ; jQuery . contains = Sizzle . contains } ) ( window ) ; var runtil = /Until$/ , rparentsprev = /^(?:parents|prev(?:Until|All))/ ,
isSimple = /^.[^:#\[\.,]*$/ , rneedsContext = jQuery . expr . match . needsContext , guaranteedUnique = { children : true , contents : true , next : true , prev : true } ; jQuery . fn . extend ( { find : function ( selector ) { var i , ret , self , len = this . length ; if ( typeof selector !== "string" ) { self = this ; return this . pushStack ( jQuery ( selector ) . filter ( function ( ) { for ( i = 0 ; i < len ; i ++ ) if ( jQuery . contains ( self [ i ] , this ) ) return true } ) ) } ret = [ ] ; for ( i = 0 ; i < len ; i ++ ) jQuery . find ( selector , this [ i ] , ret ) ; ret = this . pushStack ( len > 1 ? jQuery . unique ( ret ) : ret ) ; ret . selector = ( this . selector ?
this . selector + " " : "" ) + selector ; return ret } , has : function ( target ) { var i , targets = jQuery ( target , this ) , len = targets . length ; return this . filter ( function ( ) { for ( i = 0 ; i < len ; i ++ ) if ( jQuery . contains ( this , targets [ i ] ) ) return true } ) } , not : function ( selector ) { return this . pushStack ( winnow ( this , selector , false ) ) } , filter : function ( selector ) { return this . pushStack ( winnow ( this , selector , true ) ) } , is : function ( selector ) { return ! ! selector && ( typeof selector === "string" ? rneedsContext . test ( selector ) ? jQuery ( selector , this . context ) . index ( this [ 0 ] ) >=
0 : jQuery . filter ( selector , this ) . length > 0 : this . filter ( selector ) . length > 0 ) } , closest : function ( selectors , context ) { var cur , i = 0 , l = this . length , ret = [ ] , pos = rneedsContext . test ( selectors ) || typeof selectors !== "string" ? jQuery ( selectors , context || this . context ) : 0 ; for ( ; i < l ; i ++ ) { cur = this [ i ] ; while ( cur && cur . ownerDocument && cur !== context && cur . nodeType !== 11 ) { if ( pos ? pos . index ( cur ) > - 1 : jQuery . find . matchesSelector ( cur , selectors ) ) { ret . push ( cur ) ; break } cur = cur . parentNode } } return this . pushStack ( ret . length > 1 ? jQuery . unique ( ret ) : ret ) } ,
index : function ( elem ) { if ( ! elem ) return this [ 0 ] && this [ 0 ] . parentNode ? this . first ( ) . prevAll ( ) . length : - 1 ; if ( typeof elem === "string" ) return jQuery . inArray ( this [ 0 ] , jQuery ( elem ) ) ; return jQuery . inArray ( elem . jquery ? elem [ 0 ] : elem , this ) } , add : function ( selector , context ) { var set = typeof selector === "string" ? jQuery ( selector , context ) : jQuery . makeArray ( selector && selector . nodeType ? [ selector ] : selector ) , all = jQuery . merge ( this . get ( ) , set ) ; return this . pushStack ( jQuery . unique ( all ) ) } , addBack : function ( selector ) { return this . add ( selector ==
null ? this . prevObject : this . prevObject . filter ( selector ) ) } } ) ; jQuery . fn . andSelf = jQuery . fn . addBack ; function sibling ( cur , dir ) { do cur = cur [ dir ] ; while ( cur && cur . nodeType !== 1 ) ; return cur } jQuery . each ( { parent : function ( elem ) { var parent = elem . parentNode ; return parent && parent . nodeType !== 11 ? parent : null } , parents : function ( elem ) { return jQuery . dir ( elem , "parentNode" ) } , parentsUntil : function ( elem , i , until ) { return jQuery . dir ( elem , "parentNode" , until ) } , next : function ( elem ) { return sibling ( elem , "nextSibling" ) } , prev : function ( elem ) { return sibling ( elem ,
"previousSibling" ) } , nextAll : function ( elem ) { return jQuery . dir ( elem , "nextSibling" ) } , prevAll : function ( elem ) { return jQuery . dir ( elem , "previousSibling" ) } , nextUntil : function ( elem , i , until ) { return jQuery . dir ( elem , "nextSibling" , until ) } , prevUntil : function ( elem , i , until ) { return jQuery . dir ( elem , "previousSibling" , until ) } , siblings : function ( elem ) { return jQuery . sibling ( ( elem . parentNode || { } ) . firstChild , elem ) } , children : function ( elem ) { return jQuery . sibling ( elem . firstChild ) } , contents : function ( elem ) { return jQuery . nodeName ( elem ,
"iframe" ) ? elem . contentDocument || elem . contentWindow . document : jQuery . merge ( [ ] , elem . childNodes ) } } , function ( name , fn ) { jQuery . fn [ name ] = function ( until , selector ) { var ret = jQuery . map ( this , fn , until ) ; if ( ! runtil . test ( name ) ) selector = until ; if ( selector && typeof selector === "string" ) ret = jQuery . filter ( selector , ret ) ; ret = this . length > 1 && ! guaranteedUnique [ name ] ? jQuery . unique ( ret ) : ret ; if ( this . length > 1 && rparentsprev . test ( name ) ) ret = ret . reverse ( ) ; return this . pushStack ( ret ) } } ) ; jQuery . extend ( { filter : function ( expr , elems , not ) { if ( not ) expr =
":not(" + expr + ")" ; return elems . length === 1 ? jQuery . find . matchesSelector ( elems [ 0 ] , expr ) ? [ elems [ 0 ] ] : [ ] : jQuery . find . matches ( expr , elems ) } , dir : function ( elem , dir , until ) { var matched = [ ] , cur = elem [ dir ] ; while ( cur && cur . nodeType !== 9 && ( until === undefined || cur . nodeType !== 1 || ! jQuery ( cur ) . is ( until ) ) ) { if ( cur . nodeType === 1 ) matched . push ( cur ) ; cur = cur [ dir ] } return matched } , sibling : function ( n , elem ) { var r = [ ] ; for ( ; n ; n = n . nextSibling ) if ( n . nodeType === 1 && n !== elem ) r . push ( n ) ; return r } } ) ; function winnow ( elements , qualifier , keep ) { qualifier =
qualifier || 0 ; if ( jQuery . isFunction ( qualifier ) ) return jQuery . grep ( elements , function ( elem , i ) { var retVal = ! ! qualifier . call ( elem , i , elem ) ; return retVal === keep } ) ; else if ( qualifier . nodeType ) return jQuery . grep ( elements , function ( elem ) { return elem === qualifier === keep } ) ; else if ( typeof qualifier === "string" ) { var filtered = jQuery . grep ( elements , function ( elem ) { return elem . nodeType === 1 } ) ; if ( isSimple . test ( qualifier ) ) return jQuery . filter ( qualifier , filtered , ! keep ) ; else qualifier = jQuery . filter ( qualifier , filtered ) } return jQuery . grep ( elements ,
function ( elem ) { return jQuery . inArray ( elem , qualifier ) >= 0 === keep } ) } function createSafeFragment ( document ) { var list = nodeNames . split ( "|" ) , safeFrag = document . createDocumentFragment ( ) ; if ( safeFrag . createElement ) while ( list . length ) safeFrag . createElement ( list . pop ( ) ) ; return safeFrag } var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video" , rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g , rnoshimcache =
new RegExp ( "<(?:" + nodeNames + ")[\\s/>]" , "i" ) , rleadingWhitespace = /^\s+/ , rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi , rtagName = /<([\w:]+)/ , rtbody = /<tbody/i , rhtml = /<|&#?\w+;/ , rnoInnerhtml = /<(?:script|style|link)/i , manipulation _rcheckableType = /^(?:checkbox|radio)$/i , rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i , rscriptType = /^$|\/(?:java|ecma)script/i , rscriptTypeMasked = /^true\/(.*)/ , rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g , wrapMap = { option : [ 1 , "<select multiple='multiple'>" ,
"</select>" ] , legend : [ 1 , "<fieldset>" , "</fieldset>" ] , area : [ 1 , "<map>" , "</map>" ] , param : [ 1 , "<object>" , "</object>" ] , thead : [ 1 , "<table>" , "</table>" ] , tr : [ 2 , "<table><tbody>" , "</tbody></table>" ] , col : [ 2 , "<table><tbody></tbody><colgroup>" , "</colgroup></table>" ] , td : [ 3 , "<table><tbody><tr>" , "</tr></tbody></table>" ] , _default : jQuery . support . htmlSerialize ? [ 0 , "" , "" ] : [ 1 , "X<div>" , "</div>" ] } , safeFragment = createSafeFragment ( document ) , fragmentDiv = safeFragment . appendChild ( document . createElement ( "div" ) ) ; wrapMap . optgroup = wrapMap . option ;
wrapMap . tbody = wrapMap . tfoot = wrapMap . colgroup = wrapMap . caption = wrapMap . thead ; wrapMap . th = wrapMap . td ; jQuery . fn . extend ( { text : function ( value ) { return jQuery . access ( this , function ( value ) { return value === undefined ? jQuery . text ( this ) : this . empty ( ) . append ( ( this [ 0 ] && this [ 0 ] . ownerDocument || document ) . createTextNode ( value ) ) } , null , value , arguments . length ) } , wrapAll : function ( html ) { if ( jQuery . isFunction ( html ) ) return this . each ( function ( i ) { jQuery ( this ) . wrapAll ( html . call ( this , i ) ) } ) ; if ( this [ 0 ] ) { var wrap = jQuery ( html , this [ 0 ] . ownerDocument ) . eq ( 0 ) . clone ( true ) ;
if ( this [ 0 ] . parentNode ) wrap . insertBefore ( this [ 0 ] ) ; wrap . map ( function ( ) { var elem = this ; while ( elem . firstChild && elem . firstChild . nodeType === 1 ) elem = elem . firstChild ; return elem } ) . append ( this ) } return this } , wrapInner : function ( html ) { if ( jQuery . isFunction ( html ) ) return this . each ( function ( i ) { jQuery ( this ) . wrapInner ( html . call ( this , i ) ) } ) ; return this . each ( function ( ) { var self = jQuery ( this ) , contents = self . contents ( ) ; if ( contents . length ) contents . wrapAll ( html ) ; else self . append ( html ) } ) } , wrap : function ( html ) { var isFunction = jQuery . isFunction ( html ) ;
return this . each ( function ( i ) { jQuery ( this ) . wrapAll ( isFunction ? html . call ( this , i ) : html ) } ) } , unwrap : function ( ) { return this . parent ( ) . each ( function ( ) { if ( ! jQuery . nodeName ( this , "body" ) ) jQuery ( this ) . replaceWith ( this . childNodes ) } ) . end ( ) } , append : function ( ) { return this . domManip ( arguments , true , function ( elem ) { if ( this . nodeType === 1 || this . nodeType === 11 || this . nodeType === 9 ) this . appendChild ( elem ) } ) } , prepend : function ( ) { return this . domManip ( arguments , true , function ( elem ) { if ( this . nodeType === 1 || this . nodeType === 11 || this . nodeType ===
9 ) this . insertBefore ( elem , this . firstChild ) } ) } , before : function ( ) { return this . domManip ( arguments , false , function ( elem ) { if ( this . parentNode ) this . parentNode . insertBefore ( elem , this ) } ) } , after : function ( ) { return this . domManip ( arguments , false , function ( elem ) { if ( this . parentNode ) this . parentNode . insertBefore ( elem , this . nextSibling ) } ) } , remove : function ( selector , keepData ) { var elem , i = 0 ; for ( ; ( elem = this [ i ] ) != null ; i ++ ) if ( ! selector || jQuery . filter ( selector , [ elem ] ) . length > 0 ) { if ( ! keepData && elem . nodeType === 1 ) jQuery . cleanData ( getAll ( elem ) ) ;
if ( elem . parentNode ) { if ( keepData && jQuery . contains ( elem . ownerDocument , elem ) ) setGlobalEval ( getAll ( elem , "script" ) ) ; elem . parentNode . removeChild ( elem ) } } return this } , empty : function ( ) { var elem , i = 0 ; for ( ; ( elem = this [ i ] ) != null ; i ++ ) { if ( elem . nodeType === 1 ) jQuery . cleanData ( getAll ( elem , false ) ) ; while ( elem . firstChild ) elem . removeChild ( elem . firstChild ) ; if ( elem . options && jQuery . nodeName ( elem , "select" ) ) elem . options . length = 0 } return this } , clone : function ( dataAndEvents , deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false :
dataAndEvents ; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents ; return this . map ( function ( ) { return jQuery . clone ( this , dataAndEvents , deepDataAndEvents ) } ) } , html : function ( value ) { return jQuery . access ( this , function ( value ) { var elem = this [ 0 ] || { } , i = 0 , l = this . length ; if ( value === undefined ) return elem . nodeType === 1 ? elem . innerHTML . replace ( rinlinejQuery , "" ) : undefined ; if ( typeof value === "string" && ! rnoInnerhtml . test ( value ) && ( jQuery . support . htmlSerialize || ! rnoshimcache . test ( value ) ) && ( jQuery . support . leadingWhitespace ||
! rleadingWhitespace . test ( value ) ) && ! wrapMap [ ( rtagName . exec ( value ) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ] ) { value = value . replace ( rxhtmlTag , "<$1></$2>" ) ; try { for ( ; i < l ; i ++ ) { elem = this [ i ] || { } ; if ( elem . nodeType === 1 ) { jQuery . cleanData ( getAll ( elem , false ) ) ; elem . innerHTML = value } } elem = 0 } catch ( e ) { } } if ( elem ) this . empty ( ) . append ( value ) } , null , value , arguments . length ) } , replaceWith : function ( value ) { var isFunc = jQuery . isFunction ( value ) ; if ( ! isFunc && typeof value !== "string" ) value = jQuery ( value ) . not ( this ) . detach ( ) ; return this . domManip ( [ value ] ,
true , function ( elem ) { var next = this . nextSibling , parent = this . parentNode ; if ( parent ) { jQuery ( this ) . remove ( ) ; parent . insertBefore ( elem , next ) } } ) } , detach : function ( selector ) { return this . remove ( selector , true ) } , domManip : function ( args , table , callback ) { args = core _concat . apply ( [ ] , args ) ; var first , node , hasScripts , scripts , doc , fragment , i = 0 , l = this . length , set = this , iNoClone = l - 1 , value = args [ 0 ] , isFunction = jQuery . isFunction ( value ) ; if ( isFunction || ! ( l <= 1 || typeof value !== "string" || jQuery . support . checkClone || ! rchecked . test ( value ) ) ) return this . each ( function ( index ) { var self =
set . eq ( index ) ; if ( isFunction ) args [ 0 ] = value . call ( this , index , table ? self . html ( ) : undefined ) ; self . domManip ( args , table , callback ) } ) ; if ( l ) { fragment = jQuery . buildFragment ( args , this [ 0 ] . ownerDocument , false , this ) ; first = fragment . firstChild ; if ( fragment . childNodes . length === 1 ) fragment = first ; if ( first ) { table = table && jQuery . nodeName ( first , "tr" ) ; scripts = jQuery . map ( getAll ( fragment , "script" ) , disableScript ) ; hasScripts = scripts . length ; for ( ; i < l ; i ++ ) { node = fragment ; if ( i !== iNoClone ) { node = jQuery . clone ( node , true , true ) ; if ( hasScripts ) jQuery . merge ( scripts ,
getAll ( node , "script" ) ) } callback . call ( table && jQuery . nodeName ( this [ i ] , "table" ) ? findOrAppend ( this [ i ] , "tbody" ) : this [ i ] , node , i ) } if ( hasScripts ) { doc = scripts [ scripts . length - 1 ] . ownerDocument ; jQuery . map ( scripts , restoreScript ) ; for ( i = 0 ; i < hasScripts ; i ++ ) { node = scripts [ i ] ; if ( rscriptType . test ( node . type || "" ) && ! jQuery . _data ( node , "globalEval" ) && jQuery . contains ( doc , node ) ) if ( node . src ) jQuery . ajax ( { url : node . src , type : "GET" , dataType : "script" , async : false , global : false , "throws" : true } ) ; else jQuery . globalEval ( ( node . text || node . textContent ||
node . innerHTML || "" ) . replace ( rcleanScript , "" ) ) } } fragment = first = null } } return this } } ) ; function findOrAppend ( elem , tag ) { return elem . getElementsByTagName ( tag ) [ 0 ] || elem . appendChild ( elem . ownerDocument . createElement ( tag ) ) } function disableScript ( elem ) { var attr = elem . getAttributeNode ( "type" ) ; elem . type = ( attr && attr . specified ) + "/" + elem . type ; return elem } function restoreScript ( elem ) { var match = rscriptTypeMasked . exec ( elem . type ) ; if ( match ) elem . type = match [ 1 ] ; else elem . removeAttribute ( "type" ) ; return elem } function setGlobalEval ( elems ,
refElements ) { var elem , i = 0 ; for ( ; ( elem = elems [ i ] ) != null ; i ++ ) jQuery . _data ( elem , "globalEval" , ! refElements || jQuery . _data ( refElements [ i ] , "globalEval" ) ) } function cloneCopyEvent ( src , dest ) { if ( dest . nodeType !== 1 || ! jQuery . hasData ( src ) ) return ; var type , i , l , oldData = jQuery . _data ( src ) , curData = jQuery . _data ( dest , oldData ) , events = oldData . events ; if ( events ) { delete curData . handle ; curData . events = { } ; for ( type in events ) for ( i = 0 , l = events [ type ] . length ; i < l ; i ++ ) jQuery . event . add ( dest , type , events [ type ] [ i ] ) } if ( curData . data ) curData . data =
jQuery . extend ( { } , curData . data ) } function fixCloneNodeIssues ( src , dest ) { var nodeName , e , data ; if ( dest . nodeType !== 1 ) return ; nodeName = dest . nodeName . toLowerCase ( ) ; if ( ! jQuery . support . noCloneEvent && dest [ jQuery . expando ] ) { data = jQuery . _data ( dest ) ; for ( e in data . events ) jQuery . removeEvent ( dest , e , data . handle ) ; dest . removeAttribute ( jQuery . expando ) } if ( nodeName === "script" && dest . text !== src . text ) { disableScript ( dest ) . text = src . text ; restoreScript ( dest ) } else if ( nodeName === "object" ) { if ( dest . parentNode ) dest . outerHTML = src . outerHTML ;
if ( jQuery . support . html5Clone && src . innerHTML && ! jQuery . trim ( dest . innerHTML ) ) dest . innerHTML = src . innerHTML } else if ( nodeName === "input" && manipulation _rcheckableType . test ( src . type ) ) { dest . defaultChecked = dest . checked = src . checked ; if ( dest . value !== src . value ) dest . value = src . value } else if ( nodeName === "option" ) dest . defaultSelected = dest . selected = src . defaultSelected ; else if ( nodeName === "input" || nodeName === "textarea" ) dest . defaultValue = src . defaultValue } jQuery . each ( { appendTo : "append" , prependTo : "prepend" , insertBefore : "before" ,
insertAfter : "after" , replaceAll : "replaceWith" } , function ( name , original ) { jQuery . fn [ name ] = function ( selector ) { var elems , i = 0 , ret = [ ] , insert = jQuery ( selector ) , last = insert . length - 1 ; for ( ; i <= last ; i ++ ) { elems = i === last ? this : this . clone ( true ) ; jQuery ( insert [ i ] ) [ original ] ( elems ) ; core _push . apply ( ret , elems . get ( ) ) } return this . pushStack ( ret ) } } ) ; function getAll ( context , tag ) { var elems , elem , i = 0 , found = typeof context . getElementsByTagName !== core _strundefined ? context . getElementsByTagName ( tag || "*" ) : typeof context . querySelectorAll !==
core _strundefined ? context . querySelectorAll ( tag || "*" ) : undefined ; if ( ! found ) for ( found = [ ] , elems = context . childNodes || context ; ( elem = elems [ i ] ) != null ; i ++ ) if ( ! tag || jQuery . nodeName ( elem , tag ) ) found . push ( elem ) ; else jQuery . merge ( found , getAll ( elem , tag ) ) ; return tag === undefined || tag && jQuery . nodeName ( context , tag ) ? jQuery . merge ( [ context ] , found ) : found } function fixDefaultChecked ( elem ) { if ( manipulation _rcheckableType . test ( elem . type ) ) elem . defaultChecked = elem . checked } jQuery . extend ( { clone : function ( elem , dataAndEvents , deepDataAndEvents ) { var destElements ,
node , clone , i , srcElements , inPage = jQuery . contains ( elem . ownerDocument , elem ) ; if ( jQuery . support . html5Clone || jQuery . isXMLDoc ( elem ) || ! rnoshimcache . test ( "<" + elem . nodeName + ">" ) ) clone = elem . cloneNode ( true ) ; else { fragmentDiv . innerHTML = elem . outerHTML ; fragmentDiv . removeChild ( clone = fragmentDiv . firstChild ) } if ( ( ! jQuery . support . noCloneEvent || ! jQuery . support . noCloneChecked ) && ( elem . nodeType === 1 || elem . nodeType === 11 ) && ! jQuery . isXMLDoc ( elem ) ) { destElements = getAll ( clone ) ; srcElements = getAll ( elem ) ; for ( i = 0 ; ( node = srcElements [ i ] ) !=
null ; ++ i ) if ( destElements [ i ] ) fixCloneNodeIssues ( node , destElements [ i ] ) } if ( dataAndEvents ) if ( deepDataAndEvents ) { srcElements = srcElements || getAll ( elem ) ; destElements = destElements || getAll ( clone ) ; for ( i = 0 ; ( node = srcElements [ i ] ) != null ; i ++ ) cloneCopyEvent ( node , destElements [ i ] ) } else cloneCopyEvent ( elem , clone ) ; destElements = getAll ( clone , "script" ) ; if ( destElements . length > 0 ) setGlobalEval ( destElements , ! inPage && getAll ( elem , "script" ) ) ; destElements = srcElements = node = null ; return clone } , buildFragment : function ( elems , context ,
scripts , selection ) { var j , elem , contains , tmp , tag , tbody , wrap , l = elems . length , safe = createSafeFragment ( context ) , nodes = [ ] , i = 0 ; for ( ; i < l ; i ++ ) { elem = elems [ i ] ; if ( elem || elem === 0 ) if ( jQuery . type ( elem ) === "object" ) jQuery . merge ( nodes , elem . nodeType ? [ elem ] : elem ) ; else if ( ! rhtml . test ( elem ) ) nodes . push ( context . createTextNode ( elem ) ) ; else { tmp = tmp || safe . appendChild ( context . createElement ( "div" ) ) ; tag = ( rtagName . exec ( elem ) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ; wrap = wrapMap [ tag ] || wrapMap . _default ; tmp . innerHTML = wrap [ 1 ] + elem . replace ( rxhtmlTag ,
"<$1></$2>" ) + wrap [ 2 ] ; j = wrap [ 0 ] ; while ( j -- ) tmp = tmp . lastChild ; if ( ! jQuery . support . leadingWhitespace && rleadingWhitespace . test ( elem ) ) nodes . push ( context . createTextNode ( rleadingWhitespace . exec ( elem ) [ 0 ] ) ) ; if ( ! jQuery . support . tbody ) { elem = tag === "table" && ! rtbody . test ( elem ) ? tmp . firstChild : wrap [ 1 ] === "<table>" && ! rtbody . test ( elem ) ? tmp : 0 ; j = elem && elem . childNodes . length ; while ( j -- ) if ( jQuery . nodeName ( tbody = elem . childNodes [ j ] , "tbody" ) && ! tbody . childNodes . length ) elem . removeChild ( tbody ) } jQuery . merge ( nodes , tmp . childNodes ) ;
tmp . textContent = "" ; while ( tmp . firstChild ) tmp . removeChild ( tmp . firstChild ) ; tmp = safe . lastChild } } if ( tmp ) safe . removeChild ( tmp ) ; if ( ! jQuery . support . appendChecked ) jQuery . grep ( getAll ( nodes , "input" ) , fixDefaultChecked ) ; i = 0 ; while ( elem = nodes [ i ++ ] ) { if ( selection && jQuery . inArray ( elem , selection ) !== - 1 ) continue ; contains = jQuery . contains ( elem . ownerDocument , elem ) ; tmp = getAll ( safe . appendChild ( elem ) , "script" ) ; if ( contains ) setGlobalEval ( tmp ) ; if ( scripts ) { j = 0 ; while ( elem = tmp [ j ++ ] ) if ( rscriptType . test ( elem . type || "" ) ) scripts . push ( elem ) } } tmp =
null ; return safe } , cleanData : function ( elems , acceptData ) { var elem , type , id , data , i = 0 , internalKey = jQuery . expando , cache = jQuery . cache , deleteExpando = jQuery . support . deleteExpando , special = jQuery . event . special ; for ( ; ( elem = elems [ i ] ) != null ; i ++ ) if ( acceptData || jQuery . acceptData ( elem ) ) { id = elem [ internalKey ] ; data = id && cache [ id ] ; if ( data ) { if ( data . events ) for ( type in data . events ) if ( special [ type ] ) jQuery . event . remove ( elem , type ) ; else jQuery . removeEvent ( elem , type , data . handle ) ; if ( cache [ id ] ) { delete cache [ id ] ; if ( deleteExpando ) delete elem [ internalKey ] ;
else if ( typeof elem . removeAttribute !== core _strundefined ) elem . removeAttribute ( internalKey ) ; else elem [ internalKey ] = null ; core _deletedIds . push ( id ) } } } } } ) ; var iframe , getStyles , curCSS , ralpha = /alpha\([^)]*\)/i , ropacity = /opacity\s*=\s*([^)]*)/ , rposition = /^(top|right|bottom|left)$/ , rdisplayswap = /^(none|table(?!-c[ea]).+)/ , rmargin = /^margin/ , rnumsplit = new RegExp ( "^(" + core _pnum + ")(.*)$" , "i" ) , rnumnonpx = new RegExp ( "^(" + core _pnum + ")(?!px)[a-z%]+$" , "i" ) , rrelNum = new RegExp ( "^([+-])=(" + core _pnum + ")" , "i" ) , elemdisplay =
{ BODY : "block" } , cssShow = { position : "absolute" , visibility : "hidden" , display : "block" } , cssNormalTransform = { letterSpacing : 0 , fontWeight : 400 } , cssExpand = [ "Top" , "Right" , "Bottom" , "Left" ] , cssPrefixes = [ "Webkit" , "O" , "Moz" , "ms" ] ; function vendorPropName ( style , name ) { if ( name in style ) return name ; var capName = name . charAt ( 0 ) . toUpperCase ( ) + name . slice ( 1 ) , origName = name , i = cssPrefixes . length ; while ( i -- ) { name = cssPrefixes [ i ] + capName ; if ( name in style ) return name } return origName } function isHidden ( elem , el ) { elem = el || elem ; return jQuery . css ( elem ,
"display" ) === "none" || ! jQuery . contains ( elem . ownerDocument , elem ) } function showHide ( elements , show ) { var display , elem , hidden , values = [ ] , index = 0 , length = elements . length ; for ( ; index < length ; index ++ ) { elem = elements [ index ] ; if ( ! elem . style ) continue ; values [ index ] = jQuery . _data ( elem , "olddisplay" ) ; display = elem . style . display ; if ( show ) { if ( ! values [ index ] && display === "none" ) elem . style . display = "" ; if ( elem . style . display === "" && isHidden ( elem ) ) values [ index ] = jQuery . _data ( elem , "olddisplay" , css _defaultDisplay ( elem . nodeName ) ) } else if ( ! values [ index ] ) { hidden =
isHidden ( elem ) ; if ( display && display !== "none" || ! hidden ) jQuery . _data ( elem , "olddisplay" , hidden ? display : jQuery . css ( elem , "display" ) ) } } for ( index = 0 ; index < length ; index ++ ) { elem = elements [ index ] ; if ( ! elem . style ) continue ; if ( ! show || elem . style . display === "none" || elem . style . display === "" ) elem . style . display = show ? values [ index ] || "" : "none" } return elements } jQuery . fn . extend ( { css : function ( name , value ) { return jQuery . access ( this , function ( elem , name , value ) { var len , styles , map = { } , i = 0 ; if ( jQuery . isArray ( name ) ) { styles = getStyles ( elem ) ;
len = name . length ; for ( ; i < len ; i ++ ) map [ name [ i ] ] = jQuery . css ( elem , name [ i ] , false , styles ) ; return map } return value !== undefined ? jQuery . style ( elem , name , value ) : jQuery . css ( elem , name ) } , name , value , arguments . length > 1 ) } , show : function ( ) { return showHide ( this , true ) } , hide : function ( ) { return showHide ( this ) } , toggle : function ( state ) { var bool = typeof state === "boolean" ; return this . each ( function ( ) { if ( bool ? state : isHidden ( this ) ) jQuery ( this ) . show ( ) ; else jQuery ( this ) . hide ( ) } ) } } ) ; jQuery . extend ( { cssHooks : { opacity : { get : function ( elem ,
computed ) { if ( computed ) { var ret = curCSS ( elem , "opacity" ) ; return ret === "" ? "1" : ret } } } } , cssNumber : { "columnCount" : true , "fillOpacity" : true , "fontWeight" : true , "lineHeight" : true , "opacity" : true , "orphans" : true , "widows" : true , "zIndex" : true , "zoom" : true } , cssProps : { "float" : jQuery . support . cssFloat ? "cssFloat" : "styleFloat" } , style : function ( elem , name , value , extra ) { if ( ! elem || elem . nodeType === 3 || elem . nodeType === 8 || ! elem . style ) return ; var ret , type , hooks , origName = jQuery . camelCase ( name ) , style = elem . style ; name = jQuery . cssProps [ origName ] ||
( jQuery . cssProps [ origName ] = vendorPropName ( style , origName ) ) ; hooks = jQuery . cssHooks [ name ] || jQuery . cssHooks [ origName ] ; if ( value !== undefined ) { type = typeof value ; if ( type === "string" && ( ret = rrelNum . exec ( value ) ) ) { value = ( ret [ 1 ] + 1 ) * ret [ 2 ] + parseFloat ( jQuery . css ( elem , name ) ) ; type = "number" } if ( value == null || type === "number" && isNaN ( value ) ) return ; if ( type === "number" && ! jQuery . cssNumber [ origName ] ) value += "px" ; if ( ! jQuery . support . clearCloneStyle && value === "" && name . indexOf ( "background" ) === 0 ) style [ name ] = "inherit" ; if ( ! hooks || ! ( "set" in
hooks ) || ( value = hooks . set ( elem , value , extra ) ) !== undefined ) try { style [ name ] = value } catch ( e ) { } } else { if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , false , extra ) ) !== undefined ) return ret ; return style [ name ] } } , css : function ( elem , name , extra , styles ) { var num , val , hooks , origName = jQuery . camelCase ( name ) ; name = jQuery . cssProps [ origName ] || ( jQuery . cssProps [ origName ] = vendorPropName ( elem . style , origName ) ) ; hooks = jQuery . cssHooks [ name ] || jQuery . cssHooks [ origName ] ; if ( hooks && "get" in hooks ) val = hooks . get ( elem , true , extra ) ; if ( val === undefined ) val =
curCSS ( elem , name , styles ) ; if ( val === "normal" && name in cssNormalTransform ) val = cssNormalTransform [ name ] ; if ( extra === "" || extra ) { num = parseFloat ( val ) ; return extra === true || jQuery . isNumeric ( num ) ? num || 0 : val } return val } , swap : function ( elem , options , callback , args ) { var ret , name , old = { } ; for ( name in options ) { old [ name ] = elem . style [ name ] ; elem . style [ name ] = options [ name ] } ret = callback . apply ( elem , args || [ ] ) ; for ( name in options ) elem . style [ name ] = old [ name ] ; return ret } } ) ; if ( window . getComputedStyle ) { getStyles = function ( elem ) { return window . getComputedStyle ( elem ,
null ) } ; curCSS = function ( elem , name , _computed ) { var width , minWidth , maxWidth , computed = _computed || getStyles ( elem ) , ret = computed ? computed . getPropertyValue ( name ) || computed [ name ] : undefined , style = elem . style ; if ( computed ) { if ( ret === "" && ! jQuery . contains ( elem . ownerDocument , elem ) ) ret = jQuery . style ( elem , name ) ; if ( rnumnonpx . test ( ret ) && rmargin . test ( name ) ) { width = style . width ; minWidth = style . minWidth ; maxWidth = style . maxWidth ; style . minWidth = style . maxWidth = style . width = ret ; ret = computed . width ; style . width = width ; style . minWidth = minWidth ;
style . maxWidth = maxWidth } } return ret } } else if ( document . documentElement . currentStyle ) { getStyles = function ( elem ) { return elem . currentStyle } ; curCSS = function ( elem , name , _computed ) { var left , rs , rsLeft , computed = _computed || getStyles ( elem ) , ret = computed ? computed [ name ] : undefined , style = elem . style ; if ( ret == null && style && style [ name ] ) ret = style [ name ] ; if ( rnumnonpx . test ( ret ) && ! rposition . test ( name ) ) { left = style . left ; rs = elem . runtimeStyle ; rsLeft = rs && rs . left ; if ( rsLeft ) rs . left = elem . currentStyle . left ; style . left = name === "fontSize" ?
"1em" : ret ; ret = style . pixelLeft + "px" ; style . left = left ; if ( rsLeft ) rs . left = rsLeft } return ret === "" ? "auto" : ret } } function setPositiveNumber ( elem , value , subtract ) { var matches = rnumsplit . exec ( value ) ; return matches ? Math . max ( 0 , matches [ 1 ] - ( subtract || 0 ) ) + ( matches [ 2 ] || "px" ) : value } function augmentWidthOrHeight ( elem , name , extra , isBorderBox , styles ) { var i = extra === ( isBorderBox ? "border" : "content" ) ? 4 : name === "width" ? 1 : 0 , val = 0 ; for ( ; i < 4 ; i += 2 ) { if ( extra === "margin" ) val += jQuery . css ( elem , extra + cssExpand [ i ] , true , styles ) ; if ( isBorderBox ) { if ( extra ===
"content" ) val -= jQuery . css ( elem , "padding" + cssExpand [ i ] , true , styles ) ; if ( extra !== "margin" ) val -= jQuery . css ( elem , "border" + cssExpand [ i ] + "Width" , true , styles ) } else { val += jQuery . css ( elem , "padding" + cssExpand [ i ] , true , styles ) ; if ( extra !== "padding" ) val += jQuery . css ( elem , "border" + cssExpand [ i ] + "Width" , true , styles ) } } return val } function getWidthOrHeight ( elem , name , extra ) { var valueIsBorderBox = true , val = name === "width" ? elem . offsetWidth : elem . offsetHeight , styles = getStyles ( elem ) , isBorderBox = jQuery . support . boxSizing && jQuery . css ( elem ,
"boxSizing" , false , styles ) === "border-box" ; if ( val <= 0 || val == null ) { val = curCSS ( elem , name , styles ) ; if ( val < 0 || val == null ) val = elem . style [ name ] ; if ( rnumnonpx . test ( val ) ) return val ; valueIsBorderBox = isBorderBox && ( jQuery . support . boxSizingReliable || val === elem . style [ name ] ) ; val = parseFloat ( val ) || 0 } return val + augmentWidthOrHeight ( elem , name , extra || ( isBorderBox ? "border" : "content" ) , valueIsBorderBox , styles ) + "px" } function css _defaultDisplay ( nodeName ) { var doc = document , display = elemdisplay [ nodeName ] ; if ( ! display ) { display = actualDisplay ( nodeName ,
doc ) ; if ( display === "none" || ! display ) { iframe = ( iframe || jQuery ( "<iframe frameborder='0' width='0' height='0'/>" ) . css ( "cssText" , "display:block !important" ) ) . appendTo ( doc . documentElement ) ; doc = ( iframe [ 0 ] . contentWindow || iframe [ 0 ] . contentDocument ) . document ; doc . write ( "<!doctype html><html><body>" ) ; doc . close ( ) ; display = actualDisplay ( nodeName , doc ) ; iframe . detach ( ) } elemdisplay [ nodeName ] = display } return display } function actualDisplay ( name , doc ) { var elem = jQuery ( doc . createElement ( name ) ) . appendTo ( doc . body ) , display = jQuery . css ( elem [ 0 ] ,
"display" ) ; elem . remove ( ) ; return display } jQuery . each ( [ "height" , "width" ] , function ( i , name ) { jQuery . cssHooks [ name ] = { get : function ( elem , computed , extra ) { if ( computed ) return elem . offsetWidth === 0 && rdisplayswap . test ( jQuery . css ( elem , "display" ) ) ? jQuery . swap ( elem , cssShow , function ( ) { return getWidthOrHeight ( elem , name , extra ) } ) : getWidthOrHeight ( elem , name , extra ) } , set : function ( elem , value , extra ) { var styles = extra && getStyles ( elem ) ; return setPositiveNumber ( elem , value , extra ? augmentWidthOrHeight ( elem , name , extra , jQuery . support . boxSizing &&
jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" , styles ) : 0 ) } } } ) ; if ( ! jQuery . support . opacity ) jQuery . cssHooks . opacity = { get : function ( elem , computed ) { return ropacity . test ( ( computed && elem . currentStyle ? elem . currentStyle . filter : elem . style . filter ) || "" ) ? 0.01 * parseFloat ( RegExp . $1 ) + "" : computed ? "1" : "" } , set : function ( elem , value ) { var style = elem . style , currentStyle = elem . currentStyle , opacity = jQuery . isNumeric ( value ) ? "alpha(opacity=" + value * 100 + ")" : "" , filter = currentStyle && currentStyle . filter || style . filter || "" ; style . zoom =
1 ; if ( ( value >= 1 || value === "" ) && jQuery . trim ( filter . replace ( ralpha , "" ) ) === "" && style . removeAttribute ) { style . removeAttribute ( "filter" ) ; if ( value === "" || currentStyle && ! currentStyle . filter ) return } style . filter = ralpha . test ( filter ) ? filter . replace ( ralpha , opacity ) : filter + " " + opacity } } ; jQuery ( function ( ) { if ( ! jQuery . support . reliableMarginRight ) jQuery . cssHooks . marginRight = { get : function ( elem , computed ) { if ( computed ) return jQuery . swap ( elem , { "display" : "inline-block" } , curCSS , [ elem , "marginRight" ] ) } } ; if ( ! jQuery . support . pixelPosition &&
jQuery . fn . position ) jQuery . each ( [ "top" , "left" ] , function ( i , prop ) { jQuery . cssHooks [ prop ] = { get : function ( elem , computed ) { if ( computed ) { computed = curCSS ( elem , prop ) ; return rnumnonpx . test ( computed ) ? jQuery ( elem ) . position ( ) [ prop ] + "px" : computed } } } } ) } ) ; if ( jQuery . expr && jQuery . expr . filters ) { jQuery . expr . filters . hidden = function ( elem ) { return elem . offsetWidth <= 0 && elem . offsetHeight <= 0 || ! jQuery . support . reliableHiddenOffsets && ( elem . style && elem . style . display || jQuery . css ( elem , "display" ) ) === "none" } ; jQuery . expr . filters . visible =
function ( elem ) { return ! jQuery . expr . filters . hidden ( elem ) } } jQuery . each ( { margin : "" , padding : "" , border : "Width" } , function ( prefix , suffix ) { jQuery . cssHooks [ prefix + suffix ] = { expand : function ( value ) { var i = 0 , expanded = { } , parts = typeof value === "string" ? value . split ( " " ) : [ value ] ; for ( ; i < 4 ; i ++ ) expanded [ prefix + cssExpand [ i ] + suffix ] = parts [ i ] || parts [ i - 2 ] || parts [ 0 ] ; return expanded } } ; if ( ! rmargin . test ( prefix ) ) jQuery . cssHooks [ prefix + suffix ] . set = setPositiveNumber } ) ; var r20 = /%20/g , rbracket = /\[\]$/ , rCRLF = /\r?\n/g , rsubmitterTypes =
/^(?:submit|button|image|reset|file)$/i , rsubmittable = /^(?:input|select|textarea|keygen)/i ; jQuery . fn . extend ( { serialize : function ( ) { return jQuery . param ( this . serializeArray ( ) ) } , serializeArray : function ( ) { return this . map ( function ( ) { var elements = jQuery . prop ( this , "elements" ) ; return elements ? jQuery . makeArray ( elements ) : this } ) . filter ( function ( ) { var type = this . type ; return this . name && ! jQuery ( this ) . is ( ":disabled" ) && rsubmittable . test ( this . nodeName ) && ! rsubmitterTypes . test ( type ) && ( this . checked || ! manipulation _rcheckableType . test ( type ) ) } ) . map ( function ( i ,
elem ) { var val = jQuery ( this ) . val ( ) ; return val == null ? null : jQuery . isArray ( val ) ? jQuery . map ( val , function ( val ) { return { name : elem . name , value : val . replace ( rCRLF , "\r\n" ) } } ) : { name : elem . name , value : val . replace ( rCRLF , "\r\n" ) } } ) . get ( ) } } ) ; jQuery . param = function ( a , traditional ) { var prefix , s = [ ] , add = function ( key , value ) { value = jQuery . isFunction ( value ) ? value ( ) : value == null ? "" : value ; s [ s . length ] = encodeURIComponent ( key ) + "=" + encodeURIComponent ( value ) } ; if ( traditional === undefined ) traditional = jQuery . ajaxSettings && jQuery . ajaxSettings . traditional ;
if ( jQuery . isArray ( a ) || a . jquery && ! jQuery . isPlainObject ( a ) ) jQuery . each ( a , function ( ) { add ( this . name , this . value ) } ) ; else for ( prefix in a ) buildParams ( prefix , a [ prefix ] , traditional , add ) ; return s . join ( "&" ) . replace ( r20 , "+" ) } ; function buildParams ( prefix , obj , traditional , add ) { var name ; if ( jQuery . isArray ( obj ) ) jQuery . each ( obj , function ( i , v ) { if ( traditional || rbracket . test ( prefix ) ) add ( prefix , v ) ; else buildParams ( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]" , v , traditional , add ) } ) ; else if ( ! traditional && jQuery . type ( obj ) === "object" ) for ( name in obj ) buildParams ( prefix +
"[" + name + "]" , obj [ name ] , traditional , add ) ; else add ( prefix , obj ) } jQuery . each ( ( "blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu" ) . split ( " " ) , function ( i , name ) { jQuery . fn [ name ] = function ( data , fn ) { return arguments . length > 0 ? this . on ( name , null , data , fn ) : this . trigger ( name ) } } ) ; jQuery . fn . hover = function ( fnOver , fnOut ) { return this . mouseenter ( fnOver ) . mouseleave ( fnOut ||
fnOver ) } ; var ajaxLocParts , ajaxLocation , ajax _nonce = jQuery . now ( ) , ajax _rquery = /\?/ , rhash = /#.*$/ , rts = /([?&])_=[^&]*/ , rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg , rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ , rnoContent = /^(?:GET|HEAD)$/ , rprotocol = /^\/\// , rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/ , _load = jQuery . fn . load , prefilters = { } , transports = { } , allTypes = "*/" . concat ( "*" ) ; try { ajaxLocation = location . href } catch ( e ) { ajaxLocation = document . createElement ( "a" ) ; ajaxLocation . href = "" ;
ajaxLocation = ajaxLocation . href } ajaxLocParts = rurl . exec ( ajaxLocation . toLowerCase ( ) ) || [ ] ; function addToPrefiltersOrTransports ( structure ) { return function ( dataTypeExpression , func ) { if ( typeof dataTypeExpression !== "string" ) { func = dataTypeExpression ; dataTypeExpression = "*" } var dataType , i = 0 , dataTypes = dataTypeExpression . toLowerCase ( ) . match ( core _rnotwhite ) || [ ] ; if ( jQuery . isFunction ( func ) ) while ( dataType = dataTypes [ i ++ ] ) if ( dataType [ 0 ] === "+" ) { dataType = dataType . slice ( 1 ) || "*" ; ( structure [ dataType ] = structure [ dataType ] ||
[ ] ) . unshift ( func ) } else ( structure [ dataType ] = structure [ dataType ] || [ ] ) . push ( func ) } } function inspectPrefiltersOrTransports ( structure , options , originalOptions , jqXHR ) { var inspected = { } , seekingTransport = structure === transports ; function inspect ( dataType ) { var selected ; inspected [ dataType ] = true ; jQuery . each ( structure [ dataType ] || [ ] , function ( _ , prefilterOrFactory ) { var dataTypeOrTransport = prefilterOrFactory ( options , originalOptions , jqXHR ) ; if ( typeof dataTypeOrTransport === "string" && ! seekingTransport && ! inspected [ dataTypeOrTransport ] ) { options . dataTypes . unshift ( dataTypeOrTransport ) ;
inspect ( dataTypeOrTransport ) ; return false } else if ( seekingTransport ) return ! ( selected = dataTypeOrTransport ) } ) ; return selected } return inspect ( options . dataTypes [ 0 ] ) || ! inspected [ "*" ] && inspect ( "*" ) } function ajaxExtend ( target , src ) { var deep , key , flatOptions = jQuery . ajaxSettings . flatOptions || { } ; for ( key in src ) if ( src [ key ] !== undefined ) ( flatOptions [ key ] ? target : deep || ( deep = { } ) ) [ key ] = src [ key ] ; if ( deep ) jQuery . extend ( true , target , deep ) ; return target } jQuery . fn . load = function ( url , params , callback ) { if ( typeof url !== "string" &&
_load ) return _load . apply ( this , arguments ) ; var selector , response , type , self = this , off = url . indexOf ( " " ) ; if ( off >= 0 ) { selector = url . slice ( off , url . length ) ; url = url . slice ( 0 , off ) } if ( jQuery . isFunction ( params ) ) { callback = params ; params = undefined } else if ( params && typeof params === "object" ) type = "POST" ; if ( self . length > 0 ) jQuery . ajax ( { url : url , type : type , dataType : "html" , data : params } ) . done ( function ( responseText ) { response = arguments ; self . html ( selector ? jQuery ( "<div>" ) . append ( jQuery . parseHTML ( responseText ) ) . find ( selector ) : responseText ) } ) . complete ( callback &&
function ( jqXHR , status ) { self . each ( callback , response || [ jqXHR . responseText , status , jqXHR ] ) } ) ; return this } ; jQuery . each ( [ "ajaxStart" , "ajaxStop" , "ajaxComplete" , "ajaxError" , "ajaxSuccess" , "ajaxSend" ] , function ( i , type ) { jQuery . fn [ type ] = function ( fn ) { return this . on ( type , fn ) } } ) ; jQuery . each ( [ "get" , "post" ] , function ( i , method ) { jQuery [ method ] = function ( url , data , callback , type ) { if ( jQuery . isFunction ( data ) ) { type = type || callback ; callback = data ; data = undefined } return jQuery . ajax ( { url : url , type : method , dataType : type , data : data , success : callback } ) } } ) ;
jQuery . extend ( { active : 0 , lastModified : { } , etag : { } , ajaxSettings : { url : ajaxLocation , type : "GET" , isLocal : rlocalProtocol . test ( ajaxLocParts [ 1 ] ) , global : true , processData : true , async : true , contentType : "application/x-www-form-urlencoded; charset=UTF-8" , accepts : { "*" : allTypes , text : "text/plain" , html : "text/html" , xml : "application/xml, text/xml" , json : "application/json, text/javascript" } , contents : { xml : /xml/ , html : /html/ , json : /json/ } , responseFields : { xml : "responseXML" , text : "responseText" } , converters : { "* text" : window . String ,
"text html" : true , "text json" : jQuery . parseJSON , "text xml" : jQuery . parseXML } , flatOptions : { url : true , context : true } } , ajaxSetup : function ( target , settings ) { return settings ? ajaxExtend ( ajaxExtend ( target , jQuery . ajaxSettings ) , settings ) : ajaxExtend ( jQuery . ajaxSettings , target ) } , ajaxPrefilter : addToPrefiltersOrTransports ( prefilters ) , ajaxTransport : addToPrefiltersOrTransports ( transports ) , ajax : function ( url , options ) { if ( typeof url === "object" ) { options = url ; url = undefined } options = options || { } ; var parts , i , cacheURL , responseHeadersString ,
timeoutTimer , fireGlobals , transport , responseHeaders , s = jQuery . ajaxSetup ( { } , options ) , callbackContext = s . context || s , globalEventContext = s . context && ( callbackContext . nodeType || callbackContext . jquery ) ? jQuery ( callbackContext ) : jQuery . event , deferred = jQuery . Deferred ( ) , completeDeferred = jQuery . Callbacks ( "once memory" ) , statusCode = s . statusCode || { } , requestHeaders = { } , requestHeadersNames = { } , state = 0 , strAbort = "canceled" , jqXHR = { readyState : 0 , getResponseHeader : function ( key ) { var match ; if ( state === 2 ) { if ( ! responseHeaders ) { responseHeaders =
{ } ; while ( match = rheaders . exec ( responseHeadersString ) ) responseHeaders [ match [ 1 ] . toLowerCase ( ) ] = match [ 2 ] } match = responseHeaders [ key . toLowerCase ( ) ] } return match == null ? null : match } , getAllResponseHeaders : function ( ) { return state === 2 ? responseHeadersString : null } , setRequestHeader : function ( name , value ) { var lname = name . toLowerCase ( ) ; if ( ! state ) { name = requestHeadersNames [ lname ] = requestHeadersNames [ lname ] || name ; requestHeaders [ name ] = value } return this } , overrideMimeType : function ( type ) { if ( ! state ) s . mimeType = type ; return this } ,
statusCode : function ( map ) { var code ; if ( map ) if ( state < 2 ) for ( code in map ) statusCode [ code ] = [ statusCode [ code ] , map [ code ] ] ; else jqXHR . always ( map [ jqXHR . status ] ) ; return this } , abort : function ( statusText ) { var finalText = statusText || strAbort ; if ( transport ) transport . abort ( finalText ) ; done ( 0 , finalText ) ; return this } } ; deferred . promise ( jqXHR ) . complete = completeDeferred . add ; jqXHR . success = jqXHR . done ; jqXHR . error = jqXHR . fail ; s . url = ( ( url || s . url || ajaxLocation ) + "" ) . replace ( rhash , "" ) . replace ( rprotocol , ajaxLocParts [ 1 ] + "//" ) ; s . type =
options . method || options . type || s . method || s . type ; s . dataTypes = jQuery . trim ( s . dataType || "*" ) . toLowerCase ( ) . match ( core _rnotwhite ) || [ "" ] ; if ( s . crossDomain == null ) { parts = rurl . exec ( s . url . toLowerCase ( ) ) ; s . crossDomain = ! ! ( parts && ( parts [ 1 ] !== ajaxLocParts [ 1 ] || parts [ 2 ] !== ajaxLocParts [ 2 ] || ( parts [ 3 ] || ( parts [ 1 ] === "http:" ? 80 : 443 ) ) != ( ajaxLocParts [ 3 ] || ( ajaxLocParts [ 1 ] === "http:" ? 80 : 443 ) ) ) ) } if ( s . data && s . processData && typeof s . data !== "string" ) s . data = jQuery . param ( s . data , s . traditional ) ; inspectPrefiltersOrTransports ( prefilters ,
s , options , jqXHR ) ; if ( state === 2 ) return jqXHR ; fireGlobals = s . global ; if ( fireGlobals && jQuery . active ++ === 0 ) jQuery . event . trigger ( "ajaxStart" ) ; s . type = s . type . toUpperCase ( ) ; s . hasContent = ! rnoContent . test ( s . type ) ; cacheURL = s . url ; if ( ! s . hasContent ) { if ( s . data ) { cacheURL = s . url += ( ajax _rquery . test ( cacheURL ) ? "&" : "?" ) + s . data ; delete s . data } if ( s . cache === false ) s . url = rts . test ( cacheURL ) ? cacheURL . replace ( rts , "$1_=" + ajax _nonce ++ ) : cacheURL + ( ajax _rquery . test ( cacheURL ) ? "&" : "?" ) + "_=" + ajax _nonce ++ } if ( s . ifModified ) { if ( jQuery . lastModified [ cacheURL ] ) jqXHR . setRequestHeader ( "If-Modified-Since" ,
jQuery . lastModified [ cacheURL ] ) ; if ( jQuery . etag [ cacheURL ] ) jqXHR . setRequestHeader ( "If-None-Match" , jQuery . etag [ cacheURL ] ) } if ( s . data && s . hasContent && s . contentType !== false || options . contentType ) jqXHR . setRequestHeader ( "Content-Type" , s . contentType ) ; jqXHR . setRequestHeader ( "Accept" , s . dataTypes [ 0 ] && s . accepts [ s . dataTypes [ 0 ] ] ? s . accepts [ s . dataTypes [ 0 ] ] + ( s . dataTypes [ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : s . accepts [ "*" ] ) ; for ( i in s . headers ) jqXHR . setRequestHeader ( i , s . headers [ i ] ) ; if ( s . beforeSend && ( s . beforeSend . call ( callbackContext ,
jqXHR , s ) === false || state === 2 ) ) return jqXHR . abort ( ) ; strAbort = "abort" ; for ( i in { success : 1 , error : 1 , complete : 1 } ) jqXHR [ i ] ( s [ i ] ) ; transport = inspectPrefiltersOrTransports ( transports , s , options , jqXHR ) ; if ( ! transport ) done ( - 1 , "No Transport" ) ; else { jqXHR . readyState = 1 ; if ( fireGlobals ) globalEventContext . trigger ( "ajaxSend" , [ jqXHR , s ] ) ; if ( s . async && s . timeout > 0 ) timeoutTimer = setTimeout ( function ( ) { jqXHR . abort ( "timeout" ) } , s . timeout ) ; try { state = 1 ; transport . send ( requestHeaders , done ) } catch ( e ) { if ( state < 2 ) done ( - 1 , e ) ; else throw e ;
} } function done ( status , nativeStatusText , responses , headers ) { var isSuccess , success , error , response , modified , statusText = nativeStatusText ; if ( state === 2 ) return ; state = 2 ; if ( timeoutTimer ) clearTimeout ( timeoutTimer ) ; transport = undefined ; responseHeadersString = headers || "" ; jqXHR . readyState = status > 0 ? 4 : 0 ; if ( responses ) response = ajaxHandleResponses ( s , jqXHR , responses ) ; if ( status >= 200 && status < 300 || status === 304 ) { if ( s . ifModified ) { modified = jqXHR . getResponseHeader ( "Last-Modified" ) ; if ( modified ) jQuery . lastModified [ cacheURL ] = modified ;
modified = jqXHR . getResponseHeader ( "etag" ) ; if ( modified ) jQuery . etag [ cacheURL ] = modified } if ( status === 204 ) { isSuccess = true ; statusText = "nocontent" } else if ( status === 304 ) { isSuccess = true ; statusText = "notmodified" } else { isSuccess = ajaxConvert ( s , response ) ; statusText = isSuccess . state ; success = isSuccess . data ; error = isSuccess . error ; isSuccess = ! error } } else { error = statusText ; if ( status || ! statusText ) { statusText = "error" ; if ( status < 0 ) status = 0 } } jqXHR . status = status ; jqXHR . statusText = ( nativeStatusText || statusText ) + "" ; if ( isSuccess ) deferred . resolveWith ( callbackContext ,
[ success , statusText , jqXHR ] ) ; else deferred . rejectWith ( callbackContext , [ jqXHR , statusText , error ] ) ; jqXHR . statusCode ( statusCode ) ; statusCode = undefined ; if ( fireGlobals ) globalEventContext . trigger ( isSuccess ? "ajaxSuccess" : "ajaxError" , [ jqXHR , s , isSuccess ? success : error ] ) ; completeDeferred . fireWith ( callbackContext , [ jqXHR , statusText ] ) ; if ( fireGlobals ) { globalEventContext . trigger ( "ajaxComplete" , [ jqXHR , s ] ) ; if ( ! -- jQuery . active ) jQuery . event . trigger ( "ajaxStop" ) } } return jqXHR } , getScript : function ( url , callback ) { return jQuery . get ( url ,
undefined , callback , "script" ) } , getJSON : function ( url , data , callback ) { return jQuery . get ( url , data , callback , "json" ) } } ) ; function ajaxHandleResponses ( s , jqXHR , responses ) { var firstDataType , ct , finalDataType , type , contents = s . contents , dataTypes = s . dataTypes , responseFields = s . responseFields ; for ( type in responseFields ) if ( type in responses ) jqXHR [ responseFields [ type ] ] = responses [ type ] ; while ( dataTypes [ 0 ] === "*" ) { dataTypes . shift ( ) ; if ( ct === undefined ) ct = s . mimeType || jqXHR . getResponseHeader ( "Content-Type" ) } if ( ct ) for ( type in contents ) if ( contents [ type ] &&
contents [ type ] . test ( ct ) ) { dataTypes . unshift ( type ) ; break } if ( dataTypes [ 0 ] in responses ) finalDataType = dataTypes [ 0 ] ; else { for ( type in responses ) { if ( ! dataTypes [ 0 ] || s . converters [ type + " " + dataTypes [ 0 ] ] ) { finalDataType = type ; break } if ( ! firstDataType ) firstDataType = type } finalDataType = finalDataType || firstDataType } if ( finalDataType ) { if ( finalDataType !== dataTypes [ 0 ] ) dataTypes . unshift ( finalDataType ) ; return responses [ finalDataType ] } } function ajaxConvert ( s , response ) { var conv2 , current , conv , tmp , converters = { } , i = 0 , dataTypes =
s . dataTypes . slice ( ) , prev = dataTypes [ 0 ] ; if ( s . dataFilter ) response = s . dataFilter ( response , s . dataType ) ; if ( dataTypes [ 1 ] ) for ( conv in s . converters ) converters [ conv . toLowerCase ( ) ] = s . converters [ conv ] ; for ( ; current = dataTypes [ ++ i ] ; ) if ( current !== "*" ) { if ( prev !== "*" && prev !== current ) { conv = converters [ prev + " " + current ] || converters [ "* " + current ] ; if ( ! conv ) for ( conv2 in converters ) { tmp = conv2 . split ( " " ) ; if ( tmp [ 1 ] === current ) { conv = converters [ prev + " " + tmp [ 0 ] ] || converters [ "* " + tmp [ 0 ] ] ; if ( conv ) { if ( conv === true ) conv = converters [ conv2 ] ;
else if ( converters [ conv2 ] !== true ) { current = tmp [ 0 ] ; dataTypes . splice ( i -- , 0 , current ) } break } } } if ( conv !== true ) if ( conv && s [ "throws" ] ) response = conv ( response ) ; else try { response = conv ( response ) } catch ( e ) { return { state : "parsererror" , error : conv ? e : "No conversion from " + prev + " to " + current } } } prev = current } return { state : "success" , data : response } } jQuery . ajaxSetup ( { accepts : { script : "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" } , contents : { script : /(?:java|ecma)script/ } , converters : { "text script" : function ( text ) { jQuery . globalEval ( text ) ;
return text } } } ) ; jQuery . ajaxPrefilter ( "script" , function ( s ) { if ( s . cache === undefined ) s . cache = false ; if ( s . crossDomain ) { s . type = "GET" ; s . global = false } } ) ; jQuery . ajaxTransport ( "script" , function ( s ) { if ( s . crossDomain ) { var script , head = document . head || jQuery ( "head" ) [ 0 ] || document . documentElement ; return { send : function ( _ , callback ) { script = document . createElement ( "script" ) ; script . async = true ; if ( s . scriptCharset ) script . charset = s . scriptCharset ; script . src = s . url ; script . onload = script . onreadystatechange = function ( _ , isAbort ) { if ( isAbort ||
! script . readyState || /loaded|complete/ . test ( script . readyState ) ) { script . onload = script . onreadystatechange = null ; if ( script . parentNode ) script . parentNode . removeChild ( script ) ; script = null ; if ( ! isAbort ) callback ( 200 , "success" ) } } ; head . insertBefore ( script , head . firstChild ) } , abort : function ( ) { if ( script ) script . onload ( undefined , true ) } } } } ) ; var oldCallbacks = [ ] , rjsonp = /(=)\?(?=&|$)|\?\?/ ; jQuery . ajaxSetup ( { jsonp : "callback" , jsonpCallback : function ( ) { var callback = oldCallbacks . pop ( ) || jQuery . expando + "_" + ajax _nonce ++ ; this [ callback ] =
true ; return callback } } ) ; jQuery . ajaxPrefilter ( "json jsonp" , function ( s , originalSettings , jqXHR ) { var callbackName , overwritten , responseContainer , jsonProp = s . jsonp !== false && ( rjsonp . test ( s . url ) ? "url" : typeof s . data === "string" && ! ( s . contentType || "" ) . indexOf ( "application/x-www-form-urlencoded" ) && rjsonp . test ( s . data ) && "data" ) ; if ( jsonProp || s . dataTypes [ 0 ] === "jsonp" ) { callbackName = s . jsonpCallback = jQuery . isFunction ( s . jsonpCallback ) ? s . jsonpCallback ( ) : s . jsonpCallback ; if ( jsonProp ) s [ jsonProp ] = s [ jsonProp ] . replace ( rjsonp ,
"$1" + callbackName ) ; else if ( s . jsonp !== false ) s . url += ( ajax _rquery . test ( s . url ) ? "&" : "?" ) + s . jsonp + "=" + callbackName ; s . converters [ "script json" ] = function ( ) { if ( ! responseContainer ) jQuery . error ( callbackName + " was not called" ) ; return responseContainer [ 0 ] } ; s . dataTypes [ 0 ] = "json" ; overwritten = window [ callbackName ] ; window [ callbackName ] = function ( ) { responseContainer = arguments } ; jqXHR . always ( function ( ) { window [ callbackName ] = overwritten ; if ( s [ callbackName ] ) { s . jsonpCallback = originalSettings . jsonpCallback ; oldCallbacks . push ( callbackName ) } if ( responseContainer &&
jQuery . isFunction ( overwritten ) ) overwritten ( responseContainer [ 0 ] ) ; responseContainer = overwritten = undefined } ) ; return "script" } } ) ; var xhrCallbacks , xhrSupported , xhrId = 0 , xhrOnUnloadAbort = window . ActiveXObject && function ( ) { var key ; for ( key in xhrCallbacks ) xhrCallbacks [ key ] ( undefined , true ) } ; function createStandardXHR ( ) { try { return new window . XMLHttpRequest } catch ( e ) { } } function createActiveXHR ( ) { try { return new window . ActiveXObject ( "Microsoft.XMLHTTP" ) } catch ( e ) { } } jQuery . ajaxSettings . xhr = window . ActiveXObject ? function ( ) { return ! this . isLocal &&
createStandardXHR ( ) || createActiveXHR ( ) } : createStandardXHR ; xhrSupported = jQuery . ajaxSettings . xhr ( ) ; jQuery . support . cors = ! ! xhrSupported && "withCredentials" in xhrSupported ; xhrSupported = jQuery . support . ajax = ! ! xhrSupported ; if ( xhrSupported ) jQuery . ajaxTransport ( function ( s ) { if ( ! s . crossDomain || jQuery . support . cors ) { var callback ; return { send : function ( headers , complete ) { var handle , i , xhr = s . xhr ( ) ; if ( s . username ) xhr . open ( s . type , s . url , s . async , s . username , s . password ) ; else xhr . open ( s . type , s . url , s . async ) ; if ( s . xhrFields ) for ( i in s . xhrFields ) xhr [ i ] =
s . xhrFields [ i ] ; if ( s . mimeType && xhr . overrideMimeType ) xhr . overrideMimeType ( s . mimeType ) ; if ( ! s . crossDomain && ! headers [ "X-Requested-With" ] ) headers [ "X-Requested-With" ] = "XMLHttpRequest" ; try { for ( i in headers ) xhr . setRequestHeader ( i , headers [ i ] ) } catch ( err ) { } xhr . send ( s . hasContent && s . data || null ) ; callback = function ( _ , isAbort ) { var status , responseHeaders , statusText , responses ; try { if ( callback && ( isAbort || xhr . readyState === 4 ) ) { callback = undefined ; if ( handle ) { xhr . onreadystatechange = jQuery . noop ; if ( xhrOnUnloadAbort ) delete xhrCallbacks [ handle ] } if ( isAbort ) { if ( xhr . readyState !==
4 ) xhr . abort ( ) } else { responses = { } ; status = xhr . status ; responseHeaders = xhr . getAllResponseHeaders ( ) ; if ( typeof xhr . responseText === "string" ) responses . text = xhr . responseText ; try { statusText = xhr . statusText } catch ( e ) { statusText = "" } if ( ! status && s . isLocal && ! s . crossDomain ) status = responses . text ? 200 : 404 ; else if ( status === 1223 ) status = 204 } } } catch ( firefoxAccessException ) { if ( ! isAbort ) complete ( - 1 , firefoxAccessException ) } if ( responses ) complete ( status , statusText , responses , responseHeaders ) } ; if ( ! s . async ) callback ( ) ; else if ( xhr . readyState ===
4 ) setTimeout ( callback ) ; else { handle = ++ xhrId ; if ( xhrOnUnloadAbort ) { if ( ! xhrCallbacks ) { xhrCallbacks = { } ; jQuery ( window ) . unload ( xhrOnUnloadAbort ) } xhrCallbacks [ handle ] = callback } xhr . onreadystatechange = callback } } , abort : function ( ) { if ( callback ) callback ( undefined , true ) } } } } ) ; var fxNow , timerId , rfxtypes = /^(?:toggle|show|hide)$/ , rfxnum = new RegExp ( "^(?:([+-])=|)(" + core _pnum + ")([a-z%]*)$" , "i" ) , rrun = /queueHooks$/ , animationPrefilters = [ defaultPrefilter ] , tweeners = { "*" : [ function ( prop , value ) { var end , unit , tween = this . createTween ( prop ,
value ) , parts = rfxnum . exec ( value ) , target = tween . cur ( ) , start = + target || 0 , scale = 1 , maxIterations = 20 ; if ( parts ) { end = + parts [ 2 ] ; unit = parts [ 3 ] || ( jQuery . cssNumber [ prop ] ? "" : "px" ) ; if ( unit !== "px" && start ) { start = jQuery . css ( tween . elem , prop , true ) || end || 1 ; do { scale = scale || ".5" ; start = start / scale ; jQuery . style ( tween . elem , prop , start + unit ) } while ( scale !== ( scale = tween . cur ( ) / target ) && scale !== 1 && -- maxIterations ) } tween . unit = unit ; tween . start = start ; tween . end = parts [ 1 ] ? start + ( parts [ 1 ] + 1 ) * end : end } return tween } ] } ; function createFxNow ( ) { setTimeout ( function ( ) { fxNow =
undefined } ) ; return fxNow = jQuery . now ( ) } function createTweens ( animation , props ) { jQuery . each ( props , function ( prop , value ) { var collection = ( tweeners [ prop ] || [ ] ) . concat ( tweeners [ "*" ] ) , index = 0 , length = collection . length ; for ( ; index < length ; index ++ ) if ( collection [ index ] . call ( animation , prop , value ) ) return } ) } function Animation ( elem , properties , options ) { var result , stopped , index = 0 , length = animationPrefilters . length , deferred = jQuery . Deferred ( ) . always ( function ( ) { delete tick . elem } ) , tick = function ( ) { if ( stopped ) return false ; var currentTime =
fxNow || createFxNow ( ) , remaining = Math . max ( 0 , animation . startTime + animation . duration - currentTime ) , temp = remaining / animation . duration || 0 , percent = 1 - temp , index = 0 , length = animation . tweens . length ; for ( ; index < length ; index ++ ) animation . tweens [ index ] . run ( percent ) ; deferred . notifyWith ( elem , [ animation , percent , remaining ] ) ; if ( percent < 1 && length ) return remaining ; else { deferred . resolveWith ( elem , [ animation ] ) ; return false } } , animation = deferred . promise ( { elem : elem , props : jQuery . extend ( { } , properties ) , opts : jQuery . extend ( true , { specialEasing : { } } ,
options ) , originalProperties : properties , originalOptions : options , startTime : fxNow || createFxNow ( ) , duration : options . duration , tweens : [ ] , createTween : function ( prop , end ) { var tween = jQuery . Tween ( elem , animation . opts , prop , end , animation . opts . specialEasing [ prop ] || animation . opts . easing ) ; animation . tweens . push ( tween ) ; return tween } , stop : function ( gotoEnd ) { var index = 0 , length = gotoEnd ? animation . tweens . length : 0 ; if ( stopped ) return this ; stopped = true ; for ( ; index < length ; index ++ ) animation . tweens [ index ] . run ( 1 ) ; if ( gotoEnd ) deferred . resolveWith ( elem ,
[ animation , gotoEnd ] ) ; else deferred . rejectWith ( elem , [ animation , gotoEnd ] ) ; return this } } ) , props = animation . props ; propFilter ( props , animation . opts . specialEasing ) ; for ( ; index < length ; index ++ ) { result = animationPrefilters [ index ] . call ( animation , elem , props , animation . opts ) ; if ( result ) return result } createTweens ( animation , props ) ; if ( jQuery . isFunction ( animation . opts . start ) ) animation . opts . start . call ( elem , animation ) ; jQuery . fx . timer ( jQuery . extend ( tick , { elem : elem , anim : animation , queue : animation . opts . queue } ) ) ; return animation . progress ( animation . opts . progress ) . done ( animation . opts . done ,
animation . opts . complete ) . fail ( animation . opts . fail ) . always ( animation . opts . always ) } function propFilter ( props , specialEasing ) { var value , name , index , easing , hooks ; for ( index in props ) { name = jQuery . camelCase ( index ) ; easing = specialEasing [ name ] ; value = props [ index ] ; if ( jQuery . isArray ( value ) ) { easing = value [ 1 ] ; value = props [ index ] = value [ 0 ] } if ( index !== name ) { props [ name ] = value ; delete props [ index ] } hooks = jQuery . cssHooks [ name ] ; if ( hooks && "expand" in hooks ) { value = hooks . expand ( value ) ; delete props [ name ] ; for ( index in value ) if ( ! ( index in
props ) ) { props [ index ] = value [ index ] ; specialEasing [ index ] = easing } } else specialEasing [ name ] = easing } } jQuery . Animation = jQuery . extend ( Animation , { tweener : function ( props , callback ) { if ( jQuery . isFunction ( props ) ) { callback = props ; props = [ "*" ] } else props = props . split ( " " ) ; var prop , index = 0 , length = props . length ; for ( ; index < length ; index ++ ) { prop = props [ index ] ; tweeners [ prop ] = tweeners [ prop ] || [ ] ; tweeners [ prop ] . unshift ( callback ) } } , prefilter : function ( callback , prepend ) { if ( prepend ) animationPrefilters . unshift ( callback ) ; else animationPrefilters . push ( callback ) } } ) ;
function defaultPrefilter ( elem , props , opts ) { var prop , index , length , value , dataShow , toggle , tween , hooks , oldfire , anim = this , style = elem . style , orig = { } , handled = [ ] , hidden = elem . nodeType && isHidden ( elem ) ; if ( ! opts . queue ) { hooks = jQuery . _queueHooks ( elem , "fx" ) ; if ( hooks . unqueued == null ) { hooks . unqueued = 0 ; oldfire = hooks . empty . fire ; hooks . empty . fire = function ( ) { if ( ! hooks . unqueued ) oldfire ( ) } } hooks . unqueued ++ ; anim . always ( function ( ) { anim . always ( function ( ) { hooks . unqueued -- ; if ( ! jQuery . queue ( elem , "fx" ) . length ) hooks . empty . fire ( ) } ) } ) } if ( elem . nodeType ===
1 && ( "height" in props || "width" in props ) ) { opts . overflow = [ style . overflow , style . overflowX , style . overflowY ] ; if ( jQuery . css ( elem , "display" ) === "inline" && jQuery . css ( elem , "float" ) === "none" ) if ( ! jQuery . support . inlineBlockNeedsLayout || css _defaultDisplay ( elem . nodeName ) === "inline" ) style . display = "inline-block" ; else style . zoom = 1 } if ( opts . overflow ) { style . overflow = "hidden" ; if ( ! jQuery . support . shrinkWrapBlocks ) anim . always ( function ( ) { style . overflow = opts . overflow [ 0 ] ; style . overflowX = opts . overflow [ 1 ] ; style . overflowY = opts . overflow [ 2 ] } ) } for ( index in props ) { value =
props [ index ] ; if ( rfxtypes . exec ( value ) ) { delete props [ index ] ; toggle = toggle || value === "toggle" ; if ( value === ( hidden ? "hide" : "show" ) ) continue ; handled . push ( index ) } } length = handled . length ; if ( length ) { dataShow = jQuery . _data ( elem , "fxshow" ) || jQuery . _data ( elem , "fxshow" , { } ) ; if ( "hidden" in dataShow ) hidden = dataShow . hidden ; if ( toggle ) dataShow . hidden = ! hidden ; if ( hidden ) jQuery ( elem ) . show ( ) ; else anim . done ( function ( ) { jQuery ( elem ) . hide ( ) } ) ; anim . done ( function ( ) { var prop ; jQuery . _removeData ( elem , "fxshow" ) ; for ( prop in orig ) jQuery . style ( elem ,
prop , orig [ prop ] ) } ) ; for ( index = 0 ; index < length ; index ++ ) { prop = handled [ index ] ; tween = anim . createTween ( prop , hidden ? dataShow [ prop ] : 0 ) ; orig [ prop ] = dataShow [ prop ] || jQuery . style ( elem , prop ) ; if ( ! ( prop in dataShow ) ) { dataShow [ prop ] = tween . start ; if ( hidden ) { tween . end = tween . start ; tween . start = prop === "width" || prop === "height" ? 1 : 0 } } } } } function Tween ( elem , options , prop , end , easing ) { return new Tween . prototype . init ( elem , options , prop , end , easing ) } jQuery . Tween = Tween ; Tween . prototype = { constructor : Tween , init : function ( elem , options ,
prop , end , easing , unit ) { this . elem = elem ; this . prop = prop ; this . easing = easing || "swing" ; this . options = options ; this . start = this . now = this . cur ( ) ; this . end = end ; this . unit = unit || ( jQuery . cssNumber [ prop ] ? "" : "px" ) } , cur : function ( ) { var hooks = Tween . propHooks [ this . prop ] ; return hooks && hooks . get ? hooks . get ( this ) : Tween . propHooks . _default . get ( this ) } , run : function ( percent ) { var eased , hooks = Tween . propHooks [ this . prop ] ; if ( this . options . duration ) this . pos = eased = jQuery . easing [ this . easing ] ( percent , this . options . duration * percent , 0 , 1 , this . options . duration ) ;
else this . pos = eased = percent ; this . now = ( this . end - this . start ) * eased + this . start ; if ( this . options . step ) this . options . step . call ( this . elem , this . now , this ) ; if ( hooks && hooks . set ) hooks . set ( this ) ; else Tween . propHooks . _default . set ( this ) ; return this } } ; Tween . prototype . init . prototype = Tween . prototype ; Tween . propHooks = { _default : { get : function ( tween ) { var result ; if ( tween . elem [ tween . prop ] != null && ( ! tween . elem . style || tween . elem . style [ tween . prop ] == null ) ) return tween . elem [ tween . prop ] ; result = jQuery . css ( tween . elem , tween . prop , "" ) ;
return ! result || result === "auto" ? 0 : result } , set : function ( tween ) { if ( jQuery . fx . step [ tween . prop ] ) jQuery . fx . step [ tween . prop ] ( tween ) ; else if ( tween . elem . style && ( tween . elem . style [ jQuery . cssProps [ tween . prop ] ] != null || jQuery . cssHooks [ tween . prop ] ) ) jQuery . style ( tween . elem , tween . prop , tween . now + tween . unit ) ; else tween . elem [ tween . prop ] = tween . now } } } ; Tween . propHooks . scrollTop = Tween . propHooks . scrollLeft = { set : function ( tween ) { if ( tween . elem . nodeType && tween . elem . parentNode ) tween . elem [ tween . prop ] = tween . now } } ; jQuery . each ( [ "toggle" ,
"show" , "hide" ] , function ( i , name ) { var cssFn = jQuery . fn [ name ] ; jQuery . fn [ name ] = function ( speed , easing , callback ) { return speed == null || typeof speed === "boolean" ? cssFn . apply ( this , arguments ) : this . animate ( genFx ( name , true ) , speed , easing , callback ) } } ) ; jQuery . fn . extend ( { fadeTo : function ( speed , to , easing , callback ) { return this . filter ( isHidden ) . css ( "opacity" , 0 ) . show ( ) . end ( ) . animate ( { opacity : to } , speed , easing , callback ) } , animate : function ( prop , speed , easing , callback ) { var empty = jQuery . isEmptyObject ( prop ) , optall = jQuery . speed ( speed ,
easing , callback ) , doAnimation = function ( ) { var anim = Animation ( this , jQuery . extend ( { } , prop ) , optall ) ; doAnimation . finish = function ( ) { anim . stop ( true ) } ; if ( empty || jQuery . _data ( this , "finish" ) ) anim . stop ( true ) } ; doAnimation . finish = doAnimation ; return empty || optall . queue === false ? this . each ( doAnimation ) : this . queue ( optall . queue , doAnimation ) } , stop : function ( type , clearQueue , gotoEnd ) { var stopQueue = function ( hooks ) { var stop = hooks . stop ; delete hooks . stop ; stop ( gotoEnd ) } ; if ( typeof type !== "string" ) { gotoEnd = clearQueue ; clearQueue =
type ; type = undefined } if ( clearQueue && type !== false ) this . queue ( type || "fx" , [ ] ) ; return this . each ( function ( ) { var dequeue = true , index = type != null && type + "queueHooks" , timers = jQuery . timers , data = jQuery . _data ( this ) ; if ( index ) { if ( data [ index ] && data [ index ] . stop ) stopQueue ( data [ index ] ) } else for ( index in data ) if ( data [ index ] && data [ index ] . stop && rrun . test ( index ) ) stopQueue ( data [ index ] ) ; for ( index = timers . length ; index -- ; ) if ( timers [ index ] . elem === this && ( type == null || timers [ index ] . queue === type ) ) { timers [ index ] . anim . stop ( gotoEnd ) ;
dequeue = false ; timers . splice ( index , 1 ) } if ( dequeue || ! gotoEnd ) jQuery . dequeue ( this , type ) } ) } , finish : function ( type ) { if ( type !== false ) type = type || "fx" ; return this . each ( function ( ) { var index , data = jQuery . _data ( this ) , queue = data [ type + "queue" ] , hooks = data [ type + "queueHooks" ] , timers = jQuery . timers , length = queue ? queue . length : 0 ; data . finish = true ; jQuery . queue ( this , type , [ ] ) ; if ( hooks && hooks . cur && hooks . cur . finish ) hooks . cur . finish . call ( this ) ; for ( index = timers . length ; index -- ; ) if ( timers [ index ] . elem === this && timers [ index ] . queue ===
type ) { timers [ index ] . anim . stop ( true ) ; timers . splice ( index , 1 ) } for ( index = 0 ; index < length ; index ++ ) if ( queue [ index ] && queue [ index ] . finish ) queue [ index ] . finish . call ( this ) ; delete data . finish } ) } } ) ; function genFx ( type , includeWidth ) { var which , attrs = { height : type } , i = 0 ; includeWidth = includeWidth ? 1 : 0 ; for ( ; i < 4 ; i += 2 - includeWidth ) { which = cssExpand [ i ] ; attrs [ "margin" + which ] = attrs [ "padding" + which ] = type } if ( includeWidth ) attrs . opacity = attrs . width = type ; return attrs } jQuery . each ( { slideDown : genFx ( "show" ) , slideUp : genFx ( "hide" ) , slideToggle : genFx ( "toggle" ) ,
fadeIn : { opacity : "show" } , fadeOut : { opacity : "hide" } , fadeToggle : { opacity : "toggle" } } , function ( name , props ) { jQuery . fn [ name ] = function ( speed , easing , callback ) { return this . animate ( props , speed , easing , callback ) } } ) ; jQuery . speed = function ( speed , easing , fn ) { var opt = speed && typeof speed === "object" ? jQuery . extend ( { } , speed ) : { complete : fn || ! fn && easing || jQuery . isFunction ( speed ) && speed , duration : speed , easing : fn && easing || easing && ! jQuery . isFunction ( easing ) && easing } ; opt . duration = jQuery . fx . off ? 0 : typeof opt . duration === "number" ? opt . duration :
opt . duration in jQuery . fx . speeds ? jQuery . fx . speeds [ opt . duration ] : jQuery . fx . speeds . _default ; if ( opt . queue == null || opt . queue === true ) opt . queue = "fx" ; opt . old = opt . complete ; opt . complete = function ( ) { if ( jQuery . isFunction ( opt . old ) ) opt . old . call ( this ) ; if ( opt . queue ) jQuery . dequeue ( this , opt . queue ) } ; return opt } ; jQuery . easing = { linear : function ( p ) { return p } , swing : function ( p ) { return 0.5 - Math . cos ( p * Math . PI ) / 2 } } ; jQuery . timers = [ ] ; jQuery . fx = Tween . prototype . init ; jQuery . fx . tick = function ( ) { var timer , timers = jQuery . timers , i = 0 ; fxNow =
jQuery . now ( ) ; for ( ; i < timers . length ; i ++ ) { timer = timers [ i ] ; if ( ! timer ( ) && timers [ i ] === timer ) timers . splice ( i -- , 1 ) } if ( ! timers . length ) jQuery . fx . stop ( ) ; fxNow = undefined } ; jQuery . fx . timer = function ( timer ) { if ( timer ( ) && jQuery . timers . push ( timer ) ) jQuery . fx . start ( ) } ; jQuery . fx . interval = 13 ; jQuery . fx . start = function ( ) { if ( ! timerId ) timerId = setInterval ( jQuery . fx . tick , jQuery . fx . interval ) } ; jQuery . fx . stop = function ( ) { clearInterval ( timerId ) ; timerId = null } ; jQuery . fx . speeds = { slow : 600 , fast : 200 , _default : 400 } ; jQuery . fx . step = { } ; if ( jQuery . expr &&
jQuery . expr . filters ) jQuery . expr . filters . animated = function ( elem ) { return jQuery . grep ( jQuery . timers , function ( fn ) { return elem === fn . elem } ) . length } ; jQuery . fn . offset = function ( options ) { if ( arguments . length ) return options === undefined ? this : this . each ( function ( i ) { jQuery . offset . setOffset ( this , options , i ) } ) ; var docElem , win , box = { top : 0 , left : 0 } , elem = this [ 0 ] , doc = elem && elem . ownerDocument ; if ( ! doc ) return ; docElem = doc . documentElement ; if ( ! jQuery . contains ( docElem , elem ) ) return box ; if ( typeof elem . getBoundingClientRect !== core _strundefined ) box =
elem . getBoundingClientRect ( ) ; win = getWindow ( doc ) ; return { top : box . top + ( win . pageYOffset || docElem . scrollTop ) - ( docElem . clientTop || 0 ) , left : box . left + ( win . pageXOffset || docElem . scrollLeft ) - ( docElem . clientLeft || 0 ) } } ; jQuery . offset = { setOffset : function ( elem , options , i ) { var position = jQuery . css ( elem , "position" ) ; if ( position === "static" ) elem . style . position = "relative" ; var curElem = jQuery ( elem ) , curOffset = curElem . offset ( ) , curCSSTop = jQuery . css ( elem , "top" ) , curCSSLeft = jQuery . css ( elem , "left" ) , calculatePosition = ( position === "absolute" ||
position === "fixed" ) && jQuery . inArray ( "auto" , [ curCSSTop , curCSSLeft ] ) > - 1 , props = { } , curPosition = { } , curTop , curLeft ; if ( calculatePosition ) { curPosition = curElem . position ( ) ; curTop = curPosition . top ; curLeft = curPosition . left } else { curTop = parseFloat ( curCSSTop ) || 0 ; curLeft = parseFloat ( curCSSLeft ) || 0 } if ( jQuery . isFunction ( options ) ) options = options . call ( elem , i , curOffset ) ; if ( options . top != null ) props . top = options . top - curOffset . top + curTop ; if ( options . left != null ) props . left = options . left - curOffset . left + curLeft ; if ( "using" in options ) options . using . call ( elem ,
props ) ; else curElem . css ( props ) } } ; jQuery . fn . extend ( { position : function ( ) { if ( ! this [ 0 ] ) return ; var offsetParent , offset , parentOffset = { top : 0 , left : 0 } , elem = this [ 0 ] ; if ( jQuery . css ( elem , "position" ) === "fixed" ) offset = elem . getBoundingClientRect ( ) ; else { offsetParent = this . offsetParent ( ) ; offset = this . offset ( ) ; if ( ! jQuery . nodeName ( offsetParent [ 0 ] , "html" ) ) parentOffset = offsetParent . offset ( ) ; parentOffset . top += jQuery . css ( offsetParent [ 0 ] , "borderTopWidth" , true ) ; parentOffset . left += jQuery . css ( offsetParent [ 0 ] , "borderLeftWidth" ,
true ) } return { top : offset . top - parentOffset . top - jQuery . css ( elem , "marginTop" , true ) , left : offset . left - parentOffset . left - jQuery . css ( elem , "marginLeft" , true ) } } , offsetParent : function ( ) { return this . map ( function ( ) { var offsetParent = this . offsetParent || document . documentElement ; while ( offsetParent && ! jQuery . nodeName ( offsetParent , "html" ) && jQuery . css ( offsetParent , "position" ) === "static" ) offsetParent = offsetParent . offsetParent ; return offsetParent || document . documentElement } ) } } ) ; jQuery . each ( { scrollLeft : "pageXOffset" , scrollTop : "pageYOffset" } ,
function ( method , prop ) { var top = /Y/ . test ( prop ) ; jQuery . fn [ method ] = function ( val ) { return jQuery . access ( this , function ( elem , method , val ) { var win = getWindow ( elem ) ; if ( val === undefined ) return win ? prop in win ? win [ prop ] : win . document . documentElement [ method ] : elem [ method ] ; if ( win ) win . scrollTo ( ! top ? val : jQuery ( win ) . scrollLeft ( ) , top ? val : jQuery ( win ) . scrollTop ( ) ) ; else elem [ method ] = val } , method , val , arguments . length , null ) } } ) ; function getWindow ( elem ) { return jQuery . isWindow ( elem ) ? elem : elem . nodeType === 9 ? elem . defaultView || elem . parentWindow :
false } jQuery . each ( { Height : "height" , Width : "width" } , function ( name , type ) { jQuery . each ( { padding : "inner" + name , content : type , "" : "outer" + name } , function ( defaultExtra , funcName ) { jQuery . fn [ funcName ] = function ( margin , value ) { var chainable = arguments . length && ( defaultExtra || typeof margin !== "boolean" ) , extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ) ; return jQuery . access ( this , function ( elem , type , value ) { var doc ; if ( jQuery . isWindow ( elem ) ) return elem . document . documentElement [ "client" + name ] ; if ( elem . nodeType ===
9 ) { doc = elem . documentElement ; return Math . max ( elem . body [ "scroll" + name ] , doc [ "scroll" + name ] , elem . body [ "offset" + name ] , doc [ "offset" + name ] , doc [ "client" + name ] ) } return value === undefined ? jQuery . css ( elem , type , extra ) : jQuery . style ( elem , type , value , extra ) } , type , chainable ? margin : undefined , chainable , null ) } } ) } ) ; window . jQuery = window . $ = jQuery ; if ( typeof define === "function" && define . amd && define . amd . jQuery ) define ( "jquery" , [ ] , function ( ) { return jQuery } ) } ) ( window ) ;
( function ( ) { var root = this ; var previousUnderscore = root . _ ; var breaker = { } ; var ArrayProto = Array . prototype , ObjProto = Object . prototype , FuncProto = Function . prototype ; var push = ArrayProto . push , slice = ArrayProto . slice , concat = ArrayProto . concat , toString = ObjProto . toString , hasOwnProperty = ObjProto . hasOwnProperty ; var nativeForEach = ArrayProto . forEach , nativeMap = ArrayProto . map , nativeReduce = ArrayProto . reduce , nativeReduceRight = ArrayProto . reduceRight , nativeFilter = ArrayProto . filter , nativeEvery = ArrayProto . every , nativeSome =
ArrayProto . some , nativeIndexOf = ArrayProto . indexOf , nativeLastIndexOf = ArrayProto . lastIndexOf , nativeIsArray = Array . isArray , nativeKeys = Object . keys , nativeBind = FuncProto . bind ; var _ = function ( obj ) { if ( obj instanceof _ ) return obj ; if ( ! ( this instanceof _ ) ) return new _ ( obj ) ; this . _wrapped = obj } ; if ( typeof exports !== "undefined" ) { if ( typeof module !== "undefined" && module . exports ) exports = module . exports = _ ; exports . _ = _ } else root . _ = _ ; _ . VERSION = "1.5.1" ; var each = _ . each = _ . forEach = function ( obj , iterator , context ) { if ( obj == null ) return ;
if ( nativeForEach && obj . forEach === nativeForEach ) obj . forEach ( iterator , context ) ; else if ( obj . length === + obj . length ) for ( var i = 0 , l = obj . length ; i < l ; i ++ ) { if ( iterator . call ( context , obj [ i ] , i , obj ) === breaker ) return } else for ( var key in obj ) if ( _ . has ( obj , key ) ) if ( iterator . call ( context , obj [ key ] , key , obj ) === breaker ) return } ; _ . map = _ . collect = function ( obj , iterator , context ) { var results = [ ] ; if ( obj == null ) return results ; if ( nativeMap && obj . map === nativeMap ) return obj . map ( iterator , context ) ; each ( obj , function ( value , index , list ) { results . push ( iterator . call ( context ,
value , index , list ) ) } ) ; return results } ; var reduceError = "Reduce of empty array with no initial value" ; _ . reduce = _ . foldl = _ . inject = function ( obj , iterator , memo , context ) { var initial = arguments . length > 2 ; if ( obj == null ) obj = [ ] ; if ( nativeReduce && obj . reduce === nativeReduce ) { if ( context ) iterator = _ . bind ( iterator , context ) ; return initial ? obj . reduce ( iterator , memo ) : obj . reduce ( iterator ) } each ( obj , function ( value , index , list ) { if ( ! initial ) { memo = value ; initial = true } else memo = iterator . call ( context , memo , value , index , list ) } ) ; if ( ! initial ) throw new TypeError ( reduceError ) ;
return memo } ; _ . reduceRight = _ . foldr = function ( obj , iterator , memo , context ) { var initial = arguments . length > 2 ; if ( obj == null ) obj = [ ] ; if ( nativeReduceRight && obj . reduceRight === nativeReduceRight ) { if ( context ) iterator = _ . bind ( iterator , context ) ; return initial ? obj . reduceRight ( iterator , memo ) : obj . reduceRight ( iterator ) } var length = obj . length ; if ( length !== + length ) { var keys = _ . keys ( obj ) ; length = keys . length } each ( obj , function ( value , index , list ) { index = keys ? keys [ -- length ] : -- length ; if ( ! initial ) { memo = obj [ index ] ; initial = true } else memo =
iterator . call ( context , memo , obj [ index ] , index , list ) } ) ; if ( ! initial ) throw new TypeError ( reduceError ) ; return memo } ; _ . find = _ . detect = function ( obj , iterator , context ) { var result ; any ( obj , function ( value , index , list ) { if ( iterator . call ( context , value , index , list ) ) { result = value ; return true } } ) ; return result } ; _ . filter = _ . select = function ( obj , iterator , context ) { var results = [ ] ; if ( obj == null ) return results ; if ( nativeFilter && obj . filter === nativeFilter ) return obj . filter ( iterator , context ) ; each ( obj , function ( value , index , list ) { if ( iterator . call ( context ,
value , index , list ) ) results . push ( value ) } ) ; return results } ; _ . reject = function ( obj , iterator , context ) { return _ . filter ( obj , function ( value , index , list ) { return ! iterator . call ( context , value , index , list ) } , context ) } ; _ . every = _ . all = function ( obj , iterator , context ) { iterator || ( iterator = _ . identity ) ; var result = true ; if ( obj == null ) return result ; if ( nativeEvery && obj . every === nativeEvery ) return obj . every ( iterator , context ) ; each ( obj , function ( value , index , list ) { if ( ! ( result = result && iterator . call ( context , value , index , list ) ) ) return breaker } ) ;
return ! ! result } ; var any = _ . some = _ . any = function ( obj , iterator , context ) { iterator || ( iterator = _ . identity ) ; var result = false ; if ( obj == null ) return result ; if ( nativeSome && obj . some === nativeSome ) return obj . some ( iterator , context ) ; each ( obj , function ( value , index , list ) { if ( result || ( result = iterator . call ( context , value , index , list ) ) ) return breaker } ) ; return ! ! result } ; _ . contains = _ . include = function ( obj , target ) { if ( obj == null ) return false ; if ( nativeIndexOf && obj . indexOf === nativeIndexOf ) return obj . indexOf ( target ) != - 1 ; return any ( obj ,
function ( value ) { return value === target } ) } ; _ . invoke = function ( obj , method ) { var args = slice . call ( arguments , 2 ) ; var isFunc = _ . isFunction ( method ) ; return _ . map ( obj , function ( value ) { return ( isFunc ? method : value [ method ] ) . apply ( value , args ) } ) } ; _ . pluck = function ( obj , key ) { return _ . map ( obj , function ( value ) { return value [ key ] } ) } ; _ . where = function ( obj , attrs , first ) { if ( _ . isEmpty ( attrs ) ) return first ? void 0 : [ ] ; return _ [ first ? "find" : "filter" ] ( obj , function ( value ) { for ( var key in attrs ) if ( attrs [ key ] !== value [ key ] ) return false ; return true } ) } ;
_ . findWhere = function ( obj , attrs ) { return _ . where ( obj , attrs , true ) } ; _ . max = function ( obj , iterator , context ) { if ( ! iterator && _ . isArray ( obj ) && obj [ 0 ] === + obj [ 0 ] && obj . length < 65535 ) return Math . max . apply ( Math , obj ) ; if ( ! iterator && _ . isEmpty ( obj ) ) return - Infinity ; var result = { computed : - Infinity , value : - Infinity } ; each ( obj , function ( value , index , list ) { var computed = iterator ? iterator . call ( context , value , index , list ) : value ; computed > result . computed && ( result = { value : value , computed : computed } ) } ) ; return result . value } ; _ . min = function ( obj ,
iterator , context ) { if ( ! iterator && _ . isArray ( obj ) && obj [ 0 ] === + obj [ 0 ] && obj . length < 65535 ) return Math . min . apply ( Math , obj ) ; if ( ! iterator && _ . isEmpty ( obj ) ) return Infinity ; var result = { computed : Infinity , value : Infinity } ; each ( obj , function ( value , index , list ) { var computed = iterator ? iterator . call ( context , value , index , list ) : value ; computed < result . computed && ( result = { value : value , computed : computed } ) } ) ; return result . value } ; _ . shuffle = function ( obj ) { var rand ; var index = 0 ; var shuffled = [ ] ; each ( obj , function ( value ) { rand = _ . random ( index ++ ) ;
shuffled [ index - 1 ] = shuffled [ rand ] ; shuffled [ rand ] = value } ) ; return shuffled } ; var lookupIterator = function ( value ) { return _ . isFunction ( value ) ? value : function ( obj ) { return obj [ value ] } } ; _ . sortBy = function ( obj , value , context ) { var iterator = lookupIterator ( value ) ; return _ . pluck ( _ . map ( obj , function ( value , index , list ) { return { value : value , index : index , criteria : iterator . call ( context , value , index , list ) } } ) . sort ( function ( left , right ) { var a = left . criteria ; var b = right . criteria ; if ( a !== b ) { if ( a > b || a === void 0 ) return 1 ; if ( a < b || b === void 0 ) return - 1 } return left . index <
right . index ? - 1 : 1 } ) , "value" ) } ; var group = function ( obj , value , context , behavior ) { var result = { } ; var iterator = lookupIterator ( value == null ? _ . identity : value ) ; each ( obj , function ( value , index ) { var key = iterator . call ( context , value , index , obj ) ; behavior ( result , key , value ) } ) ; return result } ; _ . groupBy = function ( obj , value , context ) { return group ( obj , value , context , function ( result , key , value ) { ( _ . has ( result , key ) ? result [ key ] : result [ key ] = [ ] ) . push ( value ) } ) } ; _ . countBy = function ( obj , value , context ) { return group ( obj , value , context , function ( result ,
key ) { if ( ! _ . has ( result , key ) ) result [ key ] = 0 ; result [ key ] ++ } ) } ; _ . sortedIndex = function ( array , obj , iterator , context ) { iterator = iterator == null ? _ . identity : lookupIterator ( iterator ) ; var value = iterator . call ( context , obj ) ; var low = 0 , high = array . length ; while ( low < high ) { var mid = low + high >>> 1 ; iterator . call ( context , array [ mid ] ) < value ? low = mid + 1 : high = mid } return low } ; _ . toArray = function ( obj ) { if ( ! obj ) return [ ] ; if ( _ . isArray ( obj ) ) return slice . call ( obj ) ; if ( obj . length === + obj . length ) return _ . map ( obj , _ . identity ) ; return _ . values ( obj ) } ;
_ . size = function ( obj ) { if ( obj == null ) return 0 ; return obj . length === + obj . length ? obj . length : _ . keys ( obj ) . length } ; _ . first = _ . head = _ . take = function ( array , n , guard ) { if ( array == null ) return void 0 ; return n != null && ! guard ? slice . call ( array , 0 , n ) : array [ 0 ] } ; _ . initial = function ( array , n , guard ) { return slice . call ( array , 0 , array . length - ( n == null || guard ? 1 : n ) ) } ; _ . last = function ( array , n , guard ) { if ( array == null ) return void 0 ; if ( n != null && ! guard ) return slice . call ( array , Math . max ( array . length - n , 0 ) ) ; else return array [ array . length - 1 ] } ; _ . rest =
_ . tail = _ . drop = function ( array , n , guard ) { return slice . call ( array , n == null || guard ? 1 : n ) } ; _ . compact = function ( array ) { return _ . filter ( array , _ . identity ) } ; var flatten = function ( input , shallow , output ) { if ( shallow && _ . every ( input , _ . isArray ) ) return concat . apply ( output , input ) ; each ( input , function ( value ) { if ( _ . isArray ( value ) || _ . isArguments ( value ) ) shallow ? push . apply ( output , value ) : flatten ( value , shallow , output ) ; else output . push ( value ) } ) ; return output } ; _ . flatten = function ( array , shallow ) { return flatten ( array , shallow , [ ] ) } ; _ . without =
function ( array ) { return _ . difference ( array , slice . call ( arguments , 1 ) ) } ; _ . uniq = _ . unique = function ( array , isSorted , iterator , context ) { if ( _ . isFunction ( isSorted ) ) { context = iterator ; iterator = isSorted ; isSorted = false } var initial = iterator ? _ . map ( array , iterator , context ) : array ; var results = [ ] ; var seen = [ ] ; each ( initial , function ( value , index ) { if ( isSorted ? ! index || seen [ seen . length - 1 ] !== value : ! _ . contains ( seen , value ) ) { seen . push ( value ) ; results . push ( array [ index ] ) } } ) ; return results } ; _ . union = function ( ) { return _ . uniq ( _ . flatten ( arguments ,
true ) ) } ; _ . intersection = function ( array ) { var rest = slice . call ( arguments , 1 ) ; return _ . filter ( _ . uniq ( array ) , function ( item ) { return _ . every ( rest , function ( other ) { return _ . indexOf ( other , item ) >= 0 } ) } ) } ; _ . difference = function ( array ) { var rest = concat . apply ( ArrayProto , slice . call ( arguments , 1 ) ) ; return _ . filter ( array , function ( value ) { return ! _ . contains ( rest , value ) } ) } ; _ . zip = function ( ) { var length = _ . max ( _ . pluck ( arguments , "length" ) . concat ( 0 ) ) ; var results = new Array ( length ) ; for ( var i = 0 ; i < length ; i ++ ) results [ i ] = _ . pluck ( arguments ,
"" + i ) ; return results } ; _ . object = function ( list , values ) { if ( list == null ) return { } ; var result = { } ; for ( var i = 0 , l = list . length ; i < l ; i ++ ) if ( values ) result [ list [ i ] ] = values [ i ] ; else result [ list [ i ] [ 0 ] ] = list [ i ] [ 1 ] ; return result } ; _ . indexOf = function ( array , item , isSorted ) { if ( array == null ) return - 1 ; var i = 0 , l = array . length ; if ( isSorted ) if ( typeof isSorted == "number" ) i = isSorted < 0 ? Math . max ( 0 , l + isSorted ) : isSorted ; else { i = _ . sortedIndex ( array , item ) ; return array [ i ] === item ? i : - 1 } if ( nativeIndexOf && array . indexOf === nativeIndexOf ) return array . indexOf ( item ,
isSorted ) ; for ( ; i < l ; i ++ ) if ( array [ i ] === item ) return i ; return - 1 } ; _ . lastIndexOf = function ( array , item , from ) { if ( array == null ) return - 1 ; var hasIndex = from != null ; if ( nativeLastIndexOf && array . lastIndexOf === nativeLastIndexOf ) return hasIndex ? array . lastIndexOf ( item , from ) : array . lastIndexOf ( item ) ; var i = hasIndex ? from : array . length ; while ( i -- ) if ( array [ i ] === item ) return i ; return - 1 } ; _ . range = function ( start , stop , step ) { if ( arguments . length <= 1 ) { stop = start || 0 ; start = 0 } step = arguments [ 2 ] || 1 ; var len = Math . max ( Math . ceil ( ( stop - start ) / step ) ,
0 ) ; var idx = 0 ; var range = new Array ( len ) ; while ( idx < len ) { range [ idx ++ ] = start ; start += step } return range } ; var ctor = function ( ) { } ; _ . bind = function ( func , context ) { var args , bound ; if ( nativeBind && func . bind === nativeBind ) return nativeBind . apply ( func , slice . call ( arguments , 1 ) ) ; if ( ! _ . isFunction ( func ) ) throw new TypeError ; args = slice . call ( arguments , 2 ) ; return bound = function ( ) { if ( ! ( this instanceof bound ) ) return func . apply ( context , args . concat ( slice . call ( arguments ) ) ) ; ctor . prototype = func . prototype ; var self = new ctor ; ctor . prototype =
null ; var result = func . apply ( self , args . concat ( slice . call ( arguments ) ) ) ; if ( Object ( result ) === result ) return result ; return self } } ; _ . partial = function ( func ) { var args = slice . call ( arguments , 1 ) ; return function ( ) { return func . apply ( this , args . concat ( slice . call ( arguments ) ) ) } } ; _ . bindAll = function ( obj ) { var funcs = slice . call ( arguments , 1 ) ; if ( funcs . length === 0 ) throw new Error ( "bindAll must be passed function names" ) ; each ( funcs , function ( f ) { obj [ f ] = _ . bind ( obj [ f ] , obj ) } ) ; return obj } ; _ . memoize = function ( func , hasher ) { var memo = { } ;
hasher || ( hasher = _ . identity ) ; return function ( ) { var key = hasher . apply ( this , arguments ) ; return _ . has ( memo , key ) ? memo [ key ] : memo [ key ] = func . apply ( this , arguments ) } } ; _ . delay = function ( func , wait ) { var args = slice . call ( arguments , 2 ) ; return setTimeout ( function ( ) { return func . apply ( null , args ) } , wait ) } ; _ . defer = function ( func ) { return _ . delay . apply ( _ , [ func , 1 ] . concat ( slice . call ( arguments , 1 ) ) ) } ; _ . throttle = function ( func , wait , options ) { var context , args , result ; var timeout = null ; var previous = 0 ; options || ( options = { } ) ; var later = function ( ) { previous =
options . leading === false ? 0 : new Date ; timeout = null ; result = func . apply ( context , args ) } ; return function ( ) { var now = new Date ; if ( ! previous && options . leading === false ) previous = now ; var remaining = wait - ( now - previous ) ; context = this ; args = arguments ; if ( remaining <= 0 ) { clearTimeout ( timeout ) ; timeout = null ; previous = now ; result = func . apply ( context , args ) } else if ( ! timeout && options . trailing !== false ) timeout = setTimeout ( later , remaining ) ; return result } } ; _ . debounce = function ( func , wait , immediate ) { var result ; var timeout = null ; return function ( ) { var context =
this , args = arguments ; var later = function ( ) { timeout = null ; if ( ! immediate ) result = func . apply ( context , args ) } ; var callNow = immediate && ! timeout ; clearTimeout ( timeout ) ; timeout = setTimeout ( later , wait ) ; if ( callNow ) result = func . apply ( context , args ) ; return result } } ; _ . once = function ( func ) { var ran = false , memo ; return function ( ) { if ( ran ) return memo ; ran = true ; memo = func . apply ( this , arguments ) ; func = null ; return memo } } ; _ . wrap = function ( func , wrapper ) { return function ( ) { var args = [ func ] ; push . apply ( args , arguments ) ; return wrapper . apply ( this ,
args ) } } ; _ . compose = function ( ) { var funcs = arguments ; return function ( ) { var args = arguments ; for ( var i = funcs . length - 1 ; i >= 0 ; i -- ) args = [ funcs [ i ] . apply ( this , args ) ] ; return args [ 0 ] } } ; _ . after = function ( times , func ) { return function ( ) { if ( -- times < 1 ) return func . apply ( this , arguments ) } } ; _ . keys = nativeKeys || function ( obj ) { if ( obj !== Object ( obj ) ) throw new TypeError ( "Invalid object" ) ; var keys = [ ] ; for ( var key in obj ) if ( _ . has ( obj , key ) ) keys . push ( key ) ; return keys } ; _ . values = function ( obj ) { var values = [ ] ; for ( var key in obj ) if ( _ . has ( obj ,
key ) ) values . push ( obj [ key ] ) ; return values } ; _ . pairs = function ( obj ) { var pairs = [ ] ; for ( var key in obj ) if ( _ . has ( obj , key ) ) pairs . push ( [ key , obj [ key ] ] ) ; return pairs } ; _ . invert = function ( obj ) { var result = { } ; for ( var key in obj ) if ( _ . has ( obj , key ) ) result [ obj [ key ] ] = key ; return result } ; _ . functions = _ . methods = function ( obj ) { var names = [ ] ; for ( var key in obj ) if ( _ . isFunction ( obj [ key ] ) ) names . push ( key ) ; return names . sort ( ) } ; _ . extend = function ( obj ) { each ( slice . call ( arguments , 1 ) , function ( source ) { if ( source ) for ( var prop in source ) obj [ prop ] =
source [ prop ] } ) ; return obj } ; _ . pick = function ( obj ) { var copy = { } ; var keys = concat . apply ( ArrayProto , slice . call ( arguments , 1 ) ) ; each ( keys , function ( key ) { if ( key in obj ) copy [ key ] = obj [ key ] } ) ; return copy } ; _ . omit = function ( obj ) { var copy = { } ; var keys = concat . apply ( ArrayProto , slice . call ( arguments , 1 ) ) ; for ( var key in obj ) if ( ! _ . contains ( keys , key ) ) copy [ key ] = obj [ key ] ; return copy } ; _ . defaults = function ( obj ) { each ( slice . call ( arguments , 1 ) , function ( source ) { if ( source ) for ( var prop in source ) if ( obj [ prop ] === void 0 ) obj [ prop ] = source [ prop ] } ) ;
return obj } ; _ . clone = function ( obj ) { if ( ! _ . isObject ( obj ) ) return obj ; return _ . isArray ( obj ) ? obj . slice ( ) : _ . extend ( { } , obj ) } ; _ . tap = function ( obj , interceptor ) { interceptor ( obj ) ; return obj } ; var eq = function ( a , b , aStack , bStack ) { if ( a === b ) return a !== 0 || 1 / a == 1 / b ; if ( a == null || b == null ) return a === b ; if ( a instanceof _ ) a = a . _wrapped ; if ( b instanceof _ ) b = b . _wrapped ; var className = toString . call ( a ) ; if ( className != toString . call ( b ) ) return false ; switch ( className ) { case "[object String]" : return a == String ( b ) ; case "[object Number]" : return a !=
+ a ? b != + b : a == 0 ? 1 / a == 1 / b : a == + b ; case "[object Date]" : case "[object Boolean]" : return + a == + b ; case "[object RegExp]" : return a . source == b . source && a . global == b . global && a . multiline == b . multiline && a . ignoreCase == b . ignoreCase } if ( typeof a != "object" || typeof b != "object" ) return false ; var length = aStack . length ; while ( length -- ) if ( aStack [ length ] == a ) return bStack [ length ] == b ; var aCtor = a . constructor , bCtor = b . constructor ; if ( aCtor !== bCtor && ! ( _ . isFunction ( aCtor ) && aCtor instanceof aCtor && _ . isFunction ( bCtor ) && bCtor instanceof bCtor ) ) return false ;
aStack . push ( a ) ; bStack . push ( b ) ; var size = 0 , result = true ; if ( className == "[object Array]" ) { size = a . length ; result = size == b . length ; if ( result ) while ( size -- ) if ( ! ( result = eq ( a [ size ] , b [ size ] , aStack , bStack ) ) ) break } else { for ( var key in a ) if ( _ . has ( a , key ) ) { size ++ ; if ( ! ( result = _ . has ( b , key ) && eq ( a [ key ] , b [ key ] , aStack , bStack ) ) ) break } if ( result ) { for ( key in b ) if ( _ . has ( b , key ) && ! size -- ) break ; result = ! size } } aStack . pop ( ) ; bStack . pop ( ) ; return result } ; _ . isEqual = function ( a , b ) { return eq ( a , b , [ ] , [ ] ) } ; _ . isEmpty = function ( obj ) { if ( obj == null ) return true ;
if ( _ . isArray ( obj ) || _ . isString ( obj ) ) return obj . length === 0 ; for ( var key in obj ) if ( _ . has ( obj , key ) ) return false ; return true } ; _ . isElement = function ( obj ) { return ! ! ( obj && obj . nodeType === 1 ) } ; _ . isArray = nativeIsArray || function ( obj ) { return toString . call ( obj ) == "[object Array]" } ; _ . isObject = function ( obj ) { return obj === Object ( obj ) } ; each ( [ "Arguments" , "Function" , "String" , "Number" , "Date" , "RegExp" ] , function ( name ) { _ [ "is" + name ] = function ( obj ) { return toString . call ( obj ) == "[object " + name + "]" } } ) ; if ( ! _ . isArguments ( arguments ) ) _ . isArguments =
function ( obj ) { return ! ! ( obj && _ . has ( obj , "callee" ) ) } ; if ( typeof /./ !== "function" ) _ . isFunction = function ( obj ) { return typeof obj === "function" } ; _ . isFinite = function ( obj ) { return isFinite ( obj ) && ! isNaN ( parseFloat ( obj ) ) } ; _ . isNaN = function ( obj ) { return _ . isNumber ( obj ) && obj != + obj } ; _ . isBoolean = function ( obj ) { return obj === true || obj === false || toString . call ( obj ) == "[object Boolean]" } ; _ . isNull = function ( obj ) { return obj === null } ; _ . isUndefined = function ( obj ) { return obj === void 0 } ; _ . has = function ( obj , key ) { return hasOwnProperty . call ( obj ,
key ) } ; _ . noConflict = function ( ) { root . _ = previousUnderscore ; return this } ; _ . identity = function ( value ) { return value } ; _ . times = function ( n , iterator , context ) { var accum = Array ( Math . max ( 0 , n ) ) ; for ( var i = 0 ; i < n ; i ++ ) accum [ i ] = iterator . call ( context , i ) ; return accum } ; _ . random = function ( min , max ) { if ( max == null ) { max = min ; min = 0 } return min + Math . floor ( Math . random ( ) * ( max - min + 1 ) ) } ; var entityMap = { escape : { "&" : "&" , "<" : "<" , ">" : ">" , '"' : """ , "'" : "'" , "/" : "/" } } ; entityMap . unescape = _ . invert ( entityMap . escape ) ; var entityRegexes =
{ escape : new RegExp ( "[" + _ . keys ( entityMap . escape ) . join ( "" ) + "]" , "g" ) , unescape : new RegExp ( "(" + _ . keys ( entityMap . unescape ) . join ( "|" ) + ")" , "g" ) } ; _ . each ( [ "escape" , "unescape" ] , function ( method ) { _ [ method ] = function ( string ) { if ( string == null ) return "" ; return ( "" + string ) . replace ( entityRegexes [ method ] , function ( match ) { return entityMap [ method ] [ match ] } ) } } ) ; _ . result = function ( object , property ) { if ( object == null ) return void 0 ; var value = object [ property ] ; return _ . isFunction ( value ) ? value . call ( object ) : value } ; _ . mixin = function ( obj ) { each ( _ . functions ( obj ) ,
function ( name ) { var func = _ [ name ] = obj [ name ] ; _ . prototype [ name ] = function ( ) { var args = [ this . _wrapped ] ; push . apply ( args , arguments ) ; return result . call ( this , func . apply ( _ , args ) ) } } ) } ; var idCounter = 0 ; _ . uniqueId = function ( prefix ) { var id = ++ idCounter + "" ; return prefix ? prefix + id : id } ; _ . templateSettings = { evaluate : /<%([\s\S]+?)%>/g , interpolate : /<%=([\s\S]+?)%>/g , escape : /<%-([\s\S]+?)%>/g } ; var noMatch = /(.)^/ ; var escapes = { "'" : "'" , "\\" : "\\" , "\r" : "r" , "\n" : "n" , "\t" : "t" , "\u2028" : "u2028" , "\u2029" : "u2029" } ; var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g ;
_ . template = function ( text , data , settings ) { var render ; settings = _ . defaults ( { } , settings , _ . templateSettings ) ; var matcher = new RegExp ( [ ( settings . escape || noMatch ) . source , ( settings . interpolate || noMatch ) . source , ( settings . evaluate || noMatch ) . source ] . join ( "|" ) + "|$" , "g" ) ; var index = 0 ; var source = "__p+='" ; text . replace ( matcher , function ( match , escape , interpolate , evaluate , offset ) { source += text . slice ( index , offset ) . replace ( escaper , function ( match ) { return "\\" + escapes [ match ] } ) ; if ( escape ) source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'" ;
if ( interpolate ) source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'" ; if ( evaluate ) source += "';\n" + evaluate + "\n__p+='" ; index = offset + match . length ; return match } ) ; source += "';\n" ; if ( ! settings . variable ) source = "with(obj||{}){\n" + source + "}\n" ; source = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + source + "return __p;\n" ; try { render = new Function ( settings . variable || "obj" , "_" , source ) } catch ( e ) { e . source = source ; throw e ; } if ( data ) return render ( data , _ ) ; var template = function ( data ) { return render . call ( this ,
data , _ ) } ; template . source = "function(" + ( settings . variable || "obj" ) + "){\n" + source + "}" ; return template } ; _ . chain = function ( obj ) { return _ ( obj ) . chain ( ) } ; var result = function ( obj ) { return this . _chain ? _ ( obj ) . chain ( ) : obj } ; _ . mixin ( _ ) ; each ( [ "pop" , "push" , "reverse" , "shift" , "sort" , "splice" , "unshift" ] , function ( name ) { var method = ArrayProto [ name ] ; _ . prototype [ name ] = function ( ) { var obj = this . _wrapped ; method . apply ( obj , arguments ) ; if ( ( name == "shift" || name == "splice" ) && obj . length === 0 ) delete obj [ 0 ] ; return result . call ( this , obj ) } } ) ;
each ( [ "concat" , "join" , "slice" ] , function ( name ) { var method = ArrayProto [ name ] ; _ . prototype [ name ] = function ( ) { return result . call ( this , method . apply ( this . _wrapped , arguments ) ) } } ) ; _ . extend ( _ . prototype , { chain : function ( ) { this . _chain = true ; return this } , value : function ( ) { return this . _wrapped } } ) } ) . call ( this ) ; if ( ! jQuery ) throw new Error ( "Bootstrap requires jQuery" ) ;
+ function ( $ ) { function transitionEnd ( ) { var el = document . createElement ( "bootstrap" ) ; var transEndEventNames = { "WebkitTransition" : "webkitTransitionEnd" , "MozTransition" : "transitionend" , "OTransition" : "oTransitionEnd otransitionend" , "transition" : "transitionend" } ; for ( var name in transEndEventNames ) if ( el . style [ name ] !== undefined ) return { end : transEndEventNames [ name ] } } $ . fn . emulateTransitionEnd = function ( duration ) { var called = false , $el = this ; $ ( this ) . one ( $ . support . transition . end , function ( ) { called = true } ) ; var callback =
function ( ) { if ( ! called ) $ ( $el ) . trigger ( $ . support . transition . end ) } ; setTimeout ( callback , duration ) ; return this } ; $ ( function ( ) { $ . support . transition = transitionEnd ( ) } ) } ( window . jQuery ) ;
+ function ( $ ) { var dismiss = '[data-dismiss="alert"]' ; var Alert = function ( el ) { $ ( el ) . on ( "click" , dismiss , this . close ) } ; Alert . prototype . close = function ( e ) { var $this = $ ( this ) ; var selector = $this . attr ( "data-target" ) ; if ( ! selector ) { selector = $this . attr ( "href" ) ; selector = selector && selector . replace ( /.*(?=#[^\s]*$)/ , "" ) } var $parent = $ ( selector ) ; if ( e ) e . preventDefault ( ) ; if ( ! $parent . length ) $parent = $this . hasClass ( "alert" ) ? $this : $this . parent ( ) ; $parent . trigger ( e = $ . Event ( "close.bs.alert" ) ) ; if ( e . isDefaultPrevented ( ) ) return ; $parent . removeClass ( "in" ) ;
function removeElement ( ) { $parent . trigger ( "closed.bs.alert" ) . remove ( ) } $ . support . transition && $parent . hasClass ( "fade" ) ? $parent . one ( $ . support . transition . end , removeElement ) . emulateTransitionEnd ( 150 ) : removeElement ( ) } ; var old = $ . fn . alert ; $ . fn . alert = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.alert" ) ; if ( ! data ) $this . data ( "bs.alert" , data = new Alert ( this ) ) ; if ( typeof option == "string" ) data [ option ] . call ( $this ) } ) } ; $ . fn . alert . Constructor = Alert ; $ . fn . alert . noConflict = function ( ) { $ . fn . alert =
old ; return this } ; $ ( document ) . on ( "click.bs.alert.data-api" , dismiss , Alert . prototype . close ) } ( window . jQuery ) ;
+ function ( $ ) { var Button = function ( element , options ) { this . $element = $ ( element ) ; this . options = $ . extend ( { } , Button . DEFAULTS , options ) } ; Button . DEFAULTS = { loadingText : "loading..." } ; Button . prototype . setState = function ( state ) { var d = "disabled" ; var $el = this . $element ; var val = $el . is ( "input" ) ? "val" : "html" ; var data = $el . data ( ) ; state = state + "Text" ; if ( ! data . resetText ) $el . data ( "resetText" , $el [ val ] ( ) ) ; $el [ val ] ( data [ state ] || this . options [ state ] ) ; setTimeout ( function ( ) { state == "loadingText" ? $el . addClass ( d ) . attr ( d , d ) : $el . removeClass ( d ) . removeAttr ( d ) } ,
0 ) } ; Button . prototype . toggle = function ( ) { var $parent = this . $element . closest ( '[data-toggle="buttons"]' ) ; if ( $parent . length ) { var $input = this . $element . find ( "input" ) . prop ( "checked" , ! this . $element . hasClass ( "active" ) ) . trigger ( "change" ) ; if ( $input . prop ( "type" ) === "radio" ) $parent . find ( ".active" ) . removeClass ( "active" ) } this . $element . toggleClass ( "active" ) } ; var old = $ . fn . button ; $ . fn . button = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.button" ) ; var options = typeof option == "object" &&
option ; if ( ! data ) $this . data ( "bs.button" , data = new Button ( this , options ) ) ; if ( option == "toggle" ) data . toggle ( ) ; else if ( option ) data . setState ( option ) } ) } ; $ . fn . button . Constructor = Button ; $ . fn . button . noConflict = function ( ) { $ . fn . button = old ; return this } ; $ ( document ) . on ( "click.bs.button.data-api" , "[data-toggle^=button]" , function ( e ) { var $btn = $ ( e . target ) ; if ( ! $btn . hasClass ( "btn" ) ) $btn = $btn . closest ( ".btn" ) ; $btn . button ( "toggle" ) ; e . preventDefault ( ) } ) } ( window . jQuery ) ;
+ function ( $ ) { var Carousel = function ( element , options ) { this . $element = $ ( element ) ; this . $indicators = this . $element . find ( ".carousel-indicators" ) ; this . options = options ; this . paused = this . sliding = this . interval = this . $active = this . $items = null ; this . options . pause == "hover" && this . $element . on ( "mouseenter" , $ . proxy ( this . pause , this ) ) . on ( "mouseleave" , $ . proxy ( this . cycle , this ) ) } ; Carousel . DEFAULTS = { interval : 5E3 , pause : "hover" , wrap : true } ; Carousel . prototype . cycle = function ( e ) { e || ( this . paused = false ) ; this . interval && clearInterval ( this . interval ) ;
this . options . interval && ! this . paused && ( this . interval = setInterval ( $ . proxy ( this . next , this ) , this . options . interval ) ) ; return this } ; Carousel . prototype . getActiveIndex = function ( ) { this . $active = this . $element . find ( ".item.active" ) ; this . $items = this . $active . parent ( ) . children ( ) ; return this . $items . index ( this . $active ) } ; Carousel . prototype . to = function ( pos ) { var that = this ; var activeIndex = this . getActiveIndex ( ) ; if ( pos > this . $items . length - 1 || pos < 0 ) return ; if ( this . sliding ) return this . $element . one ( "slid" , function ( ) { that . to ( pos ) } ) ;
if ( activeIndex == pos ) return this . pause ( ) . cycle ( ) ; return this . slide ( pos > activeIndex ? "next" : "prev" , $ ( this . $items [ pos ] ) ) } ; Carousel . prototype . pause = function ( e ) { e || ( this . paused = true ) ; if ( this . $element . find ( ".next, .prev" ) . length && $ . support . transition . end ) { this . $element . trigger ( $ . support . transition . end ) ; this . cycle ( true ) } this . interval = clearInterval ( this . interval ) ; return this } ; Carousel . prototype . next = function ( ) { if ( this . sliding ) return ; return this . slide ( "next" ) } ; Carousel . prototype . prev = function ( ) { if ( this . sliding ) return ;
return this . slide ( "prev" ) } ; Carousel . prototype . slide = function ( type , next ) { var $active = this . $element . find ( ".item.active" ) ; var $next = next || $active [ type ] ( ) ; var isCycling = this . interval ; var direction = type == "next" ? "left" : "right" ; var fallback = type == "next" ? "first" : "last" ; var that = this ; if ( ! $next . length ) { if ( ! this . options . wrap ) return ; $next = this . $element . find ( ".item" ) [ fallback ] ( ) } this . sliding = true ; isCycling && this . pause ( ) ; var e = $ . Event ( "slide.bs.carousel" , { relatedTarget : $next [ 0 ] , direction : direction } ) ; if ( $next . hasClass ( "active" ) ) return ;
if ( this . $indicators . length ) { this . $indicators . find ( ".active" ) . removeClass ( "active" ) ; this . $element . one ( "slid" , function ( ) { var $nextIndicator = $ ( that . $indicators . children ( ) [ that . getActiveIndex ( ) ] ) ; $nextIndicator && $nextIndicator . addClass ( "active" ) } ) } if ( $ . support . transition && this . $element . hasClass ( "slide" ) ) { this . $element . trigger ( e ) ; if ( e . isDefaultPrevented ( ) ) return ; $next . addClass ( type ) ; $next [ 0 ] . offsetWidth ; $active . addClass ( direction ) ; $next . addClass ( direction ) ; $active . one ( $ . support . transition . end , function ( ) { $next . removeClass ( [ type ,
direction ] . join ( " " ) ) . addClass ( "active" ) ; $active . removeClass ( [ "active" , direction ] . join ( " " ) ) ; that . sliding = false ; setTimeout ( function ( ) { that . $element . trigger ( "slid" ) } , 0 ) } ) . emulateTransitionEnd ( 600 ) } else { this . $element . trigger ( e ) ; if ( e . isDefaultPrevented ( ) ) return ; $active . removeClass ( "active" ) ; $next . addClass ( "active" ) ; this . sliding = false ; this . $element . trigger ( "slid" ) } isCycling && this . cycle ( ) ; return this } ; var old = $ . fn . carousel ; $ . fn . carousel = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data =
$this . data ( "bs.carousel" ) ; var options = $ . extend ( { } , Carousel . DEFAULTS , $this . data ( ) , typeof option == "object" && option ) ; var action = typeof option == "string" ? option : options . slide ; if ( ! data ) $this . data ( "bs.carousel" , data = new Carousel ( this , options ) ) ; if ( typeof option == "number" ) data . to ( option ) ; else if ( action ) data [ action ] ( ) ; else if ( options . interval ) data . pause ( ) . cycle ( ) } ) } ; $ . fn . carousel . Constructor = Carousel ; $ . fn . carousel . noConflict = function ( ) { $ . fn . carousel = old ; return this } ; $ ( document ) . on ( "click.bs.carousel.data-api" ,
"[data-slide], [data-slide-to]" , function ( e ) { var $this = $ ( this ) , href ; var $target = $ ( $this . attr ( "data-target" ) || ( href = $this . attr ( "href" ) ) && href . replace ( /.*(?=#[^\s]+$)/ , "" ) ) ; var options = $ . extend ( { } , $target . data ( ) , $this . data ( ) ) ; var slideIndex = $this . attr ( "data-slide-to" ) ; if ( slideIndex ) options . interval = false ; $target . carousel ( options ) ; if ( slideIndex = $this . attr ( "data-slide-to" ) ) $target . data ( "bs.carousel" ) . to ( slideIndex ) ; e . preventDefault ( ) } ) ; $ ( window ) . on ( "load" , function ( ) { $ ( '[data-ride="carousel"]' ) . each ( function ( ) { var $carousel =
$ ( this ) ; $carousel . carousel ( $carousel . data ( ) ) } ) } ) } ( window . jQuery ) ;
+ function ( $ ) { var Collapse = function ( element , options ) { this . $element = $ ( element ) ; this . options = $ . extend ( { } , Collapse . DEFAULTS , options ) ; this . transitioning = null ; if ( this . options . parent ) this . $parent = $ ( this . options . parent ) ; if ( this . options . toggle ) this . toggle ( ) } ; Collapse . DEFAULTS = { toggle : true } ; Collapse . prototype . dimension = function ( ) { var hasWidth = this . $element . hasClass ( "width" ) ; return hasWidth ? "width" : "height" } ; Collapse . prototype . show = function ( ) { if ( this . transitioning || this . $element . hasClass ( "in" ) ) return ; var startEvent =
$ . Event ( "show.bs.collapse" ) ; this . $element . trigger ( startEvent ) ; if ( startEvent . isDefaultPrevented ( ) ) return ; var actives = this . $parent && this . $parent . find ( "> .panel > .in" ) ; if ( actives && actives . length ) { var hasData = actives . data ( "bs.collapse" ) ; if ( hasData && hasData . transitioning ) return ; actives . collapse ( "hide" ) ; hasData || actives . data ( "bs.collapse" , null ) } var dimension = this . dimension ( ) ; this . $element . removeClass ( "collapse" ) . addClass ( "collapsing" ) [ dimension ] ( 0 ) ; this . transitioning = 1 ; var complete = function ( ) { this . $element . removeClass ( "collapsing" ) . addClass ( "in" ) [ dimension ] ( "auto" ) ;
this . transitioning = 0 ; this . $element . trigger ( "shown.bs.collapse" ) } ; if ( ! $ . support . transition ) return complete . call ( this ) ; var scrollSize = $ . camelCase ( [ "scroll" , dimension ] . join ( "-" ) ) ; this . $element . one ( $ . support . transition . end , $ . proxy ( complete , this ) ) . emulateTransitionEnd ( 350 ) [ dimension ] ( this . $element [ 0 ] [ scrollSize ] ) } ; Collapse . prototype . hide = function ( ) { if ( this . transitioning || ! this . $element . hasClass ( "in" ) ) return ; var startEvent = $ . Event ( "hide.bs.collapse" ) ; this . $element . trigger ( startEvent ) ; if ( startEvent . isDefaultPrevented ( ) ) return ;
var dimension = this . dimension ( ) ; this . $element [ dimension ] ( this . $element [ dimension ] ( ) ) [ 0 ] . offsetHeight ; this . $element . addClass ( "collapsing" ) . removeClass ( "collapse" ) . removeClass ( "in" ) ; this . transitioning = 1 ; var complete = function ( ) { this . transitioning = 0 ; this . $element . trigger ( "hidden.bs.collapse" ) . removeClass ( "collapsing" ) . addClass ( "collapse" ) } ; if ( ! $ . support . transition ) return complete . call ( this ) ; this . $element [ dimension ] ( 0 ) . one ( $ . support . transition . end , $ . proxy ( complete , this ) ) . emulateTransitionEnd ( 350 ) } ; Collapse . prototype . toggle =
function ( ) { this [ this . $element . hasClass ( "in" ) ? "hide" : "show" ] ( ) } ; var old = $ . fn . collapse ; $ . fn . collapse = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.collapse" ) ; var options = $ . extend ( { } , Collapse . DEFAULTS , $this . data ( ) , typeof option == "object" && option ) ; if ( ! data ) $this . data ( "bs.collapse" , data = new Collapse ( this , options ) ) ; if ( typeof option == "string" ) data [ option ] ( ) } ) } ; $ . fn . collapse . Constructor = Collapse ; $ . fn . collapse . noConflict = function ( ) { $ . fn . collapse = old ; return this } ; $ ( document ) . on ( "click.bs.collapse.data-api" ,
"[data-toggle=collapse]" , function ( e ) { var $this = $ ( this ) , href ; var target = $this . attr ( "data-target" ) || e . preventDefault ( ) || ( href = $this . attr ( "href" ) ) && href . replace ( /.*(?=#[^\s]+$)/ , "" ) ; var $target = $ ( target ) ; var data = $target . data ( "bs.collapse" ) ; var option = data ? "toggle" : $this . data ( ) ; var parent = $this . attr ( "data-parent" ) ; var $parent = parent && $ ( parent ) ; if ( ! data || ! data . transitioning ) { if ( $parent ) $parent . find ( '[data-toggle=collapse][data-parent="' + parent + '"]' ) . not ( $this ) . addClass ( "collapsed" ) ; $this [ $target . hasClass ( "in" ) ?
"addClass" : "removeClass" ] ( "collapsed" ) } $target . collapse ( option ) } ) } ( window . jQuery ) ;
+ function ( $ ) { var backdrop = ".dropdown-backdrop" ; var toggle = "[data-toggle=dropdown]" ; var Dropdown = function ( element ) { var $el = $ ( element ) . on ( "click.bs.dropdown" , this . toggle ) } ; Dropdown . prototype . toggle = function ( e ) { var $this = $ ( this ) ; if ( $this . is ( ".disabled, :disabled" ) ) return ; var $parent = getParent ( $this ) ; var isActive = $parent . hasClass ( "open" ) ; clearMenus ( ) ; if ( ! isActive ) { if ( "ontouchstart" in document . documentElement && ! $parent . closest ( ".navbar-nav" ) . length ) $ ( '<div class="dropdown-backdrop"/>' ) . insertAfter ( $ ( this ) ) . on ( "click" , clearMenus ) ;
$parent . trigger ( e = $ . Event ( "show.bs.dropdown" ) ) ; if ( e . isDefaultPrevented ( ) ) return ; $parent . toggleClass ( "open" ) . trigger ( "shown.bs.dropdown" ) ; $this . focus ( ) } return false } ; Dropdown . prototype . keydown = function ( e ) { if ( ! /(38|40|27)/ . test ( e . keyCode ) ) return ; var $this = $ ( this ) ; e . preventDefault ( ) ; e . stopPropagation ( ) ; if ( $this . is ( ".disabled, :disabled" ) ) return ; var $parent = getParent ( $this ) ; var isActive = $parent . hasClass ( "open" ) ; if ( ! isActive || isActive && e . keyCode == 27 ) { if ( e . which == 27 ) $parent . find ( toggle ) . focus ( ) ; return $this . click ( ) } var $items =
$ ( "[role=menu] li:not(.divider):visible a" , $parent ) ; if ( ! $items . length ) return ; var index = $items . index ( $items . filter ( ":focus" ) ) ; if ( e . keyCode == 38 && index > 0 ) index -- ; if ( e . keyCode == 40 && index < $items . length - 1 ) index ++ ; if ( ! ~ index ) index = 0 ; $items . eq ( index ) . focus ( ) } ; function clearMenus ( ) { $ ( backdrop ) . remove ( ) ; $ ( toggle ) . each ( function ( e ) { var $parent = getParent ( $ ( this ) ) ; if ( ! $parent . hasClass ( "open" ) ) return ; $parent . trigger ( e = $ . Event ( "hide.bs.dropdown" ) ) ; if ( e . isDefaultPrevented ( ) ) return ; $parent . removeClass ( "open" ) . trigger ( "hidden.bs.dropdown" ) } ) }
function getParent ( $this ) { var selector = $this . attr ( "data-target" ) ; if ( ! selector ) { selector = $this . attr ( "href" ) ; selector = selector && /#/ . test ( selector ) && selector . replace ( /.*(?=#[^\s]*$)/ , "" ) } var $parent = selector && $ ( selector ) ; return $parent && $parent . length ? $parent : $this . parent ( ) } var old = $ . fn . dropdown ; $ . fn . dropdown = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "dropdown" ) ; if ( ! data ) $this . data ( "dropdown" , data = new Dropdown ( this ) ) ; if ( typeof option == "string" ) data [ option ] . call ( $this ) } ) } ;
$ . fn . dropdown . Constructor = Dropdown ; $ . fn . dropdown . noConflict = function ( ) { $ . fn . dropdown = old ; return this } ; $ ( document ) . on ( "click.bs.dropdown.data-api" , clearMenus ) . on ( "click.bs.dropdown.data-api" , ".dropdown form" , function ( e ) { e . stopPropagation ( ) } ) . on ( "click.bs.dropdown.data-api" , toggle , Dropdown . prototype . toggle ) . on ( "keydown.bs.dropdown.data-api" , toggle + ", [role=menu]" , Dropdown . prototype . keydown ) } ( window . jQuery ) ;
+ function ( $ ) { var Modal = function ( element , options ) { this . options = options ; this . $element = $ ( element ) ; this . $backdrop = this . isShown = null ; if ( this . options . remote ) this . $element . load ( this . options . remote ) } ; Modal . DEFAULTS = { backdrop : true , keyboard : true , show : true } ; Modal . prototype . toggle = function ( _relatedTarget ) { return this [ ! this . isShown ? "show" : "hide" ] ( _relatedTarget ) } ; Modal . prototype . show = function ( _relatedTarget ) { var that = this ; var e = $ . Event ( "show.bs.modal" , { relatedTarget : _relatedTarget } ) ; this . $element . trigger ( e ) ; if ( this . isShown ||
e . isDefaultPrevented ( ) ) return ; this . isShown = true ; this . escape ( ) ; this . $element . on ( "click.dismiss.modal" , '[data-dismiss="modal"]' , $ . proxy ( this . hide , this ) ) ; this . backdrop ( function ( ) { var transition = $ . support . transition && that . $element . hasClass ( "fade" ) ; if ( ! that . $element . parent ( ) . length ) that . $element . appendTo ( document . body ) ; that . $element . show ( ) ; if ( transition ) that . $element [ 0 ] . offsetWidth ; that . $element . addClass ( "in" ) . attr ( "aria-hidden" , false ) ; that . enforceFocus ( ) ; var e = $ . Event ( "shown.bs.modal" , { relatedTarget : _relatedTarget } ) ;
transition ? that . $element . find ( ".modal-dialog" ) . one ( $ . support . transition . end , function ( ) { that . $element . focus ( ) . trigger ( e ) } ) . emulateTransitionEnd ( 300 ) : that . $element . focus ( ) . trigger ( e ) } ) } ; Modal . prototype . hide = function ( e ) { if ( e ) e . preventDefault ( ) ; e = $ . Event ( "hide.bs.modal" ) ; this . $element . trigger ( e ) ; if ( ! this . isShown || e . isDefaultPrevented ( ) ) return ; this . isShown = false ; this . escape ( ) ; $ ( document ) . off ( "focusin.bs.modal" ) ; this . $element . removeClass ( "in" ) . attr ( "aria-hidden" , true ) . off ( "click.dismiss.modal" ) ; $ . support . transition &&
this . $element . hasClass ( "fade" ) ? this . $element . one ( $ . support . transition . end , $ . proxy ( this . hideModal , this ) ) . emulateTransitionEnd ( 300 ) : this . hideModal ( ) } ; Modal . prototype . enforceFocus = function ( ) { $ ( document ) . off ( "focusin.bs.modal" ) . on ( "focusin.bs.modal" , $ . proxy ( function ( e ) { if ( this . $element [ 0 ] !== e . target && ! this . $element . has ( e . target ) . length ) this . $element . focus ( ) } , this ) ) } ; Modal . prototype . escape = function ( ) { if ( this . isShown && this . options . keyboard ) this . $element . on ( "keyup.dismiss.bs.modal" , $ . proxy ( function ( e ) { e . which ==
27 && this . hide ( ) } , this ) ) ; else if ( ! this . isShown ) this . $element . off ( "keyup.dismiss.bs.modal" ) } ; Modal . prototype . hideModal = function ( ) { var that = this ; this . $element . hide ( ) ; this . backdrop ( function ( ) { that . removeBackdrop ( ) ; that . $element . trigger ( "hidden.bs.modal" ) } ) } ; Modal . prototype . removeBackdrop = function ( ) { this . $backdrop && this . $backdrop . remove ( ) ; this . $backdrop = null } ; Modal . prototype . backdrop = function ( callback ) { var that = this ; var animate = this . $element . hasClass ( "fade" ) ? "fade" : "" ; if ( this . isShown && this . options . backdrop ) { var doAnimate =
$ . support . transition && animate ; this . $backdrop = $ ( '<div class="modal-backdrop ' + animate + '" />' ) . appendTo ( document . body ) ; this . $element . on ( "click.dismiss.modal" , $ . proxy ( function ( e ) { if ( e . target !== e . currentTarget ) return ; this . options . backdrop == "static" ? this . $element [ 0 ] . focus . call ( this . $element [ 0 ] ) : this . hide . call ( this ) } , this ) ) ; if ( doAnimate ) this . $backdrop [ 0 ] . offsetWidth ; this . $backdrop . addClass ( "in" ) ; if ( ! callback ) return ; doAnimate ? this . $backdrop . one ( $ . support . transition . end , callback ) . emulateTransitionEnd ( 150 ) :
callback ( ) } else if ( ! this . isShown && this . $backdrop ) { this . $backdrop . removeClass ( "in" ) ; $ . support . transition && this . $element . hasClass ( "fade" ) ? this . $backdrop . one ( $ . support . transition . end , callback ) . emulateTransitionEnd ( 150 ) : callback ( ) } else if ( callback ) callback ( ) } ; var old = $ . fn . modal ; $ . fn . modal = function ( option , _relatedTarget ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.modal" ) ; var options = $ . extend ( { } , Modal . DEFAULTS , $this . data ( ) , typeof option == "object" && option ) ; if ( ! data ) $this . data ( "bs.modal" ,
data = new Modal ( this , options ) ) ; if ( typeof option == "string" ) data [ option ] ( _relatedTarget ) ; else if ( options . show ) data . show ( _relatedTarget ) } ) } ; $ . fn . modal . Constructor = Modal ; $ . fn . modal . noConflict = function ( ) { $ . fn . modal = old ; return this } ; $ ( document ) . on ( "click.bs.modal.data-api" , '[data-toggle="modal"]' , function ( e ) { var $this = $ ( this ) ; var href = $this . attr ( "href" ) ; var $target = $ ( $this . attr ( "data-target" ) || href && href . replace ( /.*(?=#[^\s]+$)/ , "" ) ) ; var option = $target . data ( "modal" ) ? "toggle" : $ . extend ( { remote : ! /#/ . test ( href ) &&
href } , $target . data ( ) , $this . data ( ) ) ; e . preventDefault ( ) ; $target . modal ( option , this ) . one ( "hide" , function ( ) { $this . is ( ":visible" ) && $this . focus ( ) } ) } ) ; $ ( document ) . on ( "show.bs.modal" , ".modal" , function ( ) { $ ( document . body ) . addClass ( "modal-open" ) } ) . on ( "hidden.bs.modal" , ".modal" , function ( ) { $ ( document . body ) . removeClass ( "modal-open" ) } ) } ( window . jQuery ) ;
+ function ( $ ) { var Tooltip = function ( element , options ) { this . type = this . options = this . enabled = this . timeout = this . hoverState = this . $element = null ; this . init ( "tooltip" , element , options ) } ; Tooltip . DEFAULTS = { animation : true , placement : "top" , selector : false , template : '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' , trigger : "hover focus" , title : "" , delay : 0 , html : false , container : false } ; Tooltip . prototype . init = function ( type , element , options ) { this . enabled = true ; this . type = type ; this . $element =
$ ( element ) ; this . options = this . getOptions ( options ) ; var triggers = this . options . trigger . split ( " " ) ; for ( var i = triggers . length ; i -- ; ) { var trigger = triggers [ i ] ; if ( trigger == "click" ) this . $element . on ( "click." + this . type , this . options . selector , $ . proxy ( this . toggle , this ) ) ; else if ( trigger != "manual" ) { var eventIn = trigger == "hover" ? "mouseenter" : "focus" ; var eventOut = trigger == "hover" ? "mouseleave" : "blur" ; this . $element . on ( eventIn + "." + this . type , this . options . selector , $ . proxy ( this . enter , this ) ) ; this . $element . on ( eventOut + "." + this . type ,
this . options . selector , $ . proxy ( this . leave , this ) ) } } this . options . selector ? this . _options = $ . extend ( { } , this . options , { trigger : "manual" , selector : "" } ) : this . fixTitle ( ) } ; Tooltip . prototype . getDefaults = function ( ) { return Tooltip . DEFAULTS } ; Tooltip . prototype . getOptions = function ( options ) { options = $ . extend ( { } , this . getDefaults ( ) , this . $element . data ( ) , options ) ; if ( options . delay && typeof options . delay == "number" ) options . delay = { show : options . delay , hide : options . delay } ; return options } ; Tooltip . prototype . getDelegateOptions = function ( ) { var options =
{ } ; var defaults = this . getDefaults ( ) ; this . _options && $ . each ( this . _options , function ( key , value ) { if ( defaults [ key ] != value ) options [ key ] = value } ) ; return options } ; Tooltip . prototype . enter = function ( obj ) { var self = obj instanceof this . constructor ? obj : $ ( obj . currentTarget ) [ this . type ] ( this . getDelegateOptions ( ) ) . data ( "bs." + this . type ) ; clearTimeout ( self . timeout ) ; self . hoverState = "in" ; if ( ! self . options . delay || ! self . options . delay . show ) return self . show ( ) ; self . timeout = setTimeout ( function ( ) { if ( self . hoverState == "in" ) self . show ( ) } ,
self . options . delay . show ) } ; Tooltip . prototype . leave = function ( obj ) { var self = obj instanceof this . constructor ? obj : $ ( obj . currentTarget ) [ this . type ] ( this . getDelegateOptions ( ) ) . data ( "bs." + this . type ) ; clearTimeout ( self . timeout ) ; self . hoverState = "out" ; if ( ! self . options . delay || ! self . options . delay . hide ) return self . hide ( ) ; self . timeout = setTimeout ( function ( ) { if ( self . hoverState == "out" ) self . hide ( ) } , self . options . delay . hide ) } ; Tooltip . prototype . show = function ( ) { var e = $ . Event ( "show.bs." + this . type ) ; if ( this . hasContent ( ) && this . enabled ) { this . $element . trigger ( e ) ;
if ( e . isDefaultPrevented ( ) ) return ; var $tip = this . tip ( ) ; this . setContent ( ) ; if ( this . options . animation ) $tip . addClass ( "fade" ) ; var placement = typeof this . options . placement == "function" ? this . options . placement . call ( this , $tip [ 0 ] , this . $element [ 0 ] ) : this . options . placement ; var autoToken = /\s?auto?\s?/i ; var autoPlace = autoToken . test ( placement ) ; if ( autoPlace ) placement = placement . replace ( autoToken , "" ) || "top" ; $tip . detach ( ) . css ( { top : 0 , left : 0 , display : "block" } ) . addClass ( placement ) ; this . options . container ? $tip . appendTo ( this . options . container ) :
$tip . insertAfter ( this . $element ) ; var pos = this . getPosition ( ) ; var actualWidth = $tip [ 0 ] . offsetWidth ; var actualHeight = $tip [ 0 ] . offsetHeight ; if ( autoPlace ) { var $parent = this . $element . parent ( ) ; var orgPlacement = placement ; var docScroll = document . documentElement . scrollTop || document . body . scrollTop ; var parentWidth = this . options . container == "body" ? window . innerWidth : $parent . outerWidth ( ) ; var parentHeight = this . options . container == "body" ? window . innerHeight : $parent . outerHeight ( ) ; var parentLeft = this . options . container == "body" ?
0 : $parent . offset ( ) . left ; placement = placement == "bottom" && pos . top + pos . height + actualHeight - docScroll > parentHeight ? "top" : placement == "top" && pos . top - docScroll - actualHeight < 0 ? "bottom" : placement == "right" && pos . right + actualWidth > parentWidth ? "left" : placement == "left" && pos . left - actualWidth < parentLeft ? "right" : placement ; $tip . removeClass ( orgPlacement ) . addClass ( placement ) } var calculatedOffset = this . getCalculatedOffset ( placement , pos , actualWidth , actualHeight ) ; this . applyPlacement ( calculatedOffset , placement ) ; this . $element . trigger ( "shown.bs." +
this . type ) } } ; Tooltip . prototype . applyPlacement = function ( offset , placement ) { var replace ; var $tip = this . tip ( ) ; var width = $tip [ 0 ] . offsetWidth ; var height = $tip [ 0 ] . offsetHeight ; var marginTop = parseInt ( $tip . css ( "margin-top" ) , 10 ) ; var marginLeft = parseInt ( $tip . css ( "margin-left" ) , 10 ) ; if ( isNaN ( marginTop ) ) marginTop = 0 ; if ( isNaN ( marginLeft ) ) marginLeft = 0 ; offset . top = offset . top + marginTop ; offset . left = offset . left + marginLeft ; $tip . offset ( offset ) . addClass ( "in" ) ; var actualWidth = $tip [ 0 ] . offsetWidth ; var actualHeight = $tip [ 0 ] . offsetHeight ;
if ( placement == "top" && actualHeight != height ) { replace = true ; offset . top = offset . top + height - actualHeight } if ( /bottom|top/ . test ( placement ) ) { var delta = 0 ; if ( offset . left < 0 ) { delta = offset . left * - 2 ; offset . left = 0 ; $tip . offset ( offset ) ; actualWidth = $tip [ 0 ] . offsetWidth ; actualHeight = $tip [ 0 ] . offsetHeight } this . replaceArrow ( delta - width + actualWidth , actualWidth , "left" ) } else this . replaceArrow ( actualHeight - height , actualHeight , "top" ) ; if ( replace ) $tip . offset ( offset ) } ; Tooltip . prototype . replaceArrow = function ( delta , dimension , position ) { this . arrow ( ) . css ( position ,
delta ? 50 * ( 1 - delta / dimension ) + "%" : "" ) } ; Tooltip . prototype . setContent = function ( ) { var $tip = this . tip ( ) ; var title = this . getTitle ( ) ; $tip . find ( ".tooltip-inner" ) [ this . options . html ? "html" : "text" ] ( title ) ; $tip . removeClass ( "fade in top bottom left right" ) } ; Tooltip . prototype . hide = function ( ) { var that = this ; var $tip = this . tip ( ) ; var e = $ . Event ( "hide.bs." + this . type ) ; function complete ( ) { if ( that . hoverState != "in" ) $tip . detach ( ) } this . $element . trigger ( e ) ; if ( e . isDefaultPrevented ( ) ) return ; $tip . removeClass ( "in" ) ; $ . support . transition &&
this . $tip . hasClass ( "fade" ) ? $tip . one ( $ . support . transition . end , complete ) . emulateTransitionEnd ( 150 ) : complete ( ) ; this . $element . trigger ( "hidden.bs." + this . type ) ; return this } ; Tooltip . prototype . fixTitle = function ( ) { var $e = this . $element ; if ( $e . attr ( "title" ) || typeof $e . attr ( "data-original-title" ) != "string" ) $e . attr ( "data-original-title" , $e . attr ( "title" ) || "" ) . attr ( "title" , "" ) } ; Tooltip . prototype . hasContent = function ( ) { return this . getTitle ( ) } ; Tooltip . prototype . getPosition = function ( ) { var el = this . $element [ 0 ] ; return $ . extend ( { } ,
typeof el . getBoundingClientRect == "function" ? el . getBoundingClientRect ( ) : { width : el . offsetWidth , height : el . offsetHeight } , this . $element . offset ( ) ) } ; Tooltip . prototype . getCalculatedOffset = function ( placement , pos , actualWidth , actualHeight ) { return placement == "bottom" ? { top : pos . top + pos . height , left : pos . left + pos . width / 2 - actualWidth / 2 } : placement == "top" ? { top : pos . top - actualHeight , left : pos . left + pos . width / 2 - actualWidth / 2 } : placement == "left" ? { top : pos . top + pos . height / 2 - actualHeight / 2 , left : pos . left - actualWidth } : { top : pos . top +
pos . height / 2 - actualHeight / 2 , left : pos . left + pos . width } } ; Tooltip . prototype . getTitle = function ( ) { var title ; var $e = this . $element ; var o = this . options ; title = $e . attr ( "data-original-title" ) || ( typeof o . title == "function" ? o . title . call ( $e [ 0 ] ) : o . title ) ; return title } ; Tooltip . prototype . tip = function ( ) { return this . $tip = this . $tip || $ ( this . options . template ) } ; Tooltip . prototype . arrow = function ( ) { return this . $arrow = this . $arrow || this . tip ( ) . find ( ".tooltip-arrow" ) } ; Tooltip . prototype . validate = function ( ) { if ( ! this . $element [ 0 ] . parentNode ) { this . hide ( ) ;
this . $element = null ; this . options = null } } ; Tooltip . prototype . enable = function ( ) { this . enabled = true } ; Tooltip . prototype . disable = function ( ) { this . enabled = false } ; Tooltip . prototype . toggleEnabled = function ( ) { this . enabled = ! this . enabled } ; Tooltip . prototype . toggle = function ( e ) { var self = e ? $ ( e . currentTarget ) [ this . type ] ( this . getDelegateOptions ( ) ) . data ( "bs." + this . type ) : this ; self . tip ( ) . hasClass ( "in" ) ? self . leave ( self ) : self . enter ( self ) } ; Tooltip . prototype . destroy = function ( ) { this . hide ( ) . $element . off ( "." + this . type ) . removeData ( "bs." +
this . type ) } ; var old = $ . fn . tooltip ; $ . fn . tooltip = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.tooltip" ) ; var options = typeof option == "object" && option ; if ( ! data ) $this . data ( "bs.tooltip" , data = new Tooltip ( this , options ) ) ; if ( typeof option == "string" ) data [ option ] ( ) } ) } ; $ . fn . tooltip . Constructor = Tooltip ; $ . fn . tooltip . noConflict = function ( ) { $ . fn . tooltip = old ; return this } } ( window . jQuery ) ;
+ function ( $ ) { var Popover = function ( element , options ) { this . init ( "popover" , element , options ) } ; if ( ! $ . fn . tooltip ) throw new Error ( "Popover requires tooltip.js" ) ; Popover . DEFAULTS = $ . extend ( { } , $ . fn . tooltip . Constructor . DEFAULTS , { placement : "right" , trigger : "click" , content : "" , template : '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' } ) ; Popover . prototype = $ . extend ( { } , $ . fn . tooltip . Constructor . prototype ) ; Popover . prototype . constructor = Popover ; Popover . prototype . getDefaults =
function ( ) { return Popover . DEFAULTS } ; Popover . prototype . setContent = function ( ) { var $tip = this . tip ( ) ; var title = this . getTitle ( ) ; var content = this . getContent ( ) ; $tip . find ( ".popover-title" ) [ this . options . html ? "html" : "text" ] ( title ) ; $tip . find ( ".popover-content" ) [ this . options . html ? "html" : "text" ] ( content ) ; $tip . removeClass ( "fade top bottom left right in" ) ; if ( ! $tip . find ( ".popover-title" ) . html ( ) ) $tip . find ( ".popover-title" ) . hide ( ) } ; Popover . prototype . hasContent = function ( ) { return this . getTitle ( ) || this . getContent ( ) } ; Popover . prototype . getContent =
function ( ) { var $e = this . $element ; var o = this . options ; return $e . attr ( "data-content" ) || ( typeof o . content == "function" ? o . content . call ( $e [ 0 ] ) : o . content ) } ; Popover . prototype . arrow = function ( ) { return this . $arrow = this . $arrow || this . tip ( ) . find ( ".arrow" ) } ; Popover . prototype . tip = function ( ) { if ( ! this . $tip ) this . $tip = $ ( this . options . template ) ; return this . $tip } ; var old = $ . fn . popover ; $ . fn . popover = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.popover" ) ; var options = typeof option == "object" &&
option ; if ( ! data ) $this . data ( "bs.popover" , data = new Popover ( this , options ) ) ; if ( typeof option == "string" ) data [ option ] ( ) } ) } ; $ . fn . popover . Constructor = Popover ; $ . fn . popover . noConflict = function ( ) { $ . fn . popover = old ; return this } } ( window . jQuery ) ;
+ function ( $ ) { function ScrollSpy ( element , options ) { var href ; var process = $ . proxy ( this . process , this ) ; this . $element = $ ( element ) . is ( "body" ) ? $ ( window ) : $ ( element ) ; this . $body = $ ( "body" ) ; this . $scrollElement = this . $element . on ( "scroll.bs.scroll-spy.data-api" , process ) ; this . options = $ . extend ( { } , ScrollSpy . DEFAULTS , options ) ; this . selector = ( this . options . target || ( href = $ ( element ) . attr ( "href" ) ) && href . replace ( /.*(?=#[^\s]+$)/ , "" ) || "" ) + " .nav li > a" ; this . offsets = $ ( [ ] ) ; this . targets = $ ( [ ] ) ; this . activeTarget = null ; this . refresh ( ) ;
this . process ( ) } ScrollSpy . DEFAULTS = { offset : 10 } ; ScrollSpy . prototype . refresh = function ( ) { var offsetMethod = this . $element [ 0 ] == window ? "offset" : "position" ; this . offsets = $ ( [ ] ) ; this . targets = $ ( [ ] ) ; var self = this ; var $targets = this . $body . find ( this . selector ) . map ( function ( ) { var $el = $ ( this ) ; var href = $el . data ( "target" ) || $el . attr ( "href" ) ; var $href = /^#\w/ . test ( href ) && $ ( href ) ; return $href && $href . length && [ [ $href [ offsetMethod ] ( ) . top + ( ! $ . isWindow ( self . $scrollElement . get ( 0 ) ) && self . $scrollElement . scrollTop ( ) ) , href ] ] || null } ) . sort ( function ( a ,
b ) { return a [ 0 ] - b [ 0 ] } ) . each ( function ( ) { self . offsets . push ( this [ 0 ] ) ; self . targets . push ( this [ 1 ] ) } ) } ; ScrollSpy . prototype . process = function ( ) { var scrollTop = this . $scrollElement . scrollTop ( ) + this . options . offset ; var scrollHeight = this . $scrollElement [ 0 ] . scrollHeight || this . $body [ 0 ] . scrollHeight ; var maxScroll = scrollHeight - this . $scrollElement . height ( ) ; var offsets = this . offsets ; var targets = this . targets ; var activeTarget = this . activeTarget ; var i ; if ( scrollTop >= maxScroll ) return activeTarget != ( i = targets . last ( ) [ 0 ] ) && this . activate ( i ) ;
for ( i = offsets . length ; i -- ; ) activeTarget != targets [ i ] && scrollTop >= offsets [ i ] && ( ! offsets [ i + 1 ] || scrollTop <= offsets [ i + 1 ] ) && this . activate ( targets [ i ] ) } ; ScrollSpy . prototype . activate = function ( target ) { this . activeTarget = target ; $ ( this . selector ) . parents ( ".active" ) . removeClass ( "active" ) ; var selector = this . selector + '[data-target="' + target + '"],' + this . selector + '[href="' + target + '"]' ; var active = $ ( selector ) . parents ( "li" ) . addClass ( "active" ) ; if ( active . parent ( ".dropdown-menu" ) . length ) active = active . closest ( "li.dropdown" ) . addClass ( "active" ) ;
active . trigger ( "activate" ) } ; var old = $ . fn . scrollspy ; $ . fn . scrollspy = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.scrollspy" ) ; var options = typeof option == "object" && option ; if ( ! data ) $this . data ( "bs.scrollspy" , data = new ScrollSpy ( this , options ) ) ; if ( typeof option == "string" ) data [ option ] ( ) } ) } ; $ . fn . scrollspy . Constructor = ScrollSpy ; $ . fn . scrollspy . noConflict = function ( ) { $ . fn . scrollspy = old ; return this } ; $ ( window ) . on ( "load" , function ( ) { $ ( '[data-spy="scroll"]' ) . each ( function ( ) { var $spy =
$ ( this ) ; $spy . scrollspy ( $spy . data ( ) ) } ) } ) } ( window . jQuery ) ;
+ function ( $ ) { var Tab = function ( element ) { this . element = $ ( element ) } ; Tab . prototype . show = function ( ) { var $this = this . element ; var $ul = $this . closest ( "ul:not(.dropdown-menu)" ) ; var selector = $this . attr ( "data-target" ) ; if ( ! selector ) { selector = $this . attr ( "href" ) ; selector = selector && selector . replace ( /.*(?=#[^\s]*$)/ , "" ) } if ( $this . parent ( "li" ) . hasClass ( "active" ) ) return ; var previous = $ul . find ( ".active:last a" ) [ 0 ] ; var e = $ . Event ( "show.bs.tab" , { relatedTarget : previous } ) ; $this . trigger ( e ) ; if ( e . isDefaultPrevented ( ) ) return ; var $target =
$ ( selector ) ; this . activate ( $this . parent ( "li" ) , $ul ) ; this . activate ( $target , $target . parent ( ) , function ( ) { $this . trigger ( { type : "shown.bs.tab" , relatedTarget : previous } ) } ) } ; Tab . prototype . activate = function ( element , container , callback ) { var $active = container . find ( "> .active" ) ; var transition = callback && $ . support . transition && $active . hasClass ( "fade" ) ; function next ( ) { $active . removeClass ( "active" ) . find ( "> .dropdown-menu > .active" ) . removeClass ( "active" ) ; element . addClass ( "active" ) ; if ( transition ) { element [ 0 ] . offsetWidth ;
element . addClass ( "in" ) } else element . removeClass ( "fade" ) ; if ( element . parent ( ".dropdown-menu" ) ) element . closest ( "li.dropdown" ) . addClass ( "active" ) ; callback && callback ( ) } transition ? $active . one ( $ . support . transition . end , next ) . emulateTransitionEnd ( 150 ) : next ( ) ; $active . removeClass ( "in" ) } ; var old = $ . fn . tab ; $ . fn . tab = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.tab" ) ; if ( ! data ) $this . data ( "bs.tab" , data = new Tab ( this ) ) ; if ( typeof option == "string" ) data [ option ] ( ) } ) } ; $ . fn . tab . Constructor =
Tab ; $ . fn . tab . noConflict = function ( ) { $ . fn . tab = old ; return this } ; $ ( document ) . on ( "click.bs.tab.data-api" , '[data-toggle="tab"], [data-toggle="pill"]' , function ( e ) { e . preventDefault ( ) ; $ ( this ) . tab ( "show" ) } ) } ( window . jQuery ) ;
+ function ( $ ) { var Affix = function ( element , options ) { this . options = $ . extend ( { } , Affix . DEFAULTS , options ) ; this . $window = $ ( window ) . on ( "scroll.bs.affix.data-api" , $ . proxy ( this . checkPosition , this ) ) . on ( "click.bs.affix.data-api" , $ . proxy ( this . checkPositionWithEventLoop , this ) ) ; this . $element = $ ( element ) ; this . affixed = this . unpin = null ; this . checkPosition ( ) } ; Affix . RESET = "affix affix-top affix-bottom" ; Affix . DEFAULTS = { offset : 0 } ; Affix . prototype . checkPositionWithEventLoop = function ( ) { setTimeout ( $ . proxy ( this . checkPosition , this ) ,
1 ) } ; Affix . prototype . checkPosition = function ( ) { if ( ! this . $element . is ( ":visible" ) ) return ; var scrollHeight = $ ( document ) . height ( ) ; var scrollTop = this . $window . scrollTop ( ) ; var position = this . $element . offset ( ) ; var offset = this . options . offset ; var offsetTop = offset . top ; var offsetBottom = offset . bottom ; if ( typeof offset != "object" ) offsetBottom = offsetTop = offset ; if ( typeof offsetTop == "function" ) offsetTop = offset . top ( ) ; if ( typeof offsetBottom == "function" ) offsetBottom = offset . bottom ( ) ; var affix = this . unpin != null && scrollTop + this . unpin <=
position . top ? false : offsetBottom != null && position . top + this . $element . height ( ) >= scrollHeight - offsetBottom ? "bottom" : offsetTop != null && scrollTop <= offsetTop ? "top" : false ; if ( this . affixed === affix ) return ; if ( this . unpin ) this . $element . css ( "top" , "" ) ; this . affixed = affix ; this . unpin = affix == "bottom" ? position . top - scrollTop : null ; this . $element . removeClass ( Affix . RESET ) . addClass ( "affix" + ( affix ? "-" + affix : "" ) ) ; if ( affix == "bottom" ) this . $element . offset ( { top : document . body . offsetHeight - offsetBottom - this . $element . height ( ) } ) } ; var old =
$ . fn . affix ; $ . fn . affix = function ( option ) { return this . each ( function ( ) { var $this = $ ( this ) ; var data = $this . data ( "bs.affix" ) ; var options = typeof option == "object" && option ; if ( ! data ) $this . data ( "bs.affix" , data = new Affix ( this , options ) ) ; if ( typeof option == "string" ) data [ option ] ( ) } ) } ; $ . fn . affix . Constructor = Affix ; $ . fn . affix . noConflict = function ( ) { $ . fn . affix = old ; return this } ; $ ( window ) . on ( "load" , function ( ) { $ ( '[data-spy="affix"]' ) . each ( function ( ) { var $spy = $ ( this ) ; var data = $spy . data ( ) ; data . offset = data . offset || { } ; if ( data . offsetBottom ) data . offset . bottom =
data . offsetBottom ; if ( data . offsetTop ) data . offset . top = data . offsetTop ; $spy . affix ( data ) } ) } ) } ( window . jQuery ) ; var Handlebars = { } ;
( function ( Handlebars , undefined ) { Handlebars . VERSION = "1.0.0" ; Handlebars . COMPILER _REVISION = 4 ; Handlebars . REVISION _CHANGES = { 1 : "<= 1.0.rc.2" , 2 : "== 1.0.0-rc.3" , 3 : "== 1.0.0-rc.4" , 4 : ">= 1.0.0" } ; Handlebars . helpers = { } ; Handlebars . partials = { } ; var toString = Object . prototype . toString , functionType = "[object Function]" , objectType = "[object Object]" ; Handlebars . registerHelper = function ( name , fn , inverse ) { if ( toString . call ( name ) === objectType ) { if ( inverse || fn ) throw new Handlebars . Exception ( "Arg not supported with multiple helpers" ) ;
Handlebars . Utils . extend ( this . helpers , name ) } else { if ( inverse ) fn . not = inverse ; this . helpers [ name ] = fn } } ; Handlebars . registerPartial = function ( name , str ) { if ( toString . call ( name ) === objectType ) Handlebars . Utils . extend ( this . partials , name ) ; else this . partials [ name ] = str } ; Handlebars . registerHelper ( "helperMissing" , function ( arg ) { if ( arguments . length === 2 ) return undefined ; else throw new Error ( "Missing helper: '" + arg + "'" ) ; } ) ; Handlebars . registerHelper ( "blockHelperMissing" , function ( context , options ) { var inverse = options . inverse ||
function ( ) { } , fn = options . fn ; var type = toString . call ( context ) ; if ( type === functionType ) context = context . call ( this ) ; if ( context === true ) return fn ( this ) ; else if ( context === false || context == null ) return inverse ( this ) ; else if ( type === "[object Array]" ) if ( context . length > 0 ) return Handlebars . helpers . each ( context , options ) ; else return inverse ( this ) ; else return fn ( context ) } ) ; Handlebars . K = function ( ) { } ; Handlebars . createFrame = Object . create || function ( object ) { Handlebars . K . prototype = object ; var obj = new Handlebars . K ; Handlebars . K . prototype =
null ; return obj } ; Handlebars . logger = { DEBUG : 0 , INFO : 1 , WARN : 2 , ERROR : 3 , level : 3 , methodMap : { "0" : "debug" , 1 : "info" , 2 : "warn" , 3 : "error" } , log : function ( level , obj ) { if ( Handlebars . logger . level <= level ) { var method = Handlebars . logger . methodMap [ level ] ; if ( typeof console !== "undefined" && console [ method ] ) console [ method ] . call ( console , obj ) } } } ; Handlebars . log = function ( level , obj ) { Handlebars . logger . log ( level , obj ) } ; Handlebars . registerHelper ( "each" , function ( context , options ) { var fn = options . fn , inverse = options . inverse ; var i = 0 , ret = "" ,
data ; var type = toString . call ( context ) ; if ( type === functionType ) context = context . call ( this ) ; if ( options . data ) data = Handlebars . createFrame ( options . data ) ; if ( context && typeof context === "object" ) if ( context instanceof Array ) for ( var j = context . length ; i < j ; i ++ ) { if ( data ) data . index = i ; ret = ret + fn ( context [ i ] , { data : data } ) } else for ( var key in context ) if ( context . hasOwnProperty ( key ) ) { if ( data ) data . key = key ; ret = ret + fn ( context [ key ] , { data : data } ) ; i ++ } if ( i === 0 ) ret = inverse ( this ) ; return ret } ) ; Handlebars . registerHelper ( "if" , function ( conditional ,
options ) { var type = toString . call ( conditional ) ; if ( type === functionType ) conditional = conditional . call ( this ) ; if ( ! conditional || Handlebars . Utils . isEmpty ( conditional ) ) return options . inverse ( this ) ; else return options . fn ( this ) } ) ; Handlebars . registerHelper ( "unless" , function ( conditional , options ) { return Handlebars . helpers [ "if" ] . call ( this , conditional , { fn : options . inverse , inverse : options . fn } ) } ) ; Handlebars . registerHelper ( "with" , function ( context , options ) { var type = toString . call ( context ) ; if ( type === functionType ) context =
context . call ( this ) ; if ( ! Handlebars . Utils . isEmpty ( context ) ) return options . fn ( context ) } ) ; Handlebars . registerHelper ( "log" , function ( context , options ) { var level = options . data && options . data . level != null ? parseInt ( options . data . level , 10 ) : 1 ; Handlebars . log ( level , context ) } ) ; var handlebars = function ( ) { var parser = { trace : function trace ( ) { } , yy : { } , symbols _ : { "error" : 2 , "root" : 3 , "program" : 4 , "EOF" : 5 , "simpleInverse" : 6 , "statements" : 7 , "statement" : 8 , "openInverse" : 9 , "closeBlock" : 10 , "openBlock" : 11 , "mustache" : 12 , "partial" : 13 , "CONTENT" : 14 ,
"COMMENT" : 15 , "OPEN_BLOCK" : 16 , "inMustache" : 17 , "CLOSE" : 18 , "OPEN_INVERSE" : 19 , "OPEN_ENDBLOCK" : 20 , "path" : 21 , "OPEN" : 22 , "OPEN_UNESCAPED" : 23 , "CLOSE_UNESCAPED" : 24 , "OPEN_PARTIAL" : 25 , "partialName" : 26 , "params" : 27 , "hash" : 28 , "dataName" : 29 , "param" : 30 , "STRING" : 31 , "INTEGER" : 32 , "BOOLEAN" : 33 , "hashSegments" : 34 , "hashSegment" : 35 , "ID" : 36 , "EQUALS" : 37 , "DATA" : 38 , "pathSegments" : 39 , "SEP" : 40 , "$accept" : 0 , "$end" : 1 } , terminals _ : { 2 : "error" , 5 : "EOF" , 14 : "CONTENT" , 15 : "COMMENT" , 16 : "OPEN_BLOCK" , 18 : "CLOSE" , 19 : "OPEN_INVERSE" , 20 : "OPEN_ENDBLOCK" ,
22 : "OPEN" , 23 : "OPEN_UNESCAPED" , 24 : "CLOSE_UNESCAPED" , 25 : "OPEN_PARTIAL" , 31 : "STRING" , 32 : "INTEGER" , 33 : "BOOLEAN" , 36 : "ID" , 37 : "EQUALS" , 38 : "DATA" , 40 : "SEP" } , productions _ : [ 0 , [ 3 , 2 ] , [ 4 , 2 ] , [ 4 , 3 ] , [ 4 , 2 ] , [ 4 , 1 ] , [ 4 , 1 ] , [ 4 , 0 ] , [ 7 , 1 ] , [ 7 , 2 ] , [ 8 , 3 ] , [ 8 , 3 ] , [ 8 , 1 ] , [ 8 , 1 ] , [ 8 , 1 ] , [ 8 , 1 ] , [ 11 , 3 ] , [ 9 , 3 ] , [ 10 , 3 ] , [ 12 , 3 ] , [ 12 , 3 ] , [ 13 , 3 ] , [ 13 , 4 ] , [ 6 , 2 ] , [ 17 , 3 ] , [ 17 , 2 ] , [ 17 , 2 ] , [ 17 , 1 ] , [ 17 , 1 ] , [ 27 , 2 ] , [ 27 , 1 ] , [ 30 , 1 ] , [ 30 , 1 ] , [ 30 , 1 ] , [ 30 , 1 ] , [ 30 , 1 ] , [ 28 , 1 ] , [ 34 , 2 ] , [ 34 , 1 ] , [ 35 , 3 ] , [ 35 , 3 ] , [ 35 , 3 ] , [ 35 , 3 ] , [ 35 , 3 ] , [ 26 , 1 ] , [ 26 , 1 ] , [ 26 , 1 ] , [ 29 , 2 ] , [ 21 , 1 ] , [ 39 , 3 ] , [ 39 , 1 ] ] , performAction : function anonymous ( yytext ,
yyleng , yylineno , yy , yystate , $$ , _$ ) { var $0 = $$ . length - 1 ; switch ( yystate ) { case 1 : return $$ [ $0 - 1 ] ; break ; case 2 : this . $ = new yy . ProgramNode ( [ ] , $$ [ $0 ] ) ; break ; case 3 : this . $ = new yy . ProgramNode ( $$ [ $0 - 2 ] , $$ [ $0 ] ) ; break ; case 4 : this . $ = new yy . ProgramNode ( $$ [ $0 - 1 ] , [ ] ) ; break ; case 5 : this . $ = new yy . ProgramNode ( $$ [ $0 ] ) ; break ; case 6 : this . $ = new yy . ProgramNode ( [ ] , [ ] ) ; break ; case 7 : this . $ = new yy . ProgramNode ( [ ] ) ; break ; case 8 : this . $ = [ $$ [ $0 ] ] ; break ; case 9 : $$ [ $0 - 1 ] . push ( $$ [ $0 ] ) ; this . $ = $$ [ $0 - 1 ] ; break ; case 10 : this . $ = new yy . BlockNode ( $$ [ $0 -
2 ] , $$ [ $0 - 1 ] . inverse , $$ [ $0 - 1 ] , $$ [ $0 ] ) ; break ; case 11 : this . $ = new yy . BlockNode ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] , $$ [ $0 - 1 ] . inverse , $$ [ $0 ] ) ; break ; case 12 : this . $ = $$ [ $0 ] ; break ; case 13 : this . $ = $$ [ $0 ] ; break ; case 14 : this . $ = new yy . ContentNode ( $$ [ $0 ] ) ; break ; case 15 : this . $ = new yy . CommentNode ( $$ [ $0 ] ) ; break ; case 16 : this . $ = new yy . MustacheNode ( $$ [ $0 - 1 ] [ 0 ] , $$ [ $0 - 1 ] [ 1 ] ) ; break ; case 17 : this . $ = new yy . MustacheNode ( $$ [ $0 - 1 ] [ 0 ] , $$ [ $0 - 1 ] [ 1 ] ) ; break ; case 18 : this . $ = $$ [ $0 - 1 ] ; break ; case 19 : this . $ = new yy . MustacheNode ( $$ [ $0 - 1 ] [ 0 ] , $$ [ $0 - 1 ] [ 1 ] , $$ [ $0 -
2 ] [ 2 ] === "&" ) ; break ; case 20 : this . $ = new yy . MustacheNode ( $$ [ $0 - 1 ] [ 0 ] , $$ [ $0 - 1 ] [ 1 ] , true ) ; break ; case 21 : this . $ = new yy . PartialNode ( $$ [ $0 - 1 ] ) ; break ; case 22 : this . $ = new yy . PartialNode ( $$ [ $0 - 2 ] , $$ [ $0 - 1 ] ) ; break ; case 23 : break ; case 24 : this . $ = [ [ $$ [ $0 - 2 ] ] . concat ( $$ [ $0 - 1 ] ) , $$ [ $0 ] ] ; break ; case 25 : this . $ = [ [ $$ [ $0 - 1 ] ] . concat ( $$ [ $0 ] ) , null ] ; break ; case 26 : this . $ = [ [ $$ [ $0 - 1 ] ] , $$ [ $0 ] ] ; break ; case 27 : this . $ = [ [ $$ [ $0 ] ] , null ] ; break ; case 28 : this . $ = [ [ $$ [ $0 ] ] , null ] ; break ; case 29 : $$ [ $0 - 1 ] . push ( $$ [ $0 ] ) ; this . $ = $$ [ $0 - 1 ] ; break ; case 30 : this . $ =
[ $$ [ $0 ] ] ; break ; case 31 : this . $ = $$ [ $0 ] ; break ; case 32 : this . $ = new yy . StringNode ( $$ [ $0 ] ) ; break ; case 33 : this . $ = new yy . IntegerNode ( $$ [ $0 ] ) ; break ; case 34 : this . $ = new yy . BooleanNode ( $$ [ $0 ] ) ; break ; case 35 : this . $ = $$ [ $0 ] ; break ; case 36 : this . $ = new yy . HashNode ( $$ [ $0 ] ) ; break ; case 37 : $$ [ $0 - 1 ] . push ( $$ [ $0 ] ) ; this . $ = $$ [ $0 - 1 ] ; break ; case 38 : this . $ = [ $$ [ $0 ] ] ; break ; case 39 : this . $ = [ $$ [ $0 - 2 ] , $$ [ $0 ] ] ; break ; case 40 : this . $ = [ $$ [ $0 - 2 ] , new yy . StringNode ( $$ [ $0 ] ) ] ; break ; case 41 : this . $ = [ $$ [ $0 - 2 ] , new yy . IntegerNode ( $$ [ $0 ] ) ] ; break ; case 42 : this . $ =
[ $$ [ $0 - 2 ] , new yy . BooleanNode ( $$ [ $0 ] ) ] ; break ; case 43 : this . $ = [ $$ [ $0 - 2 ] , $$ [ $0 ] ] ; break ; case 44 : this . $ = new yy . PartialNameNode ( $$ [ $0 ] ) ; break ; case 45 : this . $ = new yy . PartialNameNode ( new yy . StringNode ( $$ [ $0 ] ) ) ; break ; case 46 : this . $ = new yy . PartialNameNode ( new yy . IntegerNode ( $$ [ $0 ] ) ) ; break ; case 47 : this . $ = new yy . DataNode ( $$ [ $0 ] ) ; break ; case 48 : this . $ = new yy . IdNode ( $$ [ $0 ] ) ; break ; case 49 : $$ [ $0 - 2 ] . push ( { part : $$ [ $0 ] , separator : $$ [ $0 - 1 ] } ) ; this . $ = $$ [ $0 - 2 ] ; break ; case 50 : this . $ = [ { part : $$ [ $0 ] } ] ; break } } , table : [ { 3 : 1 , 4 : 2 , 5 : [ 2 ,
7 ] , 6 : 3 , 7 : 4 , 8 : 6 , 9 : 7 , 11 : 8 , 12 : 9 , 13 : 10 , 14 : [ 1 , 11 ] , 15 : [ 1 , 12 ] , 16 : [ 1 , 13 ] , 19 : [ 1 , 5 ] , 22 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 25 : [ 1 , 16 ] } , { 1 : [ 3 ] } , { 5 : [ 1 , 17 ] } , { 5 : [ 2 , 6 ] , 7 : 18 , 8 : 6 , 9 : 7 , 11 : 8 , 12 : 9 , 13 : 10 , 14 : [ 1 , 11 ] , 15 : [ 1 , 12 ] , 16 : [ 1 , 13 ] , 19 : [ 1 , 19 ] , 20 : [ 2 , 6 ] , 22 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 25 : [ 1 , 16 ] } , { 5 : [ 2 , 5 ] , 6 : 20 , 8 : 21 , 9 : 7 , 11 : 8 , 12 : 9 , 13 : 10 , 14 : [ 1 , 11 ] , 15 : [ 1 , 12 ] , 16 : [ 1 , 13 ] , 19 : [ 1 , 5 ] , 20 : [ 2 , 5 ] , 22 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 25 : [ 1 , 16 ] } , { 17 : 23 , 18 : [ 1 , 22 ] , 21 : 24 , 29 : 25 , 36 : [ 1 , 28 ] , 38 : [ 1 , 27 ] , 39 : 26 } , { 5 : [ 2 , 8 ] , 14 : [ 2 , 8 ] , 15 : [ 2 , 8 ] , 16 : [ 2 , 8 ] , 19 : [ 2 , 8 ] , 20 : [ 2 , 8 ] , 22 : [ 2 , 8 ] , 23 : [ 2 , 8 ] , 25 : [ 2 , 8 ] } , { 4 : 29 ,
6 : 3 , 7 : 4 , 8 : 6 , 9 : 7 , 11 : 8 , 12 : 9 , 13 : 10 , 14 : [ 1 , 11 ] , 15 : [ 1 , 12 ] , 16 : [ 1 , 13 ] , 19 : [ 1 , 5 ] , 20 : [ 2 , 7 ] , 22 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 25 : [ 1 , 16 ] } , { 4 : 30 , 6 : 3 , 7 : 4 , 8 : 6 , 9 : 7 , 11 : 8 , 12 : 9 , 13 : 10 , 14 : [ 1 , 11 ] , 15 : [ 1 , 12 ] , 16 : [ 1 , 13 ] , 19 : [ 1 , 5 ] , 20 : [ 2 , 7 ] , 22 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 25 : [ 1 , 16 ] } , { 5 : [ 2 , 12 ] , 14 : [ 2 , 12 ] , 15 : [ 2 , 12 ] , 16 : [ 2 , 12 ] , 19 : [ 2 , 12 ] , 20 : [ 2 , 12 ] , 22 : [ 2 , 12 ] , 23 : [ 2 , 12 ] , 25 : [ 2 , 12 ] } , { 5 : [ 2 , 13 ] , 14 : [ 2 , 13 ] , 15 : [ 2 , 13 ] , 16 : [ 2 , 13 ] , 19 : [ 2 , 13 ] , 20 : [ 2 , 13 ] , 22 : [ 2 , 13 ] , 23 : [ 2 , 13 ] , 25 : [ 2 , 13 ] } , { 5 : [ 2 , 14 ] , 14 : [ 2 , 14 ] , 15 : [ 2 , 14 ] , 16 : [ 2 , 14 ] , 19 : [ 2 , 14 ] , 20 : [ 2 , 14 ] , 22 : [ 2 , 14 ] , 23 : [ 2 , 14 ] , 25 : [ 2 , 14 ] } ,
{ 5 : [ 2 , 15 ] , 14 : [ 2 , 15 ] , 15 : [ 2 , 15 ] , 16 : [ 2 , 15 ] , 19 : [ 2 , 15 ] , 20 : [ 2 , 15 ] , 22 : [ 2 , 15 ] , 23 : [ 2 , 15 ] , 25 : [ 2 , 15 ] } , { 17 : 31 , 21 : 24 , 29 : 25 , 36 : [ 1 , 28 ] , 38 : [ 1 , 27 ] , 39 : 26 } , { 17 : 32 , 21 : 24 , 29 : 25 , 36 : [ 1 , 28 ] , 38 : [ 1 , 27 ] , 39 : 26 } , { 17 : 33 , 21 : 24 , 29 : 25 , 36 : [ 1 , 28 ] , 38 : [ 1 , 27 ] , 39 : 26 } , { 21 : 35 , 26 : 34 , 31 : [ 1 , 36 ] , 32 : [ 1 , 37 ] , 36 : [ 1 , 28 ] , 39 : 26 } , { 1 : [ 2 , 1 ] } , { 5 : [ 2 , 2 ] , 8 : 21 , 9 : 7 , 11 : 8 , 12 : 9 , 13 : 10 , 14 : [ 1 , 11 ] , 15 : [ 1 , 12 ] , 16 : [ 1 , 13 ] , 19 : [ 1 , 19 ] , 20 : [ 2 , 2 ] , 22 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 25 : [ 1 , 16 ] } , { 17 : 23 , 21 : 24 , 29 : 25 , 36 : [ 1 , 28 ] , 38 : [ 1 , 27 ] , 39 : 26 } , { 5 : [ 2 , 4 ] , 7 : 38 , 8 : 6 , 9 : 7 , 11 : 8 , 12 : 9 , 13 : 10 , 14 : [ 1 , 11 ] , 15 : [ 1 ,
12 ] , 16 : [ 1 , 13 ] , 19 : [ 1 , 19 ] , 20 : [ 2 , 4 ] , 22 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 25 : [ 1 , 16 ] } , { 5 : [ 2 , 9 ] , 14 : [ 2 , 9 ] , 15 : [ 2 , 9 ] , 16 : [ 2 , 9 ] , 19 : [ 2 , 9 ] , 20 : [ 2 , 9 ] , 22 : [ 2 , 9 ] , 23 : [ 2 , 9 ] , 25 : [ 2 , 9 ] } , { 5 : [ 2 , 23 ] , 14 : [ 2 , 23 ] , 15 : [ 2 , 23 ] , 16 : [ 2 , 23 ] , 19 : [ 2 , 23 ] , 20 : [ 2 , 23 ] , 22 : [ 2 , 23 ] , 23 : [ 2 , 23 ] , 25 : [ 2 , 23 ] } , { 18 : [ 1 , 39 ] } , { 18 : [ 2 , 27 ] , 21 : 44 , 24 : [ 2 , 27 ] , 27 : 40 , 28 : 41 , 29 : 48 , 30 : 42 , 31 : [ 1 , 45 ] , 32 : [ 1 , 46 ] , 33 : [ 1 , 47 ] , 34 : 43 , 35 : 49 , 36 : [ 1 , 50 ] , 38 : [ 1 , 27 ] , 39 : 26 } , { 18 : [ 2 , 28 ] , 24 : [ 2 , 28 ] } , { 18 : [ 2 , 48 ] , 24 : [ 2 , 48 ] , 31 : [ 2 , 48 ] , 32 : [ 2 , 48 ] , 33 : [ 2 , 48 ] , 36 : [ 2 , 48 ] , 38 : [ 2 , 48 ] , 40 : [ 1 , 51 ] } , { 21 : 52 , 36 : [ 1 , 28 ] , 39 : 26 } , { 18 : [ 2 ,
50 ] , 24 : [ 2 , 50 ] , 31 : [ 2 , 50 ] , 32 : [ 2 , 50 ] , 33 : [ 2 , 50 ] , 36 : [ 2 , 50 ] , 38 : [ 2 , 50 ] , 40 : [ 2 , 50 ] } , { 10 : 53 , 20 : [ 1 , 54 ] } , { 10 : 55 , 20 : [ 1 , 54 ] } , { 18 : [ 1 , 56 ] } , { 18 : [ 1 , 57 ] } , { 24 : [ 1 , 58 ] } , { 18 : [ 1 , 59 ] , 21 : 60 , 36 : [ 1 , 28 ] , 39 : 26 } , { 18 : [ 2 , 44 ] , 36 : [ 2 , 44 ] } , { 18 : [ 2 , 45 ] , 36 : [ 2 , 45 ] } , { 18 : [ 2 , 46 ] , 36 : [ 2 , 46 ] } , { 5 : [ 2 , 3 ] , 8 : 21 , 9 : 7 , 11 : 8 , 12 : 9 , 13 : 10 , 14 : [ 1 , 11 ] , 15 : [ 1 , 12 ] , 16 : [ 1 , 13 ] , 19 : [ 1 , 19 ] , 20 : [ 2 , 3 ] , 22 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 25 : [ 1 , 16 ] } , { 14 : [ 2 , 17 ] , 15 : [ 2 , 17 ] , 16 : [ 2 , 17 ] , 19 : [ 2 , 17 ] , 20 : [ 2 , 17 ] , 22 : [ 2 , 17 ] , 23 : [ 2 , 17 ] , 25 : [ 2 , 17 ] } , { 18 : [ 2 , 25 ] , 21 : 44 , 24 : [ 2 , 25 ] , 28 : 61 , 29 : 48 , 30 : 62 , 31 : [ 1 , 45 ] , 32 : [ 1 ,
46 ] , 33 : [ 1 , 47 ] , 34 : 43 , 35 : 49 , 36 : [ 1 , 50 ] , 38 : [ 1 , 27 ] , 39 : 26 } , { 18 : [ 2 , 26 ] , 24 : [ 2 , 26 ] } , { 18 : [ 2 , 30 ] , 24 : [ 2 , 30 ] , 31 : [ 2 , 30 ] , 32 : [ 2 , 30 ] , 33 : [ 2 , 30 ] , 36 : [ 2 , 30 ] , 38 : [ 2 , 30 ] } , { 18 : [ 2 , 36 ] , 24 : [ 2 , 36 ] , 35 : 63 , 36 : [ 1 , 64 ] } , { 18 : [ 2 , 31 ] , 24 : [ 2 , 31 ] , 31 : [ 2 , 31 ] , 32 : [ 2 , 31 ] , 33 : [ 2 , 31 ] , 36 : [ 2 , 31 ] , 38 : [ 2 , 31 ] } , { 18 : [ 2 , 32 ] , 24 : [ 2 , 32 ] , 31 : [ 2 , 32 ] , 32 : [ 2 , 32 ] , 33 : [ 2 , 32 ] , 36 : [ 2 , 32 ] , 38 : [ 2 , 32 ] } , { 18 : [ 2 , 33 ] , 24 : [ 2 , 33 ] , 31 : [ 2 , 33 ] , 32 : [ 2 , 33 ] , 33 : [ 2 , 33 ] , 36 : [ 2 , 33 ] , 38 : [ 2 , 33 ] } , { 18 : [ 2 , 34 ] , 24 : [ 2 , 34 ] , 31 : [ 2 , 34 ] , 32 : [ 2 , 34 ] , 33 : [ 2 , 34 ] , 36 : [ 2 , 34 ] , 38 : [ 2 , 34 ] } , { 18 : [ 2 , 35 ] , 24 : [ 2 , 35 ] , 31 : [ 2 , 35 ] ,
32 : [ 2 , 35 ] , 33 : [ 2 , 35 ] , 36 : [ 2 , 35 ] , 38 : [ 2 , 35 ] } , { 18 : [ 2 , 38 ] , 24 : [ 2 , 38 ] , 36 : [ 2 , 38 ] } , { 18 : [ 2 , 50 ] , 24 : [ 2 , 50 ] , 31 : [ 2 , 50 ] , 32 : [ 2 , 50 ] , 33 : [ 2 , 50 ] , 36 : [ 2 , 50 ] , 37 : [ 1 , 65 ] , 38 : [ 2 , 50 ] , 40 : [ 2 , 50 ] } , { 36 : [ 1 , 66 ] } , { 18 : [ 2 , 47 ] , 24 : [ 2 , 47 ] , 31 : [ 2 , 47 ] , 32 : [ 2 , 47 ] , 33 : [ 2 , 47 ] , 36 : [ 2 , 47 ] , 38 : [ 2 , 47 ] } , { 5 : [ 2 , 10 ] , 14 : [ 2 , 10 ] , 15 : [ 2 , 10 ] , 16 : [ 2 , 10 ] , 19 : [ 2 , 10 ] , 20 : [ 2 , 10 ] , 22 : [ 2 , 10 ] , 23 : [ 2 , 10 ] , 25 : [ 2 , 10 ] } , { 21 : 67 , 36 : [ 1 , 28 ] , 39 : 26 } , { 5 : [ 2 , 11 ] , 14 : [ 2 , 11 ] , 15 : [ 2 , 11 ] , 16 : [ 2 , 11 ] , 19 : [ 2 , 11 ] , 20 : [ 2 , 11 ] , 22 : [ 2 , 11 ] , 23 : [ 2 , 11 ] , 25 : [ 2 , 11 ] } , { 14 : [ 2 , 16 ] , 15 : [ 2 , 16 ] , 16 : [ 2 , 16 ] , 19 : [ 2 , 16 ] , 20 : [ 2 ,
16 ] , 22 : [ 2 , 16 ] , 23 : [ 2 , 16 ] , 25 : [ 2 , 16 ] } , { 5 : [ 2 , 19 ] , 14 : [ 2 , 19 ] , 15 : [ 2 , 19 ] , 16 : [ 2 , 19 ] , 19 : [ 2 , 19 ] , 20 : [ 2 , 19 ] , 22 : [ 2 , 19 ] , 23 : [ 2 , 19 ] , 25 : [ 2 , 19 ] } , { 5 : [ 2 , 20 ] , 14 : [ 2 , 20 ] , 15 : [ 2 , 20 ] , 16 : [ 2 , 20 ] , 19 : [ 2 , 20 ] , 20 : [ 2 , 20 ] , 22 : [ 2 , 20 ] , 23 : [ 2 , 20 ] , 25 : [ 2 , 20 ] } , { 5 : [ 2 , 21 ] , 14 : [ 2 , 21 ] , 15 : [ 2 , 21 ] , 16 : [ 2 , 21 ] , 19 : [ 2 , 21 ] , 20 : [ 2 , 21 ] , 22 : [ 2 , 21 ] , 23 : [ 2 , 21 ] , 25 : [ 2 , 21 ] } , { 18 : [ 1 , 68 ] } , { 18 : [ 2 , 24 ] , 24 : [ 2 , 24 ] } , { 18 : [ 2 , 29 ] , 24 : [ 2 , 29 ] , 31 : [ 2 , 29 ] , 32 : [ 2 , 29 ] , 33 : [ 2 , 29 ] , 36 : [ 2 , 29 ] , 38 : [ 2 , 29 ] } , { 18 : [ 2 , 37 ] , 24 : [ 2 , 37 ] , 36 : [ 2 , 37 ] } , { 37 : [ 1 , 65 ] } , { 21 : 69 , 29 : 73 , 31 : [ 1 , 70 ] , 32 : [ 1 , 71 ] , 33 : [ 1 , 72 ] ,
36 : [ 1 , 28 ] , 38 : [ 1 , 27 ] , 39 : 26 } , { 18 : [ 2 , 49 ] , 24 : [ 2 , 49 ] , 31 : [ 2 , 49 ] , 32 : [ 2 , 49 ] , 33 : [ 2 , 49 ] , 36 : [ 2 , 49 ] , 38 : [ 2 , 49 ] , 40 : [ 2 , 49 ] } , { 18 : [ 1 , 74 ] } , { 5 : [ 2 , 22 ] , 14 : [ 2 , 22 ] , 15 : [ 2 , 22 ] , 16 : [ 2 , 22 ] , 19 : [ 2 , 22 ] , 20 : [ 2 , 22 ] , 22 : [ 2 , 22 ] , 23 : [ 2 , 22 ] , 25 : [ 2 , 22 ] } , { 18 : [ 2 , 39 ] , 24 : [ 2 , 39 ] , 36 : [ 2 , 39 ] } , { 18 : [ 2 , 40 ] , 24 : [ 2 , 40 ] , 36 : [ 2 , 40 ] } , { 18 : [ 2 , 41 ] , 24 : [ 2 , 41 ] , 36 : [ 2 , 41 ] } , { 18 : [ 2 , 42 ] , 24 : [ 2 , 42 ] , 36 : [ 2 , 42 ] } , { 18 : [ 2 , 43 ] , 24 : [ 2 , 43 ] , 36 : [ 2 , 43 ] } , { 5 : [ 2 , 18 ] , 14 : [ 2 , 18 ] , 15 : [ 2 , 18 ] , 16 : [ 2 , 18 ] , 19 : [ 2 , 18 ] , 20 : [ 2 , 18 ] , 22 : [ 2 , 18 ] , 23 : [ 2 , 18 ] , 25 : [ 2 , 18 ] } ] , defaultActions : { 17 : [ 2 , 1 ] } , parseError : function parseError ( str ,
hash ) { throw new Error ( str ) ; } , parse : function parse ( input ) { var self = this , stack = [ 0 ] , vstack = [ null ] , lstack = [ ] , table = this . table , yytext = "" , yylineno = 0 , yyleng = 0 , recovering = 0 , TERROR = 2 , EOF = 1 ; this . lexer . setInput ( input ) ; this . lexer . yy = this . yy ; this . yy . lexer = this . lexer ; this . yy . parser = this ; if ( typeof this . lexer . yylloc == "undefined" ) this . lexer . yylloc = { } ; var yyloc = this . lexer . yylloc ; lstack . push ( yyloc ) ; var ranges = this . lexer . options && this . lexer . options . ranges ; if ( typeof this . yy . parseError === "function" ) this . parseError = this . yy . parseError ;
function popStack ( n ) { stack . length = stack . length - 2 * n ; vstack . length = vstack . length - n ; lstack . length = lstack . length - n } function lex ( ) { var token ; token = self . lexer . lex ( ) || 1 ; if ( typeof token !== "number" ) token = self . symbols _ [ token ] || token ; return token } var symbol , preErrorSymbol , state , action , a , r , yyval = { } , p , len , newState , expected ; while ( true ) { state = stack [ stack . length - 1 ] ; if ( this . defaultActions [ state ] ) action = this . defaultActions [ state ] ; else { if ( symbol === null || typeof symbol == "undefined" ) symbol = lex ( ) ; action = table [ state ] && table [ state ] [ symbol ] } if ( typeof action ===
"undefined" || ! action . length || ! action [ 0 ] ) { var errStr = "" ; if ( ! recovering ) { expected = [ ] ; for ( p in table [ state ] ) if ( this . terminals _ [ p ] && p > 2 ) expected . push ( "'" + this . terminals _ [ p ] + "'" ) ; if ( this . lexer . showPosition ) errStr = "Parse error on line " + ( yylineno + 1 ) + ":\n" + this . lexer . showPosition ( ) + "\nExpecting " + expected . join ( ", " ) + ", got '" + ( this . terminals _ [ symbol ] || symbol ) + "'" ; else errStr = "Parse error on line " + ( yylineno + 1 ) + ": Unexpected " + ( symbol == 1 ? "end of input" : "'" + ( this . terminals _ [ symbol ] || symbol ) + "'" ) ; this . parseError ( errStr ,
{ text : this . lexer . match , token : this . terminals _ [ symbol ] || symbol , line : this . lexer . yylineno , loc : yyloc , expected : expected } ) } } if ( action [ 0 ] instanceof Array && action . length > 1 ) throw new Error ( "Parse Error: multiple actions possible at state: " + state + ", token: " + symbol ) ; switch ( action [ 0 ] ) { case 1 : stack . push ( symbol ) ; vstack . push ( this . lexer . yytext ) ; lstack . push ( this . lexer . yylloc ) ; stack . push ( action [ 1 ] ) ; symbol = null ; if ( ! preErrorSymbol ) { yyleng = this . lexer . yyleng ; yytext = this . lexer . yytext ; yylineno = this . lexer . yylineno ; yyloc =
this . lexer . yylloc ; if ( recovering > 0 ) recovering -- } else { symbol = preErrorSymbol ; preErrorSymbol = null } break ; case 2 : len = this . productions _ [ action [ 1 ] ] [ 1 ] ; yyval . $ = vstack [ vstack . length - len ] ; yyval . _$ = { first _line : lstack [ lstack . length - ( len || 1 ) ] . first _line , last _line : lstack [ lstack . length - 1 ] . last _line , first _column : lstack [ lstack . length - ( len || 1 ) ] . first _column , last _column : lstack [ lstack . length - 1 ] . last _column } ; if ( ranges ) yyval . _$ . range = [ lstack [ lstack . length - ( len || 1 ) ] . range [ 0 ] , lstack [ lstack . length - 1 ] . range [ 1 ] ] ; r = this . performAction . call ( yyval ,
yytext , yyleng , yylineno , this . yy , action [ 1 ] , vstack , lstack ) ; if ( typeof r !== "undefined" ) return r ; if ( len ) { stack = stack . slice ( 0 , - 1 * len * 2 ) ; vstack = vstack . slice ( 0 , - 1 * len ) ; lstack = lstack . slice ( 0 , - 1 * len ) } stack . push ( this . productions _ [ action [ 1 ] ] [ 0 ] ) ; vstack . push ( yyval . $ ) ; lstack . push ( yyval . _$ ) ; newState = table [ stack [ stack . length - 2 ] ] [ stack [ stack . length - 1 ] ] ; stack . push ( newState ) ; break ; case 3 : return true } } return true } } ; var lexer = function ( ) { var lexer = { EOF : 1 , parseError : function parseError ( str , hash ) { if ( this . yy . parser ) this . yy . parser . parseError ( str ,
hash ) ; else throw new Error ( str ) ; } , setInput : function ( input ) { this . _input = input ; this . _more = this . _less = this . done = false ; this . yylineno = this . yyleng = 0 ; this . yytext = this . matched = this . match = "" ; this . conditionStack = [ "INITIAL" ] ; this . yylloc = { first _line : 1 , first _column : 0 , last _line : 1 , last _column : 0 } ; if ( this . options . ranges ) this . yylloc . range = [ 0 , 0 ] ; this . offset = 0 ; return this } , input : function ( ) { var ch = this . _input [ 0 ] ; this . yytext += ch ; this . yyleng ++ ; this . offset ++ ; this . match += ch ; this . matched += ch ; var lines = ch . match ( /(?:\r\n?|\n).*/g ) ;
if ( lines ) { this . yylineno ++ ; this . yylloc . last _line ++ } else this . yylloc . last _column ++ ; if ( this . options . ranges ) this . yylloc . range [ 1 ] ++ ; this . _input = this . _input . slice ( 1 ) ; return ch } , unput : function ( ch ) { var len = ch . length ; var lines = ch . split ( /(?:\r\n?|\n)/g ) ; this . _input = ch + this . _input ; this . yytext = this . yytext . substr ( 0 , this . yytext . length - len - 1 ) ; this . offset -= len ; var oldLines = this . match . split ( /(?:\r\n?|\n)/g ) ; this . match = this . match . substr ( 0 , this . match . length - 1 ) ; this . matched = this . matched . substr ( 0 , this . matched . length -
1 ) ; if ( lines . length - 1 ) this . yylineno -= lines . length - 1 ; var r = this . yylloc . range ; this . yylloc = { first _line : this . yylloc . first _line , last _line : this . yylineno + 1 , first _column : this . yylloc . first _column , last _column : lines ? ( lines . length === oldLines . length ? this . yylloc . first _column : 0 ) + oldLines [ oldLines . length - lines . length ] . length - lines [ 0 ] . length : this . yylloc . first _column - len } ; if ( this . options . ranges ) this . yylloc . range = [ r [ 0 ] , r [ 0 ] + this . yyleng - len ] ; return this } , more : function ( ) { this . _more = true ; return this } , less : function ( n ) { this . unput ( this . match . slice ( n ) ) } ,
pastInput : function ( ) { var past = this . matched . substr ( 0 , this . matched . length - this . match . length ) ; return ( past . length > 20 ? "..." : "" ) + past . substr ( - 20 ) . replace ( /\n/g , "" ) } , upcomingInput : function ( ) { var next = this . match ; if ( next . length < 20 ) next += this . _input . substr ( 0 , 20 - next . length ) ; return ( next . substr ( 0 , 20 ) + ( next . length > 20 ? "..." : "" ) ) . replace ( /\n/g , "" ) } , showPosition : function ( ) { var pre = this . pastInput ( ) ; var c = ( new Array ( pre . length + 1 ) ) . join ( "-" ) ; return pre + this . upcomingInput ( ) + "\n" + c + "^" } , next : function ( ) { if ( this . done ) return this . EOF ;
if ( ! this . _input ) this . done = true ; var token , match , tempMatch , index , col , lines ; if ( ! this . _more ) { this . yytext = "" ; this . match = "" } var rules = this . _currentRules ( ) ; for ( var i = 0 ; i < rules . length ; i ++ ) { tempMatch = this . _input . match ( this . rules [ rules [ i ] ] ) ; if ( tempMatch && ( ! match || tempMatch [ 0 ] . length > match [ 0 ] . length ) ) { match = tempMatch ; index = i ; if ( ! this . options . flex ) break } } if ( match ) { lines = match [ 0 ] . match ( /(?:\r\n?|\n).*/g ) ; if ( lines ) this . yylineno += lines . length ; this . yylloc = { first _line : this . yylloc . last _line , last _line : this . yylineno +
1 , first _column : this . yylloc . last _column , last _column : lines ? lines [ lines . length - 1 ] . length - lines [ lines . length - 1 ] . match ( /\r?\n?/ ) [ 0 ] . length : this . yylloc . last _column + match [ 0 ] . length } ; this . yytext += match [ 0 ] ; this . match += match [ 0 ] ; this . matches = match ; this . yyleng = this . yytext . length ; if ( this . options . ranges ) this . yylloc . range = [ this . offset , this . offset += this . yyleng ] ; this . _more = false ; this . _input = this . _input . slice ( match [ 0 ] . length ) ; this . matched += match [ 0 ] ; token = this . performAction . call ( this , this . yy , this , rules [ index ] , this . conditionStack [ this . conditionStack . length -
1 ] ) ; if ( this . done && this . _input ) this . done = false ; if ( token ) return token ; else return } if ( this . _input === "" ) return this . EOF ; else return this . parseError ( "Lexical error on line " + ( this . yylineno + 1 ) + ". Unrecognized text.\n" + this . showPosition ( ) , { text : "" , token : null , line : this . yylineno } ) } , lex : function lex ( ) { var r = this . next ( ) ; if ( typeof r !== "undefined" ) return r ; else return this . lex ( ) } , begin : function begin ( condition ) { this . conditionStack . push ( condition ) } , popState : function popState ( ) { return this . conditionStack . pop ( ) } ,
_currentRules : function _currentRules ( ) { return this . conditions [ this . conditionStack [ this . conditionStack . length - 1 ] ] . rules } , topState : function ( ) { return this . conditionStack [ this . conditionStack . length - 2 ] } , pushState : function begin ( condition ) { this . begin ( condition ) } } ; lexer . options = { } ; lexer . performAction = function anonymous ( yy , yy _ , $avoiding _name _collisions , YY _START ) { var YYSTATE = YY _START ; switch ( $avoiding _name _collisions ) { case 0 : yy _ . yytext = "\\" ; return 14 ; break ; case 1 : if ( yy _ . yytext . slice ( - 1 ) !== "\\" ) this . begin ( "mu" ) ;
if ( yy _ . yytext . slice ( - 1 ) === "\\" ) yy _ . yytext = yy _ . yytext . substr ( 0 , yy _ . yyleng - 1 ) , this . begin ( "emu" ) ; if ( yy _ . yytext ) return 14 ; break ; case 2 : return 14 ; break ; case 3 : if ( yy _ . yytext . slice ( - 1 ) !== "\\" ) this . popState ( ) ; if ( yy _ . yytext . slice ( - 1 ) === "\\" ) yy _ . yytext = yy _ . yytext . substr ( 0 , yy _ . yyleng - 1 ) ; return 14 ; break ; case 4 : yy _ . yytext = yy _ . yytext . substr ( 0 , yy _ . yyleng - 4 ) ; this . popState ( ) ; return 15 ; break ; case 5 : return 25 ; break ; case 6 : return 16 ; break ; case 7 : return 20 ; break ; case 8 : return 19 ; break ; case 9 : return 19 ; break ; case 10 : return 23 ;
break ; case 11 : return 22 ; break ; case 12 : this . popState ( ) ; this . begin ( "com" ) ; break ; case 13 : yy _ . yytext = yy _ . yytext . substr ( 3 , yy _ . yyleng - 5 ) ; this . popState ( ) ; return 15 ; break ; case 14 : return 22 ; break ; case 15 : return 37 ; break ; case 16 : return 36 ; break ; case 17 : return 36 ; break ; case 18 : return 40 ; break ; case 19 : break ; case 20 : this . popState ( ) ; return 24 ; break ; case 21 : this . popState ( ) ; return 18 ; break ; case 22 : yy _ . yytext = yy _ . yytext . substr ( 1 , yy _ . yyleng - 2 ) . replace ( /\\"/g , '"' ) ; return 31 ; break ; case 23 : yy _ . yytext = yy _ . yytext . substr ( 1 ,
yy _ . yyleng - 2 ) . replace ( /\\'/g , "'" ) ; return 31 ; break ; case 24 : return 38 ; break ; case 25 : return 33 ; break ; case 26 : return 33 ; break ; case 27 : return 32 ; break ; case 28 : return 36 ; break ; case 29 : yy _ . yytext = yy _ . yytext . substr ( 1 , yy _ . yyleng - 2 ) ; return 36 ; break ; case 30 : return "INVALID" ; break ; case 31 : return 5 ; break } } ; lexer . rules = [ /^(?:\\\\(?=(\{\{)))/ , /^(?:[^\x00]*?(?=(\{\{)))/ , /^(?:[^\x00]+)/ , /^(?:[^\x00]{2,}?(?=(\{\{|$)))/ , /^(?:[\s\S]*?--\}\})/ , /^(?:\{\{>)/ , /^(?:\{\{#)/ , /^(?:\{\{\/)/ , /^(?:\{\{\^)/ , /^(?:\{\{\s*else\b)/ ,
/^(?:\{\{\{)/ , /^(?:\{\{&)/ , /^(?:\{\{!--)/ , /^(?:\{\{![\s\S]*?\}\})/ , /^(?:\{\{)/ , /^(?:=)/ , /^(?:\.(?=[}\/ ]))/ , /^(?:\.\.)/ , /^(?:[\/.])/ , /^(?:\s+)/ , /^(?:\}\}\})/ , /^(?:\}\})/ , /^(?:"(\\["]|[^"])*")/ , /^(?:'(\\[']|[^'])*')/ , /^(?:@)/ , /^(?:true(?=[}\s]))/ , /^(?:false(?=[}\s]))/ , /^(?:-?[0-9]+(?=[}\s]))/ , /^(?:[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.]))/ , /^(?:\[[^\]]*\])/ , /^(?:.)/ , /^(?:$)/ ] ; lexer . conditions = { "mu" : { "rules" : [ 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 ] , "inclusive" : false } ,
"emu" : { "rules" : [ 3 ] , "inclusive" : false } , "com" : { "rules" : [ 4 ] , "inclusive" : false } , "INITIAL" : { "rules" : [ 0 , 1 , 2 , 31 ] , "inclusive" : true } } ; return lexer } ( ) ; parser . lexer = lexer ; function Parser ( ) { this . yy = { } } Parser . prototype = parser ; parser . Parser = Parser ; return new Parser } ( ) ; Handlebars . Parser = handlebars ; Handlebars . parse = function ( input ) { if ( input . constructor === Handlebars . AST . ProgramNode ) return input ; Handlebars . Parser . yy = Handlebars . AST ; return Handlebars . Parser . parse ( input ) } ; Handlebars . AST = { } ; Handlebars . AST . ProgramNode = function ( statements ,
inverse ) { this . type = "program" ; this . statements = statements ; if ( inverse ) this . inverse = new Handlebars . AST . ProgramNode ( inverse ) } ; Handlebars . AST . MustacheNode = function ( rawParams , hash , unescaped ) { this . type = "mustache" ; this . escaped = ! unescaped ; this . hash = hash ; var id = this . id = rawParams [ 0 ] ; var params = this . params = rawParams . slice ( 1 ) ; var eligibleHelper = this . eligibleHelper = id . isSimple ; this . isHelper = eligibleHelper && ( params . length || hash ) } ; Handlebars . AST . PartialNode = function ( partialName , context ) { this . type = "partial" ; this . partialName =
partialName ; this . context = context } ; Handlebars . AST . BlockNode = function ( mustache , program , inverse , close ) { var verifyMatch = function ( open , close ) { if ( open . original !== close . original ) throw new Handlebars . Exception ( open . original + " doesn't match " + close . original ) ; } ; verifyMatch ( mustache . id , close ) ; this . type = "block" ; this . mustache = mustache ; this . program = program ; this . inverse = inverse ; if ( this . inverse && ! this . program ) this . isInverse = true } ; Handlebars . AST . ContentNode = function ( string ) { this . type = "content" ; this . string = string } ;
Handlebars . AST . HashNode = function ( pairs ) { this . type = "hash" ; this . pairs = pairs } ; Handlebars . AST . IdNode = function ( parts ) { this . type = "ID" ; var original = "" , dig = [ ] , depth = 0 ; for ( var i = 0 , l = parts . length ; i < l ; i ++ ) { var part = parts [ i ] . part ; original += ( parts [ i ] . separator || "" ) + part ; if ( part === ".." || part === "." || part === "this" ) if ( dig . length > 0 ) throw new Handlebars . Exception ( "Invalid path: " + original ) ; else if ( part === ".." ) depth ++ ; else this . isScoped = true ; else dig . push ( part ) } this . original = original ; this . parts = dig ; this . string = dig . join ( "." ) ;
this . depth = depth ; this . isSimple = parts . length === 1 && ! this . isScoped && depth === 0 ; this . stringModeValue = this . string } ; Handlebars . AST . PartialNameNode = function ( name ) { this . type = "PARTIAL_NAME" ; this . name = name . original } ; Handlebars . AST . DataNode = function ( id ) { this . type = "DATA" ; this . id = id } ; Handlebars . AST . StringNode = function ( string ) { this . type = "STRING" ; this . original = this . string = this . stringModeValue = string } ; Handlebars . AST . IntegerNode = function ( integer ) { this . type = "INTEGER" ; this . original = this . integer = integer ; this . stringModeValue =
Number ( integer ) } ; Handlebars . AST . BooleanNode = function ( bool ) { this . type = "BOOLEAN" ; this . bool = bool ; this . stringModeValue = bool === "true" } ; Handlebars . AST . CommentNode = function ( comment ) { this . type = "comment" ; this . comment = comment } ; var errorProps = [ "description" , "fileName" , "lineNumber" , "message" , "name" , "number" , "stack" ] ; Handlebars . Exception = function ( message ) { var tmp = Error . prototype . constructor . apply ( this , arguments ) ; for ( var idx = 0 ; idx < errorProps . length ; idx ++ ) this [ errorProps [ idx ] ] = tmp [ errorProps [ idx ] ] } ; Handlebars . Exception . prototype =
new Error ; Handlebars . SafeString = function ( string ) { this . string = string } ; Handlebars . SafeString . prototype . toString = function ( ) { return this . string . toString ( ) } ; var escape = { "&" : "&" , "<" : "<" , ">" : ">" , '"' : """ , "'" : "'" , "`" : "`" } ; var badChars = /[&<>"'`]/g ; var possible = /[&<>"'`]/ ; var escapeChar = function ( chr ) { return escape [ chr ] || "&" } ; Handlebars . Utils = { extend : function ( obj , value ) { for ( var key in value ) if ( value . hasOwnProperty ( key ) ) obj [ key ] = value [ key ] } , escapeExpression : function ( string ) { if ( string instanceof
Handlebars . SafeString ) return string . toString ( ) ; else if ( string == null || string === false ) return "" ; string = string . toString ( ) ; if ( ! possible . test ( string ) ) return string ; return string . replace ( badChars , escapeChar ) } , isEmpty : function ( value ) { if ( ! value && value !== 0 ) return true ; else if ( toString . call ( value ) === "[object Array]" && value . length === 0 ) return true ; else return false } } ; var Compiler = Handlebars . Compiler = function ( ) { } ; var JavaScriptCompiler = Handlebars . JavaScriptCompiler = function ( ) { } ; Compiler . prototype = { compiler : Compiler ,
disassemble : function ( ) { var opcodes = this . opcodes , opcode , out = [ ] , params , param ; for ( var i = 0 , l = opcodes . length ; i < l ; i ++ ) { opcode = opcodes [ i ] ; if ( opcode . opcode === "DECLARE" ) out . push ( "DECLARE " + opcode . name + "=" + opcode . value ) ; else { params = [ ] ; for ( var j = 0 ; j < opcode . args . length ; j ++ ) { param = opcode . args [ j ] ; if ( typeof param === "string" ) param = '"' + param . replace ( "\n" , "\\n" ) + '"' ; params . push ( param ) } out . push ( opcode . opcode + " " + params . join ( " " ) ) } } return out . join ( "\n" ) } , equals : function ( other ) { var len = this . opcodes . length ; if ( other . opcodes . length !==
len ) return false ; for ( var i = 0 ; i < len ; i ++ ) { var opcode = this . opcodes [ i ] , otherOpcode = other . opcodes [ i ] ; if ( opcode . opcode !== otherOpcode . opcode || opcode . args . length !== otherOpcode . args . length ) return false ; for ( var j = 0 ; j < opcode . args . length ; j ++ ) if ( opcode . args [ j ] !== otherOpcode . args [ j ] ) return false } len = this . children . length ; if ( other . children . length !== len ) return false ; for ( i = 0 ; i < len ; i ++ ) if ( ! this . children [ i ] . equals ( other . children [ i ] ) ) return false ; return true } , guid : 0 , compile : function ( program , options ) { this . children = [ ] ;
this . depths = { list : [ ] } ; this . options = options ; var knownHelpers = this . options . knownHelpers ; this . options . knownHelpers = { "helperMissing" : true , "blockHelperMissing" : true , "each" : true , "if" : true , "unless" : true , "with" : true , "log" : true } ; if ( knownHelpers ) for ( var name in knownHelpers ) this . options . knownHelpers [ name ] = knownHelpers [ name ] ; return this . program ( program ) } , accept : function ( node ) { return this [ node . type ] ( node ) } , program : function ( program ) { var statements = program . statements , statement ; this . opcodes = [ ] ; for ( var i = 0 , l = statements . length ; i <
l ; i ++ ) { statement = statements [ i ] ; this [ statement . type ] ( statement ) } this . isSimple = l === 1 ; this . depths . list = this . depths . list . sort ( function ( a , b ) { return a - b } ) ; return this } , compileProgram : function ( program ) { var result = ( new this . compiler ) . compile ( program , this . options ) ; var guid = this . guid ++ , depth ; this . usePartial = this . usePartial || result . usePartial ; this . children [ guid ] = result ; for ( var i = 0 , l = result . depths . list . length ; i < l ; i ++ ) { depth = result . depths . list [ i ] ; if ( depth < 2 ) continue ; else this . addDepth ( depth - 1 ) } return guid } , block : function ( block ) { var mustache =
block . mustache , program = block . program , inverse = block . inverse ; if ( program ) program = this . compileProgram ( program ) ; if ( inverse ) inverse = this . compileProgram ( inverse ) ; var type = this . classifyMustache ( mustache ) ; if ( type === "helper" ) this . helperMustache ( mustache , program , inverse ) ; else if ( type === "simple" ) { this . simpleMustache ( mustache ) ; this . opcode ( "pushProgram" , program ) ; this . opcode ( "pushProgram" , inverse ) ; this . opcode ( "emptyHash" ) ; this . opcode ( "blockValue" ) } else { this . ambiguousMustache ( mustache , program , inverse ) ; this . opcode ( "pushProgram" ,
program ) ; this . opcode ( "pushProgram" , inverse ) ; this . opcode ( "emptyHash" ) ; this . opcode ( "ambiguousBlockValue" ) } this . opcode ( "append" ) } , hash : function ( hash ) { var pairs = hash . pairs , pair , val ; this . opcode ( "pushHash" ) ; for ( var i = 0 , l = pairs . length ; i < l ; i ++ ) { pair = pairs [ i ] ; val = pair [ 1 ] ; if ( this . options . stringParams ) { if ( val . depth ) this . addDepth ( val . depth ) ; this . opcode ( "getContext" , val . depth || 0 ) ; this . opcode ( "pushStringParam" , val . stringModeValue , val . type ) } else this . accept ( val ) ; this . opcode ( "assignToHash" , pair [ 0 ] ) } this . opcode ( "popHash" ) } ,
partial : function ( partial ) { var partialName = partial . partialName ; this . usePartial = true ; if ( partial . context ) this . ID ( partial . context ) ; else this . opcode ( "push" , "depth0" ) ; this . opcode ( "invokePartial" , partialName . name ) ; this . opcode ( "append" ) } , content : function ( content ) { this . opcode ( "appendContent" , content . string ) } , mustache : function ( mustache ) { var options = this . options ; var type = this . classifyMustache ( mustache ) ; if ( type === "simple" ) this . simpleMustache ( mustache ) ; else if ( type === "helper" ) this . helperMustache ( mustache ) ; else this . ambiguousMustache ( mustache ) ;
if ( mustache . escaped && ! options . noEscape ) this . opcode ( "appendEscaped" ) ; else this . opcode ( "append" ) } , ambiguousMustache : function ( mustache , program , inverse ) { var id = mustache . id , name = id . parts [ 0 ] , isBlock = program != null || inverse != null ; this . opcode ( "getContext" , id . depth ) ; this . opcode ( "pushProgram" , program ) ; this . opcode ( "pushProgram" , inverse ) ; this . opcode ( "invokeAmbiguous" , name , isBlock ) } , simpleMustache : function ( mustache ) { var id = mustache . id ; if ( id . type === "DATA" ) this . DATA ( id ) ; else if ( id . parts . length ) this . ID ( id ) ; else { this . addDepth ( id . depth ) ;
this . opcode ( "getContext" , id . depth ) ; this . opcode ( "pushContext" ) } this . opcode ( "resolvePossibleLambda" ) } , helperMustache : function ( mustache , program , inverse ) { var params = this . setupFullMustacheParams ( mustache , program , inverse ) , name = mustache . id . parts [ 0 ] ; if ( this . options . knownHelpers [ name ] ) this . opcode ( "invokeKnownHelper" , params . length , name ) ; else if ( this . options . knownHelpersOnly ) throw new Error ( "You specified knownHelpersOnly, but used the unknown helper " + name ) ; else this . opcode ( "invokeHelper" , params . length , name ) } ,
ID : function ( id ) { this . addDepth ( id . depth ) ; this . opcode ( "getContext" , id . depth ) ; var name = id . parts [ 0 ] ; if ( ! name ) this . opcode ( "pushContext" ) ; else this . opcode ( "lookupOnContext" , id . parts [ 0 ] ) ; for ( var i = 1 , l = id . parts . length ; i < l ; i ++ ) this . opcode ( "lookup" , id . parts [ i ] ) } , DATA : function ( data ) { this . options . data = true ; if ( data . id . isScoped || data . id . depth ) throw new Handlebars . Exception ( "Scoped data references are not supported: " + data . original ) ; this . opcode ( "lookupData" ) ; var parts = data . id . parts ; for ( var i = 0 , l = parts . length ; i <
l ; i ++ ) this . opcode ( "lookup" , parts [ i ] ) } , STRING : function ( string ) { this . opcode ( "pushString" , string . string ) } , INTEGER : function ( integer ) { this . opcode ( "pushLiteral" , integer . integer ) } , BOOLEAN : function ( bool ) { this . opcode ( "pushLiteral" , bool . bool ) } , comment : function ( ) { } , opcode : function ( name ) { this . opcodes . push ( { opcode : name , args : [ ] . slice . call ( arguments , 1 ) } ) } , declare : function ( name , value ) { this . opcodes . push ( { opcode : "DECLARE" , name : name , value : value } ) } , addDepth : function ( depth ) { if ( isNaN ( depth ) ) throw new Error ( "EWOT" ) ; if ( depth ===
0 ) return ; if ( ! this . depths [ depth ] ) { this . depths [ depth ] = true ; this . depths . list . push ( depth ) } } , classifyMustache : function ( mustache ) { var isHelper = mustache . isHelper ; var isEligible = mustache . eligibleHelper ; var options = this . options ; if ( isEligible && ! isHelper ) { var name = mustache . id . parts [ 0 ] ; if ( options . knownHelpers [ name ] ) isHelper = true ; else if ( options . knownHelpersOnly ) isEligible = false } if ( isHelper ) return "helper" ; else if ( isEligible ) return "ambiguous" ; else return "simple" } , pushParams : function ( params ) { var i = params . length ,
param ; while ( i -- ) { param = params [ i ] ; if ( this . options . stringParams ) { if ( param . depth ) this . addDepth ( param . depth ) ; this . opcode ( "getContext" , param . depth || 0 ) ; this . opcode ( "pushStringParam" , param . stringModeValue , param . type ) } else this [ param . type ] ( param ) } } , setupMustacheParams : function ( mustache ) { var params = mustache . params ; this . pushParams ( params ) ; if ( mustache . hash ) this . hash ( mustache . hash ) ; else this . opcode ( "emptyHash" ) ; return params } , setupFullMustacheParams : function ( mustache , program , inverse ) { var params = mustache . params ;
this . pushParams ( params ) ; this . opcode ( "pushProgram" , program ) ; this . opcode ( "pushProgram" , inverse ) ; if ( mustache . hash ) this . hash ( mustache . hash ) ; else this . opcode ( "emptyHash" ) ; return params } } ; var Literal = function ( value ) { this . value = value } ; JavaScriptCompiler . prototype = { nameLookup : function ( parent , name ) { if ( /^[0-9]+$/ . test ( name ) ) return parent + "[" + name + "]" ; else if ( JavaScriptCompiler . isValidJavaScriptVariableName ( name ) ) return parent + "." + name ; else return parent + "['" + name + "']" } , appendToBuffer : function ( string ) { if ( this . environment . isSimple ) return "return " +
string + ";" ; else return { appendToBuffer : true , content : string , toString : function ( ) { return "buffer += " + string + ";" } } } , initializeBuffer : function ( ) { return this . quotedString ( "" ) } , namespace : "Handlebars" , compile : function ( environment , options , context , asObject ) { this . environment = environment ; this . options = options || { } ; Handlebars . log ( Handlebars . logger . DEBUG , this . environment . disassemble ( ) + "\n\n" ) ; this . name = this . environment . name ; this . isChild = ! ! context ; this . context = context || { programs : [ ] , environments : [ ] , aliases : { } } ; this . preamble ( ) ;
this . stackSlot = 0 ; this . stackVars = [ ] ; this . registers = { list : [ ] } ; this . compileStack = [ ] ; this . inlineStack = [ ] ; this . compileChildren ( environment , options ) ; var opcodes = environment . opcodes , opcode ; this . i = 0 ; for ( l = opcodes . length ; this . i < l ; this . i ++ ) { opcode = opcodes [ this . i ] ; if ( opcode . opcode === "DECLARE" ) this [ opcode . name ] = opcode . value ; else this [ opcode . opcode ] . apply ( this , opcode . args ) } return this . createFunctionContext ( asObject ) } , nextOpcode : function ( ) { var opcodes = this . environment . opcodes ; return opcodes [ this . i + 1 ] } , eat : function ( ) { this . i =
this . i + 1 } , preamble : function ( ) { var out = [ ] ; if ( ! this . isChild ) { var namespace = this . namespace ; var copies = "helpers = this.merge(helpers, " + namespace + ".helpers);" ; if ( this . environment . usePartial ) copies = copies + " partials = this.merge(partials, " + namespace + ".partials);" ; if ( this . options . data ) copies = copies + " data = data || {};" ; out . push ( copies ) } else out . push ( "" ) ; if ( ! this . environment . isSimple ) out . push ( ", buffer = " + this . initializeBuffer ( ) ) ; else out . push ( "" ) ; this . lastContext = 0 ; this . source = out } , createFunctionContext : function ( asObject ) { var locals =
this . stackVars . concat ( this . registers . list ) ; if ( locals . length > 0 ) this . source [ 1 ] = this . source [ 1 ] + ", " + locals . join ( ", " ) ; if ( ! this . isChild ) for ( var alias in this . context . aliases ) if ( this . context . aliases . hasOwnProperty ( alias ) ) this . source [ 1 ] = this . source [ 1 ] + ", " + alias + "=" + this . context . aliases [ alias ] ; if ( this . source [ 1 ] ) this . source [ 1 ] = "var " + this . source [ 1 ] . substring ( 2 ) + ";" ; if ( ! this . isChild ) this . source [ 1 ] += "\n" + this . context . programs . join ( "\n" ) + "\n" ; if ( ! this . environment . isSimple ) this . source . push ( "return buffer;" ) ;
var params = this . isChild ? [ "depth0" , "data" ] : [ "Handlebars" , "depth0" , "helpers" , "partials" , "data" ] ; for ( var i = 0 , l = this . environment . depths . list . length ; i < l ; i ++ ) params . push ( "depth" + this . environment . depths . list [ i ] ) ; var source = this . mergeSource ( ) ; if ( ! this . isChild ) { var revision = Handlebars . COMPILER _REVISION , versions = Handlebars . REVISION _CHANGES [ revision ] ; source = "this.compilerInfo = [" + revision + ",'" + versions + "'];\n" + source } if ( asObject ) { params . push ( source ) ; return Function . apply ( this , params ) } else { var functionSource =
"function " + ( this . name || "" ) + "(" + params . join ( "," ) + ") {\n " + source + "}" ; Handlebars . log ( Handlebars . logger . DEBUG , functionSource + "\n\n" ) ; return functionSource } } , mergeSource : function ( ) { var source = "" , buffer ; for ( var i = 0 , len = this . source . length ; i < len ; i ++ ) { var line = this . source [ i ] ; if ( line . appendToBuffer ) if ( buffer ) buffer = buffer + "\n + " + line . content ; else buffer = line . content ; else { if ( buffer ) { source += "buffer += " + buffer + ";\n " ; buffer = undefined } source += line + "\n " } } return source } , blockValue : function ( ) { this . context . aliases . blockHelperMissing =
"helpers.blockHelperMissing" ; var params = [ "depth0" ] ; this . setupParams ( 0 , params ) ; this . replaceStack ( function ( current ) { params . splice ( 1 , 0 , current ) ; return "blockHelperMissing.call(" + params . join ( ", " ) + ")" } ) } , ambiguousBlockValue : function ( ) { this . context . aliases . blockHelperMissing = "helpers.blockHelperMissing" ; var params = [ "depth0" ] ; this . setupParams ( 0 , params ) ; var current = this . topStack ( ) ; params . splice ( 1 , 0 , current ) ; params [ params . length - 1 ] = "options" ; this . source . push ( "if (!" + this . lastHelper + ") { " + current + " = blockHelperMissing.call(" +
params . join ( ", " ) + "); }" ) } , appendContent : function ( content ) { this . source . push ( this . appendToBuffer ( this . quotedString ( content ) ) ) } , append : function ( ) { this . flushInline ( ) ; var local = this . popStack ( ) ; this . source . push ( "if(" + local + " || " + local + " === 0) { " + this . appendToBuffer ( local ) + " }" ) ; if ( this . environment . isSimple ) this . source . push ( "else { " + this . appendToBuffer ( "''" ) + " }" ) } , appendEscaped : function ( ) { this . context . aliases . escapeExpression = "this.escapeExpression" ; this . source . push ( this . appendToBuffer ( "escapeExpression(" +
this . popStack ( ) + ")" ) ) } , getContext : function ( depth ) { if ( this . lastContext !== depth ) this . lastContext = depth } , lookupOnContext : function ( name ) { this . push ( this . nameLookup ( "depth" + this . lastContext , name , "context" ) ) } , pushContext : function ( ) { this . pushStackLiteral ( "depth" + this . lastContext ) } , resolvePossibleLambda : function ( ) { this . context . aliases . functionType = '"function"' ; this . replaceStack ( function ( current ) { return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current } ) } , lookup : function ( name ) { this . replaceStack ( function ( current ) { return current +
" == null || " + current + " === false ? " + current + " : " + this . nameLookup ( current , name , "context" ) } ) } , lookupData : function ( id ) { this . push ( "data" ) } , pushStringParam : function ( string , type ) { this . pushStackLiteral ( "depth" + this . lastContext ) ; this . pushString ( type ) ; if ( typeof string === "string" ) this . pushString ( string ) ; else this . pushStackLiteral ( string ) } , emptyHash : function ( ) { this . pushStackLiteral ( "{}" ) ; if ( this . options . stringParams ) { this . register ( "hashTypes" , "{}" ) ; this . register ( "hashContexts" , "{}" ) } } , pushHash : function ( ) { this . hash =
{ values : [ ] , types : [ ] , contexts : [ ] } } , popHash : function ( ) { var hash = this . hash ; this . hash = undefined ; if ( this . options . stringParams ) { this . register ( "hashContexts" , "{" + hash . contexts . join ( "," ) + "}" ) ; this . register ( "hashTypes" , "{" + hash . types . join ( "," ) + "}" ) } this . push ( "{\n " + hash . values . join ( ",\n " ) + "\n }" ) } , pushString : function ( string ) { this . pushStackLiteral ( this . quotedString ( string ) ) } , push : function ( expr ) { this . inlineStack . push ( expr ) ; return expr } , pushLiteral : function ( value ) { this . pushStackLiteral ( value ) } , pushProgram : function ( guid ) { if ( guid !=
null ) this . pushStackLiteral ( this . programExpression ( guid ) ) ; else this . pushStackLiteral ( null ) } , invokeHelper : function ( paramSize , name ) { this . context . aliases . helperMissing = "helpers.helperMissing" ; var helper = this . lastHelper = this . setupHelper ( paramSize , name , true ) ; var nonHelper = this . nameLookup ( "depth" + this . lastContext , name , "context" ) ; this . push ( helper . name + " || " + nonHelper ) ; this . replaceStack ( function ( name ) { return name + " ? " + name + ".call(" + helper . callParams + ") " + ": helperMissing.call(" + helper . helperMissingParams +
")" } ) } , invokeKnownHelper : function ( paramSize , name ) { var helper = this . setupHelper ( paramSize , name ) ; this . push ( helper . name + ".call(" + helper . callParams + ")" ) } , invokeAmbiguous : function ( name , helperCall ) { this . context . aliases . functionType = '"function"' ; this . pushStackLiteral ( "{}" ) ; var helper = this . setupHelper ( 0 , name , helperCall ) ; var helperName = this . lastHelper = this . nameLookup ( "helpers" , name , "helper" ) ; var nonHelper = this . nameLookup ( "depth" + this . lastContext , name , "context" ) ; var nextStack = this . nextStack ( ) ; this . source . push ( "if (" +
nextStack + " = " + helperName + ") { " + nextStack + " = " + nextStack + ".call(" + helper . callParams + "); }" ) ; this . source . push ( "else { " + nextStack + " = " + nonHelper + "; " + nextStack + " = typeof " + nextStack + " === functionType ? " + nextStack + ".apply(depth0) : " + nextStack + "; }" ) } , invokePartial : function ( name ) { var params = [ this . nameLookup ( "partials" , name , "partial" ) , "'" + name + "'" , this . popStack ( ) , "helpers" , "partials" ] ; if ( this . options . data ) params . push ( "data" ) ; this . context . aliases . self = "this" ; this . push ( "self.invokePartial(" + params . join ( ", " ) +
")" ) } , assignToHash : function ( key ) { var value = this . popStack ( ) , context , type ; if ( this . options . stringParams ) { type = this . popStack ( ) ; context = this . popStack ( ) } var hash = this . hash ; if ( context ) hash . contexts . push ( "'" + key + "': " + context ) ; if ( type ) hash . types . push ( "'" + key + "': " + type ) ; hash . values . push ( "'" + key + "': (" + value + ")" ) } , compiler : JavaScriptCompiler , compileChildren : function ( environment , options ) { var children = environment . children , child , compiler ; for ( var i = 0 , l = children . length ; i < l ; i ++ ) { child = children [ i ] ; compiler = new this . compiler ;
var index = this . matchExistingProgram ( child ) ; if ( index == null ) { this . context . programs . push ( "" ) ; index = this . context . programs . length ; child . index = index ; child . name = "program" + index ; this . context . programs [ index ] = compiler . compile ( child , options , this . context ) ; this . context . environments [ index ] = child } else { child . index = index ; child . name = "program" + index } } } , matchExistingProgram : function ( child ) { for ( var i = 0 , len = this . context . environments . length ; i < len ; i ++ ) { var environment = this . context . environments [ i ] ; if ( environment && environment . equals ( child ) ) return i } } ,
programExpression : function ( guid ) { this . context . aliases . self = "this" ; if ( guid == null ) return "self.noop" ; var child = this . environment . children [ guid ] , depths = child . depths . list , depth ; var programParams = [ child . index , child . name , "data" ] ; for ( var i = 0 , l = depths . length ; i < l ; i ++ ) { depth = depths [ i ] ; if ( depth === 1 ) programParams . push ( "depth0" ) ; else programParams . push ( "depth" + ( depth - 1 ) ) } return ( depths . length === 0 ? "self.program(" : "self.programWithDepth(" ) + programParams . join ( ", " ) + ")" } , register : function ( name , val ) { this . useRegister ( name ) ;
this . source . push ( name + " = " + val + ";" ) } , useRegister : function ( name ) { if ( ! this . registers [ name ] ) { this . registers [ name ] = true ; this . registers . list . push ( name ) } } , pushStackLiteral : function ( item ) { return this . push ( new Literal ( item ) ) } , pushStack : function ( item ) { this . flushInline ( ) ; var stack = this . incrStack ( ) ; if ( item ) this . source . push ( stack + " = " + item + ";" ) ; this . compileStack . push ( stack ) ; return stack } , replaceStack : function ( callback ) { var prefix = "" , inline = this . isInline ( ) , stack ; if ( inline ) { var top = this . popStack ( true ) ; if ( top instanceof
Literal ) stack = top . value ; else { var name = this . stackSlot ? this . topStackName ( ) : this . incrStack ( ) ; prefix = "(" + this . push ( name ) + " = " + top + ")," ; stack = this . topStack ( ) } } else stack = this . topStack ( ) ; var item = callback . call ( this , stack ) ; if ( inline ) { if ( this . inlineStack . length || this . compileStack . length ) this . popStack ( ) ; this . push ( "(" + prefix + item + ")" ) } else { if ( ! /^stack/ . test ( stack ) ) stack = this . nextStack ( ) ; this . source . push ( stack + " = (" + prefix + item + ");" ) } return stack } , nextStack : function ( ) { return this . pushStack ( ) } , incrStack : function ( ) { this . stackSlot ++ ;
if ( this . stackSlot > this . stackVars . length ) this . stackVars . push ( "stack" + this . stackSlot ) ; return this . topStackName ( ) } , topStackName : function ( ) { return "stack" + this . stackSlot } , flushInline : function ( ) { var inlineStack = this . inlineStack ; if ( inlineStack . length ) { this . inlineStack = [ ] ; for ( var i = 0 , len = inlineStack . length ; i < len ; i ++ ) { var entry = inlineStack [ i ] ; if ( entry instanceof Literal ) this . compileStack . push ( entry ) ; else this . pushStack ( entry ) } } } , isInline : function ( ) { return this . inlineStack . length } , popStack : function ( wrapped ) { var inline =
this . isInline ( ) , item = ( inline ? this . inlineStack : this . compileStack ) . pop ( ) ; if ( ! wrapped && item instanceof Literal ) return item . value ; else { if ( ! inline ) this . stackSlot -- ; return item } } , topStack : function ( wrapped ) { var stack = this . isInline ( ) ? this . inlineStack : this . compileStack , item = stack [ stack . length - 1 ] ; if ( ! wrapped && item instanceof Literal ) return item . value ; else return item } , quotedString : function ( str ) { return '"' + str . replace ( /\\/g , "\\\\" ) . replace ( /"/g , '\\"' ) . replace ( /\n/g , "\\n" ) . replace ( /\r/g , "\\r" ) . replace ( /\u2028/g ,
"\\u2028" ) . replace ( /\u2029/g , "\\u2029" ) + '"' } , setupHelper : function ( paramSize , name , missingParams ) { var params = [ ] ; this . setupParams ( paramSize , params , missingParams ) ; var foundHelper = this . nameLookup ( "helpers" , name , "helper" ) ; return { params : params , name : foundHelper , callParams : [ "depth0" ] . concat ( params ) . join ( ", " ) , helperMissingParams : missingParams && [ "depth0" , this . quotedString ( name ) ] . concat ( params ) . join ( ", " ) } } , setupParams : function ( paramSize , params , useRegister ) { var options = [ ] , contexts = [ ] , types = [ ] , param , inverse ,
program ; options . push ( "hash:" + this . popStack ( ) ) ; inverse = this . popStack ( ) ; program = this . popStack ( ) ; if ( program || inverse ) { if ( ! program ) { this . context . aliases . self = "this" ; program = "self.noop" } if ( ! inverse ) { this . context . aliases . self = "this" ; inverse = "self.noop" } options . push ( "inverse:" + inverse ) ; options . push ( "fn:" + program ) } for ( var i = 0 ; i < paramSize ; i ++ ) { param = this . popStack ( ) ; params . push ( param ) ; if ( this . options . stringParams ) { types . push ( this . popStack ( ) ) ; contexts . push ( this . popStack ( ) ) } } if ( this . options . stringParams ) { options . push ( "contexts:[" +
contexts . join ( "," ) + "]" ) ; options . push ( "types:[" + types . join ( "," ) + "]" ) ; options . push ( "hashContexts:hashContexts" ) ; options . push ( "hashTypes:hashTypes" ) } if ( this . options . data ) options . push ( "data:data" ) ; options = "{" + options . join ( "," ) + "}" ; if ( useRegister ) { this . register ( "options" , options ) ; params . push ( "options" ) } else params . push ( options ) ; return params . join ( ", " ) } } ; var reservedWords = ( "break else new var" + " case finally return void" + " catch for switch while" + " continue function this with" + " default if throw" + " delete in try" +
" do instanceof typeof" + " abstract enum int short" + " boolean export interface static" + " byte extends long super" + " char final native synchronized" + " class float package throws" + " const goto private transient" + " debugger implements protected volatile" + " double import public let yield" ) . split ( " " ) ; var compilerWords = JavaScriptCompiler . RESERVED _WORDS = { } ; for ( var i = 0 , l = reservedWords . length ; i < l ; i ++ ) compilerWords [ reservedWords [ i ] ] = true ; JavaScriptCompiler . isValidJavaScriptVariableName = function ( name ) { if ( ! JavaScriptCompiler . RESERVED _WORDS [ name ] &&
/^[a-zA-Z_$][0-9a-zA-Z_$]+$/ . test ( name ) ) return true ; return false } ; Handlebars . precompile = function ( input , options ) { if ( input == null || typeof input !== "string" && input . constructor !== Handlebars . AST . ProgramNode ) throw new Handlebars . Exception ( "You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input ) ; options = options || { } ; if ( ! ( "data" in options ) ) options . data = true ; var ast = Handlebars . parse ( input ) ; var environment = ( new Compiler ) . compile ( ast , options ) ; return ( new JavaScriptCompiler ) . compile ( environment ,
options ) } ; Handlebars . compile = function ( input , options ) { if ( input == null || typeof input !== "string" && input . constructor !== Handlebars . AST . ProgramNode ) throw new Handlebars . Exception ( "You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input ) ; options = options || { } ; if ( ! ( "data" in options ) ) options . data = true ; var compiled ; function compile ( ) { var ast = Handlebars . parse ( input ) ; var environment = ( new Compiler ) . compile ( ast , options ) ; var templateSpec = ( new JavaScriptCompiler ) . compile ( environment , options ,
undefined , true ) ; return Handlebars . template ( templateSpec ) } return function ( context , options ) { if ( ! compiled ) compiled = compile ( ) ; return compiled . call ( this , context , options ) } } ; Handlebars . VM = { template : function ( templateSpec ) { var container = { escapeExpression : Handlebars . Utils . escapeExpression , invokePartial : Handlebars . VM . invokePartial , programs : [ ] , program : function ( i , fn , data ) { var programWrapper = this . programs [ i ] ; if ( data ) programWrapper = Handlebars . VM . program ( i , fn , data ) ; else if ( ! programWrapper ) programWrapper = this . programs [ i ] =
Handlebars . VM . program ( i , fn ) ; return programWrapper } , merge : function ( param , common ) { var ret = param || common ; if ( param && common ) { ret = { } ; Handlebars . Utils . extend ( ret , common ) ; Handlebars . Utils . extend ( ret , param ) } return ret } , programWithDepth : Handlebars . VM . programWithDepth , noop : Handlebars . VM . noop , compilerInfo : null } ; return function ( context , options ) { options = options || { } ; var result = templateSpec . call ( container , Handlebars , context , options . helpers , options . partials , options . data ) ; var compilerInfo = container . compilerInfo || [ ] ,
compilerRevision = compilerInfo [ 0 ] || 1 , currentRevision = Handlebars . COMPILER _REVISION ; if ( compilerRevision !== currentRevision ) if ( compilerRevision < currentRevision ) { var runtimeVersions = Handlebars . REVISION _CHANGES [ currentRevision ] , compilerVersions = Handlebars . REVISION _CHANGES [ compilerRevision ] ; throw "Template was precompiled with an older version of Handlebars than the current runtime. " + "Please update your precompiler to a newer version (" + runtimeVersions + ") or downgrade your runtime to an older version (" +
compilerVersions + ")." ; } else throw "Template was precompiled with a newer version of Handlebars than the current runtime. " + "Please update your runtime to a newer version (" + compilerInfo [ 1 ] + ")." ; return result } } , programWithDepth : function ( i , fn , data ) { var args = Array . prototype . slice . call ( arguments , 3 ) ; var program = function ( context , options ) { options = options || { } ; return fn . apply ( this , [ context , options . data || data ] . concat ( args ) ) } ; program . program = i ; program . depth = args . length ; return program } , program : function ( i , fn , data ) { var program =
function ( context , options ) { options = options || { } ; return fn ( context , options . data || data ) } ; program . program = i ; program . depth = 0 ; return program } , noop : function ( ) { return "" } , invokePartial : function ( partial , name , context , helpers , partials , data ) { var options = { helpers : helpers , partials : partials , data : data } ; if ( partial === undefined ) throw new Handlebars . Exception ( "The partial " + name + " could not be found" ) ; else if ( partial instanceof Function ) return partial ( context , options ) ; else if ( ! Handlebars . compile ) throw new Handlebars . Exception ( "The partial " +
name + " could not be compiled when running in runtime-only mode" ) ; else { partials [ name ] = Handlebars . compile ( partial , { data : data !== undefined } ) ; return partials [ name ] ( context , options ) } } } ; Handlebars . template = Handlebars . VM . template } ) ( Handlebars ) ; var Showdown = { extensions : { } } ; var forEach = Showdown . forEach = function ( obj , callback ) { if ( typeof obj . forEach === "function" ) obj . forEach ( callback ) ; else { var i , len = obj . length ; for ( i = 0 ; i < len ; i ++ ) callback ( obj [ i ] , i , obj ) } } ; var stdExtName = function ( s ) { return s . replace ( /[_-]||\s/g , "" ) . toLowerCase ( ) } ;
Showdown . converter = function ( converter _options ) { var g _urls ; var g _titles ; var g _html _blocks ; var g _list _level = 0 ; var g _lang _extensions = [ ] ; var g _output _modifiers = [ ] ; if ( typeof module !== "undefind" && typeof exports !== "undefined" && typeof require !== "undefind" ) { var fs = require ( "fs" ) ; if ( fs ) { var extensions = fs . readdirSync ( ( _ _dirname || "." ) + "/extensions" ) . filter ( function ( file ) { return ~ file . indexOf ( ".js" ) } ) . map ( function ( file ) { return file . replace ( /\.js$/ , "" ) } ) ; Showdown . forEach ( extensions , function ( ext ) { var name = stdExtName ( ext ) ;
Showdown . extensions [ name ] = require ( "./extensions/" + ext ) } ) } } this . makeHtml = function ( text ) { g _urls = { } ; g _titles = { } ; g _html _blocks = [ ] ; text = text . replace ( /~/g , "~T" ) ; text = text . replace ( /\$/g , "~D" ) ; text = text . replace ( /\r\n/g , "\n" ) ; text = text . replace ( /\r/g , "\n" ) ; text = "\n\n" + text + "\n\n" ; text = _Detab ( text ) ; text = text . replace ( /^[ \t]+$/mg , "" ) ; Showdown . forEach ( g _lang _extensions , function ( x ) { text = _ExecuteExtension ( x , text ) } ) ; text = _DoGithubCodeBlocks ( text ) ; text = _HashHTMLBlocks ( text ) ; text = _StripLinkDefinitions ( text ) ; text = _RunBlockGamut ( text ) ;
text = _UnescapeSpecialChars ( text ) ; text = text . replace ( /~D/g , "$$" ) ; text = text . replace ( /~T/g , "~" ) ; Showdown . forEach ( g _output _modifiers , function ( x ) { text = _ExecuteExtension ( x , text ) } ) ; return text } ; if ( converter _options && converter _options . extensions ) { var self = this ; Showdown . forEach ( converter _options . extensions , function ( plugin ) { if ( typeof plugin === "string" ) plugin = Showdown . extensions [ stdExtName ( plugin ) ] ; if ( typeof plugin === "function" ) Showdown . forEach ( plugin ( self ) , function ( ext ) { if ( ext . type ) if ( ext . type === "language" ||
ext . type === "lang" ) g _lang _extensions . push ( ext ) ; else { if ( ext . type === "output" || ext . type === "html" ) g _output _modifiers . push ( ext ) } else g _output _modifiers . push ( ext ) } ) ; else throw "Extension '" + plugin + "' could not be loaded. It was either not found or is not a valid extension." ; } ) } var _ExecuteExtension = function ( ext , text ) { if ( ext . regex ) { var re = new RegExp ( ext . regex , "g" ) ; return text . replace ( re , ext . replace ) } else if ( ext . filter ) return ext . filter ( text ) } ; var _StripLinkDefinitions = function ( text ) { text += "~0" ; text = text . replace ( /^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|(?=~0))/gm ,
function ( wholeMatch , m1 , m2 , m3 , m4 ) { m1 = m1 . toLowerCase ( ) ; g _urls [ m1 ] = _EncodeAmpsAndAngles ( m2 ) ; if ( m3 ) return m3 + m4 ; else if ( m4 ) g _titles [ m1 ] = m4 . replace ( /"/g , """ ) ; return "" } ) ; text = text . replace ( /~0/ , "" ) ; return text } ; var _HashHTMLBlocks = function ( text ) { text = text . replace ( /\n/g , "\n\n" ) ; var block _tags _a = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del|style|section|header|footer|nav|article|aside" ; var block _tags _b = "p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside" ;
text = text . replace ( /^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm , hashElement ) ; text = text . replace ( /^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|style|section|header|footer|nav|article|aside)\b[^\r]*?<\/\2>[ \t]*(?=\n+)\n)/gm , hashElement ) ; text = text . replace ( /(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g , hashElement ) ; text = text . replace ( /(\n\n[ ]{0,3}<!(--[^\r]*?--\s*)+>[ \t]*(?=\n{2,}))/g ,
hashElement ) ; text = text . replace ( /(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g , hashElement ) ; text = text . replace ( /\n\n/g , "\n" ) ; return text } ; var hashElement = function ( wholeMatch , m1 ) { var blockText = m1 ; blockText = blockText . replace ( /\n\n/g , "\n" ) ; blockText = blockText . replace ( /^\n/ , "" ) ; blockText = blockText . replace ( /\n+$/g , "" ) ; blockText = "\n\n~K" + ( g _html _blocks . push ( blockText ) - 1 ) + "K\n\n" ; return blockText } ; var _RunBlockGamut = function ( text ) { text = _DoHeaders ( text ) ; var key = hashBlock ( "<hr />" ) ; text = text . replace ( /^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm ,
key ) ; text = text . replace ( /^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm , key ) ; text = text . replace ( /^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm , key ) ; text = _DoLists ( text ) ; text = _DoCodeBlocks ( text ) ; text = _DoBlockQuotes ( text ) ; text = _HashHTMLBlocks ( text ) ; text = _FormParagraphs ( text ) ; return text } ; var _RunSpanGamut = function ( text ) { text = _DoCodeSpans ( text ) ; text = _EscapeSpecialCharsWithinTagAttributes ( text ) ; text = _EncodeBackslashEscapes ( text ) ; text = _DoImages ( text ) ; text = _DoAnchors ( text ) ; text = _DoAutoLinks ( text ) ; text = _EncodeAmpsAndAngles ( text ) ;
text = _DoItalicsAndBold ( text ) ; text = text . replace ( / +\n/g , " <br />\n" ) ; return text } ; var _EscapeSpecialCharsWithinTagAttributes = function ( text ) { var regex = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|<!(--.*?--\s*)+>)/gi ; text = text . replace ( regex , function ( wholeMatch ) { var tag = wholeMatch . replace ( /(.)<\/?code>(?=.)/g , "$1`" ) ; tag = escapeCharacters ( tag , "\\`*_" ) ; return tag } ) ; return text } ; var _DoAnchors = function ( text ) { text = text . replace ( /(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g , writeAnchorTag ) ;
text = text . replace ( /(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()<?(.*?(?:\(.*?\).*?)?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g , writeAnchorTag ) ; text = text . replace ( /(\[([^\[\]]+)\])()()()()()/g , writeAnchorTag ) ; return text } ; var writeAnchorTag = function ( wholeMatch , m1 , m2 , m3 , m4 , m5 , m6 , m7 ) { if ( m7 == undefined ) m7 = "" ; var whole _match = m1 ; var link _text = m2 ; var link _id = m3 . toLowerCase ( ) ; var url = m4 ; var title = m7 ; if ( url == "" ) { if ( link _id == "" ) link _id = link _text . toLowerCase ( ) . replace ( / ?\n/g , " " ) ; url = "#" + link _id ; if ( g _urls [ link _id ] != undefined ) { url =
g _urls [ link _id ] ; if ( g _titles [ link _id ] != undefined ) title = g _titles [ link _id ] } else if ( whole _match . search ( /\(\s*\)$/m ) > - 1 ) url = "" ; else return whole _match } url = escapeCharacters ( url , "*_" ) ; var result = '<a href="' + url + '"' ; if ( title != "" ) { title = title . replace ( /"/g , """ ) ; title = escapeCharacters ( title , "*_" ) ; result += ' title="' + title + '"' } result += ">" + link _text + "</a>" ; return result } ; var _DoImages = function ( text ) { text = text . replace ( /(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g , writeImageTag ) ; text = text . replace ( /(!\[(.*?)\]\s?\([ \t]*()<?(\S+?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g ,
writeImageTag ) ; return text } ; var writeImageTag = function ( wholeMatch , m1 , m2 , m3 , m4 , m5 , m6 , m7 ) { var whole _match = m1 ; var alt _text = m2 ; var link _id = m3 . toLowerCase ( ) ; var url = m4 ; var title = m7 ; if ( ! title ) title = "" ; if ( url == "" ) { if ( link _id == "" ) link _id = alt _text . toLowerCase ( ) . replace ( / ?\n/g , " " ) ; url = "#" + link _id ; if ( g _urls [ link _id ] != undefined ) { url = g _urls [ link _id ] ; if ( g _titles [ link _id ] != undefined ) title = g _titles [ link _id ] } else return whole _match } alt _text = alt _text . replace ( /"/g , """ ) ; url = escapeCharacters ( url , "*_" ) ; var result =
'<img src="' + url + '" alt="' + alt _text + '"' ; title = title . replace ( /"/g , """ ) ; title = escapeCharacters ( title , "*_" ) ; result += ' title="' + title + '"' ; result += " />" ; return result } ; var _DoHeaders = function ( text ) { text = text . replace ( /^(.+)[ \t]*\n=+[ \t]*\n+/gm , function ( wholeMatch , m1 ) { return hashBlock ( '<h1 id="' + headerId ( m1 ) + '">' + _RunSpanGamut ( m1 ) + "</h1>" ) } ) ; text = text . replace ( /^(.+)[ \t]*\n-+[ \t]*\n+/gm , function ( matchFound , m1 ) { return hashBlock ( '<h2 id="' + headerId ( m1 ) + '">' + _RunSpanGamut ( m1 ) + "</h2>" ) } ) ; text = text . replace ( /^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm ,
function ( wholeMatch , m1 , m2 ) { var h _level = m1 . length ; return hashBlock ( "<h" + h _level + ' id="' + headerId ( m2 ) + '">' + _RunSpanGamut ( m2 ) + "</h" + h _level + ">" ) } ) ; function headerId ( m ) { return m . replace ( /[^\w]/g , "" ) . toLowerCase ( ) } return text } ; var _ProcessListItems ; var _DoLists = function ( text ) { text += "~0" ; var whole _list = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm ; if ( g _list _level ) text = text . replace ( whole _list , function ( wholeMatch , m1 , m2 ) { var list = m1 ; var list _type = m2 . search ( /[*+-]/g ) >
- 1 ? "ul" : "ol" ; list = list . replace ( /\n{2,}/g , "\n\n\n" ) ; var result = _ProcessListItems ( list ) ; result = result . replace ( /\s+$/ , "" ) ; result = "<" + list _type + ">" + result + "</" + list _type + ">\n" ; return result } ) ; else { whole _list = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g ; text = text . replace ( whole _list , function ( wholeMatch , m1 , m2 , m3 ) { var runup = m1 ; var list = m2 ; var list _type = m3 . search ( /[*+-]/g ) > - 1 ? "ul" : "ol" ; var list = list . replace ( /\n{2,}/g , "\n\n\n" ) ; var result = _ProcessListItems ( list ) ;
result = runup + "<" + list _type + ">\n" + result + "</" + list _type + ">\n" ; return result } ) } text = text . replace ( /~0/ , "" ) ; return text } ; _ProcessListItems = function ( list _str ) { g _list _level ++ ; list _str = list _str . replace ( /\n{2,}$/ , "\n" ) ; list _str += "~0" ; list _str = list _str . replace ( /(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm , function ( wholeMatch , m1 , m2 , m3 , m4 ) { var item = m4 ; var leading _line = m1 ; var leading _space = m2 ; if ( leading _line || item . search ( /\n{2,}/ ) > - 1 ) item = _RunBlockGamut ( _Outdent ( item ) ) ;
else { item = _DoLists ( _Outdent ( item ) ) ; item = item . replace ( /\n$/ , "" ) ; item = _RunSpanGamut ( item ) } return "<li>" + item + "</li>\n" } ) ; list _str = list _str . replace ( /~0/g , "" ) ; g _list _level -- ; return list _str } ; var _DoCodeBlocks = function ( text ) { text += "~0" ; text = text . replace ( /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g , function ( wholeMatch , m1 , m2 ) { var codeblock = m1 ; var nextChar = m2 ; codeblock = _EncodeCode ( _Outdent ( codeblock ) ) ; codeblock = _Detab ( codeblock ) ; codeblock = codeblock . replace ( /^\n+/g , "" ) ; codeblock = codeblock . replace ( /\n+$/g ,
"" ) ; codeblock = "<pre><code>" + codeblock + "\n</code></pre>" ; return hashBlock ( codeblock ) + nextChar } ) ; text = text . replace ( /~0/ , "" ) ; return text } ; var _DoGithubCodeBlocks = function ( text ) { text += "~0" ; text = text . replace ( /(?:^|\n)```(.*)\n([\s\S]*?)\n```/g , function ( wholeMatch , m1 , m2 ) { var language = m1 ; var codeblock = m2 ; codeblock = _EncodeCode ( codeblock ) ; codeblock = _Detab ( codeblock ) ; codeblock = codeblock . replace ( /^\n+/g , "" ) ; codeblock = codeblock . replace ( /\n+$/g , "" ) ; codeblock = "<pre><code" + ( language ? ' class="' + language + '"' : "" ) +
">" + codeblock + "\n</code></pre>" ; return hashBlock ( codeblock ) } ) ; text = text . replace ( /~0/ , "" ) ; return text } ; var hashBlock = function ( text ) { text = text . replace ( /(^\n+|\n+$)/g , "" ) ; return "\n\n~K" + ( g _html _blocks . push ( text ) - 1 ) + "K\n\n" } ; var _DoCodeSpans = function ( text ) { text = text . replace ( /(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm , function ( wholeMatch , m1 , m2 , m3 , m4 ) { var c = m3 ; c = c . replace ( /^([ \t]*)/g , "" ) ; c = c . replace ( /[ \t]*$/g , "" ) ; c = _EncodeCode ( c ) ; return m1 + "<code>" + c + "</code>" } ) ; return text } ; var _EncodeCode = function ( text ) { text =
text . replace ( /&/g , "&" ) ; text = text . replace ( /</g , "<" ) ; text = text . replace ( />/g , ">" ) ; text = escapeCharacters ( text , "*_{}[]\\" , false ) ; return text } ; var _DoItalicsAndBold = function ( text ) { text = text . replace ( /(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g , "<strong>$2</strong>" ) ; text = text . replace ( /(\*|_)(?=\S)([^\r]*?\S)\1/g , "<em>$2</em>" ) ; return text } ; var _DoBlockQuotes = function ( text ) { text = text . replace ( /((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm , function ( wholeMatch , m1 ) { var bq = m1 ; bq = bq . replace ( /^[ \t]*>[ \t]?/gm , "~0" ) ; bq =
bq . replace ( /~0/g , "" ) ; bq = bq . replace ( /^[ \t]+$/gm , "" ) ; bq = _RunBlockGamut ( bq ) ; bq = bq . replace ( /(^|\n)/g , "$1 " ) ; bq = bq . replace ( /(\s*<pre>[^\r]+?<\/pre>)/gm , function ( wholeMatch , m1 ) { var pre = m1 ; pre = pre . replace ( /^ /mg , "~0" ) ; pre = pre . replace ( /~0/g , "" ) ; return pre } ) ; return hashBlock ( "<blockquote>\n" + bq + "\n</blockquote>" ) } ) ; return text } ; var _FormParagraphs = function ( text ) { text = text . replace ( /^\n+/g , "" ) ; text = text . replace ( /\n+$/g , "" ) ; var grafs = text . split ( /\n{2,}/g ) ; var grafsOut = [ ] ; var end = grafs . length ; for ( var i = 0 ; i <
end ; i ++ ) { var str = grafs [ i ] ; if ( str . search ( /~K(\d+)K/g ) >= 0 ) grafsOut . push ( str ) ; else if ( str . search ( /\S/ ) >= 0 ) { str = _RunSpanGamut ( str ) ; str = str . replace ( /^([ \t]*)/g , "<p>" ) ; str += "</p>" ; grafsOut . push ( str ) } } end = grafsOut . length ; for ( var i = 0 ; i < end ; i ++ ) while ( grafsOut [ i ] . search ( /~K(\d+)K/ ) >= 0 ) { var blockText = g _html _blocks [ RegExp . $1 ] ; blockText = blockText . replace ( /\$/g , "$$$$" ) ; grafsOut [ i ] = grafsOut [ i ] . replace ( /~K\d+K/ , blockText ) } return grafsOut . join ( "\n\n" ) } ; var _EncodeAmpsAndAngles = function ( text ) { text = text . replace ( /&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g ,
"&" ) ; text = text . replace ( /<(?![a-z\/?\$!])/gi , "<" ) ; return text } ; var _EncodeBackslashEscapes = function ( text ) { text = text . replace ( /\\(\\)/g , escapeCharacters _callback ) ; text = text . replace ( /\\([`*_{}\[\]()>#+-.!])/g , escapeCharacters _callback ) ; return text } ; var _DoAutoLinks = function ( text ) { text = text . replace ( /<((https?|ftp|dict):[^'">\s]+)>/gi , '<a href="$1">$1</a>' ) ; text = text . replace ( /<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi , function ( wholeMatch , m1 ) { return _EncodeEmailAddress ( _UnescapeSpecialChars ( m1 ) ) } ) ;
return text } ; var _EncodeEmailAddress = function ( addr ) { var encode = [ function ( ch ) { return "&#" + ch . charCodeAt ( 0 ) + ";" } , function ( ch ) { return "&#x" + ch . charCodeAt ( 0 ) . toString ( 16 ) + ";" } , function ( ch ) { return ch } ] ; addr = "mailto:" + addr ; addr = addr . replace ( /./g , function ( ch ) { if ( ch == "@" ) ch = encode [ Math . floor ( Math . random ( ) * 2 ) ] ( ch ) ; else if ( ch != ":" ) { var r = Math . random ( ) ; ch = r > 0.9 ? encode [ 2 ] ( ch ) : r > 0.45 ? encode [ 1 ] ( ch ) : encode [ 0 ] ( ch ) } return ch } ) ; addr = '<a href="' + addr + '">' + addr + "</a>" ; addr = addr . replace ( /">.+:/g , '">' ) ; return addr } ; var _UnescapeSpecialChars =
function ( text ) { text = text . replace ( /~E(\d+)E/g , function ( wholeMatch , m1 ) { var charCodeToReplace = parseInt ( m1 ) ; return String . fromCharCode ( charCodeToReplace ) } ) ; return text } ; var _Outdent = function ( text ) { text = text . replace ( /^(\t|[ ]{1,4})/gm , "~0" ) ; text = text . replace ( /~0/g , "" ) ; return text } ; var _Detab = function ( text ) { text = text . replace ( /\t(?=\t)/g , " " ) ; text = text . replace ( /\t/g , "~A~B" ) ; text = text . replace ( /~B(.+?)~A/g , function ( wholeMatch , m1 , m2 ) { var leadingText = m1 ; var numSpaces = 4 - leadingText . length % 4 ; for ( var i = 0 ; i <
numSpaces ; i ++ ) leadingText += " " ; return leadingText } ) ; text = text . replace ( /~A/g , " " ) ; text = text . replace ( /~B/g , "" ) ; return text } ; var escapeCharacters = function ( text , charsToEscape , afterBackslash ) { var regexString = "([" + charsToEscape . replace ( /([\[\]\\])/g , "\\$1" ) + "])" ; if ( afterBackslash ) regexString = "\\\\" + regexString ; var regex = new RegExp ( regexString , "g" ) ; text = text . replace ( regex , escapeCharacters _callback ) ; return text } ; var escapeCharacters _callback = function ( wholeMatch , m1 ) { var charCodeToEscape = m1 . charCodeAt ( 0 ) ;
2013-10-10 20:26:42 +03:00
return "~E" + charCodeToEscape + "E" } } ; if ( typeof module !== "undefined" ) module . exports = Showdown ; if ( typeof define === "function" && define . amd ) define ( "showdown" , function ( ) { return Showdown } ) ;
( function ( ) { var table = function ( converter ) { var tables = { } , style = "" , filter ; tables . th = function ( header ) { if ( header . trim ( ) === "" ) return "" ; var id = header . trim ( ) . replace ( / /g , "_" ) . toLowerCase ( ) ; return '<th id="' + id + '" style="' + style + '">' + header + "</th>" } ; tables . td = function ( cell ) { return '<td style="' + style + '">' + converter . makeHtml ( cell ) + "</td>" } ; tables . ths = function ( ) { var out = "" , i = 0 , hs = [ ] . slice . apply ( arguments ) ; for ( i ; i < hs . length ; i += 1 ) out += tables . th ( hs [ i ] ) + "\n" ; return out } ; tables . tds = function ( ) { var out = "" , i = 0 , ds = [ ] . slice . apply ( arguments ) ;
for ( i ; i < ds . length ; i += 1 ) out += tables . td ( ds [ i ] ) + "\n" ; return out } ; tables . thead = function ( ) { var out , i = 0 , hs = [ ] . slice . apply ( arguments ) ; out = "<thead>\n" ; out += "<tr>\n" ; out += tables . ths . apply ( this , hs ) ; out += "</tr>\n" ; out += "</thead>\n" ; return out } ; tables . tr = function ( ) { var out , i = 0 , cs = [ ] . slice . apply ( arguments ) ; out = "<tr>\n" ; out += tables . tds . apply ( this , cs ) ; out += "</tr>\n" ; return out } ; filter = function ( text ) { var i = 0 , lines = text . split ( "\n" ) , tbl = [ ] , line , hs , rows , out = [ ] ; for ( i ; i < lines . length ; i += 1 ) { line = lines [ i ] ; if ( line . trim ( ) . match ( /^[|]{1}.*[|]{1}$/ ) ) { line =
line . trim ( ) ; tbl . push ( '<table class="table table-bordered">' ) ; hs = line . substring ( 1 , line . length - 1 ) . split ( "|" ) ; tbl . push ( tables . thead . apply ( this , hs ) ) ; line = lines [ ++ i ] ; if ( ! line . trim ( ) . match ( /^[|]{1}[-=| ]+[|]{1}$/ ) ) line = lines [ -- i ] ; else { line = lines [ ++ i ] ; tbl . push ( "<tbody>" ) ; while ( line . trim ( ) . match ( /^[|]{1}.*[|]{1}$/ ) ) { line = line . trim ( ) ; tbl . push ( tables . tr . apply ( this , line . substring ( 1 , line . length - 1 ) . split ( "|" ) ) ) ; line = lines [ ++ i ] } tbl . push ( "</tbody>" ) ; tbl . push ( "</table>" ) ; out . push ( tbl . join ( "\n" ) ) ; tbl = [ ] ; continue } } out . push ( line ) } return out . join ( "\n" ) } ;
return [ { type : "lang" , filter : filter } ] } ; if ( typeof window !== "undefined" && window . Showdown && window . Showdown . extensions ) window . Showdown . extensions . table = table ; if ( typeof module !== "undefined" ) module . exports = table } ) ( ) ; function escapeHtml ( s ) { s = "" + s ; s = s . replace ( /&/g , "&" ) ; s = s . replace ( /</g , "<" ) ; s = s . replace ( />/g , ">" ) ; s = s . replace ( /"/g , """ ) ; s = s . replace ( /'/g , "'" ) ; return s } var WMD = { } ;
WMD . convert = function ( content , options ) { var doc = { raw : content , markdown : content } ; var opt = WMD . readOptions ( options ) ; WMD . preprocess ( doc , opt ) ; doc . html = WMD . processor ( doc . markdown , true ) ; WMD . postprocess ( doc , opt ) ; doc . toString = function ( ) { return doc . html } ; return doc } ;
function gsub ( str , re , fn , newstr ) { newstr = newstr || "" ; var match = re . exec ( str ) ; if ( match ) { newstr += str . slice ( 0 , match . index ) ; newstr += fn . apply ( null , match ) ; remaining = str . slice ( match . index + match [ 0 ] . length ) ; return gsub ( remaining , re , fn , newstr ) } return newstr + str } WMD . showdown = new Showdown . converter ( { extensions : [ "table" ] } ) ; WMD . processor = WMD . showdown . makeHtml ;
2013-10-10 18:38:30 +03:00
WMD . preprocessors = { underscores : function ( doc ) { doc . markdown = gsub ( doc . markdown , /(^(?! {4}|\t)\w+_\w+_\w[\w_]*)/ , function ( match ) { var count = 0 ; for ( var i = 0 ; i < match . length ; i ++ ) if ( match [ i ] == "_" ) count ++ ; if ( count === 2 ) return match . replace ( /_/g , "\\_" ) ; return match } ) ; return doc } , metadata : function ( doc ) { var key ; var lines = doc . markdown . split ( "\n" ) ; doc . metadata = { } ; while ( lines . length ) { var match = /^(\S+):\s+(.*)$/ . exec ( lines [ 0 ] ) ; if ( match ) { var key = match [ 1 ] ; doc . metadata [ key ] = match [ 2 ] ; lines . shift ( ) } else { var continued _value =
/^\s+(.+)$/ . exec ( lines [ 0 ] ) ; if ( /^\s*$/ . exec ( lines [ 0 ] ) ) lines . shift ( ) ; else if ( continued _value && key ) { doc . metadata [ key ] += "\n" + continued _value [ 1 ] ; lines . shift ( ) } else break } } doc . markdown = lines . join ( "\n" ) ; return doc } , fencedCodeBlocksHighlightJS : function ( doc ) { var re1 = /```([A-Za-z]+)\s*([\s\S]+?)```/ ; var re2 = /```\s*([\s\S]+?)```/ ; var block ; while ( block = re1 . exec ( doc . markdown ) || re2 . exec ( doc . markdown ) ) { var pre ; if ( block . length === 3 ) { pre = '<pre style="padding:0;"><code class="' + escapeHtml ( block [ 1 ] ) + '">' ; if ( block [ 1 ] in
hljs . LANGUAGES ) pre += hljs . highlight ( block [ 1 ] , block [ 2 ] ) . value ; else pre += escapeHtml ( block [ 2 ] ) ; pre += "</code></pre>" } else pre = '<pre style="padding:0;"><code class="no-highlight">' + escapeHtml ( block [ 1 ] ) + "</code></pre>" ; doc . markdown = doc . markdown . substr ( 0 , block . index ) + pre + doc . markdown . substr ( block . index + block [ 0 ] . length ) } return doc } } ; WMD . postprocessors = { } ;
WMD . readOptions = function ( options ) { var obj = { preprocessors : [ WMD . preprocessors . metadata , WMD . preprocessors . underscores , WMD . preprocessors . fencedCodeBlocksHighlightJS ] , postprocessors : [ ] } ; for ( var k in options ) obj [ k ] = options [ k ] ; return obj } ; WMD . preprocess = function ( doc , options ) { return options . preprocessors . reduce ( function ( doc , fn ) { return fn ( doc ) } , doc ) } ; WMD . postprocess = function ( doc , options ) { return options . postprocessors . reduce ( function ( doc , fn ) { return fn ( doc ) } , doc ) } ;
( function ( ) { var l = null , p = function ( ) { function e ( a ) { a = ( "" + a ) . match ( E ) ; return ! a ? l : new b ( q ( a [ 1 ] ) , q ( a [ 2 ] ) , q ( a [ 3 ] ) , q ( a [ 4 ] ) , q ( a [ 5 ] ) , q ( a [ 6 ] ) , q ( a [ 7 ] ) ) } function z ( a , e ) { return "string" == typeof a ? encodeURI ( a ) . replace ( e , B ) : l } function B ( a ) { a = a . charCodeAt ( 0 ) ; return "%" + "0123456789ABCDEF" . charAt ( a >> 4 & 15 ) + "0123456789ABCDEF" . charAt ( a & 15 ) } function y ( a ) { if ( a === l ) return l ; for ( var a = a . replace ( /(^|\/)\.(?:\/|$)/g , "$1" ) . replace ( /\/{2,}/g , "/" ) , e = m , b ; ( b = a . replace ( e , "$1" ) ) != a ; a = b ) ; return a } function A ( a , e ) { var b = a . R ( ) , g = e . K ( ) ; g ? b . fa ( e . j ) :
g = e . V ( ) ; g ? b . ca ( e . m ) : g = e . W ( ) ; g ? b . da ( e . k ) : g = e . Y ( ) ; var m = e . g , k = y ( m ) ; if ( g ) b . ba ( e . T ( ) ) , k = k && k . replace ( x , "" ) ; else if ( g = ! ! m ) { if ( 47 !== k . charCodeAt ( 0 ) ) var k = y ( b . g || "" ) . replace ( x , "" ) , s = k . lastIndexOf ( "/" ) + 1 , k = y ( ( s ? k . substring ( 0 , s ) : "" ) + y ( m ) ) . replace ( x , "" ) } else k = k && k . replace ( x , "" ) , k !== m && b . G ( k ) ; g ? b . G ( k ) : g = e . Z ( ) ; g ? b . M ( e . l ) : g = e . X ( ) ; g && b . ea ( e . n ) ; return b } function b ( a , e , b , g , m , k , s ) { this . j = a ; this . m = e ; this . k = b ; this . h = g ; this . g = m ; this . l = k ; this . n = s } function q ( a ) { return "string" == typeof a && 0 < a . length ? a : l } var m = RegExp ( /(\/|^)(?:[^./][^/]*|\.{2,}(?:[^./][^/]*)|\.{3,}[^/]*)\/\.\.(?:\/|$)/ ) ,
x = /^(?:\.\.\/)*(?:\.\.$)?/ ; b . prototype . toString = function ( ) { var a = [ ] ; l !== this . j && a . push ( this . j , ":" ) ; l !== this . k && ( a . push ( "//" ) , l !== this . m && a . push ( this . m , "@" ) , a . push ( this . k ) , l !== this . h && a . push ( ":" , this . h . toString ( ) ) ) ; l !== this . g && a . push ( this . g ) ; l !== this . l && a . push ( "?" , this . l ) ; l !== this . n && a . push ( "#" , this . n ) ; return a . join ( "" ) } ; b . prototype . R = function ( ) { return new b ( this . j , this . m , this . k , this . h , this . g , this . l , this . n ) } ; b . prototype . U = function ( ) { return this . j && decodeURIComponent ( this . j ) . toLowerCase ( ) } ; b . prototype . fa =
function ( a ) { this . j = a ? a : l } ; b . prototype . K = function ( ) { return l !== this . j } ; b . prototype . ca = function ( a ) { this . m = a ? a : l } ; b . prototype . V = function ( ) { return l !== this . m } ; b . prototype . da = function ( a ) { this . k = a ? a : l ; this . G ( this . g ) } ; b . prototype . W = function ( ) { return l !== this . k } ; b . prototype . T = function ( ) { return this . h && decodeURIComponent ( this . h ) } ; b . prototype . ba = function ( a ) { if ( a ) { a = Number ( a ) ; if ( a !== ( a & 65535 ) ) throw Error ( "Bad port number " + a ) ; this . h = "" + a } else this . h = l } ; b . prototype . Y = function ( ) { return l !== this . h } ; b . prototype . S =
function ( ) { return this . g && decodeURIComponent ( this . g ) } ; b . prototype . G = function ( a ) { a ? ( a = "" + a , this . g = ! this . k || /^\// . test ( a ) ? a : "/" + a ) : this . g = l } ; b . prototype . M = function ( a ) { this . l = a ? a : l } ; b . prototype . Z = function ( ) { return l !== this . l } ; b . prototype . aa = function ( a ) { if ( "object" === typeof a && ! ( a instanceof Array ) && ( a instanceof Object || "[object Array]" !== Object . prototype . toString . call ( a ) ) ) { var e = [ ] , b = - 1 , g ; for ( g in a ) { var m = a [ g ] ; "string" === typeof m && ( e [ ++ b ] = g , e [ ++ b ] = m ) } a = e } for ( var e = [ ] , b = "" , k = 0 ; k < a . length ; ) g = a [ k ++ ] ,
m = a [ k ++ ] , e . push ( b , encodeURIComponent ( g . toString ( ) ) ) , b = "&" , m && e . push ( "=" , encodeURIComponent ( m . toString ( ) ) ) ; this . l = e . join ( "" ) } ; b . prototype . ea = function ( a ) { this . n = a ? a : l } ; b . prototype . X = function ( ) { return l !== this . n } ; var E = /^(?:([^:/?#]+):)?(?:\/\/(?:([^/?#]*)@)?([^/?#:@]*)(?::([0-9]+))?)?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/ , D = /[#\/\?@]/g , F = /[\#\?]/g ; b . parse = e ; b . create = function ( a , e , m , g , q , k , s ) { a = new b ( z ( a , D ) , z ( e , D ) , "string" == typeof m ? encodeURIComponent ( m ) : l , 0 < g ? g . toString ( ) : l , z ( q , F ) , l , "string" == typeof s ? encodeURIComponent ( s ) :
l ) ; k && ( "string" === typeof k ? a . M ( k . replace ( /[^?&=0-9A-Za-z_\-~.%]/g , B ) ) : a . aa ( k ) ) ; return a } ; b . $ = A ; b . ja = y ; b . ua = { oa : function ( a ) { return /\.html$/ . test ( e ( a ) . S ( ) ) ? "text/html" : "application/javascript" } , $ : function ( a , b ) { return a ? A ( e ( a ) , e ( b ) ) . toString ( ) : "" + b } } ; return b } ( ) ; "undefined" !== typeof window && ( window . URI = p ) ; var L = { e : { NONE : 0 , URI : 1 , URI _FRAGMENT : 11 , SCRIPT : 2 , STYLE : 3 , HTML : 12 , ID : 4 , IDREF : 5 , IDREFS : 6 , GLOBAL _NAME : 7 , LOCAL _NAME : 8 , CLASSES : 9 , FRAME _TARGET : 10 , MEDIA _QUERY : 13 } } ; L . atype = L . e ;
L . w = { "*::class" : 9 , "*::dir" : 0 , "*::draggable" : 0 , "*::hidden" : 0 , "*::id" : 4 , "*::inert" : 0 , "*::itemprop" : 0 , "*::itemref" : 6 , "*::itemscope" : 0 , "*::lang" : 0 , "*::onblur" : 2 , "*::onchange" : 2 , "*::onclick" : 2 , "*::ondblclick" : 2 , "*::onerror" : 2 , "*::onfocus" : 2 , "*::onkeydown" : 2 , "*::onkeypress" : 2 , "*::onkeyup" : 2 , "*::onload" : 2 , "*::onmousedown" : 2 , "*::onmousemove" : 2 , "*::onmouseout" : 2 , "*::onmouseover" : 2 , "*::onmouseup" : 2 , "*::onreset" : 2 , "*::onscroll" : 2 , "*::onselect" : 2 , "*::onsubmit" : 2 , "*::onunload" : 2 , "*::spellcheck" : 0 , "*::style" : 3 ,
"*::title" : 0 , "*::translate" : 0 , "a::accesskey" : 0 , "a::coords" : 0 , "a::href" : 1 , "a::hreflang" : 0 , "a::name" : 7 , "a::onblur" : 2 , "a::onfocus" : 2 , "a::shape" : 0 , "a::tabindex" : 0 , "a::target" : 10 , "a::type" : 0 , "area::accesskey" : 0 , "area::alt" : 0 , "area::coords" : 0 , "area::href" : 1 , "area::nohref" : 0 , "area::onblur" : 2 , "area::onfocus" : 2 , "area::shape" : 0 , "area::tabindex" : 0 , "area::target" : 10 , "audio::controls" : 0 , "audio::loop" : 0 , "audio::mediagroup" : 5 , "audio::muted" : 0 , "audio::preload" : 0 , "audio::src" : 1 , "bdo::dir" : 0 , "blockquote::cite" : 1 , "br::clear" : 0 ,
"button::accesskey" : 0 , "button::disabled" : 0 , "button::name" : 8 , "button::onblur" : 2 , "button::onfocus" : 2 , "button::tabindex" : 0 , "button::type" : 0 , "button::value" : 0 , "canvas::height" : 0 , "canvas::width" : 0 , "caption::align" : 0 , "col::align" : 0 , "col::char" : 0 , "col::charoff" : 0 , "col::span" : 0 , "col::valign" : 0 , "col::width" : 0 , "colgroup::align" : 0 , "colgroup::char" : 0 , "colgroup::charoff" : 0 , "colgroup::span" : 0 , "colgroup::valign" : 0 , "colgroup::width" : 0 , "command::checked" : 0 , "command::command" : 5 , "command::disabled" : 0 , "command::icon" : 1 ,
"command::label" : 0 , "command::radiogroup" : 0 , "command::type" : 0 , "data::value" : 0 , "del::cite" : 1 , "del::datetime" : 0 , "details::open" : 0 , "dir::compact" : 0 , "div::align" : 0 , "dl::compact" : 0 , "fieldset::disabled" : 0 , "font::color" : 0 , "font::face" : 0 , "font::size" : 0 , "form::accept" : 0 , "form::action" : 1 , "form::autocomplete" : 0 , "form::enctype" : 0 , "form::method" : 0 , "form::name" : 7 , "form::novalidate" : 0 , "form::onreset" : 2 , "form::onsubmit" : 2 , "form::target" : 10 , "h1::align" : 0 , "h2::align" : 0 , "h3::align" : 0 , "h4::align" : 0 , "h5::align" : 0 , "h6::align" : 0 ,
"hr::align" : 0 , "hr::noshade" : 0 , "hr::size" : 0 , "hr::width" : 0 , "iframe::align" : 0 , "iframe::frameborder" : 0 , "iframe::height" : 0 , "iframe::marginheight" : 0 , "iframe::marginwidth" : 0 , "iframe::width" : 0 , "img::align" : 0 , "img::alt" : 0 , "img::border" : 0 , "img::height" : 0 , "img::hspace" : 0 , "img::ismap" : 0 , "img::name" : 7 , "img::src" : 1 , "img::usemap" : 11 , "img::vspace" : 0 , "img::width" : 0 , "input::accept" : 0 , "input::accesskey" : 0 , "input::align" : 0 , "input::alt" : 0 , "input::autocomplete" : 0 , "input::checked" : 0 , "input::disabled" : 0 , "input::inputmode" : 0 ,
"input::ismap" : 0 , "input::list" : 5 , "input::max" : 0 , "input::maxlength" : 0 , "input::min" : 0 , "input::multiple" : 0 , "input::name" : 8 , "input::onblur" : 2 , "input::onchange" : 2 , "input::onfocus" : 2 , "input::onselect" : 2 , "input::placeholder" : 0 , "input::readonly" : 0 , "input::required" : 0 , "input::size" : 0 , "input::src" : 1 , "input::step" : 0 , "input::tabindex" : 0 , "input::type" : 0 , "input::usemap" : 11 , "input::value" : 0 , "ins::cite" : 1 , "ins::datetime" : 0 , "label::accesskey" : 0 , "label::for" : 5 , "label::onblur" : 2 , "label::onfocus" : 2 , "legend::accesskey" : 0 ,
"legend::align" : 0 , "li::type" : 0 , "li::value" : 0 , "map::name" : 7 , "menu::compact" : 0 , "menu::label" : 0 , "menu::type" : 0 , "meter::high" : 0 , "meter::low" : 0 , "meter::max" : 0 , "meter::min" : 0 , "meter::value" : 0 , "ol::compact" : 0 , "ol::reversed" : 0 , "ol::start" : 0 , "ol::type" : 0 , "optgroup::disabled" : 0 , "optgroup::label" : 0 , "option::disabled" : 0 , "option::label" : 0 , "option::selected" : 0 , "option::value" : 0 , "output::for" : 6 , "output::name" : 8 , "p::align" : 0 , "pre::width" : 0 , "progress::max" : 0 , "progress::min" : 0 , "progress::value" : 0 , "q::cite" : 1 , "select::autocomplete" : 0 ,
"select::disabled" : 0 , "select::multiple" : 0 , "select::name" : 8 , "select::onblur" : 2 , "select::onchange" : 2 , "select::onfocus" : 2 , "select::required" : 0 , "select::size" : 0 , "select::tabindex" : 0 , "source::type" : 0 , "table::align" : 0 , "table::bgcolor" : 0 , "table::border" : 0 , "table::cellpadding" : 0 , "table::cellspacing" : 0 , "table::frame" : 0 , "table::rules" : 0 , "table::summary" : 0 , "table::width" : 0 , "tbody::align" : 0 , "tbody::char" : 0 , "tbody::charoff" : 0 , "tbody::valign" : 0 , "td::abbr" : 0 , "td::align" : 0 , "td::axis" : 0 , "td::bgcolor" : 0 , "td::char" : 0 ,
"td::charoff" : 0 , "td::colspan" : 0 , "td::headers" : 6 , "td::height" : 0 , "td::nowrap" : 0 , "td::rowspan" : 0 , "td::scope" : 0 , "td::valign" : 0 , "td::width" : 0 , "textarea::accesskey" : 0 , "textarea::autocomplete" : 0 , "textarea::cols" : 0 , "textarea::disabled" : 0 , "textarea::inputmode" : 0 , "textarea::name" : 8 , "textarea::onblur" : 2 , "textarea::onchange" : 2 , "textarea::onfocus" : 2 , "textarea::onselect" : 2 , "textarea::placeholder" : 0 , "textarea::readonly" : 0 , "textarea::required" : 0 , "textarea::rows" : 0 , "textarea::tabindex" : 0 , "textarea::wrap" : 0 , "tfoot::align" : 0 ,
"tfoot::char" : 0 , "tfoot::charoff" : 0 , "tfoot::valign" : 0 , "th::abbr" : 0 , "th::align" : 0 , "th::axis" : 0 , "th::bgcolor" : 0 , "th::char" : 0 , "th::charoff" : 0 , "th::colspan" : 0 , "th::headers" : 6 , "th::height" : 0 , "th::nowrap" : 0 , "th::rowspan" : 0 , "th::scope" : 0 , "th::valign" : 0 , "th::width" : 0 , "thead::align" : 0 , "thead::char" : 0 , "thead::charoff" : 0 , "thead::valign" : 0 , "tr::align" : 0 , "tr::bgcolor" : 0 , "tr::char" : 0 , "tr::charoff" : 0 , "tr::valign" : 0 , "track::default" : 0 , "track::kind" : 0 , "track::label" : 0 , "track::srclang" : 0 , "ul::compact" : 0 , "ul::type" : 0 ,
"video::controls" : 0 , "video::height" : 0 , "video::loop" : 0 , "video::mediagroup" : 5 , "video::muted" : 0 , "video::poster" : 1 , "video::preload" : 0 , "video::src" : 1 , "video::width" : 0 } ; L . ATTRIBS = L . w ; L . c = { OPTIONAL _ENDTAG : 1 , EMPTY : 2 , CDATA : 4 , RCDATA : 8 , UNSAFE : 16 , FOLDABLE : 32 , SCRIPT : 64 , STYLE : 128 , VIRTUALIZED : 256 } ; L . eflags = L . c ;
L . f = { a : 0 , abbr : 0 , acronym : 0 , address : 0 , applet : 272 , area : 2 , article : 0 , aside : 0 , audio : 0 , b : 0 , base : 274 , basefont : 274 , bdi : 0 , bdo : 0 , big : 0 , blockquote : 0 , body : 305 , br : 2 , button : 0 , canvas : 0 , caption : 0 , center : 0 , cite : 0 , code : 0 , col : 2 , colgroup : 1 , command : 2 , data : 0 , datalist : 0 , dd : 1 , del : 0 , details : 0 , dfn : 0 , dialog : 272 , dir : 0 , div : 0 , dl : 0 , dt : 1 , em : 0 , fieldset : 0 , figcaption : 0 , figure : 0 , font : 0 , footer : 0 , form : 0 , frame : 274 , frameset : 272 , h1 : 0 , h2 : 0 , h3 : 0 , h4 : 0 , h5 : 0 , h6 : 0 , head : 305 , header : 0 , hgroup : 0 , hr : 2 , html : 305 , i : 0 , iframe : 4 , img : 2 , input : 2 , ins : 0 , isindex : 274 ,
kbd : 0 , keygen : 274 , label : 0 , legend : 0 , li : 1 , link : 274 , map : 0 , mark : 0 , menu : 0 , meta : 274 , meter : 0 , nav : 0 , nobr : 0 , noembed : 276 , noframes : 276 , noscript : 276 , object : 272 , ol : 0 , optgroup : 0 , option : 1 , output : 0 , p : 1 , param : 274 , pre : 0 , progress : 0 , q : 0 , s : 0 , samp : 0 , script : 84 , section : 0 , select : 0 , small : 0 , source : 2 , span : 0 , strike : 0 , strong : 0 , style : 148 , sub : 0 , summary : 0 , sup : 0 , table : 0 , tbody : 1 , td : 1 , textarea : 8 , tfoot : 1 , th : 1 , thead : 1 , time : 0 , title : 280 , tr : 1 , track : 2 , tt : 0 , u : 0 , ul : 0 , "var" : 0 , video : 0 , wbr : 2 } ; L . ELEMENTS = L . f ;
L . O = { a : "HTMLAnchorElement" , abbr : "HTMLElement" , acronym : "HTMLElement" , address : "HTMLElement" , applet : "HTMLAppletElement" , area : "HTMLAreaElement" , article : "HTMLElement" , aside : "HTMLElement" , audio : "HTMLAudioElement" , b : "HTMLElement" , base : "HTMLBaseElement" , basefont : "HTMLBaseFontElement" , bdi : "HTMLElement" , bdo : "HTMLElement" , big : "HTMLElement" , blockquote : "HTMLQuoteElement" , body : "HTMLBodyElement" , br : "HTMLBRElement" , button : "HTMLButtonElement" , canvas : "HTMLCanvasElement" , caption : "HTMLTableCaptionElement" , center : "HTMLElement" ,
cite : "HTMLElement" , code : "HTMLElement" , col : "HTMLTableColElement" , colgroup : "HTMLTableColElement" , command : "HTMLCommandElement" , data : "HTMLElement" , datalist : "HTMLDataListElement" , dd : "HTMLElement" , del : "HTMLModElement" , details : "HTMLDetailsElement" , dfn : "HTMLElement" , dialog : "HTMLDialogElement" , dir : "HTMLDirectoryElement" , div : "HTMLDivElement" , dl : "HTMLDListElement" , dt : "HTMLElement" , em : "HTMLElement" , fieldset : "HTMLFieldSetElement" , figcaption : "HTMLElement" , figure : "HTMLElement" , font : "HTMLFontElement" , footer : "HTMLElement" ,
form : "HTMLFormElement" , frame : "HTMLFrameElement" , frameset : "HTMLFrameSetElement" , h1 : "HTMLHeadingElement" , h2 : "HTMLHeadingElement" , h3 : "HTMLHeadingElement" , h4 : "HTMLHeadingElement" , h5 : "HTMLHeadingElement" , h6 : "HTMLHeadingElement" , head : "HTMLHeadElement" , header : "HTMLElement" , hgroup : "HTMLElement" , hr : "HTMLHRElement" , html : "HTMLHtmlElement" , i : "HTMLElement" , iframe : "HTMLIFrameElement" , img : "HTMLImageElement" , input : "HTMLInputElement" , ins : "HTMLModElement" , isindex : "HTMLUnknownElement" , kbd : "HTMLElement" , keygen : "HTMLKeygenElement" ,
label : "HTMLLabelElement" , legend : "HTMLLegendElement" , li : "HTMLLIElement" , link : "HTMLLinkElement" , map : "HTMLMapElement" , mark : "HTMLElement" , menu : "HTMLMenuElement" , meta : "HTMLMetaElement" , meter : "HTMLMeterElement" , nav : "HTMLElement" , nobr : "HTMLElement" , noembed : "HTMLElement" , noframes : "HTMLElement" , noscript : "HTMLElement" , object : "HTMLObjectElement" , ol : "HTMLOListElement" , optgroup : "HTMLOptGroupElement" , option : "HTMLOptionElement" , output : "HTMLOutputElement" , p : "HTMLParagraphElement" , param : "HTMLParamElement" , pre : "HTMLPreElement" ,
progress : "HTMLProgressElement" , q : "HTMLQuoteElement" , s : "HTMLElement" , samp : "HTMLElement" , script : "HTMLScriptElement" , section : "HTMLElement" , select : "HTMLSelectElement" , small : "HTMLElement" , source : "HTMLSourceElement" , span : "HTMLSpanElement" , strike : "HTMLElement" , strong : "HTMLElement" , style : "HTMLStyleElement" , sub : "HTMLElement" , summary : "HTMLElement" , sup : "HTMLElement" , table : "HTMLTableElement" , tbody : "HTMLTableSectionElement" , td : "HTMLTableDataCellElement" , textarea : "HTMLTextAreaElement" , tfoot : "HTMLTableSectionElement" ,
th : "HTMLTableHeaderCellElement" , thead : "HTMLTableSectionElement" , time : "HTMLTimeElement" , title : "HTMLTitleElement" , tr : "HTMLTableRowElement" , track : "HTMLTrackElement" , tt : "HTMLElement" , u : "HTMLElement" , ul : "HTMLUListElement" , "var" : "HTMLElement" , video : "HTMLVideoElement" , wbr : "HTMLElement" } ; L . ELEMENT _DOM _INTERFACES = L . O ; L . N = { NOT _LOADED : 0 , SAME _DOCUMENT : 1 , NEW _DOCUMENT : 2 } ; L . ueffects = L . N ;
L . J = { "a::href" : 2 , "area::href" : 2 , "audio::src" : 1 , "blockquote::cite" : 0 , "command::icon" : 1 , "del::cite" : 0 , "form::action" : 2 , "img::src" : 1 , "input::src" : 1 , "ins::cite" : 0 , "q::cite" : 0 , "video::poster" : 1 , "video::src" : 1 } ; L . URIEFFECTS = L . J ; L . L = { UNSANDBOXED : 2 , SANDBOXED : 1 , DATA : 0 } ; L . ltypes = L . L ; L . I = { "a::href" : 2 , "area::href" : 2 , "audio::src" : 2 , "blockquote::cite" : 2 , "command::icon" : 1 , "del::cite" : 2 , "form::action" : 2 , "img::src" : 1 , "input::src" : 1 , "ins::cite" : 2 , "q::cite" : 2 , "video::poster" : 1 , "video::src" : 2 } ; L . LOADERTYPES = L . I ;
"undefined" !== typeof window && ( window . html4 = L ) ; var Q = function ( e ) { function z ( f ) { if ( G . hasOwnProperty ( f ) ) return G [ f ] ; var a = f . match ( R ) ; return a ? String . fromCharCode ( parseInt ( a [ 1 ] , 10 ) ) : ( a = f . match ( S ) ) ? String . fromCharCode ( parseInt ( a [ 1 ] , 16 ) ) : H && T . test ( f ) ? ( H . innerHTML = "&" + f + ";" , a = H . textContent , G [ f ] = a ) : "&" + f + ";" } function B ( f , a ) { return z ( a ) } function y ( f ) { return f . replace ( U , B ) } function A ( f ) { return ( "" + f ) . replace ( V , "&" ) . replace ( M , "<" ) . replace ( N , ">" ) . replace ( W , """ ) } function b ( f ) { return f . replace ( X , "&$1" ) . replace ( M , "<" ) . replace ( N , ">" ) }
function q ( f ) { var a = { z : f . z || f . cdata , A : f . A || f . comment , B : f . B || f . endDoc , r : f . r || f . endTag , d : f . d || f . pcdata , F : f . F || f . rcdata , H : f . H || f . startDoc , v : f . v || f . startTag } ; return function ( f , e ) { var c ; var b = /(<\/|<\!--|<[!?]|[&<>])/g ; c = f + "" ; if ( Y ) c = c . split ( b ) ; else { for ( var i = [ ] , h = 0 , n ; ( n = b . exec ( c ) ) !== l ; ) i . push ( c . substring ( h , n . index ) ) , i . push ( n [ 0 ] ) , h = n . index + n [ 0 ] . length ; i . push ( c . substring ( h ) ) ; c = i } x ( a , c , 0 , { o : ! 1 , C : ! 1 } , e ) } } function m ( f , a , d , e , c ) { return function ( ) { x ( f , a , d , e , c ) } } function x ( f , a , d , j , c ) { try { f . H && 0 == d && f . H ( c ) ; for ( var b ,
i , h , n = a . length ; d < n ; ) { var r = a [ d ++ ] , k = a [ d ] ; switch ( r ) { case "&" : Z . test ( k ) ? ( f . d && f . d ( "&" + k , c , t , m ( f , a , d , j , c ) ) , d ++ ) : f . d && f . d ( "&" , c , t , m ( f , a , d , j , c ) ) ; break ; case "</" : if ( b = /^([-\w:]+)[^\'\"]*/ . exec ( k ) ) if ( b [ 0 ] . length === k . length && ">" === a [ d + 1 ] ) d += 2 , h = b [ 1 ] . toLowerCase ( ) , f . r && f . r ( h , c , t , m ( f , a , d , j , c ) ) ; else { var g = a , o = d , q = f , s = c , v = t , y = j , x = D ( g , o ) ; x ? ( q . r && q . r ( x . name , s , v , m ( q , g , o , y , s ) ) , d = x . next ) : d = g . length } else f . d && f . d ( "</" , c , t , m ( f , a , d , j , c ) ) ; break ; case "<" : if ( b = /^([-\w:]+)\s*\/?/ . exec ( k ) ) if ( b [ 0 ] . length === k . length &&
">" === a [ d + 1 ] ) { d += 2 ; h = b [ 1 ] . toLowerCase ( ) ; f . v && f . v ( h , [ ] , c , t , m ( f , a , d , j , c ) ) ; var z = e . f [ h ] ; z & O && ( d = E ( a , { name : h , next : d , c : z } , f , c , t , j ) ) } else { var g = a , o = f , q = c , s = t , v = j , C = D ( g , d ) ; C ? ( o . v && o . v ( C . name , C . P , q , s , m ( o , g , C . next , v , q ) ) , d = C . c & O ? E ( g , C , o , q , s , v ) : C . next ) : d = g . length } else f . d && f . d ( "<" , c , t , m ( f , a , d , j , c ) ) ; break ; case "<\!--" : if ( ! j . C ) { for ( i = d + 1 ; i < n && ! ( ">" === a [ i ] && /--$/ . test ( a [ i - 1 ] ) ) ; i ++ ) ; if ( i < n ) { if ( f . A ) { var A = a . slice ( d , i ) . join ( "" ) ; f . A ( A . substr ( 0 , A . length - 2 ) , c , t , m ( f , a , i + 1 , j , c ) ) } d = i + 1 } else j . C = ! 0 } j . C && f . d && f . d ( "<!--" ,
c , t , m ( f , a , d , j , c ) ) ; break ; case "<!" : if ( /^\w/ . test ( k ) ) { if ( ! j . o ) { for ( i = d + 1 ; i < n && ">" !== a [ i ] ; i ++ ) ; i < n ? d = i + 1 : j . o = ! 0 } j . o && f . d && f . d ( "<!" , c , t , m ( f , a , d , j , c ) ) } else f . d && f . d ( "<!" , c , t , m ( f , a , d , j , c ) ) ; break ; case "<?" : if ( ! j . o ) { for ( i = d + 1 ; i < n && ">" !== a [ i ] ; i ++ ) ; i < n ? d = i + 1 : j . o = ! 0 } j . o && f . d && f . d ( "<?" , c , t , m ( f , a , d , j , c ) ) ; break ; case ">" : f . d && f . d ( ">" , c , t , m ( f , a , d , j , c ) ) ; break ; case "" : break ; default : f . d && f . d ( r , c , t , m ( f , a , d , j , c ) ) } } f . B && f . B ( c ) } catch ( B ) { if ( B !== t ) throw B ; } } function E ( a , w , d , j , c , u ) { var i = a . length ; I . hasOwnProperty ( w . name ) ||
( I [ w . name ] = RegExp ( "^" + w . name + "(?:[\\s\\/]|$)" , "i" ) ) ; for ( var h = I [ w . name ] , n = w . next , r = w . next + 1 ; r < i && ! ( "</" === a [ r - 1 ] && h . test ( a [ r ] ) ) ; r ++ ) ; r < i && ( r -= 1 ) ; i = a . slice ( n , r ) . join ( "" ) ; if ( w . c & e . c . CDATA ) d . z && d . z ( i , j , c , m ( d , a , r , u , j ) ) ; else if ( w . c & e . c . RCDATA ) d . F && d . F ( b ( i ) , j , c , m ( d , a , r , u , j ) ) ; else throw Error ( "bug" ) ; return r } function D ( a , b ) { var d = /^([-\w:]+)/ . exec ( a [ b ] ) , j = { } ; j . name = d [ 1 ] . toLowerCase ( ) ; j . c = e . f [ j . name ] ; for ( var c = a [ b ] . substr ( d [ 0 ] . length ) , u = b + 1 , i = a . length ; u < i && ">" !== a [ u ] ; u ++ ) c += a [ u ] ; if ( ! ( i <= u ) ) { for ( var h = [ ] ; "" !==
c ; ) if ( d = $ . exec ( c ) ) if ( d [ 4 ] && ! d [ 5 ] || d [ 6 ] && ! d [ 7 ] ) { for ( var d = d [ 4 ] || d [ 6 ] , n = ! 1 , c = [ c , a [ u ++ ] ] ; u < i ; u ++ ) { if ( n ) { if ( ">" === a [ u ] ) break } else 0 <= a [ u ] . indexOf ( d ) && ( n = ! 0 ) ; c . push ( a [ u ] ) } if ( i <= u ) break ; c = c . join ( "" ) } else { var n = d [ 1 ] . toLowerCase ( ) , r ; if ( d [ 2 ] ) { r = d [ 3 ] ; var g = r . charCodeAt ( 0 ) ; if ( 34 === g || 39 === g ) r = r . substr ( 1 , r . length - 2 ) ; r = y ( r . replace ( aa , "" ) ) } else r = "" ; h . push ( n , r ) ; c = c . substr ( d [ 0 ] . length ) } else c = c . replace ( /^[\s\S][^a-z\s]*/ , "" ) ; j . P = h ; j . next = u + 1 ; return j } } function F ( a ) { function b ( a , f ) { j || f . push ( a ) } var d , j ; return q ( { startDoc : function ( ) { d =
[ ] ; j = ! 1 } , startTag : function ( c , b , i ) { if ( ! j && e . f . hasOwnProperty ( c ) ) { var h = e . f [ c ] ; if ( ! ( h & e . c . FOLDABLE ) ) { var n = a ( c , b ) ; if ( n ) { if ( "object" !== typeof n ) throw Error ( "tagPolicy did not return object (old API?)" ) ; if ( "attribs" in n ) b = n . attribs ; else throw Error ( "tagPolicy gave no attribs" ) ; var g ; "tagName" in n ? ( g = n . tagName , n = e . f [ g ] ) : ( g = c , n = h ) ; if ( h & e . c . OPTIONAL _ENDTAG ) { var k = d [ d . length - 1 ] ; k && k . D === c && ( k . t !== g || c !== g ) && i . push ( "</" , k . t , ">" ) } h & e . c . EMPTY || d . push ( { D : c , t : g } ) ; i . push ( "<" , g ) ; c = 0 ; for ( k = b . length ; c < k ; c += 2 ) { var m =
b [ c ] , w = b [ c + 1 ] ; w !== l && void 0 !== w && i . push ( " " , m , '="' , A ( w ) , '"' ) } i . push ( ">" ) ; h & e . c . EMPTY && ! ( n & e . c . EMPTY ) && i . push ( "</" , g , ">" ) } else j = ! ( h & e . c . EMPTY ) } } } , endTag : function ( a , f ) { if ( j ) j = ! 1 ; else if ( e . f . hasOwnProperty ( a ) ) { var b = e . f [ a ] ; if ( ! ( b & ( e . c . EMPTY | e . c . FOLDABLE ) ) ) { if ( b & e . c . OPTIONAL _ENDTAG ) for ( b = d . length ; 0 <= -- b ; ) { var h = d [ b ] . D ; if ( h === a ) break ; if ( ! ( e . f [ h ] & e . c . OPTIONAL _ENDTAG ) ) return } else for ( b = d . length ; 0 <= -- b && d [ b ] . D !== a ; ) ; if ( ! ( 0 > b ) ) { for ( h = d . length ; -- h > b ; ) { var g = d [ h ] . t ; e . f [ g ] & e . c . OPTIONAL _ENDTAG || f . push ( "</" , g ,
">" ) } b < d . length && ( a = d [ b ] . t ) ; d . length = b ; f . push ( "</" , a , ">" ) } } } } , pcdata : b , rcdata : b , cdata : b , endDoc : function ( a ) { for ( ; d . length ; d . length -- ) a . push ( "</" , d [ d . length - 1 ] . t , ">" ) } } ) } function a ( a , b , d , e , c ) { if ( ! c ) return l ; try { var g = p . parse ( "" + a ) ; if ( g && ( ! g . K ( ) || ba . test ( g . U ( ) ) ) ) { var i = c ( g , b , d , e ) ; return i ? i . toString ( ) : l } } catch ( h ) { } return l } function v ( a , b , d , e , c ) { d || a ( b + " removed" , { Q : "removed" , tagName : b } ) ; if ( e !== c ) { var g = "changed" ; e && ! c ? g = "removed" : ! e && c && ( g = "added" ) ; a ( b + "." + d + " " + g , { Q : g , tagName : b , ia : d , oldValue : e , newValue : c } ) } }
function J ( a , b , d ) { b = b + "::" + d ; if ( a . hasOwnProperty ( b ) ) return a [ b ] ; b = "*::" + d ; if ( a . hasOwnProperty ( b ) ) return a [ b ] } function g ( b , g , d , j , c ) { for ( var k = 0 ; k < g . length ; k += 2 ) { var i = g [ k ] , h = g [ k + 1 ] , n = h , m = l , o ; if ( ( o = b + "::" + i , e . w . hasOwnProperty ( o ) ) || ( o = "*::" + i , e . w . hasOwnProperty ( o ) ) ) m = e . w [ o ] ; if ( m !== l ) switch ( m ) { case e . e . NONE : break ; case e . e . SCRIPT : h = l ; c && v ( c , b , i , n , h ) ; break ; case e . e . STYLE : if ( "undefined" === typeof s ) { h = l ; c && v ( c , b , i , n , h ) ; break } var q = [ ] ; s ( h , { declaration : function ( b , c ) { var f = b . toLowerCase ( ) ; P ( f , c , d ? function ( b ) { return a ( b ,
e . N . ga , e . L . ha , { TYPE : "CSS" , CSS _PROP : f } , d ) } : l ) ; c . length && q . push ( f + ": " + c . join ( " " ) ) } } ) ; h = 0 < q . length ? q . join ( " ; " ) : l ; c && v ( c , b , i , n , h ) ; break ; case e . e . ID : case e . e . IDREF : case e . e . IDREFS : case e . e . GLOBAL _NAME : case e . e . LOCAL _NAME : case e . e . CLASSES : h = j ? j ( h ) : h ; c && v ( c , b , i , n , h ) ; break ; case e . e . URI : h = a ( h , J ( e . J , b , i ) , J ( e . I , b , i ) , { TYPE : "MARKUP" , XML _ATTR : i , XML _TAG : b } , d ) ; c && v ( c , b , i , n , h ) ; break ; case e . e . URI _FRAGMENT : h && "#" === h . charAt ( 0 ) ? ( h = h . substring ( 1 ) , h = j ? j ( h ) : h , h !== l && void 0 !== h && ( h = "#" + h ) ) : h = l ; c && v ( c , b , i , n , h ) ; break ;
default : h = l , c && v ( c , b , i , n , h ) } else h = l , c && v ( c , b , i , n , h ) ; g [ k + 1 ] = h } return g } function K ( a , b , d ) { return function ( j , c ) { if ( e . f [ j ] & e . c . UNSAFE ) d && v ( d , j , void 0 , void 0 , void 0 ) ; else return { attribs : g ( j , c , a , b , d ) } } } function k ( a , b ) { var d = [ ] ; F ( b ) ( a , d ) ; return d . join ( "" ) } var s , P ; "undefined" !== typeof window && ( s = window . parseCssDeclarations , P = window . sanitizeCssProperty ) ; var G = { lt : "<" , LT : "<" , gt : ">" , GT : ">" , amp : "&" , AMP : "&" , quot : '"' , apos : "'" , nbsp : "\u00a0" } , R = /^#(\d+)$/ , S = /^#x([0-9A-Fa-f]+)$/ , T = /^[A-Za-z][A-za-z0-9]+$/ , H = "undefined" !==
typeof window && window . document ? window . document . createElement ( "textarea" ) : l , aa = /\0/g , U = /&(#[0-9]+|#[xX][0-9A-Fa-f]+|\w+);/g , Z = /^(#[0-9]+|#[xX][0-9A-Fa-f]+|\w+);/ , V = /&/g , X = /&([^a-z#]|#(?:[^0-9x]|x(?:[^0-9a-f]|$)|$)|$)/gi , M = /[<]/g , N = />/g , W = /\"/g , $ = /^\s*([-.:\w]+)(?:\s*(=)\s*((")[^"]*("|$)|(')[^']*('|$)|(?=[a-z][-\w]*\s*=)|[^"'\s]*))?/i , Y = 3 === "a,b" . split ( /(,)/ ) . length , O = e . c . CDATA | e . c . RCDATA , t = { } , I = { } , ba = /^(?:https?|mailto)$/i , o = { } ; o . ka = o . escapeAttrib = A ; o . la = o . makeHtmlSanitizer = F ; o . ma = o . makeSaxParser =
q ; o . na = o . makeTagPolicy = K ; o . pa = o . normalizeRCData = b ; o . qa = o . sanitize = function ( a , b , d , e ) { return k ( a , K ( b , d , e ) ) } ; o . ra = o . sanitizeAttribs = g ; o . sa = o . sanitizeWithPolicy = k ; o . ta = o . unescapeEntities = y ; return o } ( L ) , ca = Q . sanitize ; "undefined" !== typeof window && ( window . html = Q , window . html _sanitize = ca ) ; } ) ( ) ;
var hljs = new function ( ) { function l ( o ) { return o . replace ( /&/gm , "&" ) . replace ( /</gm , "<" ) . replace ( />/gm , ">" ) } function b ( p ) { for ( var o = p . firstChild ; o ; o = o . nextSibling ) { if ( o . nodeName == "CODE" ) { return o } if ( ! ( o . nodeType == 3 && o . nodeValue . match ( /\s+/ ) ) ) { break } } } function h ( p , o ) { return Array . prototype . map . call ( p . childNodes , function ( q ) { if ( q . nodeType == 3 ) { return o ? q . nodeValue . replace ( /\n/g , "" ) : q . nodeValue } if ( q . nodeName == "BR" ) { return "\n" } return h ( q , o ) } ) . join ( "" ) } function a ( q ) { var p = ( q . className + " " + q . parentNode . className ) . split ( /\s+/ ) ; p = p . map ( function ( r ) { return r . replace ( /^language-/ , "" ) } ) ; for ( var o = 0 ; o < p . length ; o ++ ) { if ( e [ p [ o ] ] || p [ o ] == "no-highlight" ) { return p [ o ] } } } function c ( q ) { var o = [ ] ; ( function p ( r , s ) { for ( var t = r . firstChild ; t ; t = t . nextSibling ) { if ( t . nodeType == 3 ) { s += t . nodeValue . length } else { if ( t . nodeName == "BR" ) { s += 1 } else { if ( t . nodeType == 1 ) { o . push ( { event : "start" , offset : s , node : t } ) ; s = p ( t , s ) ; o . push ( { event : "stop" , offset : s , node : t } ) } } } } return s } ) ( q , 0 ) ; return o } function j ( x , v , w ) { var p = 0 ; var y = "" ; var r = [ ] ; function t ( ) { if ( x . length && v . length ) { if ( x [ 0 ] . offset != v [ 0 ] . offset ) { return ( x [ 0 ] . offset < v [ 0 ] . offset ) ? x : v } else { return v [ 0 ] . event == "start" ? x : v } } else { return x . length ? x : v } } function s ( A ) { function z ( B ) { return " " + B . nodeName + '="' + l ( B . value ) + '"' } return "<" + A . nodeName + Array . prototype . map . call ( A . attributes , z ) . join ( "" ) + ">" } while ( x . length || v . length ) { var u = t ( ) . splice ( 0 , 1 ) [ 0 ] ; y += l ( w . substr ( p , u . offset - p ) ) ; p = u . offset ; if ( u . event == "start" ) { y += s ( u . node ) ; r . push ( u . node ) } else { if ( u . event == "stop" ) { var o , q = r . length ; do { q -- ; o = r [ q ] ; y += ( "</" + o . nodeName . toLowerCase ( ) + ">" ) } while ( o != u . node ) ; r . splice ( q , 1 ) ; while ( q < r . length ) { y += s ( r [ q ] ) ; q ++ } } } } return y + l ( w . substr ( p ) ) } function f ( q ) { function o ( s , r ) { return RegExp ( s , "m" + ( q . cI ? "i" : "" ) + ( r ? "g" : "" ) ) } function p ( y , w ) { if ( y . compiled ) { return } y . compiled = true ; var s = [ ] ; if ( y . k ) { var r = { } ; function z ( A , t ) { t . split ( " " ) . forEach ( function ( B ) { var C = B . split ( "|" ) ; r [ C [ 0 ] ] = [ A , C [ 1 ] ? Number ( C [ 1 ] ) : 1 ] ; s . push ( C [ 0 ] ) } ) } y . lR = o ( y . l || hljs . IR , true ) ; if ( typeof y . k == "string" ) { z ( "keyword" , y . k ) } else { for ( var x in y . k ) { if ( ! y . k . hasOwnProperty ( x ) ) { continue } z ( x , y . k [ x ] ) } } y . k = r } if ( w ) { if ( y . bWK ) { y . b = "\\b(" + s . join ( "|" ) + ")\\s" } y . bR = o ( y . b ? y . b : "\\B|\\b" ) ; if ( ! y . e && ! y . eW ) { y . e = "\\B|\\b" } if ( y . e ) { y . eR = o ( y . e ) } y . tE = y . e || "" ; if ( y . eW && w . tE ) { y . tE += ( y . e ? "|" : "" ) + w . tE } } if ( y . i ) { y . iR = o ( y . i ) } if ( y . r === undefined ) { y . r = 1 } if ( ! y . c ) { y . c = [ ] } for ( var v = 0 ; v < y . c . length ; v ++ ) { if ( y . c [ v ] == "self" ) { y . c [ v ] = y } p ( y . c [ v ] , y ) } if ( y . starts ) { p ( y . starts , w ) } var u = [ ] ; for ( var v = 0 ; v < y . c . length ; v ++ ) { u . push ( y . c [ v ] . b ) } if ( y . tE ) { u . push ( y . tE ) } if ( y . i ) { u . push ( y . i ) } y . t = u . length ? o ( u . join ( "|" ) , true ) : { exec : function ( t ) { return null } } } p ( q ) } function d ( D , E ) { function o ( r , M ) { for ( var L = 0 ; L < M . c . length ; L ++ ) { var K = M . c [ L ] . bR . exec ( r ) ; if ( K && K . index == 0 ) { return M . c [ L ] } } } function s ( K , r ) { if ( K . e && K . eR . test ( r ) ) { return K } if ( K . eW ) { return s ( K . parent , r ) } } function t ( r , K ) { return K . i && K . iR . test ( r ) } function y ( L , r ) { var K = F . cI ? r [ 0 ] . toLowerCase ( ) : r [ 0 ] ; return L . k . hasOwnProperty ( K ) && L . k [ K ] } function G ( ) { var K = l ( w ) ; if ( ! A . k ) { return K } var r = "" ; var N = 0 ; A . lR . lastIndex = 0 ; var L = A . lR . exec ( K ) ; while ( L ) { r += K . substr ( N , L . index - N ) ; var M = y ( A , L ) ; if ( M ) { v += M [ 1 ] ; r += '<span class="' + M [ 0 ] + '">' + L [ 0 ] + "</span>" } else { r += L [ 0 ] } N = A . lR . lastIndex ; L = A . lR . exec ( K ) } return r + K . substr ( N ) } function z ( ) { if ( A . sL && ! e [ A . sL ] ) { return l ( w ) } var r = A . sL ? d ( A . sL , w ) : g ( w ) ; if ( A . r > 0 ) { v += r . keyword _count ; B += r . r } return '<span class="' + r . language + '">' + r . value + "</span>" } function J ( ) { return A . sL !== undefined ? z ( ) : G ( ) } function I ( L , r ) { var K = L . cN ? '<span class="' + L . cN + '">' : "" ; if ( L . rB ) { x += K ; w = "" } else { if ( L . eB ) { x += l ( r ) + K ; w = "" } else { x += K ; w = r } } A = Object . create ( L , { parent : { value : A } } ) ; B += L . r } function C ( K , r ) { w += K ; if ( r === undefined ) { x += J ( ) ; return 0 } var L = o ( r , A ) ; if ( L ) { x += J ( ) ; I ( L , r ) ; return L . rB ? 0 : r . length } var M = s ( A , r ) ; if ( M ) { if ( ! ( M . rE || M . eE ) ) { w += r } x += J ( ) ; do { if ( A . cN ) { x += "</span>" } A = A . parent } while ( A != M . parent ) ; if ( M . eE ) { x += l ( r ) } w = "" ; if ( M . starts ) { I ( M . starts , "" ) } return M . rE ? 0 : r . length } if ( t ( r , A ) ) { throw "Illegal" } w += r ; return r . length || 1 } var F = e [ D ] ; f ( F ) ; var A = F ; var w = "" ; var B = 0 ; var v = 0 ; var x = "" ; try { var u , q , p = 0 ; while ( true ) { A . t . lastIndex = p ; u = A . t . exec ( E ) ; if ( ! u ) { break } q = C ( E . substr ( p , u . index - p ) , u [ 0 ] ) ; p = u . index + q } C ( E . substr ( p ) ) ; return { r : B , keyword _count : v , value : x , language : D } } catch ( H
hljs . initHighlightingOnLoad ( ) ; MDR = { doc : null , callback : WMD . convert , sanitize : null , convert : function ( md , sanitize ) { if ( this . sanitize !== null ) sanitize = this . sanitize ; this . doc = this . callback ( md ) ; var html = this . doc . html ; if ( sanitize ) html = html _sanitize ( html ) ; html = this . hook ( html ) ; return html } , hook : function ( html ) { if ( ! this . doc . metadata ) return html ; try { var template = Handlebars . compile ( html ) ; return template ( this . doc . metadata ) } catch ( e ) { return html } } } ;