function BigInteger ( e , t , n ) { null != e && ( "number" == typeof e ? this . fromNumber ( e , t , n ) : null == t && "string" != typeof e ? this . fromString ( e , 256 ) : this . fromString ( e , t ) ) } function nbi ( ) { return new BigInteger ( null ) } function am1 ( e , t , n , a , i , o ) { for ( ; -- o >= 0 ; ) { var s = t * this [ e ++ ] + n [ a ] + i ; i = Math . floor ( s / 67108864 ) , n [ a ++ ] = 67108863 & s } return i } function am2 ( e , t , n , a , i , o ) { for ( var s = 32767 & t , r = t >> 15 ; -- o >= 0 ; ) { var l = 32767 & this [ e ] , c = this [ e ++ ] >> 15 , d = r * l + c * s ; l = s * l + ( ( 32767 & d ) << 15 ) + n [ a ] + ( 1073741823 & i ) , i = ( l >>> 30 ) + ( d >>> 15 ) + r * c + ( i >>> 30 ) , n [ a ++ ] = 1073741823 & l } return i } function am3 ( e , t , n , a , i , o ) { for ( var s = 16383 & t , r = t >> 14 ; -- o >= 0 ; ) { var l = 16383 & this [ e ] , c = this [ e ++ ] >> 14 , d = r * l + c * s ; l = s * l + ( ( 16383 & d ) << 14 ) + n [ a ] + i , i = ( l >> 28 ) + ( d >> 14 ) + r * c , n [ a ++ ] = 268435455 & l } return i } function int2char ( e ) { return BI _RM . charAt ( e ) } function intAt ( e , t ) { var n = BI _RC [ e . charCodeAt ( t ) ] ; return null == n ? - 1 : n } function bnpCopyTo ( e ) { for ( var t = this . t - 1 ; t >= 0 ; -- t ) e [ t ] = this [ t ] ; e . t = this . t , e . s = this . s } function bnpFromInt ( e ) { this . t = 1 , this . s = 0 > e ? - 1 : 0 , e > 0 ? this [ 0 ] = e : - 1 > e ? this [ 0 ] = e + this . DV : this . t = 0 } function nbv ( e ) { var t = nbi ( ) ; return t . fromInt ( e ) , t } function bnpFromString ( e , t , n ) { var a ; if ( 16 == t ) a = 4 ; else if ( 8 == t ) a = 3 ; else if ( 256 == t ) a = 8 ; else if ( 2 == t ) a = 1 ; else if ( 32 == t ) a = 5 ; else { if ( 4 != t ) return void this . fromRadix ( e , t ) ; a = 2 } this . t = 0 , this . s = 0 ; for ( var i = e . length , o = ! 1 , s = 0 ; -- i >= 0 ; ) { var r = 8 == a ? 255 & e [ i ] : intAt ( e , i ) ; 0 > r ? "-" == e . charAt ( i ) && ( o = ! 0 ) : ( o = ! 1 , 0 == s ? this [ this . t ++ ] = r : s + a > this . DB ? ( this [ this . t - 1 ] |= ( r & ( 1 << this . DB - s ) - 1 ) << s , this [ this . t ++ ] = r >> this . DB - s ) : this [ this . t - 1 ] |= r << s , s += a , s >= this . DB && ( s -= this . DB ) ) } 8 == a && 0 != ( 128 & e [ 0 ] ) && n && ( this . s = - 1 , s > 0 && ( this [ this . t - 1 ] |= ( 1 << this . DB - s ) - 1 << s ) ) , this . clamp ( ) , o && BigInteger . ZERO . subTo ( this , this ) } function bnpClamp ( ) { for ( var e = this . s & this . DM ; this . t > 0 && this [ this . t - 1 ] == e ; ) -- this . t } function bnToString ( e ) { if ( this . s < 0 ) return "-" + this . negate ( ) . toString ( e ) ; var t ; if ( 16 == e ) t = 4 ; else if ( 8 == e ) t = 3 ; else if ( 2 == e ) t = 1 ; else if ( 32 == e ) t = 5 ; else { if ( 4 != e ) return this . toRadix ( e ) ; t = 2 } var n , a = ( 1 << t ) - 1 , i = ! 1 , o = "" , s = this . t , r = this . DB - s * this . DB % t ; if ( s -- > 0 ) for ( r < this . DB && ( n = this [ s ] >> r ) > 0 && ( i = ! 0 , o = int2char ( n ) ) ; s >= 0 ; ) t > r ? ( n = ( this [ s ] & ( 1 << r ) - 1 ) << t - r , n |= this [ -- s ] >> ( r += this . DB - t ) ) : ( n = this [ s ] >> ( r -= t ) & a , 0 >= r && ( r += this . DB , -- s ) ) , n > 0 && ( i = ! 0 ) , i && ( o += int2char ( n ) ) ; return i ? o : "0" } function bnNegate ( ) { var e = nbi ( ) ; return BigInteger . ZERO . subTo ( this , e ) , e } function bnAbs ( ) { return this . s < 0 ? this . negate ( ) : this } function bnCompareTo ( e ) { var t = this . s - e . s ; if ( 0 != t ) return t ; var n = this . t ; if ( t = n - e . t , 0 != t ) return this . s < 0 ? - t : t ; for ( ; -- n >= 0 ; ) if ( 0 != ( t = this [ n ] - e [ n ] ) ) return t ; return 0 } function nbits ( e ) { var t , n = 1 ; return 0 != ( t = e >>> 16 ) && ( e = t , n += 16 ) , 0 != ( t = e >> 8 ) && ( e = t , n += 8 ) , 0 != ( t = e >> 4 ) && ( e = t , n += 4 ) , 0 != ( t = e >> 2 ) && ( e = t , n += 2 ) , 0 != ( t = e >> 1 ) && ( e = t , n += 1 ) , n } function bnBitLength ( ) { return this . t <= 0 ? 0 : this . DB * ( this . t - 1 ) + nbits ( this [ this . t - 1 ] ^ this . s & this . DM ) } function bnpDLShiftTo ( e , t ) { var n ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + e ] = this [ n ] ; for ( n = e - 1 ; n >= 0 ; -- n ) t [ n ] = 0 ; t . t = this . t + e , t . s = this . s } function bnpDRShiftTo ( e , t ) { for ( var n = e ; n < this . t ; ++ n ) t [ n - e ] = this [ n ] ; t . t = Math . max ( this . t - e , 0 ) , t . s = this . s } function bnpLShiftTo ( e , t ) { var n , a = e % this . DB , i = this . DB - a , o = ( 1 << i ) - 1 , s = Math . floor ( e / this . DB ) , r = this . s << a & this . DM ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + s + 1 ] = this [ n ] >> i | r , r = ( this [ n ] & o ) << a ; for ( n = s - 1 ; n >= 0 ; -- n ) t [ n ] = 0 ; t [ s ] = r , t . t = this . t + s + 1 , t . s = this . s , t . clamp ( ) } function bnpRShiftTo ( e , t ) { t . s = this . s ; var n = Math . floor ( e / this . DB ) ; if ( n >= this . t ) return void ( t . t = 0 ) ; var a = e % this . DB , i = this . DB - a , o = ( 1 << a ) - 1 ; t [ 0 ] = this [ n ] >> a ; for ( var s = n + 1 ; s < this . t ; ++ s ) t [ s - n - 1 ] |= ( this [ s ] & o ) << i , t [ s - n ] = this [ s ] >> a ; a > 0 && ( t [ this . t - n - 1 ] |= ( this . s & o ) << i ) , t . t = this . t - n , t . clamp ( ) } function bnpSubTo ( e , t ) { for ( var n = 0 , a = 0 , i = Math . min ( e . t , this . t ) ; i > n ; ) a += this [ n ] - e [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; if ( e . t < this . t ) { for ( a -= e . s ; n < this . t ; ) a += this [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; a += this . s } else { for ( a += this . s ; n < e . t ; ) a -= e [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; a -= e . s } t . s = 0 > a ? - 1 : 0 , - 1 > a ? t [ n ++ ] = this . DV + a : a > 0 && ( t [ n ++ ] = a ) , t . t = n , t . clamp ( ) } function bnpMultiplyTo ( e , t ) { var n = this . abs ( ) , a = e . abs ( ) , i = n . t ; for ( t . t = i + a . t ; -- i >= 0 ; ) t [ i ] = 0 ; for ( i = 0 ; i < a . t ; ++ i ) t [ i + n . t ] = n . am ( 0 , a [ i ] , t , i , 0 , n . t ) ; t . s = 0 , t . clamp ( ) , this . s != e . s && BigInteger . ZERO . subTo ( t , t ) } function bnpSquareTo ( e ) { for ( var t = this . abs ( ) , n = e . t = 2 * t . t ; -- n >= 0 ; ) e [ n ] = 0 ; for ( n = 0 ; n < t . t - 1 ; ++ n ) { var a = t . a
return ! 1 } function cancelEvent ( e ) { return e = e || window . event , e && ( e = e . originalEvent || e , e . stopPropagation && e . stopPropagation ( ) , e . preventDefault && e . preventDefault ( ) ) , ! 1 } function getScrollWidth ( ) { var e = $ ( "<div>" ) . css ( { position : "absolute" , width : 100 , height : 100 , overflow : "scroll" , top : - 9999 } ) . appendTo ( $ ( document . body ) ) , t = e [ 0 ] . offsetWidth - e [ 0 ] . clientWidth ; return e . remove ( ) , t } function onCtrlEnter ( e , t ) { $ ( e ) . on ( "keydown" , function ( e ) { return 13 == e . keyCode && ( e . ctrlKey || e . metaKey ) ? ( t ( ) , cancelEvent ( e ) ) : void 0 } ) } function setFieldSelection ( e , t , n ) { e = $ ( e ) [ 0 ] ; try { if ( e . focus ( ) , ( void 0 === t || t === ! 1 ) && ( t = e . value . length ) , ( void 0 === n || n === ! 1 ) && ( n = t ) , e . createTextRange ) { var a = e . createTextRange ( ) ; a . collapse ( ! 0 ) , a . moveEnd ( "character" , n ) , a . moveStart ( "character" , t ) , a . select ( ) } else e . setSelectionRange && e . setSelectionRange ( t , n ) } catch ( i ) { } } function getFieldSelection ( e ) { if ( e . selectionStart ) return e . selectionStart ; if ( ! document . selection ) return 0 ; var t = " " , n = document . selection . createRange ( ) , a = n . text , i = n . duplicate ( ) , o = 0 ; try { i . moveToElementText ( e ) } catch ( s ) { return 0 } return n . text = a + t , o = i . text . indexOf ( t ) , n . moveStart ( "character" , - 1 ) , n . text = "" , o } function getRichValue ( e ) { if ( ! e ) return "" ; var t = [ ] , n = [ ] ; return getRichElementValue ( e , t , n ) , n . length && t . push ( n . join ( "" ) ) , t . join ( "\n" ) } function getRichValueWithCaret ( e ) { if ( ! e ) return [ ] ; var t , n , a = [ ] , i = [ ] , o = window . getSelection ? window . getSelection ( ) : ! 1 ; if ( o && o . rangeCount ) { var s = o . getRangeAt ( 0 ) ; s . startContainer && s . startContainer == s . endContainer && s . startOffset == s . endOffset && ( t = s . startContainer , n = s . startOffset ) } getRichElementValue ( e , a , i , t , n ) , i . length && a . push ( i . join ( "" ) ) ; var r = a . join ( "\n" ) , l = r . indexOf ( " " ) ; return - 1 != l && ( r = r . substr ( 0 , l ) + r . substr ( l + 1 ) ) , [ r , l ] } function getRichElementValue ( e , t , n , a , i ) { if ( 3 != e . nodeType ) { if ( 1 == e . nodeType ) { var o , s = a === e , r = "DIV" == e . tagName || "P" == e . tagName ; r && n . length || "BR" == e . tagName ? ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) : "IMG" == e . tagName && e . alt && n . push ( e . alt ) , s && ! i && n . push ( " " ) ; for ( var o = e . firstChild ; o ; ) getRichElementValue ( o , t , n , a , i ) , o = o . nextSibling ; s && i && n . push ( " " ) , r && n . length && ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) } } else if ( a === e ) { var l = e . nodeValue ; n . push ( l . substr ( 0 , i ) + " " + l . substr ( i ) ) } else n . push ( e . nodeValue ) } function setRichFocus ( e , t , n ) { if ( e . focus ( ) , ! t || t . parentNode != e || t . nextSibling || n || ( e . removeChild ( t ) , t = null ) , window . getSelection && document . createRange ) { var a = document . createRange ( ) ; t ? a . selectNode ( t ) : a . selectNodeContents ( e ) , n || a . collapse ( ! 1 ) ; var i = window . getSelection ( ) ; i . removeAllRanges ( ) , i . addRange ( a ) } else if ( void 0 !== document . body . createTextRange ) { var o = document . body . createTextRange ( ) ; o . moveToElementText ( t || e ) , n || o . collapse ( ! 1 ) , o . select ( ) } } function getSelectedText ( ) { var e = ( window . getSelection && window . getSelection ( ) || document . getSelection && document . getSelection ( ) || document . selection && document . selection . createRange ( ) . text || "" ) . toString ( ) . replace ( /^\s+|\s+$/g , "" ) ; return e } function scrollToNode ( e , t , n ) { var a = t . offsetTop - 15 , i = t . offsetHeight + 30 , o = e . scrollTop , s = e . clientHeight ; o > a ? ( e . scrollTop = a , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) : a + i - s > o && ( e . scrollTop = a + i - s , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) } function onContentLoaded ( e ) { setZeroTimeout ( e ) } function tsNow ( e ) { var t = + new Date + ( window . tsOffset || 0 ) ; return e ? Math . floor ( t / 1e3 ) : t } function safeReplaceObject ( e , t ) { for ( var n in e ) t . hasOwnProperty ( n ) || "$" == n . charAt ( 0 ) || delete e [ n ] ; for ( var n in t ) t . hasOwnProperty ( n ) && ( e [ n ] = t [ n ] ) } function listMergeSorted ( e , t ) { e = e || [ ] , t = t || [ ] ; for ( var n = angular . copy ( e ) , a = e . length ? e [ e . length - 1 ] : 4294967295 , i = 0 ; i < t . length ; i ++ ) t [ i ] < a && n . push ( t [ i ] ) ; return n } function listUniqSorted ( e ) { e = e || [ ] ; for ( var t = [ ] , n = ! 1 , a = 0 ; a < e . length ; a ++ ) e [ a ] !== n && t . push ( e [ a ] ) , n = e [ a ] ; return t } function templateUrl ( e ) { var t = { confirm _modal : "desktop" , error _modal : "desktop" , media _modal _layout : "desktop" , slider : "desktop" , reply _message : "desktop" , forwarded _messages : "desktop" , chat _invite _link _modal : "desktop" , reply _markup : "desktop" , dialog _service : "desktop" , channel _edit _modal : "desktop" , megagroup _edit _modal : "desktop" } , n = t [ e ] || ( Config . Mobile ? "mobile" : "desktop" ) ; return "partials/" + n + "/" + e + ".html" } function encodeEntities ( e ) { return e . replace ( /&/g , "&" ) . replace ( /[\uD800-\uDBFF][\uDC00-\uDFFF]/g , function
a !== r && i . push ( e [ o ] ) ; return i } , map : function ( e , t , a ) { var i , o = 0 , s = e . length , r = n ( e ) , l = [ ] ; if ( r ) for ( ; s > o ; o ++ ) i = t ( e [ o ] , o , a ) , null != i && l . push ( i ) ; else for ( o in e ) i = t ( e [ o ] , o , a ) , null != i && l . push ( i ) ; return Z . apply ( [ ] , l ) } , guid : 1 , proxy : function ( e , t ) { var n , a , i ; return "string" == typeof t && ( i = e [ t ] , t = e , e = i ) , ie . isFunction ( e ) ? ( n = Y . call ( arguments , 2 ) , a = function ( ) { return e . apply ( t || this , n . concat ( Y . call ( arguments ) ) ) } , a . guid = e . guid = e . guid || ie . guid ++ , a ) : void 0 } , now : function ( ) { return + new Date } , support : ne } ) , ie . each ( "Boolean Number String Function Array Date RegExp Object Error" . split ( " " ) , function ( e , t ) { Q [ "[object " + t + "]" ] = t . toLowerCase ( ) } ) ; var ce = function ( e ) { function t ( e , t , n , a ) { var i , o , s , r , l , c , u , m , g , h ; if ( ( t ? t . ownerDocument || t : B ) !== D && T ( t ) , t = t || D , n = n || [ ] , ! e || "string" != typeof e ) return n ; if ( 1 !== ( r = t . nodeType ) && 9 !== r ) return [ ] ; if ( F && ! a ) { if ( i = ve . exec ( e ) ) if ( s = i [ 1 ] ) { if ( 9 === r ) { if ( o = t . getElementById ( s ) , ! o || ! o . parentNode ) return n ; if ( o . id === s ) return n . push ( o ) , n } else if ( t . ownerDocument && ( o = t . ownerDocument . getElementById ( s ) ) && U ( t , o ) && o . id === s ) return n . push ( o ) , n } else { if ( i [ 2 ] ) return Q . apply ( n , t . getElementsByTagName ( e ) ) , n ; if ( ( s = i [ 3 ] ) && w . getElementsByClassName && t . getElementsByClassName ) return Q . apply ( n , t . getElementsByClassName ( s ) ) , n } if ( w . qsa && ( ! N || ! N . test ( e ) ) ) { if ( m = u = L , g = t , h = 9 === r && e , 1 === r && "object" !== t . nodeName . toLowerCase ( ) ) { for ( c = C ( e ) , ( u = t . getAttribute ( "id" ) ) ? m = u . replace ( be , "\\$&" ) : t . setAttribute ( "id" , m ) , m = "[id='" + m + "'] " , l = c . length ; l -- ; ) c [ l ] = m + p ( c [ l ] ) ; g = ye . test ( e ) && d ( t . parentNode ) || t , h = c . join ( "," ) } if ( h ) try { return Q . apply ( n , g . querySelectorAll ( h ) ) , n } catch ( f ) { } finally { u || t . removeAttribute ( "id" ) } } } return x ( e . replace ( le , "$1" ) , t , n , a ) } function n ( ) { function e ( n , a ) { return t . push ( n + " " ) > k . cacheLength && delete e [ t . shift ( ) ] , e [ n + " " ] = a } var t = [ ] ; return e } function a ( e ) { return e [ L ] = ! 0 , e } function i ( e ) { var t = D . createElement ( "div" ) ; try { return ! ! e ( t ) } catch ( n ) { return ! 1 } finally { t . parentNode && t . parentNode . removeChild ( t ) , t = null } } function o ( e , t ) { for ( var n = e . split ( "|" ) , a = e . length ; a -- ; ) k . attrHandle [ n [ a ] ] = t } function s ( e , t ) { var n = t && e , a = n && 1 === e . nodeType && 1 === t . nodeType && ( ~ t . sourceIndex || K ) - ( ~ e . sourceIndex || K ) ; if ( a ) return a ; if ( n ) for ( ; n = n . nextSibling ; ) if ( n === t ) return - 1 ; return e ? 1 : - 1 } function r ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return "input" === n && t . type === e } } function l ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return ( "input" === n || "button" === n ) && t . type === e } } function c ( e ) { return a ( function ( t ) { return t = + t , a ( function ( n , a ) { for ( var i , o = e ( [ ] , n . length , t ) , s = o . length ; s -- ; ) n [ i = o [ s ] ] && ( n [ i ] = ! ( a [ i ] = n [ i ] ) ) } ) } ) } function d ( e ) { return e && typeof e . getElementsByTagName !== G && e } function u ( ) { } function p ( e ) { for ( var t = 0 , n = e . length , a = "" ; n > t ; t ++ ) a += e [ t ] . value ; return a } function m ( e , t , n ) { var a = t . dir , i = n && "parentNode" === a , o = q ++ ; return t . first ? function ( t , n , o ) { for ( ; t = t [ a ] ; ) if ( 1 === t . nodeType || i ) return e ( t , n , o ) } : function ( t , n , s ) { var r , l , c = [ j , o ] ; if ( s ) { for ( ; t = t [ a ] ; ) if ( ( 1 === t . nodeType || i ) && e ( t , n , s ) ) return ! 0 } else for ( ; t = t [ a ] ; ) if ( 1 === t . nodeType || i ) { if ( l = t [ L ] || ( t [ L ] = { } ) , ( r = l [ a ] ) && r [ 0 ] === j && r [ 1 ] === o ) return c [ 2 ] = r [ 2 ] ; if ( l [ a ] = c , c [ 2 ] = e ( t , n , s ) ) return ! 0 } } } function g ( e ) { return e . length > 1 ? function ( t , n , a ) { for ( var i = e . length ; i -- ; ) if ( ! e [ i ] ( t , n , a ) ) return ! 1 ; return ! 0 } : e [ 0 ] } function h ( e , n , a ) { for ( var i = 0 , o = n . length ; o > i ; i ++ ) t ( e , n [ i ] , a ) ; return a } function f ( e , t , n , a , i ) { for ( var o , s = [ ] , r = 0 , l = e . length , c = null != t ; l > r ; r ++ ) ( o = e [ r ] ) && ( ! n || n ( o , a , i ) ) && ( s . push ( o ) , c && t . push ( r ) ) ; return s } function _ ( e , t , n , i , o , s ) { return i && ! i [ L ] && ( i = _ ( i ) ) , o && ! o [ L ] && ( o = _ ( o , s ) ) , a ( function ( a , s , r , l ) { var c , d , u , p = [ ] , m = [ ] , g = s . length , _ = a || h ( t || "*" , r . nodeType ? [ r ] : r , [ ] ) , v = ! e || ! a && t ? _ : f ( _ , p , e , r , l ) , y = n ? o || ( a ? e : g || i ) ? [ ] : s : v ; if ( n && n ( v , y , r , l ) , i ) for ( c = f ( y , m ) , i ( c , [ ] , r , l ) , d = c . length ; d -- ; ) ( u = c [ d ] ) && ( y [ m [ d ] ] = ! ( v [ m [ d ] ] = u ) ) ; if ( a ) { if ( o || e ) { if ( o ) { for ( c = [ ] , d = y . length ; d -- ; ) ( u = y [ d ] ) && c . push ( v [ d ] = u ) ; o ( null , y = [ ] , c , l ) } for ( d = y . length ; d -- ; ) ( u = y [ d ] ) && ( c = o ? te . call ( a , u ) : p [ d ] ) > - 1 && ( a [ c ] = ! ( s [ c ] = u ) ) } } else y = f ( y === s ? y . splice ( g , y . length ) : y ) , o ? o ( null , s , y , l ) : Q . apply ( s , y ) } ) } function v ( e ) { for ( var t , n , a , i = e . length , o = k . relative [ e [ 0 ] . type ] , s = o || k . relative [ " " ] , r = o ? 1 : 0 , l = m ( function ( e ) { return e === t } , s , ! 0 ) , c = m ( function ( e ) { return te . call ( t , e ) > - 1 } , s , ! 0 ) , d = [ function ( e , n , a ) { return ! o && ( a || n !== A ) || ( ( t = n ) . nodeType ? l (
c . add && ( c . add . call ( e , u ) , u . handler . guid || ( u . handler . guid = n . guid ) ) , i ? p . splice ( p . delegateCount ++ , 0 , u ) : p . push ( u ) , ie . event . global [ m ] = ! 0 ) ; e = null } } , remove : function ( e , t , n , a , i ) { var o , s , r , l , c , d , u , p , m , g , h , f = ie . hasData ( e ) && ie . _data ( e ) ; if ( f && ( d = f . events ) ) { for ( t = ( t || "" ) . match ( ye ) || [ "" ] , c = t . length ; c -- ; ) if ( r = Ne . exec ( t [ c ] ) || [ ] , m = h = r [ 1 ] , g = ( r [ 2 ] || "" ) . split ( "." ) . sort ( ) , m ) { for ( u = ie . event . special [ m ] || { } , m = ( a ? u . delegateType : u . bindType ) || m , p = d [ m ] || [ ] , r = r [ 2 ] && new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , l = o = p . length ; o -- ; ) s = p [ o ] , ! i && h !== s . origType || n && n . guid !== s . guid || r && ! r . test ( s . namespace ) || a && a !== s . selector && ( "**" !== a || ! s . selector ) || ( p . splice ( o , 1 ) , s . selector && p . delegateCount -- , u . remove && u . remove . call ( e , s ) ) ; l && ! p . length && ( u . teardown && u . teardown . call ( e , g , f . handle ) !== ! 1 || ie . removeEvent ( e , m , f . handle ) , delete d [ m ] ) } else for ( m in d ) ie . event . remove ( e , m + t [ c ] , n , a , ! 0 ) ; ie . isEmptyObject ( d ) && ( delete f . handle , ie . _removeData ( e , "events" ) ) } } , trigger : function ( t , n , a , i ) { var o , s , r , l , c , d , u , p = [ a || ge ] , m = te . call ( t , "type" ) ? t . type : t , g = te . call ( t , "namespace" ) ? t . namespace . split ( "." ) : [ ] ; if ( r = d = a = a || ge , 3 !== a . nodeType && 8 !== a . nodeType && ! Fe . test ( m + ie . event . triggered ) && ( m . indexOf ( "." ) >= 0 && ( g = m . split ( "." ) , m = g . shift ( ) , g . sort ( ) ) , s = m . indexOf ( ":" ) < 0 && "on" + m , t = t [ ie . expando ] ? t : new ie . Event ( m , "object" == typeof t && t ) , t . isTrigger = i ? 2 : 3 , t . namespace = g . join ( "." ) , t . namespace _re = t . namespace ? new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , t . result = void 0 , t . target || ( t . target = a ) , n = null == n ? [ t ] : ie . makeArray ( n , [ t ] ) , c = ie . event . special [ m ] || { } , i || ! c . trigger || c . trigger . apply ( a , n ) !== ! 1 ) ) { if ( ! i && ! c . noBubble && ! ie . isWindow ( a ) ) { for ( l = c . delegateType || m , Fe . test ( l + m ) || ( r = r . parentNode ) ; r ; r = r . parentNode ) p . push ( r ) , d = r ; d === ( a . ownerDocument || ge ) && p . push ( d . defaultView || d . parentWindow || e ) } for ( u = 0 ; ( r = p [ u ++ ] ) && ! t . isPropagationStopped ( ) ; ) t . type = u > 1 ? l : c . bindType || m , o = ( ie . _data ( r , "events" ) || { } ) [ t . type ] && ie . _data ( r , "handle" ) , o && o . apply ( r , n ) , o = s && r [ s ] , o && o . apply && ie . acceptData ( r ) && ( t . result = o . apply ( r , n ) , t . result === ! 1 && t . preventDefault ( ) ) ; if ( t . type = m , ! i && ! t . isDefaultPrevented ( ) && ( ! c . _default || c . _default . apply ( p . pop ( ) , n ) === ! 1 ) && ie . acceptData ( a ) && s && a [ m ] && ! ie . isWindow ( a ) ) { d = a [ s ] , d && ( a [ s ] = null ) , ie . event . triggered = m ; try { a [ m ] ( ) } catch ( h ) { } ie . event . triggered = void 0 , d && ( a [ s ] = d ) } return t . result } } , dispatch : function ( e ) { e = ie . event . fix ( e ) ; var t , n , a , i , o , s = [ ] , r = Y . call ( arguments ) , l = ( ie . _data ( this , "events" ) || { } ) [ e . type ] || [ ] , c = ie . event . special [ e . type ] || { } ; if ( r [ 0 ] = e , e . delegateTarget = this , ! c . preDispatch || c . preDispatch . call ( this , e ) !== ! 1 ) { for ( s = ie . event . handlers . call ( this , e , l ) , t = 0 ; ( i = s [ t ++ ] ) && ! e . isPropagationStopped ( ) ; ) for ( e . currentTarget = i . elem , o = 0 ; ( a = i . handlers [ o ++ ] ) && ! e . isImmediatePropagationStopped ( ) ; ) ( ! e . namespace _re || e . namespace _re . test ( a . namespace ) ) && ( e . handleObj = a , e . data = a . data , n = ( ( ie . event . special [ a . origType ] || { } ) . handle || a . handler ) . apply ( i . elem , r ) , void 0 !== n && ( e . result = n ) === ! 1 && ( e . preventDefault ( ) , e . stopPropagation ( ) ) ) ; return c . postDispatch && c . postDispatch . call ( this , e ) , e . result } } , handlers : function ( e , t ) { var n , a , i , o , s = [ ] , r = t . delegateCount , l = e . target ; if ( r && l . nodeType && ( ! e . button || "click" !== e . type ) ) for ( ; l != this ; l = l . parentNode || this ) if ( 1 === l . nodeType && ( l . disabled !== ! 0 || "click" !== e . type ) ) { for ( i = [ ] , o = 0 ; r > o ; o ++ ) a = t [ o ] , n = a . selector + " " , void 0 === i [ n ] && ( i [ n ] = a . needsContext ? ie ( n , this ) . index ( l ) >= 0 : ie . find ( n , this , null , [ l ] ) . length ) , i [ n ] && i . push ( a ) ; i . length && s . push ( { elem : l , handlers : i } ) } return r < t . length && s . push ( { elem : this , handlers : t . slice ( r ) } ) , s } , fix : function ( e ) { if ( e [ ie . expando ] ) return e ; var t , n , a , i = e . type , o = e , s = this . fixHooks [ i ] ; for ( s || ( this . fixHooks [ i ] = s = Pe . test ( i ) ? this . mouseHooks : De . test ( i ) ? this . keyHooks : { } ) , a = s . props ? this . props . concat ( s . props ) : this . props , e = new ie . Event ( o ) , t = a . length ; t -- ; ) n = a [ t ] , e [ n ] = o [ n ] ; return e . target || ( e . target = o . srcElement || ge ) , 3 === e . target . nodeType && ( e . target = e . target . parentNode ) , e . metaKey = ! ! e . metaKey , s . filter ? s . filter ( e , o ) : e } , 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 ( e , t ) { return null == e . which && ( e . which = null != t . charCode ? t . charCode :
ie . fn . extend ( { prop : function ( e , t ) { return Ee ( this , ie . prop , e , t , arguments . length > 1 ) } , removeProp : function ( e ) { return e = ie . propFix [ e ] || e , this . each ( function ( ) { try { this [ e ] = void 0 , delete this [ e ] } catch ( t ) { } } ) } } ) , ie . extend ( { propFix : { "for" : "htmlFor" , "class" : "className" } , prop : function ( e , t , n ) { var a , i , o , s = e . nodeType ; return e && 3 !== s && 8 !== s && 2 !== s ? ( o = 1 !== s || ! ie . isXMLDoc ( e ) , o && ( t = ie . propFix [ t ] || t , i = ie . propHooks [ t ] ) , void 0 !== n ? i && "set" in i && void 0 !== ( a = i . set ( e , n , t ) ) ? a : e [ t ] = n : i && "get" in i && null !== ( a = i . get ( e , t ) ) ? a : e [ t ] ) : void 0 } , propHooks : { tabIndex : { get : function ( e ) { var t = ie . find . attr ( e , "tabindex" ) ; return t ? parseInt ( t , 10 ) : xt . test ( e . nodeName ) || At . test ( e . nodeName ) && e . href ? 0 : - 1 } } } } ) , ne . hrefNormalized || ie . each ( [ "href" , "src" ] , function ( e , t ) { ie . propHooks [ t ] = { get : function ( e ) { return e . getAttribute ( t , 4 ) } } } ) , ne . optSelected || ( ie . propHooks . selected = { get : function ( e ) { var t = e . parentNode ; return t && ( t . selectedIndex , t . parentNode && t . parentNode . selectedIndex ) , null } } ) , ie . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { ie . propFix [ this . toLowerCase ( ) ] = this } ) , ne . enctype || ( ie . propFix . enctype = "encoding" ) ; var Et = /[\t\r\n\f]/g ; ie . fn . extend ( { addClass : function ( e ) { var t , n , a , i , o , s , r = 0 , l = this . length , c = "string" == typeof e && e ; if ( ie . isFunction ( e ) ) return this . each ( function ( t ) { ie ( this ) . addClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , a = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( Et , " " ) : " " ) ) { for ( o = 0 ; i = t [ o ++ ] ; ) a . indexOf ( " " + i + " " ) < 0 && ( a += i + " " ) ; s = ie . trim ( a ) , n . className !== s && ( n . className = s ) } return this } , removeClass : function ( e ) { var t , n , a , i , o , s , r = 0 , l = this . length , c = 0 === arguments . length || "string" == typeof e && e ; if ( ie . isFunction ( e ) ) return this . each ( function ( t ) { ie ( this ) . removeClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , a = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( Et , " " ) : "" ) ) { for ( o = 0 ; i = t [ o ++ ] ; ) for ( ; a . indexOf ( " " + i + " " ) >= 0 ; ) a = a . replace ( " " + i + " " , " " ) ; s = e ? ie . trim ( a ) : "" , n . className !== s && ( n . className = s ) } return this } , toggleClass : function ( e , t ) { var n = typeof e ; return "boolean" == typeof t && "string" === n ? t ? this . addClass ( e ) : this . removeClass ( e ) : this . each ( ie . isFunction ( e ) ? function ( n ) { ie ( this ) . toggleClass ( e . call ( this , n , this . className , t ) , t ) } : function ( ) { if ( "string" === n ) for ( var t , a = 0 , i = ie ( this ) , o = e . match ( ye ) || [ ] ; t = o [ a ++ ] ; ) i . hasClass ( t ) ? i . removeClass ( t ) : i . addClass ( t ) ; else ( n === $e || "boolean" === n ) && ( this . className && ie . _data ( this , "__className__" , this . className ) , this . className = this . className || e === ! 1 ? "" : ie . _data ( this , "__className__" ) || "" ) } ) } , hasClass : function ( e ) { for ( var t = " " + e + " " , n = 0 , a = this . length ; a > n ; n ++ ) if ( 1 === this [ n ] . nodeType && ( " " + this [ n ] . className + " " ) . replace ( Et , " " ) . indexOf ( t ) >= 0 ) return ! 0 ; return ! 1 } } ) , ie . 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 ( e , t ) { ie . fn [ t ] = function ( e , n ) { return arguments . length > 0 ? this . on ( t , null , e , n ) : this . trigger ( t ) } } ) , ie . fn . extend ( { hover : function ( e , t ) { return this . mouseenter ( e ) . mouseleave ( t || e ) } , bind : function ( e , t , n ) { return this . on ( e , null , t , n ) } , unbind : function ( e , t ) { return this . off ( e , null , t ) } , delegate : function ( e , t , n , a ) { return this . on ( t , e , n , a ) } , undelegate : function ( e , t , n ) { return 1 === arguments . length ? this . off ( e , "**" ) : this . off ( t , e || "**" , n ) } } ) ; var It = ie . now ( ) , Tt = /\?/ , Dt = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g ; ie . parseJSON = function ( t ) { if ( e . JSON && e . JSON . parse ) return e . JSON . parse ( t + "" ) ; var n , a = null , i = ie . trim ( t + "" ) ; return i && ! ie . trim ( i . replace ( Dt , function ( e , t , i , o ) { return n && t && ( a = 0 ) , 0 === a ? e : ( n = i || t , a += ! o - ! i , "" ) } ) ) ? Function ( "return " + i ) ( ) : ie . error ( "Invalid JSON: " + t ) } , ie . parseXML = function ( t ) { var n , a ; if ( ! t || "string" != typeof t ) return null ; try { e . DOMParser ? ( a = new DOMParser , n = a . parseFromString ( t , "text/xml" ) ) : ( n = new ActiveXObject ( "Microsoft.XMLDOM" ) , n . async = "false" , n . loadXML ( t ) ) } catch ( i ) { n = void 0 } return n && n . documentElement &
id : "-1132882121" , predicate : "boolFalse" , params : [ ] , type : "Bool" } , { id : "-1720552011" , predicate : "boolTrue" , params : [ ] , type : "Bool" } , { id : "1072550713" , predicate : "true" , params : [ ] , type : "True" } , { id : "481674261" , predicate : "vector" , params : [ ] , type : "Vector t" } , { id : "-994444869" , predicate : "error" , params : [ { name : "code" , type : "int" } , { name : "text" , type : "string" } ] , type : "Error" } , { id : "1450380236" , predicate : "null" , params : [ ] , type : "Null" } , { id : "2134579434" , predicate : "inputPeerEmpty" , params : [ ] , type : "InputPeer" } , { id : "2107670217" , predicate : "inputPeerSelf" , params : [ ] , type : "InputPeer" } , { id : "396093539" , predicate : "inputPeerChat" , params : [ { name : "chat_id" , type : "int" } ] , type : "InputPeer" } , { id : "-1182234929" , predicate : "inputUserEmpty" , params : [ ] , type : "InputUser" } , { id : "-138301121" , predicate : "inputUserSelf" , params : [ ] , type : "InputUser" } , { id : "-208488460" , predicate : "inputPhoneContact" , params : [ { name : "client_id" , type : "long" } , { name : "phone" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "InputContact" } , { id : "-181407105" , predicate : "inputFile" , params : [ { name : "id" , type : "long" } , { name : "parts" , type : "int" } , { name : "name" , type : "string" } , { name : "md5_checksum" , type : "string" } ] , type : "InputFile" } , { id : "-1771768449" , predicate : "inputMediaEmpty" , params : [ ] , type : "InputMedia" } , { id : "-139464256" , predicate : "inputMediaUploadedPhoto" , params : [ { name : "file" , type : "InputFile" } , { name : "caption" , type : "string" } ] , type : "InputMedia" } , { id : "-373312269" , predicate : "inputMediaPhoto" , params : [ { name : "id" , type : "InputPhoto" } , { name : "caption" , type : "string" } ] , type : "InputMedia" } , { id : "-104578748" , predicate : "inputMediaGeoPoint" , params : [ { name : "geo_point" , type : "InputGeoPoint" } ] , type : "InputMedia" } , { id : "-1494984313" , predicate : "inputMediaContact" , params : [ { name : "phone_number" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "InputMedia" } , { id : "-2106507297" , predicate : "inputMediaUploadedVideo" , params : [ { name : "file" , type : "InputFile" } , { name : "duration" , type : "int" } , { name : "w" , type : "int" } , { name : "h" , type : "int" } , { name : "mime_type" , type : "string" } , { name : "caption" , type : "string" } ] , type : "InputMedia" } , { id : "2004934137" , predicate : "inputMediaUploadedThumbVideo" , params : [ { name : "file" , type : "InputFile" } , { name : "thumb" , type : "InputFile" } , { name : "duration" , type : "int" } , { name : "w" , type : "int" } , { name : "h" , type : "int" } , { name : "mime_type" , type : "string" } , { name : "caption" , type : "string" } ] , type : "InputMedia" } , { id : "-1821749571" , predicate : "inputMediaVideo" , params : [ { name : "id" , type : "InputVideo" } , { name : "caption" , type : "string" } ] , type : "InputMedia" } , { id : "480546647" , predicate : "inputChatPhotoEmpty" , params : [ ] , type : "InputChatPhoto" } , { id : "-1809496270" , predicate : "inputChatUploadedPhoto" , params : [ { name : "file" , type : "InputFile" } , { name : "crop" , type : "InputPhotoCrop" } ] , type : "InputChatPhoto" } , { id : "-1293828344" , predicate : "inputChatPhoto" , params : [ { name : "id" , type : "InputPhoto" } , { name : "crop" , type : "InputPhotoCrop" } ] , type : "InputChatPhoto" } , { id : "-457104426" , predicate : "inputGeoPointEmpty" , params : [ ] , type : "InputGeoPoint" } , { id : "-206066487" , predicate : "inputGeoPoint" , params : [ { name : "lat" , type : "double" } , { name : "long" , type : "double" } ] , type : "InputGeoPoint" } , { id : "483901197" , predicate : "inputPhotoEmpty" , params : [ ] , type : "InputPhoto" } , { id : "-74070332" , predicate : "inputPhoto" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputPhoto" } , { id : "1426648181" , predicate : "inputVideoEmpty" , params : [ ] , type : "InputVideo" } , { id : "-296249774" , predicate : "inputVideo" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputVideo" } , { id : "342061462" , predicate : "inputFileLocation" , params : [ { name : "volume_id" , type : "long" } , { name : "local_id" , type : "int" } , { name : "secret" , type : "long" } ] , type : "InputFileLocation" } , { id : "1023632620" , predicate : "inputVideoFileLocation" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputFileLocation" } , { id : "-1377390588" , predicate : "inputPhotoCropAuto" , params : [ ] , type : "InputPhotoCrop" } , { id : "-644787419" , predicate : "inputPhotoCrop" , params : [ { name : "crop_left" , type : "double" } , { name : "crop_top" , type : "double" } , { name : "crop_width" , type : "double" } ] , type : "InputPhotoCrop" } , { id : "1996904104" , predicate : "inputAppEvent" , para
predicate : "inputAudioEmpty" , params : [ ] , type : "InputAudio" } , { id : "2010398975" , predicate : "inputAudio" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputAudio" } , { id : "1928391342" , predicate : "inputDocumentEmpty" , params : [ ] , type : "InputDocument" } , { id : "410618194" , predicate : "inputDocument" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputDocument" } , { id : "1960591437" , predicate : "inputAudioFileLocation" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputFileLocation" } , { id : "1313188841" , predicate : "inputDocumentFileLocation" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputFileLocation" } , { id : "1483311320" , predicate : "audioEmpty" , params : [ { name : "id" , type : "long" } ] , type : "Audio" } , { id : "-102543275" , predicate : "audio" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } , { name : "date" , type : "int" } , { name : "duration" , type : "int" } , { name : "mime_type" , type : "string" } , { name : "size" , type : "int" } , { name : "dc_id" , type : "int" } ] , type : "Audio" } , { id : "922273905" , predicate : "documentEmpty" , params : [ { name : "id" , type : "long" } ] , type : "Document" } , { id : "-106717361" , predicate : "document" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } , { name : "date" , type : "int" } , { name : "mime_type" , type : "string" } , { name : "size" , type : "int" } , { name : "thumb" , type : "PhotoSize" } , { name : "dc_id" , type : "int" } , { name : "attributes" , type : "Vector<DocumentAttribute>" } ] , type : "Document" } , { id : "398898678" , predicate : "help.support" , params : [ { name : "phone_number" , type : "string" } , { name : "user" , type : "User" } ] , type : "help.Support" } , { id : "-1613493288" , predicate : "notifyPeer" , params : [ { name : "peer" , type : "Peer" } ] , type : "NotifyPeer" } , { id : "-1261946036" , predicate : "notifyUsers" , params : [ ] , type : "NotifyPeer" } , { id : "-1073230141" , predicate : "notifyChats" , params : [ ] , type : "NotifyPeer" } , { id : "1959820384" , predicate : "notifyAll" , params : [ ] , type : "NotifyPeer" } , { id : "-2131957734" , predicate : "updateUserBlocked" , params : [ { name : "user_id" , type : "int" } , { name : "blocked" , type : "Bool" } ] , type : "Update" } , { id : "-1094555409" , predicate : "updateNotifySettings" , params : [ { name : "peer" , type : "NotifyPeer" } , { name : "notify_settings" , type : "PeerNotifySettings" } ] , type : "Update" } , { id : "-484053553" , predicate : "auth.sentAppCode" , params : [ { name : "phone_registered" , type : "Bool" } , { name : "phone_code_hash" , type : "string" } , { name : "send_call_timeout" , type : "int" } , { name : "is_password" , type : "Bool" } ] , type : "auth.SentCode" } , { id : "381645902" , predicate : "sendMessageTypingAction" , params : [ ] , type : "SendMessageAction" } , { id : "-44119819" , predicate : "sendMessageCancelAction" , params : [ ] , type : "SendMessageAction" } , { id : "-1584933265" , predicate : "sendMessageRecordVideoAction" , params : [ ] , type : "SendMessageAction" } , { id : "-378127636" , predicate : "sendMessageUploadVideoAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-718310409" , predicate : "sendMessageRecordAudioAction" , params : [ ] , type : "SendMessageAction" } , { id : "-212740181" , predicate : "sendMessageUploadAudioAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-774682074" , predicate : "sendMessageUploadPhotoAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-1441998364" , predicate : "sendMessageUploadDocumentAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "393186209" , predicate : "sendMessageGeoLocationAction" , params : [ ] , type : "SendMessageAction" } , { id : "1653390447" , predicate : "sendMessageChooseContactAction" , params : [ ] , type : "SendMessageAction" } , { id : "446822276" , predicate : "contacts.found" , params : [ { name : "results" , type : "Vector<Peer>" } , { name : "chats" , type : "Vector<Chat>" } , { name : "users" , type : "Vector<User>" } ] , type : "contacts.Found" } , { id : "942527460" , predicate : "updateServiceNotification" , params : [ { name : "type" , type : "string" } , { name : "message" , type : "string" } , { name : "media" , type : "MessageMedia" } , { name : "popup" , type : "Bool" } ] , type : "Update" } , { id : "-496024847" , predicate : "userStatusRecently" , params : [ ] , type : "UserStatus" } , { id : "129960444" , predicate : "userStatusLastWeek" , params : [ ] , type : "UserStatus" } , { id : "2011940674" , predicate : "userStatusLastMonth" , params : [ ] , type : "UserStatus" } , { id : "-298113238" , predicate : "updatePrivacy" , params : [ { name :
id : "453408308" , method : "auth.signUp" , params : [ { name : "phone_number" , type : "string" } , { name : "phone_code_hash" , type : "string" } , { name : "phone_code" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "auth.Authorization" } , { id : "-1126886015" , method : "auth.signIn" , params : [ { name : "phone_number" , type : "string" } , { name : "phone_code_hash" , type : "string" } , { name : "phone_code" , type : "string" } ] , type : "auth.Authorization" } , { id : "1461180992" , method : "auth.logOut" , params : [ ] , type : "Bool" } , { id : "-1616179942" , method : "auth.resetAuthorizations" , params : [ ] , type : "Bool" } , { id : "1998331287" , method : "auth.sendInvites" , params : [ { name : "phone_numbers" , type : "Vector<string>" } , { name : "message" , type : "string" } ] , type : "Bool" } , { id : "-440401971" , method : "auth.exportAuthorization" , params : [ { name : "dc_id" , type : "int" } ] , type : "auth.ExportedAuthorization" } , { id : "-470837741" , method : "auth.importAuthorization" , params : [ { name : "id" , type : "int" } , { name : "bytes" , type : "bytes" } ] , type : "auth.Authorization" } , { id : "-841733627" , method : "auth.bindTempAuthKey" , params : [ { name : "perm_auth_key_id" , type : "long" } , { name : "nonce" , type : "long" } , { name : "expires_at" , type : "int" } , { name : "encrypted_message" , type : "bytes" } ] , type : "Bool" } , { id : "1147957548" , method : "account.registerDevice" , params : [ { name : "token_type" , type : "int" } , { name : "token" , type : "string" } , { name : "device_model" , type : "string" } , { name : "system_version" , type : "string" } , { name : "app_version" , type : "string" } , { name : "app_sandbox" , type : "Bool" } , { name : "lang_code" , type : "string" } ] , type : "Bool" } , { id : "1707432768" , method : "account.unregisterDevice" , params : [ { name : "token_type" , type : "int" } , { name : "token" , type : "string" } ] , type : "Bool" } , { id : "-2067899501" , method : "account.updateNotifySettings" , params : [ { name : "peer" , type : "InputNotifyPeer" } , { name : "settings" , type : "InputPeerNotifySettings" } ] , type : "Bool" } , { id : "313765169" , method : "account.getNotifySettings" , params : [ { name : "peer" , type : "InputNotifyPeer" } ] , type : "PeerNotifySettings" } , { id : "-612493497" , method : "account.resetNotifySettings" , params : [ ] , type : "Bool" } , { id : "-259486360" , method : "account.updateProfile" , params : [ { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "User" } , { id : "1713919532" , method : "account.updateStatus" , params : [ { name : "offline" , type : "Bool" } ] , type : "Bool" } , { id : "-1068696894" , method : "account.getWallPapers" , params : [ ] , type : "Vector<WallPaper>" } , { id : "-1374118561" , method : "account.reportPeer" , params : [ { name : "peer" , type : "InputPeer" } , { name : "reason" , type : "ReportReason" } ] , type : "Bool" } , { id : "227648840" , method : "users.getUsers" , params : [ { name : "id" , type : "Vector<InputUser>" } ] , type : "Vector<User>" } , { id : "-902781519" , method : "users.getFullUser" , params : [ { name : "id" , type : "InputUser" } ] , type : "UserFull" } , { id : "-995929106" , method : "contacts.getStatuses" , params : [ ] , type : "Vector<ContactStatus>" } , { id : "583445000" , method : "contacts.getContacts" , params : [ { name : "hash" , type : "string" } ] , type : "contacts.Contacts" } , { id : "-634342611" , method : "contacts.importContacts" , params : [ { name : "contacts" , type : "Vector<InputContact>" } , { name : "replace" , type : "Bool" } ] , type : "contacts.ImportedContacts" } , { id : "-847825880" , method : "contacts.getSuggested" , params : [ { name : "limit" , type : "int" } ] , type : "contacts.Suggested" } , { id : "-1902823612" , method : "contacts.deleteContact" , params : [ { name : "id" , type : "InputUser" } ] , type : "contacts.Link" } , { id : "1504393374" , method : "contacts.deleteContacts" , params : [ { name : "id" , type : "Vector<InputUser>" } ] , type : "Bool" } , { id : "858475004" , method : "contacts.block" , params : [ { name : "id" , type : "InputUser" } ] , type : "Bool" } , { id : "-448724803" , method : "contacts.unblock" , params : [ { name : "id" , type : "InputUser" } ] , type : "Bool" } , { id : "-176409329" , method : "contacts.getBlocked" , params : [ { name : "offset" , type : "int" } , { name : "limit" , type : "int" } ] , type : "contacts.Blocked" } , { id : "-2065352905" , method : "contacts.exportCard" , params : [ ] , type : "Vector<int>" } , { id : "1340184318" , method : "contacts.importCard" , params : [ { name : "export_card" , type : "Vector<int>" } ] , type : "User" } , { id : "1109588596" , method : "messages.getMessages" , params : [ { name : "id" , type : "Vector<int>" } ] , type : "messages.Messages" } , { id : "1799878989" , method : "messages.getDialogs" , params : [ { name : "offset_date" , type : "int" } , { name : "offset_id" , type : "int" } , { name : "offset_peer" , type : " InputP
"1f3c8" : [ "🏈" , [ "football" ] ] , "1f3c9" : [ "🏉" , [ "rugby_football" ] ] , "1f3ca" : [ "🏊" , [ "swimmer" ] ] , "1f3e0" : [ "🏠" , [ "house" ] ] , "1f3e1" : [ "🏡" , [ "house_with_garden" ] ] , "1f3e2" : [ "🏢" , [ "office" ] ] , "1f3e3" : [ "🏣" , [ "post_office" ] ] , "1f3e4" : [ "🏤" , [ "european_post_office" ] ] , "1f3e5" : [ "🏥" , [ "hospital" ] ] , "1f3e6" : [ "🏦" , [ "bank" ] ] , "1f3e7" : [ "🏧" , [ "atm" ] ] , "1f3e8" : [ "🏨" , [ "hotel" ] ] , "1f3e9" : [ "🏩" , [ "love_hotel" ] ] , "1f3ea" : [ "🏪" , [ "convenience_store" ] ] , "1f3eb" : [ "🏫" , [ "school" ] ] , "1f3ec" : [ "🏬" , [ "department_store" ] ] , "1f3ed" : [ "🏭" , [ "factory" ] ] , "1f3ee" : [ "🏮" , [ "izakaya_lantern" , "lantern" ] ] , "1f3ef" : [ "🏯" , [ "japanese_castle" ] ] , "1f3f0" : [ "🏰" , [ "european_castle" ] ] , "1f400" : [ "🐀" , [ "rat" ] ] , "1f401" : [ "🐁" , [ "mouse2" ] ] , "1f402" : [ "🐂" , [ "ox" ] ] , "1f403" : [ "🐃" , [ "water_buffalo" ] ] , "1f404" : [ "🐄" , [ "cow2" ] ] , "1f405" : [ "🐅" , [ "tiger2" ] ] , "1f406" : [ "🐆" , [ "leopard" ] ] , "1f407" : [ "🐇" , [ "rabbit2" ] ] , "1f408" : [ "🐈" , [ "cat2" ] ] , "1f409" : [ "🐉" , [ "dragon" ] ] , "1f40a" : [ "🐊" , [ "crocodile" ] ] , "1f40b" : [ "🐋" , [ "whale2" ] ] , "1f40c" : [ "🐌" , [ "snail" ] ] , "1f40d" : [ "🐍" , [ "snake" ] ] , "1f40e" : [ "🐎" , [ "racehorse" ] ] , "1f40f" : [ "🐏" , [ "ram" ] ] , "1f410" : [ "🐐" , [ "goat" ] ] , "1f411" : [ "🐑" , [ "sheep" ] ] , "1f412" : [ "🐒" , [ "monkey" ] ] , "1f413" : [ "🐓" , [ "rooster" ] ] , "1f414" : [ "🐔" , [ "chicken" ] ] , "1f415" : [ "🐕" , [ "dog2" ] ] , "1f416" : [ "🐖" , [ "pig2" ] ] , "1f417" : [ "🐗" , [ "boar" ] ] , "1f418" : [ "🐘" , [ "elephant" ] ] , "1f419" : [ "🐙" , [ "octopus" ] ] , "1f41a" : [ "🐚" , [ "shell" ] ] , "1f41b" : [ "🐛" , [ "bug" ] ] , "1f41c" : [ "🐜" , [ "ant" ] ] , "1f41d" : [ "🐝" , [ "bee" , "honeybee" ] ] , "1f41e" : [ "🐞" , [ "beetle" ] ] , "1f41f" : [ "🐟" , [ "fish" ] ] , "1f420" : [ "🐠" , [ "tropical_fish" ] ] , "1f421" : [ "🐡" , [ "blowfish" ] ] , "1f422" : [ "🐢" , [ "turtle" ] ] , "1f423" : [ "🐣" , [ "hatching_chick" ] ] , "1f424" : [ "🐤" , [ "baby_chick" ] ] , "1f425" : [ "🐥" , [ "hatched_chick" ] ] , "1f426" : [ "🐦" , [ "bird" ] ] , "1f427" : [ "🐧" , [ "penguin" ] ] , "1f428" : [ "🐨" , [ "koala" ] ] , "1f429" : [ "🐩" , [ "poodle" ] ] , "1f42a" : [ "🐪" , [ "dromedary_camel" ] ] , "1f42b" : [ "🐫" , [ "camel" ] ] , "1f42c" : [ "🐬" , [ "dolphin" , "flipper" ] ] , "1f42d" : [ "🐭" , [ "mouse" ] ] , "1f42e" : [ "🐮" , [ "cow" ] ] , "1f42f" : [ "🐯" , [ "tiger" ] ] , "1f430" : [ "🐰" , [ "rabbit" ] ] , "1f431" : [ "🐱" , [ "cat" ] ] , "1f432" : [ "🐲" , [ "dragon_face" ] ] , "1f433" : [ "🐳" , [ "whale" ] ] , "1f434" : [ "🐴" , [ "horse" ] ] , "1f435" : [ "🐵" , [ "monkey_face" ] ] , "1f436" : [ "🐶" , [ "dog" ] ] , "1f437" : [ "🐷" , [ "pig" ] ] , "1f438" : [ "🐸" , [ "frog" ] ] , "1f439" : [ "🐹" , [ "hamster" ] ] , "1f43a" : [ "🐺" , [ "wolf" ] ] , "1f43b" : [ "🐻" , [ "bear" ] ] , "1f43c" : [ "🐼" , [ "panda_face" ] ] , "1f43d" : [ "🐽" , [ "pig_nose" ] ] , "1f43e" : [ "🐾" , [ "feet" , "paw_prints" ] ] , "1f440" : [ "👀" , [ "eyes" ] ] , "1f442" : [ "👂" , [ "ear" ] ] , "1f443" : [ "👃" , [ "nose" ] ] , "1f444" : [ "👄" , [ "lips" ] ] , "1f445" : [ "👅" , [ "tongue" ] ] , "1f446" : [ "👆" , [ "point_up_2" ] ] , "1f447" : [ "👇" , [ "point_down" ] ] , "1f448" : [ "👈" , [ "point_left" ] ] , "1f449" : [ "👉" , [ "point_right" ] ] , "1f44a" : [ "👊" , [ "facepunch" , "punch" ] ] , "1f44b" : [ "👋" , [ "wave" ] ] , "1f44c" : [ "👌" , [ "ok_hand" ] ] , "1f44d" : [ "👍" , [ "+1" , "thumbsup" ] ] , "1f44e" : [ "👎" , [ "-1" , "thumbsdown" ] ] , "1f44f" : [ "👏" , [ "clap" ] ] , "1f450" : [ "👐" , [ "open_hands" ] ] , "1f451" : [ "👑" , [ "crown" ] ] , "1f452" : [ "👒" , [ "womans_hat" ] ] , "1f453" : [ "👓" , [ "eyeglasses" ] ] , "1f454" : [ "👔" , [ "necktie" ] ] , "1f455" : [ "👕" , [ "shirt" , "tshirt" ] ] , "1f456" : [ "👖" , [ "jeans" ] ] , "1f457" : [ "👗" , [ "dress" ] ] , "1f458" : [ "👘" , [ "kimono" ] ] , "1f459" : [ "👙" , [ "bikini" ] ] , "1f45a" : [ "👚" , [ "womans_clothes" ] ] , "1f45b" : [ "👛" , [ "purse" ] ] , "1f45c" : [ "👜" , [ "handbag" ] ] , "1f45d" : [ "👝" , [ "pouch" ] ] , "1f45e" : [ "👞" , [ "mans_shoe" , "shoe" ] ] , "1f45f" : [ "👟" , [ "athletic_shoe" ] ] , "1f460" : [ "👠" , [ "high_heel" ] ] , "1f461" : [ "👡" , [ "sandal" ] ] , "1f462" : [ "👢" , [ "boot" ] ] , "1f463" : [ "👣" , [ "footprints" ] ] , "1f464" : [ "👤" , [ "bust_in_silhouette" ] ] , "1f465" : [ "👥" , [ "busts_in_silhouette" ] ] , "1f466" : [ "👦" , [ "boy" ] ] , "1f467" : [ "👧" , [ "girl" ] ] , "1f468" : [ "👨" , [ "man" ] ] , "1f469" : [ "👩" , [ "woman" ] ] , "1f46a" : [ "👪" , [ "family" ] ] , "1f46b" : [ "👫" , [ "couple" ] ] , "1f46c" : [ "👬" , [ "two_men_holding_hands" ] ] , "1f46d" : [ "👭" , [ "two_women_holding_hands" ] ] , "1f46e" : [ "👮" , [ "cop" ] ] , "1f46f" : [ "👯" , [ "dancers" ] ] , "1f470" : [ "👰" , [ "bride_with_veil" ] ] , "1f471" : [ "👱" , [ "person_with_blond_hair" ] ] , "1f472" : [ "👲" , [ "man_with_gua_pi_mao" ] ] , "1f473" : [ "👳" , [ "man_with_turban" ] ] , "1f474" : [ "👴" , [ " older _man
Config . LangCountries = { es : "ES" , ru : "RU" , en : "US" , de : "DE" , it : "IT" , nl : "NL" , fr : "FR" , ca : "ES" , "es-419" : "MX" , ar : "SA" , he : "IL" , tr : "TR" , id : "ID" , pl : "PL" } , function ( e ) { function t ( e ) { r = e } function n ( ) { l = ! 0 } function a ( ) { return l ? ( l = ! 1 , "" ) : r } function i ( ) { var e , t , n , i = Array . prototype . slice . call ( arguments ) , o = i . pop ( ) , s = [ ] , r = 1 == i . length , l = ! 0 , p = a ( ) ; for ( t = 0 ; t < i . length ; t ++ ) if ( n = i [ t ] = p + i [ t ] , "xt_" != n . substr ( 0 , 3 ) && void 0 !== c [ n ] ) s . push ( c [ n ] ) ; else if ( u ) { try { e = localStorage . getItem ( n ) } catch ( m ) { u = ! 1 } try { e = void 0 === e || null === e ? ! 1 : JSON . parse ( e ) } catch ( m ) { e = ! 1 } s . push ( c [ n ] = e ) } else d ? l = ! 1 : s . push ( c [ n ] = ! 1 ) ; return l ? o ( r ? s [ 0 ] : s ) : void chrome . storage . local . get ( i , function ( e ) { var a ; for ( s = [ ] , t = 0 ; t < i . length ; t ++ ) n = i [ t ] , a = e [ n ] , a = void 0 === a || null === a ? ! 1 : JSON . parse ( a ) , s . push ( c [ n ] = a ) ; o ( r ? s [ 0 ] : s ) } ) } function o ( e , t ) { var n , i , o = { } , s = a ( ) ; for ( n in e ) if ( e . hasOwnProperty ( n ) ) if ( i = e [ n ] , n = s + n , c [ n ] = i , i = JSON . stringify ( i ) , u ) try { localStorage . setItem ( n , i ) } catch ( r ) { u = ! 1 } else o [ n ] = i ; return u || ! d ? void ( t && t ( ) ) : void chrome . storage . local . set ( o , t ) } function s ( ) { var e , t , n , i = Array . prototype . slice . call ( arguments ) , o = a ( ) ; for ( "function" == typeof i [ i . length - 1 ] && ( n = i . pop ( ) ) , e = 0 ; e < i . length ; e ++ ) if ( t = i [ e ] = o + i [ e ] , delete c [ t ] , u ) try { localStorage . removeItem ( t ) } catch ( s ) { u = ! 1 } d ? chrome . storage . local . remove ( i , n ) : n && n ( ) } var r = "" , l = ! 1 , c = { } , d = ! ! ( e . chrome && chrome . storage && chrome . storage . local ) , u = ! d && ! ! e . localStorage ; e . ConfigStorage = { prefix : t , noPrefix : n , get : i , set : o , remove : s } } ( this ) , function ( ) { try { window == window . top || window . chrome && chrome . app && chrome . app . window ? document . documentElement . style . display = "block" : top . location = self . location } catch ( e ) { console . error ( "CJ protection" , e ) } if ( window . safeConfirm = function ( e , t ) { "string" == typeof e && ( e = { message : e } ) ; var n = ! 1 ; try { n = confirm ( e . message ) } catch ( a ) { n = ! 0 } setTimeout ( function ( ) { t ( n ) } , 10 ) } , window . applicationCache && ! Config . Modes . packed && window . addEventListener ) { var t = window . applicationCache , n = ! 1 , a = ! 1 , i = function ( e ) { clearTimeout ( a ) , a = setTimeout ( function ( ) { try { t . update ( ) } catch ( e ) { console . log ( "appCache.update: " + e ) } } , e || 3e5 ) } , o = function ( ) { t . addEventListener ( "updateready" , function ( e ) { t . status == t . UPDATEREADY && ( n || ( safeConfirm ( { type : "WEBOGRAM_UPDATED_RELOAD" , message : "A new version of Webogram is downloaded. Launch it?" } , function ( e ) { e ? window . location . reload ( ) : n = ! 0 } ) , i ( ) ) ) } , ! 1 ) , t . addEventListener ( "noupdate" , function ( ) { i ( ) } , ! 1 ) , t . addEventListener ( "error" , function ( ) { i ( ) } , ! 1 ) } ; i ( 3e3 ) , window . addEventListener ( "load" , o ) } } ( ) , function ( ) { var e = [ Config . Navigator . osX ? "osx" : "non_osx" , Config . Navigator . retina ? "is_2x" : "is_1x" ] ; Config . Modes . ios _standalone && e . push ( "ios_standalone" ) , $ ( document . body ) . addClass ( e . join ( " " ) ) , ConfigStorage . get ( "layout_selected" , "i18n_locale" , function ( e ) { var t = e [ 0 ] , n = e [ 1 ] , a = "en-us" , i = { dom : ! 1 , i18n _ng : ! 1 , i18n _messages : ! 1 , i18n _fallback : ! 1 } , o = function ( ) { var e , t = ! 0 ; for ( e in i ) if ( i . hasOwnProperty ( e ) && i [ e ] === ! 1 ) { t = ! 1 ; break } t && ( i . boot = ! 1 , angular . bootstrap ( document , [ "myApp" ] ) ) } ; switch ( Config . Modes . force _mobile ? t = "mobile" : Config . Modes . force _desktop && ( t = "desktop" ) , t ) { case "mobile" : Config . Mobile = ! 0 ; break ; case "desktop" : Config . Mobile = ! 1 ; break ; default : var s = $ ( window ) . width ( ) ; Config . Mobile = Config . Navigator . mobile || s > 10 && 480 > s } $ ( "head" ) . append ( '<link rel="stylesheet" href="css/' + ( Config . Mobile ? "mobile.css" : "desktop.css" ) + '" />' ) , n || ( n = ( navigator . language || "" ) . toLowerCase ( ) , n = Config . I18n . aliases [ n ] || n ) ; for ( var r = 0 ; r < Config . I18n . supported . length ; r ++ ) if ( Config . I18n . supported [ r ] == n ) { Config . I18n . locale = n ; break } i . i18n _ng = Config . I18n . locale == a , $ . getJSON ( "js/locales/" + Config . I18n . locale + ".json" ) . success ( function ( e ) { Config . I18n . messages = e , i . i18n _messages = ! 0 , Config . I18n . locale == a && ( i . i18n _fallback = ! 0 ) , o ( ) } ) , Config . I18n . locale != a && $ . getJSON ( "js/locales/" + a + ".json" ) . success ( function ( e ) { Config . I18n . fallback _messages = e , i . i18n _fallback = ! 0 , o ( ) } ) , $ ( document ) . ready ( function ( ) { i . dom = ! 0 , i . i18n _ng ? o ( ) : $ ( "<script>" ) . appendTo ( "body" ) . on ( "load" , function ( ) { i . i18n _ng = ! 0 , o ( ) } ) . attr ( "src" , "vendor/angular/i18n/angular-locale_" + Config . I18n . locale + ".js" ) } ) } ) } ( ) , function ( e , t , n ) { "use strict" ; var a , i , o , s , r , l , c , d , u , p , m , g , h , f , _ , v , y , b , w , k , $ , S , C , M , x , A , E , I , T , D , P ; C = { paneClass : "nano-pane" , sliderClass : "nano-slider" , contentClass : "nano-content" , iOSNa
n . $get = function ( ) { var e = x . invoke ( a , n ) ; return x . invoke ( t , null , { $delegate : e } ) } } function m ( e ) { ue ( y ( e ) || Ua ( e ) , "modulesToLoad" , "not an array" ) ; var t , n = [ ] ; return o ( e , function ( e ) { function a ( e ) { var t , n ; for ( t = 0 , n = e . length ; n > t ; t ++ ) { var a = e [ t ] , i = S . get ( a [ 0 ] ) ; i [ a [ 1 ] ] . apply ( i , a [ 2 ] ) } } if ( ! b . get ( e ) ) { b . put ( e , ! 0 ) ; try { $ ( e ) ? ( t = Aa ( e ) , n = n . concat ( m ( t . requires ) ) . concat ( t . _runBlocks ) , a ( t . _invokeQueue ) , a ( t . _configBlocks ) ) : M ( e ) ? n . push ( S . invoke ( e ) ) : Ua ( e ) ? n . push ( S . invoke ( e ) ) : pe ( e , "module" ) } catch ( i ) { throw Ua ( e ) && ( e = e [ e . length - 1 ] ) , i . message && i . stack && - 1 == i . stack . indexOf ( i . message ) && ( i = i . message + "\n" + i . stack ) , ki ( "modulerr" , "Failed to instantiate module {0} due to:\n{1}" , e , i . stack || i . message || i ) } } } ) , n } function g ( e , n ) { function a ( t , a ) { if ( e . hasOwnProperty ( t ) ) { if ( e [ t ] === h ) throw ki ( "cdep" , "Circular dependency found: {0}" , t + " <- " + v . join ( " <- " ) ) ; return e [ t ] } try { return v . unshift ( t ) , e [ t ] = h , e [ t ] = n ( t , a ) } catch ( i ) { throw e [ t ] === h && delete e [ t ] , i } finally { v . shift ( ) } } function i ( e , n , i , o ) { "string" == typeof i && ( o = i , i = null ) ; var s , r , l , c = [ ] , d = Je . $$annotate ( e , t , o ) ; for ( r = 0 , s = d . length ; s > r ; r ++ ) { if ( l = d [ r ] , "string" != typeof l ) throw ki ( "itkn" , "Incorrect injection token! Expected service name as string, got {0}" , l ) ; c . push ( i && i . hasOwnProperty ( l ) ? i [ l ] : a ( l , o ) ) } return Ua ( e ) && ( e = e [ s ] ) , e . apply ( n , c ) } function o ( e , t , n ) { var a = Object . create ( ( Ua ( e ) ? e [ e . length - 1 ] : e ) . prototype || null ) , o = i ( e , a , t , n ) ; return w ( o ) || M ( o ) ? o : a } return { invoke : i , instantiate : o , get : a , annotate : Je . $$annotate , has : function ( t ) { return k . hasOwnProperty ( t + f ) || e . hasOwnProperty ( t ) } } } t = t === ! 0 ; var h = { } , f = "Provider" , v = [ ] , b = new Ye ( [ ] , ! 0 ) , k = { $provide : { provider : a ( i ) , factory : a ( l ) , service : a ( c ) , value : a ( d ) , constant : a ( u ) , decorator : p } } , S = k . $injector = g ( k , function ( e , t ) { throw Na . isString ( t ) && v . push ( t ) , ki ( "unpr" , "Unknown provider: {0}" , v . join ( " <- " ) ) } ) , C = { } , x = C . $injector = g ( C , function ( e , t ) { var a = S . get ( e + f , t ) ; return x . invoke ( a . $get , a , n , e ) } ) ; return o ( m ( e ) , function ( e ) { e && x . invoke ( e ) } ) , x } function Qe ( ) { var e = ! 0 ; this . disableAutoScrolling = function ( ) { e = ! 1 } , this . $get = [ "$window" , "$location" , "$rootScope" , function ( t , n , a ) { function i ( e ) { var t = null ; return Array . prototype . some . call ( e , function ( e ) { return "a" === U ( e ) ? ( t = e , ! 0 ) : void 0 } ) , t } function o ( ) { var e = r . yOffset ; if ( M ( e ) ) e = e ( ) ; else if ( R ( e ) ) { var n = e [ 0 ] , a = t . getComputedStyle ( n ) ; e = "fixed" !== a . position ? 0 : n . getBoundingClientRect ( ) . bottom } else S ( e ) || ( e = 0 ) ; return e } function s ( e ) { if ( e ) { e . scrollIntoView ( ) ; var n = o ( ) ; if ( n ) { var a = e . getBoundingClientRect ( ) . top ; t . scrollBy ( 0 , a - n ) } } else t . scrollTo ( 0 , 0 ) } function r ( e ) { e = $ ( e ) ? e : n . hash ( ) ; var t ; e ? ( t = l . getElementById ( e ) ) ? s ( t ) : ( t = i ( l . getElementsByName ( e ) ) ) ? s ( t ) : "top" === e && s ( null ) : s ( null ) } var l = t . document ; return e && a . $watch ( function ( ) { return n . hash ( ) } , function ( e , t ) { ( e !== t || "" !== e ) && He ( function ( ) { a . $evalAsync ( r ) } ) } ) , r } ] } function et ( e , t ) { return e || t ? e ? t ? ( Ua ( e ) && ( e = e . join ( " " ) ) , Ua ( t ) && ( t = t . join ( " " ) ) , e + " " + t ) : e : t : "" } function tt ( e ) { for ( var t = 0 ; t < e . length ; t ++ ) { var n = e [ t ] ; if ( n . nodeType === Si ) return n } } function nt ( e ) { $ ( e ) && ( e = e . split ( " " ) ) ; var t = fe ( ) ; return o ( e , function ( e ) { e . length && ( t [ e ] = ! 0 ) } ) , t } function at ( e ) { return w ( e ) ? e : { } } function it ( e , t , n , a ) { function i ( e ) { try { e . apply ( null , V ( arguments , 1 ) ) } finally { if ( v -- , 0 === v ) for ( ; b . length ; ) try { b . pop ( ) ( ) } catch ( t ) { n . error ( t ) } } } function s ( e ) { var t = e . indexOf ( "#" ) ; return - 1 === t ? "" : e . substr ( t ) } function r ( ) { C = null , c ( ) , d ( ) } function l ( ) { try { return m . state } catch ( e ) { } } function c ( ) { w = l ( ) , w = y ( w ) ? null : w , q ( w , A ) && ( w = A ) , A = w } function d ( ) { ( $ !== u . url ( ) || k !== w ) && ( $ = u . url ( ) , k = w , o ( M , function ( e ) { e ( u . url ( ) , w ) } ) ) } var u = this , p = ( t [ 0 ] , e . location ) , m = e . history , g = e . setTimeout , f = e . clearTimeout , _ = { } ; u . isMock = ! 1 ; var v = 0 , b = [ ] ; u . $$completeOutstandingRequest = i , u . $$incOutstandingRequestCount = function ( ) { v ++ } , u . notifyWhenNoOutstandingRequests = function ( e ) { 0 === v ? e ( ) : b . push ( e ) } ; var w , k , $ = p . href , S = t . find ( "base" ) , C = null ; c ( ) , k = w , u . url = function ( t , n , i ) { if ( y ( i ) && ( i = null ) , p !== e . location && ( p = e . location ) , m !== e . history && ( m = e . history ) , t ) { var o = k === i ; if ( $ === t && ( ! a . history || o ) ) return u ; var r = $ && Nt ( $ ) === Nt ( t ) ; return $ = t , k = i , ! a . history || r && o ? ( ( ! r || C ) && ( C = t ) , n ? p . replace ( t ) : r ? p . hash = s ( t ) : p . href = t , p . href !== t && ( C = t ) ) : ( m [ n ? "replaceState" : "pushState" ] ( i , "" , t ) , c ( ) , k = w ) , u } return C || p . href . replace ( /%27/g , "'" ) } , u . state = function ( ) { ret
! 0 ) : ! 1 } , i } ] } function Tt ( e ) { for ( var t = e . split ( "/" ) , n = t . length ; n -- ; ) t [ n ] = ne ( t [ n ] ) ; return t . join ( "/" ) } function Dt ( e , t ) { var n = Mn ( e ) ; t . $$protocol = n . protocol , t . $$host = n . hostname , t . $$port = m ( n . port ) || Vi [ n . protocol ] || null } function Pt ( e , t ) { var n = "/" !== e . charAt ( 0 ) ; n && ( e = "/" + e ) ; var a = Mn ( e ) ; t . $$path = decodeURIComponent ( n && "/" === a . pathname . charAt ( 0 ) ? a . pathname . substring ( 1 ) : a . pathname ) , t . $$search = ee ( a . search ) , t . $$hash = decodeURIComponent ( a . hash ) , t . $$path && "/" != t . $$path . charAt ( 0 ) && ( t . $$path = "/" + t . $$path ) } function Ft ( e , t ) { return 0 === t . indexOf ( e ) ? t . substr ( e . length ) : void 0 } function Nt ( e ) { var t = e . indexOf ( "#" ) ; return - 1 == t ? e : e . substr ( 0 , t ) } function Rt ( e ) { return e . replace ( /(#.+)|#$/ , "$1" ) } function Ot ( e ) { return e . substr ( 0 , Nt ( e ) . lastIndexOf ( "/" ) + 1 ) } function Ut ( e ) { return e . substring ( 0 , e . indexOf ( "/" , e . indexOf ( "//" ) + 2 ) ) } function Lt ( e , t , n ) { this . $$html5 = ! 0 , n = n || "" , Dt ( e , this ) , this . $$parse = function ( e ) { var n = Ft ( t , e ) ; if ( ! $ ( n ) ) throw zi ( "ipthprfx" , 'Invalid url "{0}", missing path prefix "{1}".' , e , t ) ; Pt ( n , this ) , this . $$path || ( this . $$path = "/" ) , this . $$compose ( ) } , this . $$compose = function ( ) { var e = te ( this . $$search ) , n = this . $$hash ? "#" + ne ( this . $$hash ) : "" ; this . $$url = Tt ( this . $$path ) + ( e ? "?" + e : "" ) + n , this . $$absUrl = t + this . $$url . substr ( 1 ) } , this . $$parseLinkUrl = function ( a , i ) { if ( i && "#" === i [ 0 ] ) return this . hash ( i . slice ( 1 ) ) , ! 0 ; var o , s , r ; return b ( o = Ft ( e , a ) ) ? ( s = o , r = b ( o = Ft ( n , o ) ) ? t + ( Ft ( "/" , o ) || o ) : e + s ) : b ( o = Ft ( t , a ) ) ? r = t + o : t == a + "/" && ( r = t ) , r && this . $$parse ( r ) , ! ! r } } function Bt ( e , t , n ) { Dt ( e , this ) , this . $$parse = function ( a ) { function i ( e , t , n ) { var a , i = /^\/[A-Z]:(\/.*)/ ; return 0 === t . indexOf ( n ) && ( t = t . replace ( n , "" ) ) , i . exec ( t ) ? e : ( a = i . exec ( e ) , a ? a [ 1 ] : e ) } var o , s = Ft ( e , a ) || Ft ( t , a ) ; y ( s ) || "#" !== s . charAt ( 0 ) ? this . $$html5 ? o = s : ( o = "" , y ( s ) && ( e = a , this . replace ( ) ) ) : ( o = Ft ( n , s ) , y ( o ) && ( o = s ) ) , Pt ( o , this ) , this . $$path = i ( this . $$path , o , e ) , this . $$compose ( ) } , this . $$compose = function ( ) { var t = te ( this . $$search ) , a = this . $$hash ? "#" + ne ( this . $$hash ) : "" ; this . $$url = Tt ( this . $$path ) + ( t ? "?" + t : "" ) + a , this . $$absUrl = e + ( this . $$url ? n + this . $$url : "" ) } , this . $$parseLinkUrl = function ( t , n ) { return Nt ( e ) == Nt ( t ) ? ( this . $$parse ( t ) , ! 0 ) : ! 1 } } function jt ( e , t , n ) { this . $$html5 = ! 0 , Bt . apply ( this , arguments ) , this . $$parseLinkUrl = function ( a , i ) { if ( i && "#" === i [ 0 ] ) return this . hash ( i . slice ( 1 ) ) , ! 0 ; var o , s ; return e == Nt ( a ) ? o = a : ( s = Ft ( t , a ) ) ? o = e + n + s : t === a + "/" && ( o = t ) , o && this . $$parse ( o ) , ! ! o } , this . $$compose = function ( ) { var t = te ( this . $$search ) , a = this . $$hash ? "#" + ne ( this . $$hash ) : "" ; this . $$url = Tt ( this . $$path ) + ( t ? "?" + t : "" ) + a , this . $$absUrl = e + n + this . $$url } } function qt ( e ) { return function ( ) { return this [ e ] } } function Ht ( e , t ) { return function ( n ) { return y ( n ) ? this [ e ] : ( this [ e ] = t ( n ) , this . $$compose ( ) , this ) } } function Vt ( ) { var e = "" , t = { enabled : ! 1 , requireBase : ! 0 , rewriteLinks : ! 0 } ; this . hashPrefix = function ( t ) { return b ( t ) ? ( e = t , this ) : e } , this . html5Mode = function ( e ) { return P ( e ) ? ( t . enabled = e , this ) : w ( e ) ? ( P ( e . enabled ) && ( t . enabled = e . enabled ) , P ( e . requireBase ) && ( t . requireBase = e . requireBase ) , P ( e . rewriteLinks ) && ( t . rewriteLinks = e . rewriteLinks ) , this ) : t } , this . $get = [ "$rootScope" , "$browser" , "$sniffer" , "$rootElement" , "$window" , function ( n , a , i , o , s ) { function r ( e , t , n ) { var i = c . url ( ) , o = c . $$state ; try { a . url ( e , t , n ) , c . $$state = a . state ( ) } catch ( s ) { throw c . url ( i ) , c . $$state = o , s } } function l ( e , t ) { n . $broadcast ( "$locationChangeSuccess" , c . absUrl ( ) , e , c . $$state , t ) } var c , d , u , p = a . baseHref ( ) , m = a . url ( ) ; if ( t . enabled ) { if ( ! p && t . requireBase ) throw zi ( "nobase" , "$location in HTML5 mode requires a <base> tag to be present!" ) ; u = Ut ( m ) + ( p || "/" ) , d = i . history ? Lt : jt } else u = Nt ( m ) , d = Bt ; var g = Ot ( u ) ; c = new d ( u , g , "#" + e ) , c . $$parseLinkUrl ( m , m ) , c . $$state = a . state ( ) ; var h = /^\s*(javascript|mailto):/i ; o . on ( "click" , function ( e ) { if ( t . rewriteLinks && ! e . ctrlKey && ! e . metaKey && ! e . shiftKey && 2 != e . which && 2 != e . button ) { for ( var i = Ma ( e . target ) ; "a" !== U ( i [ 0 ] ) ; ) if ( i [ 0 ] === o [ 0 ] || ! ( i = i . parent ( ) ) [ 0 ] ) return ; var r = i . prop ( "href" ) , l = i . attr ( "href" ) || i . attr ( "xlink:href" ) ; w ( r ) && "[object SVGAnimatedString]" === r . toString ( ) && ( r = Mn ( r . animVal ) . href ) , h . test ( r ) || ! r || i . attr ( "target" ) || e . isDefaultPrevented ( ) || c . $$parseLinkUrl ( r , l ) && ( e . preventDefault ( ) , c . absUrl ( ) != a . url ( ) && ( n . $apply ( ) , s . angular [ "ff-684208-preventDefault" ] = ! 0 ) ) } } ) , Rt ( c . absUrl ( ) ) != Rt ( m ) && a . url ( c . absUrl ( ) , ! 0 ) ; var f = ! 0 ; return a . onUrlChange ( function ( e , t ) { return
return r . call ( a , l , c , d , u ) , a } return e } var n = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/ ; return function ( n , a , i ) { var s , r , l = "" , c = [ ] ; if ( a = a || "mediumDate" , a = e . DATETIME _FORMATS [ a ] || a , $ ( n ) && ( n = uo . test ( n ) ? m ( n ) : t ( n ) ) , S ( n ) && ( n = new Date ( n ) ) , ! C ( n ) || ! isFinite ( n . getTime ( ) ) ) return n ; for ( ; a ; ) r = co . exec ( a ) , r ? ( c = H ( c , r , 1 ) , a = c . pop ( ) ) : ( c . push ( a ) , a = null ) ; var d = n . getTimezoneOffset ( ) ; return i && ( d = Y ( i , n . getTimezoneOffset ( ) ) , n = X ( n , i , ! 0 ) ) , o ( c , function ( t ) { s = lo [ t ] , l += s ? s ( n , e . DATETIME _FORMATS , d ) : t . replace ( /(^'|'$)/g , "" ) . replace ( /''/g , "'" ) } ) , l } } function Zn ( ) { return function ( e , t ) { return y ( t ) && ( t = 2 ) , G ( e , t ) } } function Xn ( ) { return function ( e , t , n ) { return t = Math . abs ( Number ( t ) ) === 1 / 0 ? Number ( t ) : m ( t ) , isNaN ( t ) ? e : ( S ( e ) && ( e = e . toString ( ) ) , Ua ( e ) || $ ( e ) ? ( n = ! n || isNaN ( n ) ? 0 : m ( n ) , n = 0 > n && n >= - e . length ? e . length + n : n , t >= 0 ? e . slice ( n , n + t ) : 0 === n ? e . slice ( t , e . length ) : e . slice ( Math . max ( 0 , n + t ) , n ) ) : e ) } } function Jn ( e ) { function t ( t , n ) { return n = n ? - 1 : 1 , t . map ( function ( t ) { var a = 1 , i = f ; if ( M ( t ) ) i = t ; else if ( $ ( t ) && ( ( "+" == t . charAt ( 0 ) || "-" == t . charAt ( 0 ) ) && ( a = "-" == t . charAt ( 0 ) ? - 1 : 1 , t = t . substring ( 1 ) ) , "" !== t && ( i = e ( t ) , i . constant ) ) ) { var o = i ( ) ; i = function ( e ) { return e [ o ] } } return { get : i , descending : a * n } } ) } function n ( e ) { switch ( typeof e ) { case "number" : case "boolean" : case "string" : return ! 0 ; default : return ! 1 } } function a ( e , t ) { return "function" == typeof e . valueOf && ( e = e . valueOf ( ) , n ( e ) ) ? e : v ( e ) && ( e = e . toString ( ) , n ( e ) ) ? e : t } function o ( e , t ) { var n = typeof e ; return null === e ? ( n = "string" , e = "null" ) : "string" === n ? e = e . toLowerCase ( ) : "object" === n && ( e = a ( e , t ) ) , { value : e , type : n } } function s ( e , t ) { var n = 0 ; return e . type === t . type ? e . value !== t . value && ( n = e . value < t . value ? - 1 : 1 ) : n = e . type < t . type ? - 1 : 1 , n } return function ( e , n , a ) { function r ( e , t ) { return { value : e , predicateValues : c . map ( function ( n ) { return o ( n . get ( e ) , t ) } ) } } function l ( e , t ) { for ( var n = 0 , a = 0 , i = c . length ; i > a && ! ( n = s ( e . predicateValues [ a ] , t . predicateValues [ a ] ) * c [ a ] . descending ) ; ++ a ) ; return n } if ( ! i ( e ) ) return e ; Ua ( n ) || ( n = [ n ] ) , 0 === n . length && ( n = [ "+" ] ) ; var c = t ( n , a ) ; c . push ( { get : function ( ) { return { } } , descending : a ? - 1 : 1 } ) ; var d = Array . prototype . map . call ( e , r ) ; return d . sort ( l ) , e = d . map ( function ( e ) { return e . value } ) } } function Qn ( e ) { return M ( e ) && ( e = { link : e } ) , e . restrict = e . restrict || "AC" , _ ( e ) } function ea ( e , t ) { e . $name = t } function ta ( e , t , a , i , s ) { var r = this , l = [ ] ; r . $error = { } , r . $$success = { } , r . $pending = n , r . $name = s ( t . name || t . ngForm || "" ) ( a ) , r . $dirty = ! 1 , r . $pristine = ! 0 , r . $valid = ! 0 , r . $invalid = ! 1 , r . $submitted = ! 1 , r . $$parentForm = fo , r . $rollbackViewValue = function ( ) { o ( l , function ( e ) { e . $rollbackViewValue ( ) } ) } , r . $commitViewValue = function ( ) { o ( l , function ( e ) { e . $commitViewValue ( ) } ) } , r . $addControl = function ( e ) { me ( e . $name , "input" ) , l . push ( e ) , e . $name && ( r [ e . $name ] = e ) , e . $$parentForm = r } , r . $$renameControl = function ( e , t ) { var n = e . $name ; r [ n ] === e && delete r [ n ] , r [ t ] = e , e . $name = t } , r . $removeControl = function ( e ) { e . $name && r [ e . $name ] === e && delete r [ e . $name ] , o ( r . $pending , function ( t , n ) { r . $setValidity ( n , null , e ) } ) , o ( r . $error , function ( t , n ) { r . $setValidity ( n , null , e ) } ) , o ( r . $$success , function ( t , n ) { r . $setValidity ( n , null , e ) } ) , L ( l , e ) , e . $$parentForm = fo } , fa ( { ctrl : this , $element : e , set : function ( e , t , n ) { var a = e [ t ] ; if ( a ) { var i = a . indexOf ( n ) ; - 1 === i && a . push ( n ) } else e [ t ] = [ n ] } , unset : function ( e , t , n ) { var a = e [ t ] ; a && ( L ( a , n ) , 0 === a . length && delete e [ t ] ) } , $animate : i } ) , r . $setDirty = function ( ) { i . removeClass ( e , Jo ) , i . addClass ( e , Qo ) , r . $dirty = ! 0 , r . $pristine = ! 1 , r . $$parentForm . $setDirty ( ) } , r . $setPristine = function ( ) { i . setClass ( e , Jo , Qo + " " + _o ) , r . $dirty = ! 1 , r . $pristine = ! 0 , r . $submitted = ! 1 , o ( l , function ( e ) { e . $setPristine ( ) } ) } , r . $setUntouched = function ( ) { o ( l , function ( e ) { e . $setUntouched ( ) } ) } , r . $setSubmitted = function ( ) { i . addClass ( e , _o ) , r . $submitted = ! 0 , r . $$parentForm . $setSubmitted ( ) } } function na ( e ) { e . $formatters . push ( function ( t ) { return e . $isEmpty ( t ) ? t : t . toString ( ) } ) } function aa ( e , t , n , a , i , o ) { ia ( e , t , n , a , i , o ) , na ( a ) } function ia ( e , t , n , a , i , o ) { var s = ba ( t [ 0 ] . type ) ; if ( ! i . android ) { var r = ! 1 ; t . on ( "compositionstart" , function ( e ) { r = ! 0 } ) , t . on ( "compositionend" , function ( ) { r = ! 1 , l ( ) } ) } var l = function ( e ) { if ( c && ( o . defer . cancel ( c ) , c = null ) , ! r ) { var i = t . val ( ) , l = e && e . type ; "password" === s || n . ngTrim && "false" === n . ngTrim || ( i = Ba ( i ) ) , ( a . $viewValue !== i || "" === i && a . $$hasNativeValidators ) && a . $setViewValue ( i , l ) } } ;
own : { } } , inputs : [ ] } , en ( i , a . $filter ) ; var s , r = "" ; if ( this . stage = "assign" , s = an ( i ) ) { this . state . computing = "assign" ; var l = this . nextId ( ) ; this . recurse ( s , l ) , this . return _ ( l ) , r = "fn.assign=" + this . generateFunction ( "assign" , "s,v,l" ) } var c = tn ( i . body ) ; a . stage = "inputs" , o ( c , function ( e , t ) { var n = "fn" + t ; a . state [ n ] = { vars : [ ] , body : [ ] , own : { } } , a . state . computing = n ; var i = a . nextId ( ) ; a . recurse ( e , i ) , a . return _ ( i ) , a . state . inputs . push ( n ) , e . watchId = t } ) , this . state . computing = "fn" , this . stage = "main" , this . recurse ( i ) ; var d = '"' + this . USE + " " + this . STRICT + '";\n' + this . filterPrefix ( ) + "var fn=" + this . generateFunction ( "fn" , "s,l,a,i" ) + r + this . watchFns ( ) + "return fn;" , u = new Function ( "$filter" , "ensureSafeMemberName" , "ensureSafeObject" , "ensureSafeFunction" , "getStringValue" , "ensureSafeAssignContext" , "ifDefined" , "plus" , "text" , d ) ( this . $filter , Wt , Kt , Yt , Gt , Zt , Xt , Jt , e ) ; return this . state = this . stage = n , u . literal = on ( i ) , u . constant = sn ( i ) , u } , USE : "use" , STRICT : "strict" , watchFns : function ( ) { var e = [ ] , t = this . state . inputs , n = this ; return o ( t , function ( t ) { e . push ( "var " + t + "=" + n . generateFunction ( t , "s" ) ) } ) , t . length && e . push ( "fn.inputs=[" + t . join ( "," ) + "];" ) , e . join ( "" ) } , generateFunction : function ( e , t ) { return "function(" + t + "){" + this . varsPrefix ( e ) + this . body ( e ) + "};" } , filterPrefix : function ( ) { var e = [ ] , t = this ; return o ( this . state . filters , function ( n , a ) { e . push ( n + "=$filter(" + t . escape ( a ) + ")" ) } ) , e . length ? "var " + e . join ( "," ) + ";" : "" } , varsPrefix : function ( e ) { return this . state [ e ] . vars . length ? "var " + this . state [ e ] . vars . join ( "," ) + ";" : "" } , body : function ( e ) { return this . state [ e ] . body . join ( "" ) } , recurse : function ( e , t , a , i , s , r ) { var l , c , d , u , p = this ; if ( i = i || h , ! r && b ( e . watchId ) ) return t = t || this . nextId ( ) , void this . if _ ( "i" , this . lazyAssign ( t , this . computedMember ( "i" , e . watchId ) ) , this . lazyRecurse ( e , t , a , i , s , ! 0 ) ) ; switch ( e . type ) { case eo . Program : o ( e . body , function ( t , a ) { p . recurse ( t . expression , n , n , function ( e ) { c = e } ) , a !== e . body . length - 1 ? p . current ( ) . body . push ( c , ";" ) : p . return _ ( c ) } ) ; break ; case eo . Literal : u = this . escape ( e . value ) , this . assign ( t , u ) , i ( u ) ; break ; case eo . UnaryExpression : this . recurse ( e . argument , n , n , function ( e ) { c = e } ) , u = e . operator + "(" + this . ifDefined ( c , 0 ) + ")" , this . assign ( t , u ) , i ( u ) ; break ; case eo . BinaryExpression : this . recurse ( e . left , n , n , function ( e ) { l = e } ) , this . recurse ( e . right , n , n , function ( e ) { c = e } ) , u = "+" === e . operator ? this . plus ( l , c ) : "-" === e . operator ? this . ifDefined ( l , 0 ) + e . operator + this . ifDefined ( c , 0 ) : "(" + l + ")" + e . operator + "(" + c + ")" , this . assign ( t , u ) , i ( u ) ; break ; case eo . LogicalExpression : t = t || this . nextId ( ) , p . recurse ( e . left , t ) , p . if _ ( "&&" === e . operator ? t : p . not ( t ) , p . lazyRecurse ( e . right , t ) ) , i ( t ) ; break ; case eo . ConditionalExpression : t = t || this . nextId ( ) , p . recurse ( e . test , t ) , p . if _ ( t , p . lazyRecurse ( e . alternate , t ) , p . lazyRecurse ( e . consequent , t ) ) , i ( t ) ; break ; case eo . Identifier : t = t || this . nextId ( ) , a && ( a . context = "inputs" === p . stage ? "s" : this . assign ( this . nextId ( ) , this . getHasOwnProperty ( "l" , e . name ) + "?l:s" ) , a . computed = ! 1 , a . name = e . name ) , Wt ( e . name ) , p . if _ ( "inputs" === p . stage || p . not ( p . getHasOwnProperty ( "l" , e . name ) ) , function ( ) { p . if _ ( "inputs" === p . stage || "s" , function ( ) { s && 1 !== s && p . if _ ( p . not ( p . nonComputedMember ( "s" , e . name ) ) , p . lazyAssign ( p . nonComputedMember ( "s" , e . name ) , "{}" ) ) , p . assign ( t , p . nonComputedMember ( "s" , e . name ) ) } ) } , t && p . lazyAssign ( t , p . nonComputedMember ( "l" , e . name ) ) ) , ( p . state . expensiveChecks || cn ( e . name ) ) && p . addEnsureSafeObject ( t ) , i ( t ) ; break ; case eo . MemberExpression : l = a && ( a . context = this . nextId ( ) ) || this . nextId ( ) , t = t || this . nextId ( ) , p . recurse ( e . object , l , n , function ( ) { p . if _ ( p . notNull ( l ) , function ( ) { e . computed ? ( c = p . nextId ( ) , p . recurse ( e . property , c ) , p . getStringValue ( c ) , p . addEnsureSafeMemberName ( c ) , s && 1 !== s && p . if _ ( p . not ( p . computedMember ( l , c ) ) , p . lazyAssign ( p . computedMember ( l , c ) , "{}" ) ) , u = p . ensureSafeObject ( p . computedMember ( l , c ) ) , p . assign ( t , u ) , a && ( a . computed = ! 0 , a . name = c ) ) : ( Wt ( e . property . name ) , s && 1 !== s && p . if _ ( p . not ( p . nonComputedMember ( l , e . property . name ) ) , p . lazyAssign ( p . nonComputedMember ( l , e . property . name ) , "{}" ) ) , u = p . nonComputedMember ( l , e . property . name ) , ( p . state . expensiveChecks || cn ( e . property . name ) ) && ( u = p . ensureSafeObject ( u ) ) , p . assign ( t , u ) , a && ( a . computed = ! 1 , a . name = e . property . name ) ) } , function ( ) { p . assign ( t , "undefined" ) } ) , i ( t ) } , ! ! s ) ; break ; case eo . CallExpression : t = t || this . nextId ( ) , e . filter ? ( c = p . filter ( e . callee . name
} } ) , o ( g , function ( e , n ) { f [ n ] = t ( e . replace ( a , b ) ) } ) , s . $watch ( u , function ( t ) { var a = parseFloat ( t ) , i = isNaN ( a ) ; if ( i || a in g || ( a = e . pluralCat ( a - m ) ) , a !== d && ! ( i && S ( d ) && isNaN ( d ) ) ) { w ( ) ; var o = f [ a ] ; y ( o ) ? ( null != t && n . debug ( "ngPluralize: no rule defined for '" + a + "' in " + p ) , w = h , c ( ) ) : w = s . $watch ( o , c ) , d = a } } ) } } } ] , ms = [ "$parse" , "$animate" , function ( e , s ) { var r = "$$NG_REMOVED" , l = a ( "ngRepeat" ) , c = function ( e , t , n , a , i , o , s ) { e [ n ] = a , i && ( e [ i ] = o ) , e . $index = t , e . $first = 0 === t , e . $last = t === s - 1 , e . $middle = ! ( e . $first || e . $last ) , e . $odd = ! ( e . $even = 0 === ( 1 & t ) ) } , d = function ( e ) { return e . clone [ 0 ] } , u = function ( e ) { return e . clone [ e . clone . length - 1 ] } ; return { restrict : "A" , multiElement : ! 0 , transclude : "element" , priority : 1e3 , terminal : ! 0 , $$tlb : ! 0 , compile : function ( a , p ) { var m = p . ngRepeat , g = t . createComment ( " end ngRepeat: " + m + " " ) , h = m . match ( /^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/ ) ; if ( ! h ) throw l ( "iexp" , "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'." , m ) ; var f = h [ 1 ] , _ = h [ 2 ] , v = h [ 3 ] , y = h [ 4 ] ; if ( h = f . match ( /^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/ ) , ! h ) throw l ( "iidexp" , "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'." , f ) ; var b = h [ 3 ] || h [ 1 ] , w = h [ 2 ] ; if ( v && ( ! /^[$a-zA-Z_][$a-zA-Z0-9_]*$/ . test ( v ) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/ . test ( v ) ) ) throw l ( "badident" , "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name." , v ) ; var k , $ , S , C , M = { $id : Ke } ; return y ? k = e ( y ) : ( S = function ( e , t ) { return Ke ( t ) } , C = function ( e ) { return e } ) , function ( e , t , a , p , h ) { k && ( $ = function ( t , n , a ) { return w && ( M [ w ] = t ) , M [ b ] = n , M . $index = a , k ( e , M ) } ) ; var f = fe ( ) ; e . $watchCollection ( _ , function ( a ) { var p , _ , y , k , M , x , A , E , I , T , D , P , F = t [ 0 ] , N = fe ( ) ; if ( v && ( e [ v ] = a ) , i ( a ) ) I = a , E = $ || S ; else { E = $ || C , I = [ ] ; for ( var R in a ) wa . call ( a , R ) && "$" !== R . charAt ( 0 ) && I . push ( R ) } for ( k = I . length , D = new Array ( k ) , p = 0 ; k > p ; p ++ ) if ( M = a === I ? p : I [ p ] , x = a [ M ] , A = E ( M , x , p ) , f [ A ] ) T = f [ A ] , delete f [ A ] , N [ A ] = T , D [ p ] = T ; else { if ( N [ A ] ) throw o ( D , function ( e ) { e && e . scope && ( f [ e . id ] = e ) } ) , l ( "dupes" , "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}" , m , A , x ) ; D [ p ] = { id : A , scope : n , clone : n } , N [ A ] = ! 0 } for ( var O in f ) { if ( T = f [ O ] , P = he ( T . clone ) , s . leave ( P ) , P [ 0 ] . parentNode ) for ( p = 0 , _ = P . length ; _ > p ; p ++ ) P [ p ] [ r ] = ! 0 ; T . scope . $destroy ( ) } for ( p = 0 ; k > p ; p ++ ) if ( M = a === I ? p : I [ p ] , x = a [ M ] , T = D [ p ] , T . scope ) { y = F ; do y = y . nextSibling ; while ( y && y [ r ] ) ; d ( T ) != y && s . move ( he ( T . clone ) , null , Ma ( F ) ) , F = u ( T ) , c ( T . scope , p , b , x , w , M , k ) } else h ( function ( e , t ) { T . scope = t ; var n = g . cloneNode ( ! 1 ) ; e [ e . length ++ ] = n , s . enter ( e , null , Ma ( F ) ) , F = n , T . clone = e , N [ T . id ] = T , c ( T . scope , p , b , x , w , M , k ) } ) ; f = N } ) } } } } ] , gs = "ng-hide" , hs = "ng-hide-animate" , fs = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , a ) { t . $watch ( a . ngShow , function ( t ) { e [ t ? "removeClass" : "addClass" ] ( n , gs , { tempClasses : hs } ) } ) } } } ] , _s = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , a ) { t . $watch ( a . ngHide , function ( t ) { e [ t ? "addClass" : "removeClass" ] ( n , gs , { tempClasses : hs } ) } ) } } } ] , vs = Qn ( function ( e , t , n ) { e . $watch ( n . ngStyle , function ( e , n ) { n && e !== n && o ( n , function ( e , n ) { t . css ( n , "" ) } ) , e && t . css ( e ) } , ! 0 ) } ) , ys = [ "$animate" , function ( e ) { return { require : "ngSwitch" , controller : [ "$scope" , function ( ) { this . cases = { } } ] , link : function ( n , a , i , s ) { var r = i . ngSwitch || i . on , l = [ ] , c = [ ] , d = [ ] , u = [ ] , p = function ( e , t ) { return function ( ) { e . splice ( t , 1 ) } } ; n . $watch ( r , function ( n ) { var a , i ; for ( a = 0 , i = d . length ; i > a ; ++ a ) e . cancel ( d [ a ] ) ; for ( d . length = 0 , a = 0 , i = u . length ; i > a ; ++ a ) { var r = he ( c [ a ] . clone ) ; u [ a ] . $destroy ( ) ; var m = d [ a ] = e . leave ( r ) ; m . then ( p ( d , a ) ) } c . length = 0 , u . length = 0 , ( l = s . cases [ "!" + n ] || s . cases [ "?" ] ) && o ( l , function ( n ) { n . transclude ( function ( a , i ) { u . push ( i ) ; var o = n . element ; a [ a . length ++ ] = t . createComment ( " end ngSwitchWhen: " ) ; var s = { clone : a } ; c . push ( s ) , e . enter ( a , o . parent ( ) , o ) } ) } ) } ) } } } ] , bs = Qn ( { transclude : "element" , priority : 1200 , require : "^ngSwitch" , multiElement : ! 0 , link : function ( e , t , n , a , i ) { a . cases [ "!" + n . ngSwitchWhen ] = a . cases [ "!" + n . ngSwitchWhen ] || [ ] , a . cases [ "!" + n . ngSwitchWhen ] . push ( { transclude : i , element : t } ) } } ) , ws = Qn ( { transclude : "element" , priority
if ( T || U && O . state == i || ( T = ! D ( e , h , a ) ) , T ) return u ( ) , k ; A && E ( e ) ; var L = { structural : A , element : e , event : a , close : u , options : c , runner : k } ; if ( U ) { var B = t ( "skip" , e , L , O ) ; if ( B ) return O . state === o ? ( u ( ) , k ) : ( _ ( e , O . options , c ) , O . runner ) ; var z = t ( "cancel" , e , L , O ) ; if ( z ) if ( O . state === o ) O . runner . end ( ) ; else { if ( ! O . structural ) return _ ( e , O . options , L . options ) , O . runner ; O . close ( ) } else { var W = t ( "join" , e , L , O ) ; if ( W ) { if ( O . state !== o ) return b ( e , A ? a : null , c ) , a = L . event = O . event , c = _ ( e , O . options , L . options ) , O . runner ; M ( e , c ) } } } else M ( e , c ) ; var G = L . structural ; if ( G || ( G = "animate" === L . event && Object . keys ( L . options . to || { } ) . length > 0 || n ( L . options ) ) , ! G ) return u ( ) , I ( e ) , k ; var K = ( O . counter || 0 ) + 1 ; return L . counter = K , P ( e , i , L ) , r . $$postDigest ( function ( ) { var t = F . get ( p ) , i = ! t ; t = t || { } ; var s = e . parent ( ) || [ ] , r = s . length > 0 && ( "animate" === t . event || t . structural || n ( t . options ) ) ; if ( i || t . counter !== K || ! r ) return i && ( X ( e , c ) , g ( e , c ) ) , ( i || A && t . event !== a ) && ( c . domOperation ( ) , k . end ( ) ) , void ( r || I ( e ) ) ; a = ! t . structural && n ( t . options , ! 0 ) ? "setClass" : t . event , P ( e , o ) ; var l = f ( e , a , t . options ) ; l . done ( function ( t ) { u ( ! t ) ; var n = F . get ( p ) ; n && n . counter === K && I ( y ( e ) ) , d ( k , a , "close" , { } ) } ) , k . setHost ( l ) , d ( k , a , "start" , { } ) } ) , k } function E ( e ) { var t = y ( e ) , n = t . querySelectorAll ( "[" + Me + "]" ) ; j ( n , function ( e ) { var t = parseInt ( e . getAttribute ( Me ) ) , n = F . get ( e ) ; switch ( t ) { case o : n . runner . end ( ) ; case i : n && F . remove ( e ) } } ) } function I ( e ) { var t = y ( e ) ; t . removeAttribute ( Me ) , F . remove ( t ) } function T ( e , t ) { return y ( e ) === y ( t ) } function D ( e , t , n ) { var a , i = B ( u [ 0 ] . body ) , o = T ( e , i ) || "HTML" === e [ 0 ] . nodeName , s = T ( e , d ) , r = ! 1 , l = e . data ( xe ) ; for ( l && ( t = l ) ; t && t . length ; ) { s || ( s = T ( t , d ) ) ; var c = t [ 0 ] ; if ( c . nodeType !== Y ) break ; var p = F . get ( c ) || { } ; if ( r || ( r = p . structural || N . get ( c ) ) , z ( a ) || a === ! 0 ) { var m = t . data ( te ) ; W ( m ) && ( a = m ) } if ( r && a === ! 1 ) break ; s || ( s = T ( t , d ) , s || ( l = t . data ( xe ) , l && ( t = l ) ) ) , o || ( o = T ( t , i ) ) , t = t . parent ( ) } var g = ! r || a ; return g && s && o } function P ( e , t , n ) { n = n || { } , n . state = t ; var a = y ( e ) ; a . setAttribute ( Me , t ) ; var i = F . get ( a ) , o = i ? L ( i , n ) : n ; F . put ( a , o ) } var F = new h , N = new h , R = null , O = r . $watch ( function ( ) { return 0 === k . totalPendingRequests } , function ( e ) { e && ( O ( ) , r . $$postDigest ( function ( ) { r . $$postDigest ( function ( ) { null === R && ( R = ! 0 ) } ) } ) ) } ) , U = { } , G = e . classNameFilter ( ) , Z = G ? function ( e ) { return G . test ( e ) } : function ( ) { return ! 0 } , X = p ( $ ) ; return { on : function ( e , t , n ) { var a = c ( t ) ; U [ e ] = U [ e ] || [ ] , U [ e ] . push ( { node : a , callback : n } ) } , off : function ( e , t , n ) { function a ( e , t , n ) { var a = c ( t ) ; return e . filter ( function ( e ) { var t = e . node === a && ( ! n || e . callback === n ) ; return ! t } ) } var i = U [ e ] ; i && ( U [ e ] = 1 === arguments . length ? null : a ( i , t , n ) ) } , pin : function ( e , t ) { a ( K ( e ) , "element" , "not an element" ) , a ( K ( t ) , "parentElement" , "not an element" ) , e . data ( xe , t ) } , push : function ( e , t , n , a ) { return n = n || { } , n . domOperation = a , A ( e , t , n ) } , enabled : function ( e , t ) { var n = arguments . length ; if ( 0 === n ) t = ! ! R ; else { var a = K ( e ) ; if ( a ) { var i = y ( e ) , o = N . get ( i ) ; 1 === n ? t = ! o : ( t = ! ! t , t ? o && N . remove ( i ) : N . put ( i , ! 0 ) ) } else t = R = ! ! e } return t } } } ] } ] , Ee = [ "$$rAF" , function ( e ) { function t ( t ) { n . push ( t ) , n . length > 1 || e ( function ( ) { for ( var e = 0 ; e < n . length ; e ++ ) n [ e ] ( ) ; n = [ ] } ) } var n = [ ] ; return function ( ) { var e = ! 1 ; return t ( function ( ) { e = ! 0 } ) , function ( n ) { e ? n ( ) : t ( n ) } } } ] , Ie = [ "$q" , "$sniffer" , "$$animateAsyncRun" , function ( e , t , n ) { function a ( e ) { this . setHost ( e ) , this . _doneCallbacks = [ ] , this . _runInAnimationFrame = n ( ) , this . _state = 0 } var i = 0 , o = 1 , s = 2 ; return a . chain = function ( e , t ) { function n ( ) { return a === e . length ? void t ( ! 0 ) : void e [ a ] ( function ( e ) { return e === ! 1 ? void t ( ! 1 ) : ( a ++ , void n ( ) ) } ) } var a = 0 ; n ( ) } , a . all = function ( e , t ) { function n ( n ) { i = i && n , ++ a === e . length && t ( i ) } var a = 0 , i = ! 0 ; j ( e , function ( e ) { e . done ( n ) } ) } , a . prototype = { setHost : function ( e ) { this . host = e || { } } , done : function ( e ) { this . _state === s ? e ( ) : this . _doneCallbacks . push ( e ) } , progress : U , getPromise : function ( ) { if ( ! this . promise ) { var t = this ; this . promise = e ( function ( e , n ) { t . done ( function ( t ) { t === ! 1 ? n ( ) : e ( ) } ) } ) } return this . promise } , then : function ( e , t ) { return this . getPromise ( ) . then ( e , t ) } , "catch" : function ( e ) { return this . getPromise ( ) [ "catch" ] ( e ) } , "finally" : function ( e ) { return this . getPromise ( ) [ "finally" ] ( e ) } , pause : function ( ) { this . host . pause && this . host . pause ( ) } , resume : function ( ) { this . host . resume && this . host . resume ( ) } , end : function ( ) { this . host . end && this . host . end ( ) , this . _resolve ( ! 0 ) } , cancel : function ( ) { this . host . cancel && this . host . cancel ( ) , this . _resolve ( ! 1 ) } , complete :
} ] ) , angular . module ( "mediaPlayer" , [ "mediaPlayer.helpers" ] ) . constant ( "mp.playerDefaults" , { currentTrack : 0 , ended : void 0 , network : void 0 , playing : ! 1 , seeking : ! 1 , tracks : 0 , volume : 1 , formatDuration : "00:00" , formatTime : "00:00" , loadPercent : 0 } ) . directive ( "mediaPlayer" , [ "$rootScope" , "$interpolate" , "$timeout" , "mp.throttle" , "mp.playerDefaults" , function ( e , t , n , a , i ) { function o ( e ) { return function ( t , a , i ) { var o , s = null ; if ( e . $attachPlaylist ( t ) , void 0 === t && void 0 !== a ) return e . pause ( ) ; if ( e . currentTrack ) { o = a ? a [ e . currentTrack - 1 ] : - 1 ; for ( var r = 0 ; r < t . length ; r ++ ) if ( angular . equals ( t [ r ] , o ) ) { s = r ; break } null !== s ? ( e . currentTrack = s + 1 , e . tracks = t . length ) : ( e . pause ( ) , t . length ? n ( function ( ) { e . $clearSourceList ( ) , e . $addSourceList ( t [ 0 ] ) , e . load ( ) , e . tracks = t . length } ) : e . reset ( ) ) } else t . length ? ( e . $clearSourceList ( ) , e . $addSourceList ( t [ 0 ] ) , e . load ( ) , e . tracks = t . length ) : e . reset ( ) } } var s = { load : function ( e , t ) { "boolean" == typeof e ? ( t = e , e = null ) : "object" == typeof e && ( this . $clearSourceList ( ) , this . $addSourceList ( e ) ) , this . $domEl . load ( ) , this . ended = void 0 , t && this . $element . one ( "canplay" , this . play . bind ( this ) ) } , reset : function ( e ) { angular . extend ( this , i ) , this . $clearSourceList ( ) , this . load ( this . $playlist , e ) } , play : function ( e , t ) { return "boolean" == typeof e && ( t = e , e = void 0 ) , t && ( this . $selective = ! 0 ) , this . $playlist . length > e ? ( this . currentTrack = e + 1 , this . load ( this . $playlist [ e ] , ! 0 ) ) : ( ! this . currentTrack && this . $domEl . readyState && this . currentTrack ++ , void ( this . ended ? this . load ( ! 0 ) : this . $domEl . play ( ) ) ) } , playPause : function ( e , t ) { "boolean" == typeof e && ( t = e , e = void 0 ) , t && ( this . $selective = ! 0 ) , "number" == typeof e && e + 1 !== this . currentTrack ? this . play ( e ) : this . playing ? this . pause ( ) : this . play ( ) } , pause : function ( ) { this . $domEl . pause ( ) } , stop : function ( ) { this . reset ( ) } , toggleMute : function ( ) { this . muted = this . $domEl . muted = ! this . $domEl . muted } , next : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack < t . tracks ) { var a = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack ] ) , t . load ( a ) , t . currentTrack ++ } ) } } , prev : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack - 1 ) { var a = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack - 2 ] ) , t . load ( a ) , t . currentTrack -- } ) } } , setPlaybackRate : function ( e ) { this . $domEl . playbackRate = e } , setVolume : function ( e ) { this . $domEl . volume = e } , seek : function ( e ) { var t , n = 0 ; return "string" != typeof e ? this . $domEl . currentTime = e : ( t = e . split ( ":" ) , n += parseInt ( t . pop ( ) , 10 ) , t . length && ( n += 60 * parseInt ( t . pop ( ) , 10 ) ) , t . length && ( n += 3600 * parseInt ( t . pop ( ) , 10 ) ) , isNaN ( n ) ? void 0 : this . $domEl . currentTime = n ) } , on : function ( e , t ) { return this . $element . on ( e , t ) } , off : function ( e , t ) { return this . $element . off ( e , t ) } , one : function ( e , t ) { return this . $element . one ( e , t ) } , $addSourceList : function ( e ) { var t = this ; if ( angular . isArray ( e ) ) angular . forEach ( e , function ( e , n ) { var a = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && a . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( a ) } ) ; else if ( angular . isObject ( e ) ) { var n = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && n . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( n ) } } , $clearSourceList : function ( ) { this . $element . contents ( ) . remove ( ) } , $formatTime : function ( e ) { if ( e === 1 / 0 ) return "∞" ; var t , n = parseInt ( e / 3600 , 10 ) % 24 , a = parseInt ( e / 60 , 10 ) % 60 , i = parseInt ( e % 60 , 10 ) , o = ( 10 > a ? "0" + a : a ) + ":" + ( 10 > i ? "0" + i : i ) ; return t = n > 0 ? ( 10 > n ? "0" + n : n ) + ":" + o : o } , $attachPlaylist : function ( e ) { void 0 === e || null === e ? this . playlist = [ ] : this . $playlist = e } } , r = function ( e , t , n ) { var i = { playing : function ( ) { e . $apply ( function ( e ) { e . playing = ! 0 , e . ended = ! 1 } ) } , pause : function ( ) { e . $apply ( function ( e ) { e . playing = ! 1 } ) } , ended : function ( ) { ! e . $selective && e . currentTrack < e . tracks ? e . next ( ! 0 ) : e . $apply ( function ( e ) { e . ended = ! 0 , e . playing = ! 1 } ) } , timeupdate : a ( 1e3 , ! 1 , function ( ) { e . $apply ( function ( e ) { e . currentTime = t . currentTime , e . formatTime = e . $formatTime ( e . currentTime ) } ) } ) , loadedmetadata : function ( ) { e . $apply ( function ( e ) { e . currentTrack || e . currentTrack ++ , e . duration = t . duration , e . formatDuration = e . $formatTime ( e . duration ) , t . buffered . length && ( e . loadPercent = Math . round ( t . buffered . end ( t . buffered . length - 1 ) / e . duration * 100 ) ) } ) } , progress : function ( ) { e . $domEl . buffered . length && e . $apply (
a . prototype . getName = function ( ) { return this . name } , a . prototype . getData = function ( ) { return this . data } , a . prototype . G = function ( ) { return this . H } , t ( "Zlib.GunzipMember" , a ) , t ( "Zlib.GunzipMember.prototype.getName" , a . prototype . getName ) , t ( "Zlib.GunzipMember.prototype.getData" , a . prototype . getData ) , t ( "Zlib.GunzipMember.prototype.getMtime" , a . prototype . G ) ; var v , y = [ ] ; for ( v = 0 ; 288 > v ; v ++ ) switch ( ! 0 ) { case 143 >= v : y . push ( [ v + 48 , 8 ] ) ; break ; case 255 >= v : y . push ( [ v - 144 + 400 , 9 ] ) ; break ; case 279 >= v : y . push ( [ v - 256 + 0 , 7 ] ) ; break ; case 287 >= v : y . push ( [ v - 280 + 192 , 8 ] ) ; break ; default : e ( "invalid literal: " + v ) } var b = function ( ) { function t ( t ) { switch ( ! 0 ) { case 3 === t : return [ 257 , t - 3 , 0 ] ; case 4 === t : return [ 258 , t - 4 , 0 ] ; case 5 === t : return [ 259 , t - 5 , 0 ] ; case 6 === t : return [ 260 , t - 6 , 0 ] ; case 7 === t : return [ 261 , t - 7 , 0 ] ; case 8 === t : return [ 262 , t - 8 , 0 ] ; case 9 === t : return [ 263 , t - 9 , 0 ] ; case 10 === t : return [ 264 , t - 10 , 0 ] ; case 12 >= t : return [ 265 , t - 11 , 1 ] ; case 14 >= t : return [ 266 , t - 13 , 1 ] ; case 16 >= t : return [ 267 , t - 15 , 1 ] ; case 18 >= t : return [ 268 , t - 17 , 1 ] ; case 22 >= t : return [ 269 , t - 19 , 2 ] ; case 26 >= t : return [ 270 , t - 23 , 2 ] ; case 30 >= t : return [ 271 , t - 27 , 2 ] ; case 34 >= t : return [ 272 , t - 31 , 2 ] ; case 42 >= t : return [ 273 , t - 35 , 3 ] ; case 50 >= t : return [ 274 , t - 43 , 3 ] ; case 58 >= t : return [ 275 , t - 51 , 3 ] ; case 66 >= t : return [ 276 , t - 59 , 3 ] ; case 82 >= t : return [ 277 , t - 67 , 4 ] ; case 98 >= t : return [ 278 , t - 83 , 4 ] ; case 114 >= t : return [ 279 , t - 99 , 4 ] ; case 130 >= t : return [ 280 , t - 115 , 4 ] ; case 162 >= t : return [ 281 , t - 131 , 5 ] ; case 194 >= t : return [ 282 , t - 163 , 5 ] ; case 226 >= t : return [ 283 , t - 195 , 5 ] ; case 257 >= t : return [ 284 , t - 227 , 5 ] ; case 258 === t : return [ 285 , t - 258 , 0 ] ; default : e ( "invalid length: " + t ) } } var n , a , i = [ ] ; for ( n = 3 ; 258 >= n ; n ++ ) a = t ( n ) , i [ n ] = a [ 2 ] << 24 | a [ 1 ] << 16 | a [ 0 ] ; return i } ( ) ; p && new Uint32Array ( b ) ; var w = 0 , k = 1 ; o . prototype . g = function ( ) { for ( ; ! this . o ; ) { var t = s ( this , 3 ) ; switch ( 1 & t && ( this . o = ! 0 ) , t >>>= 1 ) { case 0 : var n = this . input , a = this . c , i = this . b , o = this . a , r = d , c = d , u = d , m = i . length , g = d ; switch ( this . d = this . f = 0 , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (first byte)" ) ) , c = r , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (second byte)" ) ) , c |= r << 8 , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (first byte)" ) ) , u = r , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (second byte)" ) ) , u |= r << 8 , c === ~ u && e ( Error ( "invalid uncompressed block header: length verify" ) ) , a + c > n . length && e ( Error ( "input buffer is broken" ) ) , this . k ) { case w : for ( ; o + c > i . length ; ) { if ( g = m - o , c -= g , p ) i . set ( n . subarray ( a , a + g ) , o ) , o += g , a += g ; else for ( ; g -- ; ) i [ o ++ ] = n [ a ++ ] ; this . a = o , i = this . e ( ) , o = this . a } break ; case k : for ( ; o + c > i . length ; ) i = this . e ( { t : 2 } ) ; break ; default : e ( Error ( "invalid inflate mode" ) ) } if ( p ) i . set ( n . subarray ( a , a + c ) , o ) , o += c , a += c ; else for ( ; c -- ; ) i [ o ++ ] = n [ a ++ ] ; this . c = a , this . a = o , this . b = i ; break ; case 1 : this . l ( U , B ) ; break ; case 2 : l ( this ) ; break ; default : e ( Error ( "unknown BTYPE: " + t ) ) } } return this . q ( ) } ; var $ , S , C = [ 16 , 17 , 18 , 0 , 8 , 7 , 9 , 6 , 10 , 5 , 11 , 4 , 12 , 3 , 13 , 2 , 14 , 1 , 15 ] , M = p ? new Uint16Array ( C ) : C , x = [ 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 13 , 15 , 17 , 19 , 23 , 27 , 31 , 35 , 43 , 51 , 59 , 67 , 83 , 99 , 115 , 131 , 163 , 195 , 227 , 258 , 258 , 258 ] , A = p ? new Uint16Array ( x ) : x , E = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 0 , 0 , 0 ] , I = p ? new Uint8Array ( E ) : E , T = [ 1 , 2 , 3 , 4 , 5 , 7 , 9 , 13 , 17 , 25 , 33 , 49 , 65 , 97 , 129 , 193 , 257 , 385 , 513 , 769 , 1025 , 1537 , 2049 , 3073 , 4097 , 6145 , 8193 , 12289 , 16385 , 24577 ] , D = p ? new Uint16Array ( T ) : T , P = [ 0 , 0 , 0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 13 , 13 ] , F = p ? new Uint8Array ( P ) : P , N = new ( p ? Uint8Array : Array ) ( 288 ) ; for ( $ = 0 , S = N . length ; S > $ ; ++ $ ) N [ $ ] = 143 >= $ ? 8 : 255 >= $ ? 9 : 279 >= $ ? 7 : 8 ; var R , O , U = i ( N ) , L = new ( p ? Uint8Array : Array ) ( 30 ) ; for ( R = 0 , O = L . length ; O > R ; ++ R ) L [ R ] = 5 ; var B = i ( L ) ; o . prototype . l = function ( e , t ) { var n = this . b , a = this . a ; this . r = e ; for ( var i , o , l , c , d = n . length - 258 ; 256 !== ( i = r ( this , e ) ) ; ) if ( 256 > i ) a >= d && ( this . a = a , n = this . e ( ) , a = this . a ) , n [ a ++ ] = i ; else for ( o = i - 257 , c = A [ o ] , 0 < I [ o ] && ( c += s ( this , I [ o ] ) ) , i = r ( this , t ) , l = D [ i ] , 0 < F [ i ] && ( l += s ( this , F [ i ] ) ) , a >= d && ( this . a = a , n = this . e ( ) , a = this . a ) ; c -- ; ) n [ a ] = n [ a ++ - l ] ; for ( ; 8 <= this . d ; ) this . d -= 8 , this . c -- ; this . a = a } , o . prototype . C = function ( e , t ) { var n = this . b , a = this . a ; this . r = e ; for ( var i , o , l , c , d = n . length ; 256 !== ( i = r ( this , e ) ) ; ) if ( 256 > i ) a >= d && ( n = this . e ( ) , d = n . length ) , n [ a ++ ] = i ; else for ( o = i - 257 , c = A [ o ] , 0 < I [ o ] && ( c += s ( this , I [ o ] ) ) , i = r ( this , t ) , l = D [ i ] , 0 < F [ i ] && ( l += s ( this , F [ i ] ) ) , a + c > d && ( n = this . e ( ) , d = n . length ) ; c
Te [ 2 * Ue + Oe ] = ( Qe > 1 ) + 0 , Ee [ Ee . length - 1 ] += 16 ; Fe [ Le + Ue ] = Je } Re |= ke ( De , 8 - 2 * Le ) , Ne |= ke ( Te , 8 - 2 * Le ) } $e |= ke ( Pe , 20 ) , Ce |= ke ( Fe , 20 ) , Y . X = $e , Ie . X = Ce , j . z = Ee , j . Oa = Ne + 0 , j . ja = Ne | Re , Y . Nb = ! j . ja + 0 } B = ! q . Ab } if ( ! B ) { l = ye ( e , "VP8_STATUS_NOT_ENOUGH_DATA" , "Premature end-of-file encountered." + e . i + " " + e . d ) ; break e } var et = e , tt = et . Ea , nt = ga , at = et . Ea , it = ha , ot = et . Ea , st = fa ; if ( 0 < et . i ) { for ( var rt = m , rt = - 1 ; 16 > rt ; ++ rt ) he ( tt , nt + rt * pa - 4 , tt , nt + rt * pa + 12 ) ; for ( rt = - 1 ; 8 > rt ; ++ rt ) he ( at , it + rt * pa - 4 , at , it + rt * pa + 4 ) , he ( ot , st + rt * pa - 4 , ot , st + rt * pa + 4 ) } else { for ( rt = 0 ; 16 > rt ; ++ rt ) tt [ nt + rt * pa - 1 ] = 129 ; for ( rt = 0 ; 8 > rt ; ++ rt ) at [ it + rt * pa - 1 ] = 129 , ot [ st + rt * pa - 1 ] = 129 ; 0 < et . d && ( tt [ nt - 1 - pa ] = at [ it - 1 - pa ] = ot [ st - 1 - pa ] = 129 ) } var lt = et . Xc , ct = 16 * + et . i , dt = et . Sc , ut = 8 * + et . i , pt = et . Vc , mt = 8 * + et . i , gt = et . z , ht = m ; if ( 0 < et . d ) t ( tt , nt - pa , lt , ct , 16 ) , t ( at , it - pa , dt , ut , 8 ) , t ( ot , st - pa , pt , mt , 8 ) ; else if ( 0 == et . i ) { for ( i = 0 ; 21 > i ; ++ i ) tt [ nt - pa - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) at [ it - pa - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) ot [ st - pa - 1 + i ] = 127 } if ( et . wa ) { var ft = nt - pa + 16 ; 0 < et . d && ( et . i >= et . Ma - 1 ? tt [ ft + 0 ] = tt [ ft + 1 ] = tt [ ft + 2 ] = tt [ ft + 3 ] = lt [ ct + 15 ] : t ( tt , ft + 0 , lt , ct + 16 , 4 ) ) ; for ( var _t = 0 ; 4 > _t ; ++ _t ) tt [ _t + ft + 4 * pa ] = tt [ _t + ft + 4 * pa ] = tt [ _t + ft + 8 * pa ] = tt [ _t + ft + 12 * pa ] = tt [ _t + ft + 0 ] ; for ( ht = 0 ; 16 > ht ; ht ++ ) { var vt = tt , yt = nt + hi [ ht ] ; li [ et . Eb [ ht ] ] ( vt , yt ) , et . Oa & 1 << ht ? Ua ( gt , 16 * + ht , vt , yt , 0 ) : et . ja & 1 << ht && Ba ( gt , 16 * + ht , vt , yt ) } } else { var bt = ge ( et , et . Eb [ 0 ] ) ; if ( ci [ bt ] ( tt , nt ) , et . ja ) for ( ht = 0 ; 16 > ht ; ht ++ ) vt = tt , yt = nt + hi [ ht ] , et . Oa & 1 << ht ? Ua ( gt , 16 * + ht , vt , yt , 0 ) : et . ja & 1 << ht && Ba ( gt , 16 * + ht , vt , yt ) } if ( bt = ge ( et , et . Tc ) , di [ bt ] ( at , it ) , di [ bt ] ( ot , st ) , 983040 & et . ja ) { var wt = et . z , kt = 256 ; 983040 & et . Oa ? La ( wt , kt , at , it ) : ja ( wt , kt , at , it ) } if ( 15728640 & et . ja ) { var $t = et . z , kt = 320 ; 15728640 & et . Oa ? La ( $t , kt , ot , st ) : ja ( $t , kt , ot , st ) } et . d < et . hb - 1 && ( t ( lt , ct , tt , nt + 15 * pa , 16 ) , t ( dt , ut , at , it + 7 * pa , 8 ) , t ( pt , mt , ot , st + 7 * pa , 8 ) ) ; var St = e ; if ( 0 < St . A ) { var Ct = St . M [ 1 + St . i ] , Mt = St . La [ 1 + St . i ] . Nb , xt = St . Zb [ St . Lb ] ; St . ga . oc && ( xt += St . ga . Lc [ 0 ] , St . wa && ( xt += St . ga . Gc [ 0 ] ) ) , xt = 0 > xt ? 0 : xt > 63 ? 63 : xt , Ct . zc = xt , 0 < St . ga . kb && ( xt = 4 < St . ga . kb ? xt >> 2 : xt >> 1 , xt > 9 - St . ga . kb && ( xt = 9 - St . ga . kb ) ) , Ct . yc = 1 > xt ? 1 : xt , Ct . ab = ( ! Mt || St . wa ) + 0 } for ( var At = m , Et = 8 * St . Ja * St . r , It = St . ca , Tt = St . da + 16 * St . i + 16 * St . Ja * St . H , Dt = St . aa , Pt = St . ba + 8 * St . i + Et , Ft = St . ra , Nt = St . sa + 8 * St . i + Et , At = 0 ; 16 > At ; ++ At ) t ( It , Tt + At * St . H , St . Ea , + ga + At * pa , 16 ) ; for ( At = 0 ; 8 > At ; ++ At ) t ( Dt , Pt + At * St . r , St . Ea , + ha + At * pa , 8 ) , t ( Ft , Nt + At * St . r , St . Ea , + fa + At * pa , 8 ) } var Rt = e , Ot = s , Ut = 1 , Lt = Rt . oa ; if ( Rt . qb ) { var Bt = Rt . rc , Ut = Ut & WebPWorkerSync ( Bt ) ; if ( p ( Bt . a == OK ) , Ut ) { if ( Lt . N = Ot , Lt . ha = Rt . Ja , Lt . d = Rt . d , Lt . W = Rt . W , Lt . W ) { var jt = Lt . M ; Lt . M = Rt . M , Rt . M = jt } WebPWorkerLaunch ( Bt ) , ++ Rt . Ja == Rt . jb && ( Rt . Ja = 0 ) } } else { Lt . d = Rt . d , Lt . W = Rt . W ; t : { var qt = 1 , Ht = Rt . oa , Vt = pi [ Rt . A ] , zt = Vt * Rt . H , Wt = parseInt ( Vt / 2 ) * Rt . r , Gt = 16 * Ht . ha * Rt . H , Kt = 8 * Ht . ha * Rt . r , Yt = Rt . ca , Zt = Rt . da - zt + Gt , Xt = Rt . aa , Jt = Rt . ba - Wt + Kt , tn = Rt . ra , an = Rt . sa - Wt + Kt , on = 0 == Ht . d , rn = ( Ht . d >= Rt . hb - 1 ) + 0 , ln = 16 * Ht . d , cn = 16 * ( Ht . d + 1 ) ; if ( Ht . W ) { var dn = Rt , un = h , pn = dn . oa . d ; for ( p ( dn . oa . W ) , un = dn . lb ; un < dn . wb ; ++ un ) { var mn = dn , gn = un , hn = pn , fn = mn . oa , _n = mn . H , vn = fn . M [ 1 + gn ] , yn = mn . ca , bn = mn . da + 16 * fn . ha * _n + 16 * gn , wn = vn . zc , kn = vn . yc , $n = 2 * wn + kn ; if ( 0 != wn ) if ( 1 == mn . A ) gn > 0 && Xa ( yn , bn , _n , $n + 4 ) , vn . ab && Qa ( yn , bn , _n , $n ) , hn > 0 && Za ( yn , bn , _n , $n + 4 ) , vn . ab && Ja ( yn , bn , _n , $n ) ; else { var Sn = mn . r , Cn = mn . aa , Mn = mn . ba + 8 * fn . ha * Sn + 8 * gn , xn = mn . ra , An = mn . sa + 8 * fn . ha * Sn + 8 * gn , En = mn . Ac . fb ? wn >= 40 ? 2 : wn >= 15 ? 1 : 0 : wn >= 40 ? 3 : wn >= 20 ? 2 : wn >= 15 ? 1 : 0 ; gn > 0 && ( Ha ( yn , bn , _n , $n + 4 , kn , En ) , za ( Cn , Mn , xn , An , Sn , $n + 4 , kn , En ) ) , vn . ab && ( Ga ( yn , bn , _n , $n , kn , En ) , Ya ( Cn , Mn , xn , An , Sn , $n , kn , En ) ) , hn > 0 && ( qa ( yn , bn , _n , $n + 4 , kn , En ) , Va ( Cn , Mn , xn , An , Sn , $n + 4 , kn , En ) ) , vn . ab && ( Wa ( yn , bn , _n , $n , kn , En ) , Ka ( Cn , Mn , xn , An , Sn , $n , kn , En ) ) } } } if ( Ot . put ) { if ( on ? ( Ot . y = Rt . ca , Ot . D = Rt . da + Gt , Ot . c = Rt . aa , Ot . B = Rt . ba + Kt , Ot . S = Rt . ra , Ot . C = Rt . sa + Kt ) : ( ln -= Vt , Ot . y = Yt , Ot . D = Zt , Ot . c = Xt , Ot . B = Jt , Ot . S = tn , Ot . C = an ) , rn || ( cn -= Vt ) , cn > Ot . K && ( cn = Ot . K ) , Rt . Ga != g && cn > ln && ( 0 == ln ? ( Ot . p = O ( Rt , ln , cn - ln ) , Ot . q = 0 ) : Ot . q = O ( Rt , ln , cn - ln ) , Ot . p == g ) ) { Ut = ye ( Rt , nn , "Could not decode alpha data." ) ; break t } if ( ln < Ot . k ) { var In = Ot . k - ln , ln = Ot . k ; p ( ! ( 1 & In ) ) , Ot . D += Rt . H * In , Ot . B += Rt . r * ( In >> 1 ) , Ot . C += Rt . r * ( In >> 1 ) , Ot . p != g && ( Ot . q += Ot . width * In ) } cn > ln && ( Ot . D += Ot . t , Ot . B += Ot . t >> 1 , Ot . C += Ot . t >> 1 , Ot . p != g && ( Ot . q += Ot . t ) , Ot . w = ln - Ot . k , Ot . m = Ot . Ka - Ot . t , Ot . h = cn - ln , qt = Ot . put ( Ot ) ) } Ht . ha + 1 == Rt . jb && ! rn && ( t ( Rt . ca , Rt . da - zt , Yt , Zt + 16 * Rt . H , zt ) , t ( Rt . aa , Rt . ba - Wt , Xt , Jt + 8 * Rt . r , Wt ) , t ( Rt . ra , Rt . sa - W
this . WebPGetDecoderVersion = this . Ld = function ( ) { return 512 } ; var ki = [ 0 , 1 , 2 , 3 , 6 , 4 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 0 ] , $i = [ [ 173 , 148 , 140 , 0 ] , [ 176 , 155 , 140 , 135 , 0 ] , [ 180 , 157 , 141 , 134 , 130 , 0 ] , [ 254 , 254 , 243 , 230 , 196 , 177 , 153 , 140 , 133 , 130 , 129 , 0 ] ] , Si = [ 0 , 1 , 4 , 8 , 5 , 2 , 3 , 6 , 9 , 12 , 13 , 10 , 7 , 11 , 14 , 15 ] , Ci = u ( [ da , ua ] , "" ) ; c ( 4 , f ) ; var Mi = [ [ 0 , 0 , 0 , 0 ] , [ 1 , 0 , 0 , 0 ] , [ 0 , 1 , 0 , 0 ] , [ 1 , 1 , 0 , 0 ] , [ 0 , 0 , 1 , 0 ] , [ 1 , 0 , 1 , 0 ] , [ 0 , 1 , 1 , 0 ] , [ 1 , 1 , 1 , 0 ] , [ 0 , 0 , 0 , 1 ] , [ 1 , 0 , 0 , 1 ] , [ 0 , 1 , 0 , 1 ] , [ 1 , 1 , 0 , 1 ] , [ 0 , 0 , 1 , 1 ] , [ 1 , 0 , 1 , 1 ] , [ 0 , 1 , 1 , 1 ] , [ 1 , 1 , 1 , 1 ] ] , xi = 134480385 , Ai = 16 , Ei = - 227 , Ii = 482 , Ti = [ Oe , function ( e ) { return e } , function ( e , t , n ) { return t [ n + 0 ] } , function ( e , t , n ) { return t [ n + 1 ] } , function ( e , t , n ) { return t [ n - 1 ] } , function ( e , t , n ) { return Fe ( Fe ( e , t [ n + 1 ] ) , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( e , t [ n - 1 ] ) } , function ( e , t , n ) { return Fe ( e , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( t [ n - 1 ] , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( t [ n + 0 ] , t [ n + 1 ] ) } , function ( e , t , n ) { return Fe ( Fe ( e , t [ n - 1 ] ) , Fe ( t [ n + 0 ] , t [ n + 1 ] ) ) } , function ( e , t , n ) { return 0 >= Math . abs ( ( e >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) + ( Math . abs ( ( e >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) ) + ( Math . abs ( ( e >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) ) + ( Math . abs ( ( 255 & e ) - ( 255 & t [ n - 1 ] ) ) - Math . abs ( ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) ? t [ n + 0 ] : e } , function ( e , t , n ) { return ( Ne ( ( e >> 24 & 255 ) + ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) << 24 | Ne ( ( e >> 16 & 255 ) + ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) << 16 | Ne ( ( e >> 8 & 255 ) + ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) << 8 | Ne ( ( 255 & e ) + ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) >>> 0 } , function ( e , t , n ) { var a = t [ n - 1 ] ; return e = Fe ( e , t [ n + 0 ] ) , ( Re ( e >> 24 & 255 , a >> 24 & 255 ) << 24 | Re ( e >> 16 & 255 , a >> 16 & 255 ) << 16 | Re ( e >> 8 & 255 , a >> 8 & 255 ) << 8 | Re ( e >> 0 & 255 , a >> 0 & 255 ) ) >>> 0 } , Oe , Oe ] , Di = { Cc : f , Bc : f , Kc : f } , Pi = 16 , Fi = 16 , Ni = 16 , Ri = [ 2 , 3 , 7 ] , Oi = [ 3 , 3 , 11 ] , Ui = 0 , Li = 1 , Bi = 2 , ji = 3 , qi = 4 , Hi = [ xn + An , xn , xn , xn , 40 ] , Vi = 19 , zi = [ 17 , 18 , 0 , 1 , 2 , 3 , 4 , 5 , 16 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ] , Wi = 120 , Gi = [ 24 , 7 , 23 , 25 , 40 , 6 , 39 , 41 , 22 , 26 , 38 , 42 , 56 , 5 , 55 , 57 , 21 , 27 , 54 , 58 , 37 , 43 , 72 , 4 , 71 , 73 , 20 , 28 , 53 , 59 , 70 , 74 , 36 , 44 , 88 , 69 , 75 , 52 , 60 , 3 , 87 , 89 , 19 , 29 , 86 , 90 , 35 , 45 , 68 , 76 , 85 , 91 , 51 , 61 , 104 , 2 , 103 , 105 , 18 , 30 , 102 , 106 , 34 , 46 , 84 , 92 , 67 , 77 , 101 , 107 , 50 , 62 , 120 , 1 , 119 , 121 , 83 , 93 , 17 , 31 , 100 , 108 , 66 , 78 , 118 , 122 , 33 , 47 , 117 , 123 , 49 , 63 , 99 , 109 , 82 , 94 , 0 , 116 , 124 , 65 , 79 , 16 , 32 , 98 , 110 , 48 , 115 , 125 , 81 , 95 , 64 , 114 , 126 , 97 , 111 , 80 , 113 , 127 , 96 , 112 ] , Ki = 1 << Ai - 1 , Yi = c ( 256 , 0 ) , Zi = c ( 256 , 0 ) , Xi = c ( 256 , _ ) , Ji = c ( 256 , _ ) , Qi = c ( Ii - Ei , f ) , eo = c ( Ii - Ei , f ) , to = 0 , no = Array ( Xt ) , ao = [ function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Me , 3 ) } , gt , function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Ie , 3 ) } , ht , ft , _t , function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , xe , 2 ) } , gt , ht , ft , _t ] ; this . Hd = function ( e , t , n , a ) { return Ft ( Ut , e , t , n , a ) } , this . Id = function ( e , t , n , a ) { return Ft ( Lt , e , t , n , a ) } , this . Jd = function ( e , t , n , a ) { return Ft ( Ht , e , t , n , a ) } , this . Ed = function ( e , t , n , a ) { return Ft ( qt , e , t , n , a ) } , this . Fd = function ( e , t , n , a ) { return Ft ( Bt , e , t , n , a ) } , this . Gd = function ( e , t , n , a ) { return Ft ( jt , e , t , n , a ) } , this . WebPDecode = this . Dd = function ( t , n , a ) { var i = e ( un ) , o = "VP8StatusCode" ; return a == g ? tn : ( o = Nt ( t , [ 0 ] , [ n ] , a . input ) , o != Qt ? o == rn ? nn : o : ( i . j = a . j , i . Qa = a . Qa , o = Pt ( t , 0 , [ n ] , i ) ) ) } } } ( ) ; var _logTimer = ( new Date ) . getTime ( ) ; ! function ( e ) { function t ( ) { return { shortIndexes : { } , fullTexts : { } } } function n ( e ) { var t = "%" == e . charAt ( 0 ) ; return e = e . replace ( s , " " ) . replace ( r , "" ) , e = e . replace ( /[^A-Za-z0-9]/g , function ( e ) { return Config . LatinizeMap [ e ] || e } ) , e = e . toLowerCase ( ) , t && ( e = "%" + e ) , e } function a ( e ) { return e && e . toLowerCase ( ) || "" } function i ( e , t , a ) { if ( void 0 !== a . fullTexts [ e ] ) return ! 1 ; if ( t = n ( t ) , ! t . length ) return ! 1 ; var i = a . shortIndexes ; a . fullTexts [ e ] = t , angular . forEach ( t . split ( " " ) , function ( t ) { var n , a , o = Math . min ( t . length , 3 ) ; for ( a = 1 ; o >= a ; a ++ ) n = t . substr ( 0 , a ) , void 0 === i [ n ] ? i [ n ] = [ e ] : i [ n ] . push ( e ) } ) } function o ( e , t ) { var a = t . shortIndexes , i = t . fullTexts ; e = n ( e ) ; var o , s , r , l , c , d = e . split ( " " ) , u = ! 1 ; for ( s = 0 ; s < d . length ; s ++ ) { if ( o = a [ d [ s ] . substr ( 0 , 3 ) ] , ! o ) { u = [ ] ; break } ( u === ! 1 || u . length > o . length ) && ( u = o ) } for ( o = { } , r = 0 ; r < u . length ; r ++ ) { for ( c = ! 0 , l = i [ u [ r ] ] , s = 0 ; s < d . length ; s ++ ) if ( - 1 == l . indexOf ( d [ s ] ) ) { c = ! 1 ; break } c && ( o [ u [ r ] ] = ! 0 ) } return o } var s = /[`~!@#$%^&*()\-_=+\[\]\\|{}'";:\/?.>,<\s]+/g , r = /^\s+|\s$/g ; e . SearchIndexManager = { createIndex : t , indexObject : i , cleanSearchText : n , cleanUsername : a , search : o } } ( window ) , TLSerialization . prototype . cr
} var w = u . substr ( 1 ) , k = "" ; i . highlightUsername && i . highlightUsername . toLowerCase ( ) == w . toLowerCase ( ) && ( k = 'class="im_message_mymention"' ) , _ . push ( "<a " , k , l ? ' target="_blank" ' : "" , ' href="' , b . replace ( "{1}" , encodeURIComponent ( w ) ) , '">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityHashtag" : var b = ! i . noLinks && C [ r ] ; if ( ! b ) { p = ! 0 ; break } var $ = u . substr ( 1 ) ; _ . push ( "<a " , l ? ' target="_blank" ' : "" , 'href="' , b . replace ( "{1}" , encodeURIComponent ( $ ) ) , '">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityEmail" : if ( i . noLinks ) { p = ! 0 ; break } _ . push ( '<a href="' , encodeEntities ( "mailto:" + u ) , '" target="_blank">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityUrl" : case "messageEntityTextUrl" : if ( i . noLinks ) { p = ! 0 ; break } var g = d . url || u ; g . match ( /^https?:\/\//i ) || ( g = "http://" + g ) ; var S ; if ( "messageEntityTextUrl" == d . _ ) g = "tg://unsafe_url?url=" + encodeURIComponent ( g ) ; else if ( S = g . match ( /^https?:\/\/telegram\.me\/(.+)/ ) ) { var x = S [ 1 ] . split ( "/" ) ; switch ( x [ 0 ] ) { case "joinchat" : g = "tg://join?invite=" + x [ 1 ] ; break ; case "addstickers" : g = "tg://addstickers?set=" + x [ 1 ] ; break ; default : if ( ! x [ 1 ] ) { var A = x [ 0 ] . split ( "?" ) ; g = "tg://resolve?domain=" + A [ 0 ] + ( A [ 1 ] ? "&" + A [ 1 ] : "" ) } } } _ . push ( '<a href="' , encodeEntities ( g ) , '" target="_blank">' , s ( u , d . nested , i ) , "</a>" ) ; break ; case "messageEntityLinebreak" : _ . push ( i . noLinebreaks ? " " : "<br/>" ) ; break ; case "messageEntityEmoji" : _ . push ( '<span class="emoji emoji-' , d . coords . category , "-" , y * d . coords . column , "-" , y * d . coords . row , '" ' , 'title="' , d . title , '">' , ":" , d . title , ":</span>" ) , c = ! 0 ; break ; case "messageEntityBotCommand" : if ( i . noLinks || i . noCommands || l ) { p = ! 0 ; break } var E , I , T = u . substr ( 1 ) ; - 1 != ( I = T . indexOf ( "@" ) ) ? ( E = T . substr ( I + 1 ) , T = T . substr ( 0 , I ) ) : E = i . fromBot , _ . push ( '<a href="' , encodeEntities ( "tg://bot_command?command=" + encodeURIComponent ( T ) + ( E ? "&bot=" + encodeURIComponent ( E ) : "" ) ) , '">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityBold" : _ . push ( "<strong>" , s ( u , d . nested , i ) , "</strong>" ) ; break ; case "messageEntityItalic" : _ . push ( "<em>" , s ( u , d . nested , i ) , "</em>" ) ; break ; case "messageEntityCode" : _ . push ( "<code>" , encodeEntities ( u ) , "</code>" ) ; break ; case "messageEntityPre" : _ . push ( "<pre><code" , d . language ? ' class="language-' + encodeEntities ( d . language ) + '"' : "" , ">" , encodeEntities ( u ) , "</code></pre>" ) ; break ; default : p = ! 0 } v = d . offset + ( p ? 0 : d . length ) } if ( _ . push ( encodeEntities ( n . substr ( v ) ) ) , n = t ( _ . join ( "" ) ) , ! i . nested && ( c || i . hasNested ) ) { n = n . replace ( /\ufe0f|️|�|‍/g , "" , n ) ; var D = 18 == y ? "" : " emoji-w" + y ; n = n . replace ( /<span class="emoji emoji-(\d)-(\d+)-(\d+)"(.+?)<\/span>/g , '<span class="emoji ' + D + ' emoji-spritesheet-$1" style="background-position: -$2px -$3px;" $4</span>' ) } return e . trustAs ( "html" , n ) } function l ( e ) { for ( var t = e . length , n = e . split ( "(" ) . length - 1 , a = e . split ( ")" ) . length - 1 ; a > n && ")" === e . charAt ( t - 1 ) ; ) e = e . substr ( 0 , t - 1 ) , a -- , t -- ; return n > a && ( e = e . replace ( /\)+$/ , "" ) ) , e } function c ( e , t ) { if ( g ) return e ; if ( ! e || ! e . length ) return "" ; t = t || { } , e = e . replace ( /\ufe0f/g , "" , e ) ; for ( var n , a , i = e , e = [ ] ; n = i . match ( k ) ; ) e . push ( i . substr ( 0 , n . index ) ) , e . push ( n [ 8 ] ? ( d = u [ n [ 8 ] ] ) && ( a = p [ d ] [ 1 ] [ 0 ] ) ? ":" + a + ":" : n [ 0 ] : n [ 0 ] ) , i = i . substr ( n . index + n [ 0 ] . length ) ; return e . push ( i ) , e . join ( "" ) } var d , u = { } , p = Config . Emoji , m = 18 , g = - 1 != navigator . userAgent . search ( /OS X|iPhone|iPad|iOS|Android/i ) , h = "\\u0023\\u20E3|\\u00a9|\\u00ae|\\u203c|\\u2049|\\u2139|[\\u2194-\\u2199]|\\u21a9|\\u21aa|\\u231a|\\u231b|\\u23e9|[\\u23ea-\\u23ec]|\\u23f0|\\u24c2|\\u25aa|\\u25ab|\\u25b6|\\u2611|\\u2614|\\u26fd|\\u2705|\\u2709|[\\u2795-\\u2797]|\\u27a1|\\u27b0|\\u27bf|\\u2934|\\u2935|[\\u2b05-\\u2b07]|\\u2b1b|\\u2b1c|\\u2b50|\\u2b55|\\u3030|\\u303d|\\u3297|\\u3299|[\\uE000-\\uF8FF\\u270A-\\u2764\\u2122\\u25C0\\u25FB-\\u25FE\\u2615\\u263a\\u2648-\\u2653\\u2660-\\u2668\\u267B\\u267F\\u2693\\u261d\\u26A0-\\u26FA\\u2708\\u2702\\u2601\\u260E]|[\\u2600\\u26C4\\u26BE\\u23F3\\u2764]|\\uD83D[\\uDC00-\\uDFFF]|\\uD83C[\\uDDE8-\\uDDFA<EFBFBD> ]\\uD83C[\\uDDEA-\\uDDFA<EFBFBD> ]|[0-9]\\u20e3|\\uD83C[\\uDC00-\\uDFFF]" ; for ( d in p ) u [ p [ d ] [ 0 ] ] = d ; var f = " a - z \ \u00c0 - \ \u00d6 \ \u00d8 - \ \u00f6 \ \u00f8 - \ \u00ff \ \u0100 - \ \u024f \ \u0253 \ \u0254 \ \u0256 \ \u0257 \ \u0259 \ \u025b \ \u0263 \ \u0268 \ \u026f \ \u0272 \ \u0289 \ \u028b \ \u02bb \ \u0300 - \ \u036f \ \u1e00 - \ \u1eff \ \u0400 - \ \u04ff \ \u0500 - \ \u0527 \ \u2de0 - \ \u2dff \ \ua640 - \ \ua69f \ \u0591 - \ \u05bf \ \u05c1 - \ \ u05c
new Error ( "Bad server salt for invalid message" ) ; this . applyServerSalt ( e . new _server _salt ) , this . pushResend ( e . bad _msg _id ) , this . ackMessage ( n ) ; break ; case "bad_msg_notification" : console . log ( dT ( ) , "Bad msg notification" , e ) ; var r = this . sentMessages [ e . bad _msg _id ] ; if ( ! r || r . seq _no != e . bad _msg _seqno ) throw console . log ( e . bad _msg _id , e . bad _msg _seqno ) , new Error ( "Bad msg notification for invalid message" ) ; if ( 16 == e . error _code || 17 == e . error _code ) { t . applyServerTime ( bigStringInt ( n ) . shiftRight ( 32 ) . toString ( 10 ) ) && ( console . log ( dT ( ) , "Update session" ) , this . updateSession ( ) ) ; var l = this . updateSentMessage ( e . bad _msg _id ) ; this . pushResend ( l . msg _id ) , this . ackMessage ( n ) } break ; case "message" : this . serverMessages . push ( e . msg _id ) , this . processMessage ( e . body , e . msg _id , i ) ; break ; case "new_session_created" : this . ackMessage ( n ) , this . processMessageAck ( e . first _msg _id ) , this . applyServerSalt ( e . server _salt ) ; var c = this ; a . get ( "dc" ) . then ( function ( t ) { t == c . dcID && ! c . upload && g && g ( e ) } ) ; break ; case "msgs_ack" : for ( var s = 0 ; s < e . msg _ids . length ; s ++ ) this . processMessageAck ( e . msg _ids [ s ] ) ; break ; case "msg_detailed_info" : if ( ! this . sentMessages [ e . msg _id ] ) { this . ackMessage ( e . answer _msg _id ) ; break } case "msg_new_detailed_info" : this . reqResendMessage ( e . answer _msg _id ) ; break ; case "msgs_state_info" : if ( this . ackMessage ( e . answer _msg _id ) , this . lastResendReq && this . lastResendReq . req _msg _id == e . req _msg _id && this . pendingResends . length ) { var s , d , u ; for ( s = 0 ; s < this . lastResendReq . resend _msg _ids . length ; s ++ ) d = this . lastResendReq . resend _msg _ids [ s ] , u = this . pendingResends . indexOf ( d ) , - 1 != u && this . pendingResends . splice ( u , 1 ) } break ; case "rpc_result" : this . ackMessage ( n ) ; var p = e . req _msg _id , r = this . sentMessages [ p ] ; if ( this . processMessageAck ( p ) , r ) { var m = r . deferred ; if ( "rpc_error" == e . result . _ ) { var h = this . processError ( e . result ) ; console . log ( dT ( ) , "Rpc error" , h ) , m && m . reject ( h ) } else { if ( m ) { if ( Config . Modes . debug ) console . log ( dT ( ) , "Rpc response" , e . result ) ; else { var f = e . result . _ ; f || ( f = e . result . length > 5 ? "[.." + e . result . length + "..]" : e . result ) , console . log ( dT ( ) , "Rpc response" , f ) } r . deferred . resolve ( e . result ) } r . isAPI && ( this . connectionInited = ! 0 ) } delete this . sentMessages [ p ] } break ; default : this . ackMessage ( n ) , g && g ( e ) } } , { getNetworker : function ( e , t , n , a ) { return new u ( e , t , n , a ) } , setUpdatesProcessor : function ( e ) { g = e } , stopAll : m , startAll : p } } ] ) , angular . module ( "izhukov.mtproto.wrapper" , [ "izhukov.utils" , "izhukov.mtproto" ] ) . factory ( "MtpApiManager" , [ "Storage" , "MtpAuthorizer" , "MtpNetworkerFactory" , "MtpSingleInstanceService" , "AppRuntimeManager" , "ErrorService" , "qSync" , "$rootScope" , "$q" , "TelegramMeWebService" , function ( e , t , n , a , i , o , s , r , l , c ) { function d ( e ) { _ !== e && ( _ = e , c . setAuthorized ( _ ) ) } function u ( t , n ) { var a = angular . extend ( { dcID : t } , n ) ; e . set ( { dc : t , user _auth : a } ) , d ( ! 0 ) , r . $broadcast ( "user_auth" , a ) , w = t } function p ( ) { for ( var t = [ ] , n = 1 ; 5 >= n ; n ++ ) t . push ( "dc" + n + "_auth_key" ) ; return e . get . apply ( e , t ) . then ( function ( n ) { for ( var a = [ ] , i = 0 ; i < n . length ; i ++ ) n [ i ] && a . push ( g ( "auth.logOut" , { } , { dcID : i + 1 } ) ) ; return l . all ( a ) . then ( function ( ) { e . remove ( "dc" , "user_auth" ) , w = ! 1 , d ( ! 1 ) } , function ( n ) { e . remove . apply ( t ) , e . remove ( "dc" , "user_auth" ) , w = ! 1 , n . handled = ! 0 , d ( ! 1 ) } ) } ) } function m ( a , i ) { i = i || { } ; var o = i . fileUpload || i . fileDownload ? y : v ; if ( ! a ) throw new Exception ( "get Networker without dcID" ) ; if ( void 0 !== o [ a ] ) return s . when ( o [ a ] ) ; var r = "dc" + a + "_auth_key" , c = "dc" + a + "_server_salt" ; return e . get ( r , c ) . then ( function ( s ) { if ( void 0 !== o [ a ] ) return o [ a ] ; var d = s [ 0 ] , u = s [ 1 ] ; if ( d && 512 == d . length ) { var p = bytesFromHex ( d ) , m = bytesFromHex ( u ) ; return o [ a ] = n . getNetworker ( a , p , m , i ) } return i . createNetworker ? t . auth ( a ) . then ( function ( t ) { var s = { } ; return s [ r ] = bytesToHex ( t . authKey ) , s [ c ] = bytesToHex ( t . serverSalt ) , e . set ( s ) , o [ a ] = n . getNetworker ( a , t . authKey , t . serverSalt , i ) } , function ( e ) { return console . log ( "Get networker error" , e , e . stack ) , l . reject ( e ) } ) : l . reject ( { type : "AUTH_KEY_EMPTY" , code : 401 } ) } ) } function g ( t , n , a ) { a = a || { } ; var s , r , c = l . defer ( ) , u = function ( e ) { e ? angular . isObject ( e ) || ( e = { message : e } ) : e = { type : "ERROR_EMPTY" } , c . reject ( e ) , a . noErrorBox || ( e . input = t , e . stack = e . originalError && e . originalError . stack || e . stack || ( new Error ) . stack , setTimeout ( function ( ) { e . handled || ( 401 == e . code ? p ( ) [ "finally" ] ( function ( ) { "http:" != location . protocol || Config . Modes . http || - 1 == Config . App . domains . indexOf ( location . hostname )
} } function u ( e ) { return f [ e ] || { _ : "photoEmpty" } } function p ( e , t ) { t = t || { } ; var n = angular . copy ( f [ e ] ) || { _ : "photoEmpty" } , a = t . website ? 100 : Math . min ( _ - 80 , Config . Mobile ? 210 : 260 ) , i = t . website ? 100 : Math . min ( v - 100 , Config . Mobile ? 210 : 260 ) , o = l ( n , a , i ) , s = { placeholder : "img/placeholders/PhotoThumbConversation.gif" , width : a , height : i } ; if ( t . website && Config . Mobile && ( a = 50 , i = 50 ) , o && "photoSizeEmpty" != o . _ ) { var r = calcImageInBox ( o . w , o . h , a , i ) ; s . width = r . w , s . height = r . h , s . location = o . location , s . size = o . size } else s . width = 100 , s . height = 100 ; return n . thumb = s , n } function m ( e ) { var n = p ( e ) , a = $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 32 ) , i = $ ( t ) . height ( ) - ( Config . Mobile ? 0 : 116 ) ; ! Config . Mobile && a > 800 && ( a -= 208 ) ; var o = l ( n , a , i ) , s = { placeholder : "img/placeholders/PhotoThumbModal.gif" } ; if ( s . width = a , s . height = i , o && "photoSizeEmpty" != o . _ ) { var r = calcImageInBox ( o . w , o . h , a , i , ! 0 ) ; s . width = r . w , s . height = r . h , s . modalWidth = Math . max ( s . width , Math . min ( 400 , a ) ) , s . location = o . location , s . size = o . size } return n . full = s , n } function g ( t , a ) { if ( ! t || "0" === t ) return ! 1 ; var i = n . $new ( ! 0 ) ; i . photoID = t ; var o = "PhotoModalController" ; a && a . p > 0 ? ( o = "UserpicModalController" , i . userID = a . p ) : a && a . p < 0 ? ( o = "ChatpicModalController" , i . chatID = - a . p ) : a && a . m > 0 && ( i . messageID = a . m , a . w && ( i . webpageID = a . w ) ) ; e . open ( { templateUrl : templateUrl ( "photo_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : o , scope : i , windowClass : "photo_modal_window" } ) } function h ( e ) { var n = f [ e ] , a = "jpg" , o = "image/jpeg" , r = "photo" + e + "." + a , c = Math . max ( screen . width || 0 , $ ( window ) . width ( ) - 36 , 800 ) , d = Math . max ( screen . height || 0 , $ ( t ) . height ( ) - 150 , 800 ) , u = l ( n , c , d ) , p = { _ : "inputFileLocation" , volume _id : u . location . volume _id , local _id : u . location . local _id , secret : u . location . secret } ; s . chooseSave ( r , a , o ) . then ( function ( e ) { e && i . downloadFile ( u . location . dc _id , p , u . size , { mime : o , toFileEntry : e } ) . then ( function ( ) { } , function ( e ) { console . log ( "photo download failed" , e ) } ) } , function ( ) { var e = i . getCachedFile ( p ) ; return e ? s . download ( e , o , r ) : void i . downloadFile ( u . location . dc _id , p , u . size , { mime : o } ) . then ( function ( e ) { s . download ( e , o , r ) } , function ( e ) { console . log ( "photo download failed" , e ) } ) } ) } var f = { } , _ = $ ( window ) . width ( ) , v = $ ( window ) . height ( ) ; return n . preloadPhoto = d , n . openPhoto = g , { savePhoto : r , preloadPhoto : d , getUserPhotos : c , getPhoto : u , choosePhotoSize : l , wrapForHistory : p , wrapForFull : m , openPhoto : g , downloadPhoto : h } } ] ) . service ( "AppWebPagesManager" , [ "$modal" , "$sce" , "$window" , "$rootScope" , "MtpApiManager" , "AppPhotosManager" , "AppDocsManager" , "RichTextProcessor" , function ( e , t , n , a , i , o , s , r ) { function l ( e , t , n ) { e . photo && "photo" === e . photo . _ ? o . savePhoto ( e . photo , n ) : delete e . photo , e . document && "document" === e . document . _ ? s . saveDoc ( e . document , n ) : delete e . document , e . rTitle = r . wrapRichText ( e . title || e . author , { noLinks : ! 0 , noLinebreaks : ! 0 } ) ; var i = "" ; if ( "GitHub" == e . site _name ) { var l = e . url . match ( /(https?:\/\/github\.com\/[^\/]+\/[^\/]+)/ ) ; l && ( i = l [ 0 ] + "/issues/{1}" ) } if ( e . rDescription = r . wrapRichText ( e . description , { contextSite : e . site _name || "external" , contextHashtag : i } ) , t && ( void 0 === m [ e . id ] && ( m [ e . id ] = { } ) , m [ e . id ] [ t ] = ! 0 , p [ e . id ] = e ) , void 0 === p [ e . id ] ? p [ e . id ] = e : safeReplaceObject ( p [ e . id ] , e ) , ! t && void 0 !== m [ e . id ] ) { var c = [ ] ; angular . forEach ( m [ e . id ] , function ( e , t ) { c . push ( t ) } ) , a . $broadcast ( "webpage_updated" , { id : e . id , msgs : c } ) } } function c ( t , n ) { var i = a . $new ( ! 0 ) ; i . webpageID = t , i . messageID = n , e . open ( { templateUrl : templateUrl ( "embed_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : "EmbedModalController" , scope : i , windowClass : "photo_modal_window" } ) } function d ( e ) { var t = angular . copy ( p [ e ] ) || { _ : "webPageEmpty" } ; return t . photo && t . photo . id && ( t . photo = o . wrapForHistory ( t . photo . id , { website : "photo" != t . type && "video" != t . type } ) ) , t . document && t . document . id && ( t . document = s . wrapForHistory ( t . document . id ) ) , t } function u ( e ) { var a = d ( e ) ; if ( ! a . embed _url ) return a ; var i = $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 10 ) , o = $ ( n ) . height ( ) - ( Config . Mobile ? 92 : 150 ) ; ! Config . Mobile && i > 800 && ( i -= 208 ) ; var s = { width : i , height : o } ; if ( a . embed _width && a . embed _height ) { var r = calcImageInBox ( a . embed _width , a . embed _height , i , o ) ; s . width = r . w , s . height = r . h } else s . height = s . width = Math . min ( i , o ) ; var l = Config . Modes . chrome _packed ? "webview" : "iframe" , c = "iframe" != a . embed _type ? a . embed _type || "text/html" : "text/html" , u = "<" + l + ' src="' + encodeEntities (
} } ] ) . service ( "HttpsMigrateService" , [ "ErrorService" , "Storage" , function ( e , t ) { function n ( ) { t . get ( "https_dismiss" ) . then ( function ( n ) { ( ! n || tsNow ( ) > n + 432e5 ) && e . confirm ( { type : "MIGRATE_TO_HTTPS" } ) . then ( function ( ) { var e ; try { e = window . open ( "https://web.telegram.org" , "_blank" ) } catch ( t ) { } e || ( location . href = "https://web.telegram.org" ) } , function ( ) { t . set ( { https _dismiss : tsNow ( ) } ) } ) } ) } function a ( ) { i || "http:" != location . protocol || Config . Modes . http || - 1 == Config . App . domains . indexOf ( location . hostname ) || ( i = ! 0 , setTimeout ( n , 12e4 ) ) } var i = ! 1 ; return { start : a , check : n } } ] ) . service ( "LayoutSwitchService" , [ "ErrorService" , "Storage" , "AppRuntimeManager" , "$window" , function ( e , t , n , a ) { function i ( e ) { ConfigStorage . noPrefix ( ) , t . set ( { layout _selected : e ? "mobile" : "desktop" , layout _width : $ ( window ) . width ( ) } ) . then ( function ( ) { n . reload ( ) } ) } function o ( n ) { if ( ! l ) { var a = $ ( window ) . width ( ) , o = 600 > a ; ! a || ! n && ( Config . Navigator . mobile ? 800 >= a : o ) || o != Config . Mobile && ( ConfigStorage . noPrefix ( ) , t . get ( "layout_width" ) . then ( function ( n ) { return a == n ? ! 1 : ( l = ! 0 , void e . confirm ( { type : o ? "SWITCH_MOBILE_VERSION" : "SWITCH_DESKTOP_VERSION" } ) . then ( function ( ) { i ( o ) } , function ( ) { ConfigStorage . noPrefix ( ) , t . set ( { layout _width : a } ) , l = ! 1 } ) ) } ) ) } } function s ( ) { r || Config . Navigator . mobile || ( r = ! 0 , o ( ) , $ ( a ) . on ( "resize" , o ) ) } var r = ! 1 , l = ! 1 ; return { start : s , switchLayout : i } } ] ) . service ( "TelegramMeWebService" , [ "Storage" , function ( e ) { function t ( t ) { return n ? ! 1 : void e . get ( "tgme_sync" ) . then ( function ( n ) { var a = tsNow ( ! 0 ) ; if ( t && n && n . canRedirect == t && n . ts + 86400 > a ) return ! 1 ; e . set ( { tgme _sync : { canRedirect : t , ts : a } } ) ; var i = $ ( "<script>" ) . appendTo ( "body" ) . on ( "load error" , function ( ) { i . remove ( ) } ) . attr ( "src" , "//telegram.me/_websync_?authed=" + ( t ? "1" : "0" ) ) } ) } var n = Config . Modes . test || - 1 == Config . App . domains . indexOf ( location . hostname ) || "http:" != location . protocol && "https:" != location . protocol || "https:" == location . protocol && "web.telegram.org" != location . hostname ; return { setAuthorized : t } } ] ) . service ( "LocationParamsService" , [ "$rootScope" , "$routeParams" , "AppPeersManager" , "AppUsersManager" , "AppMessagesManager" , "PeersSelectService" , "AppStickersManager" , "ErrorService" , function ( e , t , n , a , i , o , s , r ) { function l ( ) { var e = t . tgaddr ; if ( e ) { try { e = decodeURIComponent ( e ) } catch ( n ) { } var a = e . match ( m ) ; a && c ( a [ 3 ] ) } } function c ( t , l ) { var c ; if ( c = t . match ( /^resolve\?domain=(.+?)(?:&(start|startgroup)=(.+))?$/ ) ) return n . resolveUsername ( c [ 1 ] ) . then ( function ( t ) { return t > 0 && a . isBot ( t ) && "startgroup" == c [ 2 ] ? ( o . selectPeer ( { confirm _type : "INVITE_TO_GROUP" , noUsers : ! 0 } ) . then ( function ( a ) { var o = n . getPeerID ( a ) , s = 0 > o ? - o : 0 ; i . startBot ( t , s , c [ 3 ] ) . then ( function ( ) { e . $broadcast ( "history_focus" , { peerString : a } ) } ) } ) , ! 0 ) : void e . $broadcast ( "history_focus" , { peerString : n . getPeerString ( t ) , startParam : c [ 3 ] } ) } ) , ! 0 ; if ( c = t . match ( /^join\?invite=(.+)$/ ) ) return i . openChatInviteLink ( c [ 1 ] ) , ! 0 ; if ( c = t . match ( /^addstickers\?set=(.+)$/ ) ) return s . openStickersetLink ( c [ 1 ] ) , ! 0 ; if ( c = t . match ( /^msg_url\?url=([^&]+)(?:&text=(.*))?$/ ) ) return o . selectPeer ( ) . then ( function ( e ) { var t = decodeURIComponent ( c [ 1 ] ) , n = c [ 2 ] ? decodeURIComponent ( c [ 2 ] ) : "" ; p ( t , n ) } ) , ! 0 ; if ( l && ( c = t . match ( /^unsafe_url\?url=([^&]+)/ ) ) ) { var t = decodeURIComponent ( c [ 1 ] ) ; return r . confirm ( { type : "JUMP_EXT_URL" , url : t } ) . then ( function ( ) { window . open ( t , "_blank" ) } ) , ! 0 } if ( c = t . match ( /^search_hashtag\?hashtag=(.+?)$/ ) ) return e . $broadcast ( "dialogs_search" , { query : "#" + decodeURIComponent ( c [ 1 ] ) } ) , Config . Mobile && e . $broadcast ( "history_focus" , { peerString : "" } ) , ! 0 ; if ( l && ( c = t . match ( /^bot_command\?command=(.+?)(?:&bot=(.+))?$/ ) ) ) { var d = e . selectedPeerID , u = "/" + c [ 1 ] ; return 0 > d && c [ 2 ] && ( u += "@" + c [ 2 ] ) , i . sendText ( d , u ) , e . $broadcast ( "history_focus" , { peerString : n . getPeerString ( d ) } ) , ! 0 } return ! 1 } function d ( t , s ) { if ( console . log ( dT ( ) , "Received activity" , t , s ) , "share" == t && s . url ) p ( s . url , "" ) ; else if ( "view" == t && s . url ) { var l = s . url . match ( m ) ; l && c ( l [ 3 ] ) } else if ( "webrtc-call" == t && s . contact ) { var d = s . contact , u = [ ] ; if ( void 0 != d . tel ) for ( var g = 0 ; g < d . tel . length ; g ++ ) u . push ( d . tel [ g ] . value ) ; var h = ( d . givenName || [ ] ) . join ( " " ) , f = ( d . familyName || [ ] ) . join ( " " ) ; u . length && a . importContact ( u [ 0 ] , h , f ) . then ( function ( t ) { if ( t ) { var a = n . getPeerString ( t ) ; e . $broadcast ( "history_focus" , { peerString : a } ) } else r . show ( { error : { code : 404 , type : "USER_NOT_USING_TELEGRAM" } } ) } ) } else "share" === t && s
z = ! 0 , e . $broadcast ( "messages_unread_after" ) ) : n ( function ( ) { l . readHistory ( e . curDialog . peerID ) } ) , w ( ) , k ( ) ) } } ) , e . $on ( "history_multiappend" , function ( t , a ) { var o = ! 1 , s = ! 1 , r = i . idle . isIDLE ; angular . forEach ( a , function ( t , a ) { var i = v ( a ) ; if ( i ) { var c = a == e . curDialog . peerID , d = i . messages . length , u = t . length ; if ( c ) { if ( e . historyFilter . mediaType || e . historyState . skipped ) return void ( e . historyState . missedCount += u ) ; delete e . state . empty } if ( ( ! c || r ) && d > ( u > 10 ? 10 : 100 ) ) return console . warn ( dT ( ) , "Drop too many messages" , u , d , r , c , a ) , void ( c ? ( Y = i . messages [ d - 1 ] . mid , e . historyState . skipped = G = Y > 0 , G && ( oe = a , e . $broadcast ( "ui_history_append" ) ) ) : y ( a ) ) ; var p , m , g , h = ! 1 , f = ! 1 , m = i . messages [ i . messages . length - 1 ] , _ = ! m || ! m . pFlags . unread ; for ( g = 0 ; u > g ; g ++ ) p = t [ g ] , K > p || - 1 !== i . ids . indexOf ( p ) || ( m = l . wrapForHistory ( p ) , i . messages . push ( m ) , i . ids . push ( p ) , ! f && r && ( m . pFlags . unread && ! m . pFlags . out && _ ? f = p : _ = ! m . pFlags . unread ) , ! h && m . pFlags . out && ( h = ! 0 ) ) ; l . regroupWrappedHistory ( i . messages , - u - 2 ) && ( o = ! 0 ) , c && ( e . historyState . typing . length && e . historyState . typing . splice ( 0 , e . historyState . typing . length ) , e . $broadcast ( "ui_history_append_new" , { idleScroll : z && ! h && r } ) , r ? f && ( e . historyUnreadAfter = f , z = ! 0 , s = ! 0 ) : n ( function ( ) { l . readHistory ( e . curDialog . peerID ) } ) , w ( ) , k ( ) ) } } ) , o && e . $broadcast ( "messages_regroup" ) , s && e . $broadcast ( "messages_unread_after" ) } ) , e . $on ( "history_delete" , function ( t , n ) { var a = v ( n . peerID ) ; if ( a ) { var i , o = [ ] ; for ( i = 0 ; i < a . messages . length ; i ++ ) n . msgs [ a . messages [ i ] . mid ] || o . push ( a . messages [ i ] ) ; a . messages = o , l . regroupWrappedHistory ( a . messages ) , e . $broadcast ( "messages_regroup" ) , n . peerID == e . curDialog . peerID && ( e . state . empty = ! o . length , w ( ) ) } } ) , e . $on ( "dialog_flush" , function ( t , n ) { var a = v ( n . peerID ) ; a && ( a . messages = [ ] , a . ids = [ ] , n . peerID == e . curDialog . peerID && ( e . state . empty = ! 0 , w ( ) ) ) } ) , e . $on ( "history_focus" , function ( t , n ) { e . historyFilter . mediaType && B ( ) } ) , e . $on ( "apiUpdate" , function ( t , a ) { switch ( a . _ ) { case "updateUserTyping" : case "updateChatUserTyping" : s . forceUserOnline ( a . user _id ) , s . hasUser ( a . user _id ) && e . curDialog . peerID == ( "updateUserTyping" == a . _ ? a . user _id : - a . chat _id ) && ( - 1 == e . historyState . typing . indexOf ( a . user _id ) && e . historyState . typing . push ( a . user _id ) , n . cancel ( se [ a . user _id ] ) , se [ a . user _id ] = n ( function ( ) { var t = e . historyState . typing . indexOf ( a . user _id ) ; - 1 !== t && e . historyState . typing . splice ( t , 1 ) } , 6e3 ) ) } } ) , e . $on ( "history_need_less" , C ) , e . $on ( "history_need_more" , M ) , i . $watch ( "idle.isIDLE" , function ( t ) { t || ! e . curDialog || ! e . curDialog . peerID || e . historyFilter . mediaType || e . historyState . skipped || l . readHistory ( e . curDialog . peerID ) , t || ( z = ! 1 , oe && oe == e . curDialog . peerID && ( x ( ) , oe = ! 1 ) ) } ) } ] ) . controller ( "AppImPanelController" , [ "$scope" , function ( e ) { e . $on ( "user_update" , angular . noop ) } ] ) . controller ( "AppImSendController" , [ "$scope" , "$timeout" , "MtpApiManager" , "Storage" , "AppProfileManager" , "AppChatsManager" , "AppUsersManager" , "AppPeersManager" , "AppDocsManager" , "AppMessagesManager" , "MtpApiFileManager" , "RichTextProcessor" , function ( e , t , n , a , i , o , s , r , l , c , d , u ) { function p ( n ) { return e . $broadcast ( "ui_message_before_send" ) , t ( function ( ) { var t = e . draftMessage . text ; if ( angular . isString ( t ) && t . length > 0 ) { t = t . replace ( /:([a-z0-9\-\+\*_]+?):/gi , function ( e , t ) { var n = EmojiHelper . shortcuts [ t ] ; return void 0 !== n ? EmojiHelper . emojis [ n ] [ 0 ] : e } ) ; var n = { replyToMsgID : e . draftMessage . replyToMessage && e . draftMessage . replyToMessage . mid } ; do c . sendText ( e . curDialog . peerID , t . substr ( 0 , 4096 ) , n ) , t = t . substr ( 4096 ) ; while ( t . length ) } b ( ) , I == e . curDialog . peer && ( I = ! 1 ) , h ( ) , e . $broadcast ( "ui_message_send" ) } ) , cancelEvent ( n ) } function m ( ) { var t = e . curDialog . peerID ; return ! t || t > 0 ? ( safeReplaceObject ( e . mentions , { } ) , void e . $broadcast ( "mentions_update" ) ) : void i . getChatFull ( - t ) . then ( function ( t ) { var n = ( t . participants || { } ) . participants || [ ] , a = [ ] , i = SearchIndexManager . createIndex ( ) ; angular . forEach ( n , function ( e ) { var t = s . getUser ( e . user _id ) ; t . username && ( a . push ( t ) , SearchIndexManager . indexObject ( t . id , s . getUserSearchText ( t . id ) , i ) ) } ) , safeReplaceObject ( e . mentions , { users : a , index : i } ) , e . $broadcast ( "mentions_update" ) } ) } function g ( ) { var t = e . curDialog . peerID ; return t ? void i . getPeerBots ( t ) . then ( function ( n ) { if ( ! n . length ) return safeReplaceObject ( e . commands , { } ) , void e . $broadcast ( "mentions_update" ) ; var a = 0 > t , i = [ ] , o = SearchIndexManager . createIndex ( ) ; angular . forEach ( n , fun
last _name : e . profile . last _name || "" } ) . then ( function ( a ) { e . error = { } , n . saveApiUser ( a ) , t . close ( ) } , function ( n ) { switch ( n . type ) { case "FIRSTNAME_INVALID" : e . error = { field : "first_name" } , n . handled = ! 0 ; break ; case "LASTNAME_INVALID" : e . error = { field : "last_name" } , n . handled = ! 0 ; break ; case "NAME_NOT_MODIFIED" : n . handled = ! 0 , t . close ( ) } } ) [ "finally" ] ( function ( ) { delete e . profile . updating } ) } } ] ) . controller ( "UsernameEditModalController" , [ "$scope" , "$modalInstance" , "AppUsersManager" , "MtpApiManager" , function ( e , t , n , a ) { e . profile = { } , e . error = { } , a . getUserID ( ) . then ( function ( t ) { e . profile = angular . copy ( n . getUser ( t ) ) } ) , e . updateUsername = function ( ) { e . profile . updating = ! 0 , a . invokeApi ( "account.updateUsername" , { username : e . profile . username || "" } ) . then ( function ( a ) { e . checked = { } , n . saveApiUser ( a ) , t . close ( ) } , function ( e ) { "USERNAME_NOT_MODIFIED" == e . type && ( e . handled = ! 0 , t . close ( ) ) } ) [ "finally" ] ( function ( ) { delete e . profile . updating } ) } , e . $watch ( "profile.username" , function ( t ) { return t && t . length ? void a . invokeApi ( "account.checkUsername" , { username : t || "" } ) . then ( function ( n ) { e . profile . username == t && ( e . checked = n ? { success : ! 0 } : { error : ! 0 } ) } , function ( n ) { if ( e . profile . username == t ) switch ( n . type ) { case "USERNAME_INVALID" : e . checked = { error : ! 0 } , n . handled = ! 0 } } ) : void ( e . checked = { } ) } ) } ] ) . controller ( "SessionsListModalController" , [ "$scope" , "$q" , "$timeout" , "_" , "MtpApiManager" , "ErrorService" , "$modalInstance" , function ( e , t , n , a , i , o , s ) { function r ( ) { n . cancel ( l ) , i . invokeApi ( "account.getAuthorizations" ) . then ( function ( t ) { e . sessionsLoaded = ! 0 , e . authorizations = t . authorizations ; for ( var a , i = 0 , o = e . authorizations . length ; o > i ; i ++ ) a = e . authorizations [ i ] , a . current = 1 == ( 1 & a . flags ) ; e . authorizations . sort ( function ( e , t ) { return e . current ? - 1 : t . current ? 1 : t . date _active - e . date _active } ) , c || ( l = n ( r , 5e3 ) ) } ) } e . slice = { limit : 20 , limitDelta : 20 } ; var l = ! 1 , c = ! 1 ; e . terminateSession = function ( e ) { o . confirm ( { type : "TERMINATE_SESSION" } ) . then ( function ( ) { i . invokeApi ( "account.resetAuthorization" , { hash : e } ) . then ( r ) } ) } , e . terminateAllSessions = function ( ) { o . confirm ( { type : "TERMINATE_SESSIONS" } ) . then ( function ( ) { i . invokeApi ( "auth.resetAuthorizations" , { } ) } ) } , r ( ) , e . $on ( "apiUpdate" , function ( e , t ) { "updateNewAuthorization" == t . _ && r ( ) } ) , e . $on ( "$destroy" , function ( ) { n . cancel ( l ) , c = ! 0 } ) } ] ) . controller ( "PasswordUpdateModalController" , [ "$scope" , "$q" , "_" , "PasswordManager" , "MtpApiManager" , "ErrorService" , "$modalInstance" , function ( e , t , n , a , i , o , s ) { switch ( e . passwordSettings = { } , e . updatePassword = function ( ) { delete e . passwordSettings . error _field ; var i ; if ( "disable" == e . action ) i = t . when ( ) ; else { if ( ! e . passwordSettings . new _password ) return e . passwordSettings . error _field = "new_password" , e . $broadcast ( "new_password_focus" ) , ! 1 ; if ( e . passwordSettings . new _password != e . passwordSettings . confirm _password ) return e . passwordSettings . error _field = "confirm_password" , e . $broadcast ( "confirm_password_focus" ) , ! 1 ; i = e . passwordSettings . email ? t . when ( ) : o . confirm ( { type : "RECOVERY_EMAIL_EMPTY" } ) } e . passwordSettings . loading = ! 0 , i . then ( function ( ) { a . updateSettings ( e . password , { cur _password : e . passwordSettings . cur _password || "" , new _password : e . passwordSettings . new _password , email : e . passwordSettings . email , hint : e . passwordSettings . hint } ) . then ( function ( t ) { delete e . passwordSettings . loading , s . close ( ! 0 ) , "disable" == e . action ? o . alert ( n ( "error_modal_password_disabled_title_raw" ) , n ( "error_modal_password_disabled_descripion_raw" ) ) : o . alert ( n ( "error_modal_password_success_title_raw" ) , n ( "error_modal_password_success_descripion_raw" ) ) } , function ( t ) { switch ( t . type ) { case "PASSWORD_HASH_INVALID" : case "NEW_PASSWORD_BAD" : e . passwordSettings . error _field = "cur_password" , t . handled = ! 0 , e . $broadcast ( "cur_password_focus" ) ; break ; case "NEW_PASSWORD_BAD" : e . passwordSettings . error _field = "new_password" , t . handled = ! 0 ; break ; case "EMAIL_INVALID" : e . passwordSettings . error _field = "email" , t . handled = ! 0 ; break ; case "EMAIL_UNCONFIRMED" : o . alert ( n ( "error_modal_email_unconfirmed_title_raw" ) , n ( "error_modal_email_unconfirmed_descripion_raw" ) ) , s . close ( ! 0 ) , t . handled = ! 0 } delete e . passwordSettings . loading } ) } ) } , e . action ) { case "disable" : e . passwordSettings . new _password = "" ; break ; case "create" : onContentLoaded ( function ( ) { e . $broadcast ( "new_password_focus" ) } ) } e . $watch ( "passwordSettings.new_password" , function ( t ) { var n = t && t . lengt
d . savePhoto ( e . action . photo , r ) , i && ( e . action . _ = "messageActionChannelEditPhoto" ) ; break ; case "messageActionChatEditTitle" : i && ( e . action . _ = "messageActionChannelEditTitle" ) ; break ; case "messageActionChatDeletePhoto" : i && ( e . action . _ = "messageActionChannelDeletePhoto" ) ; break ; case "messageActionChatAddUser" : 1 == e . action . users . length ? ( e . action . user _id = e . action . users [ 0 ] , e . fromID == e . action . user _id && ( e . action . _ = "messageActionChatReturn" ) ) : e . action . users . length > 1 && ( e . action . _ = "messageActionChatAddUsers" ) ; break ; case "messageActionChatDeleteUser" : e . fromID == e . action . user _id && ( e . action . _ = "messageActionChatLeave" ) ; break ; case "messageActionChannelMigrateFrom" : m = - e . action . chat _id , f = - a ; break ; case "messageActionChatMigrateTo" : m = - a , f = - e . action . channel _id } m && f && ! Xe [ m ] && ! Je [ f ] && L ( m , f ) } if ( e . message && e . message . length ) { var _ = v . parseEntities ( e . message ) , y = e . entities || [ ] ; e . totalEntities = v . mergeEntities ( _ , y , ! e . pending ) } } } ) } function J ( e , n , a ) { if ( angular . isString ( n ) && n . length ) { a = a || { } ; var i , o = Te -- , l = [ nextRandomInt ( 4294967295 ) , nextRandomInt ( 4294967295 ) ] , d = bigint ( l [ 0 ] ) . shiftLeft ( 32 ) . add ( bigint ( l [ 1 ] ) ) . toString ( ) , u = Ce [ e ] , p = 0 , m = { } , g = a . replyToMsgID , h = c . isChannel ( e ) , _ = h && c . isMegagroup ( e ) , y = h && ! _ ? ! 0 : ! 1 , b = [ ] ; n = v . parseMarkdown ( n , b ) , void 0 === u && ( u = Ce [ e ] = { count : null , history : [ ] , pending : [ ] } ) ; var w = r . getSelf ( ) . id ; e != w && ( p |= 2 , m . out = ! 0 , h || r . isBot ( e ) || ( p |= 1 , m . unread = ! 0 ) ) , g && ( p |= 8 ) , y ? w = 0 : p |= 256 , i = { _ : "message" , id : o , from _id : w , to _id : c . getOutputPeer ( e ) , flags : p , pFlags : m , date : tsNow ( ! 0 ) + je , message : n , random _id : d , reply _to _msg _id : g , entities : b , views : y && 1 , pending : ! 0 } ; var k = function ( e ) { var n = $e [ o ] ; e ? ( i . error = ! 0 , n && ( n . error = ! 0 ) ) : ( delete i . error , n && delete n . error ) , t . $broadcast ( "messages_pending" ) } ; i . send = function ( ) { k ( ! 1 ) ; var t = { } ; Ee [ e ] && ( t . afterMessageID = Ee [ e ] . messageID ) ; var a = 0 ; g && ( a |= 1 ) , b . length && ( a |= 8 ) , y && ( a |= 16 ) , f . invokeApi ( "messages.sendMessage" , { flags : a , peer : c . getInputPeerByID ( e ) , message : n , random _id : l , reply _to _msg _id : N ( g ) , entities : b } , t ) . then ( function ( e ) { "updateShortSentMessage" == e . _ && ( i . flags = e . flags , i . date = e . date , i . id = e . id , i . media = e . media , i . entities = e . entities , e = { _ : "updates" , users : [ ] , chats : [ ] , seq : 0 , updates : [ { _ : "updateMessageID" , random _id : d , id : e . id } , { _ : h ? "updateNewChannelMessage" : "updateNewMessage" , message : i , pts : e . pts , pts _count : e . pts _count } ] } ) , s . processUpdateMessage ( e ) } , function ( e ) { k ( ! 0 ) } ) [ "finally" ] ( function ( ) { Ee [ e ] === t && delete Ee [ e ] } ) , Ee [ e ] = t } , X ( [ i ] ) , u . pending . unshift ( o ) , t . $broadcast ( "history_append" , { peerID : e , messageID : o , my : ! 0 } ) , setZeroTimeout ( i . send ) , xe [ d ] = [ e , o ] } } function Q ( n , a , i ) { i = i || { } ; var o , l , d = Te -- , u = [ nextRandomInt ( 4294967295 ) , nextRandomInt ( 4294967295 ) ] , p = bigint ( u [ 0 ] ) . shiftLeft ( 32 ) . add ( bigint ( u [ 1 ] ) ) . toString ( ) , m = Ce [ n ] , g = 0 , h = { } , v = i . replyToMsgID , y = c . isChannel ( n ) , b = y && c . isMegagroup ( n ) , w = y && ! b ? ! 0 : ! 1 ; i . isMedia ? [ "image/jpeg" , "image/png" , "image/bmp" ] . indexOf ( a . type ) >= 0 ? ( o = "photo" , l = "photo." + a . type . split ( "/" ) [ 1 ] ) : "audio/" == a . type . substr ( 0 , 6 ) || [ "video/ogg" ] . indexOf ( a . type ) >= 0 ? ( o = "audio" , l = "audio." + ( "ogg" == a . type . split ( "/" ) [ 1 ] ? "ogg" : "mp3" ) ) : "video/" == a . type . substr ( 0 , 6 ) ? ( o = "video" , l = "video.mp4" ) : ( o = "document" , l = "document." + a . type . split ( "/" ) [ 1 ] ) : ( o = "document" , l = "document." + a . type . split ( "/" ) [ 1 ] ) , console . log ( o , l , a . type ) , void 0 === m && ( m = Ce [ n ] = { count : null , history : [ ] , pending : [ ] } ) ; var k = r . getSelf ( ) . id ; n != k && ( g |= 2 , h . out = ! 0 , y || r . isBot ( n ) || ( g |= 1 , h . unread = ! 0 ) ) , v && ( g |= 8 ) , w ? k = 0 : g |= 256 ; var $ , S = { _ : "messageMediaPending" , type : o , file _name : a . name || l , size : a . size , progress : { percent : 1 , total : a . size } } , C = { _ : "message" , id : d , from _id : k , to _id : c . getOutputPeer ( n ) , flags : g , pFlags : h , date : tsNow ( ! 0 ) + je , message : "" , media : S , random _id : p , reply _to _msg _id : v , views : w && 1 , pending : ! 0 } , M = function ( e ) { var n = $e [ d ] ; e ? ( C . error = ! 0 , n && ( n . error = ! 0 ) ) : ( delete C . error , n && delete n . error ) , t . $broadcast ( "messages_pending" ) } , x = ! 1 ; C . send = function ( ) { var i = e . defer ( ) ; Ie . then ( function ( ) { ( ! x || C . error ) && ( x = ! 1 , $ = _ . uploadFile ( a ) ) , $ . then ( function ( e ) { e . name = l , x = ! 0 ; var t ; switch ( o ) { case "photo" : t = { _ : "inputMediaUploadedPhoto" , file : e } ; break ; case "video" : t = { _ : "inputMediaUploadedVideo" , file : e , duration : 0 , w : 0 , h : 0 , mime _type : a . type } ; break ; case "audio" : t = { _ : "inputMediaUploadedAudio" , file : e , duration : 0 , mime _type : a . type } ; break ; case "document" : default : t = { _ : "inputMediaUploadedDocument" , file : e
e . put ( "partials/desktop/channel_edit_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="updateChannel()">\n\n <h4 my-i18n="channel_edit_modal_title"></h4>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="channel_edit_name"></label>\n <input class="md-input" my-focused type="text" ng-model="channel.title" />\n </div>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="channel_edit_about"></label>\n <input class="md-input" type="text" ng-model="channel.about" />\n </div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: channel.updating}" ng-click="updateChannel()" ng-bind="channel.updating ? \'channel_edit_submit_active\' : \'channel_edit_submit\' | i18n" ng-disabled="channel.updating"></button>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/channel_modal.html" , '<div class="chat_modal_wrap md_modal_wrap" my-modal-position>\n\n <div class="md_modal_head">\n <div class="md_modal_title_wrap">\n <div class="md_modal_actions_wrap clearfix">\n <a class="md_modal_action md_modal_action_close" ng-click="$close()" my-i18n="modal_close"></a>\n <a class="md_modal_action" ng-if="hasRights(\'edit_title\')" ng-click="editChannel()" my-i18n="modal_edit"></a>\n </div>\n <div class="md_modal_title" ng-switch="isMegagroup">\n <span ng-switch-when="true" my-i18n="group_modal_info"></span>\n <span ng-switch-default my-i18n="channel_modal_info"></span>\n </div>\n </div>\n\n <div class="peer_modal_profile_wrap clearfix">\n <div class="peer_modal_photo_wrap pull-left" ng-switch="photo.updating">\n <div ng-switch-when="true" class="peer_modal_photo md_photo_loading loading_dots">\n <i></i><i></i><i></i>\n </div>\n <a ng-switch-default ng-click="openPhoto(chatFull.chat_photo.id, {p: -chatFull.chat.id})" class="peer_modal_photo" my-peer-photolink="::-chatFull.chat.id" img-class="peer_modal_photo" no-open="true" watch="true" ng-class="{disabled: !chatFull.chat.photo.photo_small}" ng-disabled="!chatFull.chat.photo.photo_small"></a>\n </div>\n <div class="peer_modal_profile">\n <div class="peer_modal_profile_name" my-peer-link="-chatFull.chat.id" verified="true"></div>\n <div class="peer_modal_profile_description" ng-if="chatFull.participants_count > 0">\n <ng-pluralize count="chatFull.participants_count"\n when="group_modal_pluralize_participants">\n </ng-pluralize>\n </div>\n </div>\n </div>\n </div>\n\n <div class="md_modal_split_actions_wrap">\n <div class="md_modal_split_actions" ng-switch="hasRights(\'edit_photo\')">\n <div ng-switch-when="true" class="md_modal_split_action">\n <input my-file-upload type="file" multiple="false" class="im_attach_input" size="120" multiple="false" accept="image/x-png, image/png, image/gif, image/jpeg" title="{{\'group_modal_update_photo\' | i18n}}" />\n <i class="md_modal_split_action_camera"></i>\n </div>\n <a ng-switch-default class="md_modal_split_action" href="" ng-click="goToHistory()" title="{{\'user_modal_send_message\' | i18n } } ">\n <i class=" md _modal _split _action _msg "></i>\n </a>\n </div>\n </div>\n\n <div class=" md _modal _body ">\n\n <div class=" md _modal _sections clearfix ">\n\n <div class=" md _modal _iconed _section _wrap md _modal _iconed _section _number " ng-if=" chatFull . rAbout || chatFull . chat . username || chatFull . chat . pFlags . creator ">\n <i class=" md _modal _section _icon md _modal _section _icon _about "></i>\n\n <div class=" md _modal _section _param _wrap " ng-if=" chatFull . about . length > 0 ">\n <div class=" md _modal _section _param _value " > \ n < span ng - bind - htm
e . put ( "partials/desktop/dialog_service.html" , '<span ng-switch="message.action._">\n <span ng-switch-when="messageActionChatCreate" my-i18n="conversation_group_created"></span>\n <span ng-switch-when="messageActionChatEditTitle" my-i18n="conversation_group_renamed"></span>\n <span ng-switch-when="messageActionChatEditPhoto" my-i18n="conversation_group_photo_updated"></span>\n <span ng-switch-when="messageActionChatDeletePhoto" my-i18n="conversation_group_photo_removed"></span>\n <span ng-switch-when="messageActionChatJoinedByLink" my-i18n="conversation_joined_by_link"></span>\n <span ng-switch-when="messageActionChatReturn" my-i18n="conversation_returned_to_group"></span>\n <span ng-switch-when="messageActionChatAddUser" my-i18n="conversation_invited_user">\n <my-i18n-param name="user"><span my-peer-link="message.action.user_id"></span></my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChatAddUsers" my-i18n="">\n <ng-pluralize count="message.action.users.length"\n when="conversation_invited_users">\n </ng-pluralize>\n </span>\n <span ng-switch-when="messageActionChatLeave" my-i18n="conversation_left_group"></span>\n <span ng-switch-when="messageActionChatDeleteUser" my-i18n="conversation_kicked_user">\n <my-i18n-param name="user"><span my-peer-link="message.action.user_id"></span></my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChatMigrateTo" my-i18n="conversation_converted_to_supergroup"></span>\n <span ng-switch-when="messageActionChannelMigrateFrom" my-i18n="conversation_converted_to_supergroup"></span>\n <span ng-switch-when="messageActionChannelCreate" my-i18n="conversation_created_channel"></span>\n <span ng-switch-when="messageActionChannelEditTitle" my-i18n="conversation_changed_channel_name"></span>\n <span ng-switch-when="messageActionChannelEditPhoto" my-i18n="conversation_changed_channel_photo"></span>\n <span ng-switch-when="messageActionChannelDeletePhoto" my-i18n="conversation_removed_channel_photo"></span>\n</span>\n' ) , e . put ( "partials/desktop/document_modal.html" , '<div class="modal_close_wrap" ng-click="$close()">\n <div class="modal_close"></div>\n</div>\n\n<div class="media_modal_bottom_panel_wrap">\n <div class="media_modal_bottom_panel">\n <div class="media_modal_bottom_actions pull-right">\n <a class="media_modal_action_btn" ng-click="download()" title="{{\'media_modal_download\' | i18n}}">\n <i class="media_modal_action_btn_download"></i>\n </a>\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="forward()" title="{{\'media_modal_forward\' | i18n}}">\n <i class="media_modal_action_btn_forward"></i>\n </a>\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="delete()" title="{{\'media_modal_delete\' | i18n}}">\n <i class="media_modal_action_btn_delete"></i>\n </a>\n </div>\n\n <div class="media_modal_info_wrap pull-left" ng-if="document.user_id > 0" ng-switch="messageID > 0">\n <a class="media_modal_author_photo pull-left" my-peer-photolink="document.user_id" img-class="media_modal_author_photo" watch="true"></a>\n <div class="media_modal_author_name">\n <a class="media_modal_author" my-peer-link="document.user_id" peer-watch="true"></a>\n </div>\n <div class="media_modal_date" ng-if="document.date > 0">\n <a ng-switch-when="true" class="media_modal_date" ng-click="goToMessage()" ng-bind="document.date | dateOrTime :true"></a>\n <span ng-switch-default ng-bind="document.date | dateOrTime :true"></span>\n </div>\n </div>\n\n <div class="media_modal_title_wrap" ng-bind="document.file_name"></div>\n\n </div>\n</div>\n\n<div class="modal-dialog">\n <div class="modal-content">\n <div my-modal-width="{{photo.full.modalWidth}}" class="media_modal_wrap photo_modal_wrap" my-modal-position animation="no">\n\n <div class="modal-body">\n\n <div my-load-document="document"></div>\n\n </div>\n\n </div>\n </div>\n</div>' ) , e . put ( "partials/desktop/edit_contact_modal.html" , ' < div c
e . put ( "partials/desktop/import_contact_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="doImport()">\n\n <h4 my-i18n="contact_import_modal_title"></h4>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_import_modal_phone"></label>\n <input class="md-input" my-focused type="text" ng-model="importContact.phone" my-submit-on-enter />\n </div>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_edit_modal_first_name"></label>\n <input class="md-input" type="text" ng-model="importContact.first_name" my-submit-on-enter />\n </div>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_edit_modal_last_name"></label>\n <input class="md-input" type="text" ng-model="importContact.last_name" my-submit-on-enter />\n </div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: progress.enabled}" ng-click="doImport()" ng-bind="progress.enabled ? \'contact_import_modal_submit_active\' : \'contact_import_modal_submit\' | i18n" ng-disabled="progress.enabled"></button>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/inactive.html" , '<div class="inactive_page_wrap">\n <div class="tg_head_split inactive_head"></div>\n <div class="im_page_wrap">\n <div class="inactive_page_content" my-vertical-position="0.35">\n <a class="inactive_image" ng-click="reload()"></a>\n <h3 class="inactive_title" my-i18n="inactive_title"></h3>\n <div class="inactive_description" my-i18n="inactive_description_md"></div>\n <div class="inactive_actions">\n <button class="btn btn-lg btn-md btn-md-primary" ng-click="reload()" my-i18n="inactive_reload_btn" my-focused></button>\n </div>\n </div>\n </div>\n</div>' ) , e . put ( "partials/desktop/lang_footer.html" , '<div class="footer_wrap" ng-controller="AppLangSelectController">\n <span ng-repeat="locale in ::supportedLocales">\n <a class="footer_lang_link" ng-class="{active: curLocale == locale, disabled: curLocale == locale}" ng-disabled="curLocale == locale" ng-click="localeSelect(locale)" ng-bind="langNames[locale]"></a>\n <span ng-if="!$last" class="footer_link_divider"></span>\n </span>\n</div>' ) , e . put ( "partials/desktop/login.html" , ' < div class = "login_page_wrap" my - custom - background = "#e7ebf0" > \ n < div class = "login_head_bg" > < /div>\n <div class="login_page">\n <div class="login_head_wrap clearfix" ng-switch="progress.enabled">\n <div ng-switch-when="true" class="login_head_submit_progress">\n <my-i18n ng-if="!credentials.phone_code_hash" msgid="login_generating_key"></my - i18n > < my - i18n ng - if = "credentials.phone_code_hash && !credentials.phone_code_valid" msgid = "login_checking_code" > < /my-i18n><my-i18n ng-if="credentials.phone_code_valid && credentials.phone_unoccupied" msgid="login_signing_up"></my - i18n > < my - i18n ng - if = "credentials.phone_code_valid && credentials.password_needed" msgid = "login_checking_password" > < / m y - i 1 8 n > < s p a n m y - l o a d i n g - d o t s > < / s p a n > \ n < / d i v > \ n < d i v n g - s w i t c h - d e f a u l t c l a s s = " l o g i n _ h e a d _ s u b m i t _ w r a p " > \ n < a c l a s s = " l o g i n _ h e a d _ s u b m i t _ b t n " n g - i f = " ! c r e d e n t i a l s . p h o n e _ c o d e _ h a s h " n g - c l i c k = " s e n d C o d e ( ) " > \ n < m y - i 1 8 n m s g i d = " m o d a l _ n e x t " > < / m y - i 1 8 n > < i c l a s s = " i c o n i c o n - n e x t - s u b m i t " > < / i > \ n < / a > \ n < a c l a s s = " l o g i n _ h e a d _ s u b m i t _ b t n " n g - i f = " c r e d e n t i a l s . p h o n e _ c o d e _ h a s h & a m p ; & a m p ; ! c r e d e n t i a l s . p h o n e _ c o d e _ v a l i d " n g - c l i c k = " l o g I n ( ) " > \ n < m y - i 1 8 n m s g i d = " m o d a l _ n e x t " > < / m y - i 1 8 n > < i c l a s s = " i c o n i c o n - n e x t - s u b m i t " > < / i > \ n < / a > \ n < a c l a s s = " l o g i n _ h e a d _ s u b m i t _ b t n " n g - i f = " c r e d e n t i a l s . p h o n e _ c o d e _ v a l i d & a m p ; & a m p ; c r e d e n t i a l s . p h o n e _ u n o c c u p i e d " n g - c l i c k = " l o g I n ( t r u e ) " > \ n < m y - i 1 8 n m s g i d = " m o d a l _ n e x t " > < / m y - i 1 8 n > < i c l a s s = " i c o n
e . put ( "partials/desktop/password_recovery_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="checkCode()">\n\n <h4 my-i18n="login_recovery_title"></h4>\n\n <div class="md_simple_form_description" my-i18n="login_recovery_description_md">\n <my-i18n-param name="email">\n <strong ng-bind="recovery.email_pattern"></strong>\n </my-i18n-param>\n </div>\n\n <div class="md-input-group" ng-class="{\'md-input-error\': recovery.error_field == \'code\'}" my-labeled-input ng-switch="recovery.error_field == \'code\'">\n <label ng-switch-when="true" class="md-input-label" my-i18n="login_code_incorrect"></label>\n <label ng-switch-default class="md-input-label" my-i18n="login_code_placeholder"></label>\n <input class="md-input" my-focused type="text" ng-model="recovery.code" name="code" my-focused />\n </div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: recovery.updating}" ng-click="checkCode()" ng-disabled="recovery.updating" ng-bind="recovery.updating ? \'password_recover_active\' : \'password_recover_submit\' | i18n"></button>\n\n </div>\n\n</div>' ) , e . put ( "partials/desktop/password_update_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="updatePassword()">\n\n <h4 ng-switch="action">\n <my-i18n ng-switch-when="disable" msgid="password_delete_title"></my-i18n>\n <my-i18n ng-switch-default msgid="password_change_title"></my-i18n>\n </h4>\n\n <div ng-if="password._ != \'account.noPassword\'" class="md-input-group" ng-class="{\'md-input-error\': passwordSettings.error_field == \'cur_password\'}" my-labeled-input>\n <label class="md-input-label" my-i18n="password_current_placeholder"></label>\n <input class="md-input" my-focused type="password" ng-model="passwordSettings.cur_password" name="cur_password" my-focus-on="cur_password_focus" />\n </div>\n\n <div ng-if="action != \'disable\'" class="md-input-group md-input-grouped" ng-class="{\'md-input-error\': passwordSettings.error_field == \'new_password\'}" my-labeled-input>\n <label class="md-input-label" my-i18n="password_new_placeholder"></label>\n <input class="md-input" type="password" ng-model="passwordSettings.new_password" name="new_password" my-focus-on="new_password_focus" />\n </div>\n\n <div ng-if="action != \'disable\'" class="md-input-group" ng-class="{\'md-input-error\': passwordSettings.confirm_password && passwordSettings.new_password && passwordSettings.confirm_password != passwordSettings.new_password}" my-labeled-input>\n <label class="md-input-label" my-i18n="password_confirm_placeholder"></label>\n <input class="md-input" type="password" ng-model="passwordSettings.confirm_password" name="confirm_password" my-focus-on="confirm_password_focus" />\n </div>\n\n <div ng-if="action != \'disable\'" class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="password_hint_placeholder"></label>\n <input class="md-input" type="text" ng-model="passwordSettings.hint" name="hint" />\n </div>\n\n <div ng-if="action != \'disable\'" class="md_simple_form_description" my-i18n="password_create_description"></div>\n\n <div ng-if="action != \'disable\'" class="md-input-group" ng-class="{\'md-input-error\': passwordSettings.error_field == \'email\' } " my-labeled-input>\n <label class=" md - input - label " my-i18n=" password _email _placeholder "></label>\n <input class=" md - input " type=" text " ng-model=" passwordSettings . email " name=" email " />\n </div>\n\n\n </form>\n\n </div>\n\n <div class=" md _simple _modal _footer ">\n\n <button class=" btn btn - md " ng-click=" $dismiss ( ) " my
e . put ( "partials/desktop/username_edit_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="updateUsername()">\n\n <h4 my-i18n="username_edit_modal_title"></h4>\n\n <div class="md-input-group" ng-class="{\'md-input-error\': checked.error}" my-labeled-input>\n <label class="md-input-label" my-i18n="username_edit_placeholder"></label>\n <input class="md-input" my-focused type="text" ng-model="profile.username" name="username" ng-model-options="{updateOn: \'default blur\', debounce: {default: 600, blur: 0}}" />\n </div>\n\n <div class="md_simple_form_description" my-i18n="username_edit_description_md"></div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: profile.updating}" ng-click="updateUsername()" ng-bind="profile.updating ? \'username_edit_submit_active\' : \'username_edit_submit\' | i18n" ng-disabled="profile.updating"></button>\n\n </div>\n\n</div>' ) , e . put ( "partials/desktop/video_modal.html" , '<div class="modal_close_wrap" ng-class="{modal_close_wrap_wnext: nav.hasNext}" ng-click="$close()">\n <div class="modal_close"></div>\n</div>\n\n<div class="media_modal_bottom_panel_wrap">\n <div class="media_modal_bottom_panel">\n <div class="media_modal_bottom_actions pull-right">\n <a class="media_modal_action_btn" ng-click="download()" title="{{\'media_modal_download\' | i18n}}">\n <i class="media_modal_action_btn_download"></i>\n </a>\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="forward()" title="{{\'media_modal_forward\' | i18n}}">\n <i class="media_modal_action_btn_forward"></i>\n </a>\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="delete()" title="{{\'media_modal_delete\' | i18n}}">\n <i class="media_modal_action_btn_delete"></i>\n </a>\n </div>\n\n <div class="media_modal_info_wrap pull-left" ng-if="video.user_id > 0" ng-switch="messageID > 0">\n <a class="media_modal_author_photo pull-left" my-peer-photolink="video.user_id" img-class="media_modal_author_photo" watch="true"></a>\n <div class="media_modal_author_name">\n <a class="media_modal_author" my-peer-link="video.user_id" peer-watch="true"></a>\n </div>\n <div class="media_modal_date" ng-if="video.date > 0">\n <a ng-switch-when="true" class="media_modal_date" ng-click="goToMessage()" ng-bind="video.date | dateOrTime :true"></a>\n <span ng-switch-default ng-bind="video.date | dateOrTime :true"></span>\n </div>\n </div>\n\n <div class="media_modal_title_wrap" my-i18n="media_modal_video"></div>\n </div>\n</div>\n\n<div class="modal-dialog">\n <div class="modal-content">\n <div my-modal-width="{{video.full.width - 32}}" class="media_modal_wrap video_modal_wrap" my-modal-position animation="no">\n\n <div class="modal-body">\n <div class="video_modal_image_wrap" my-load-video video="video"></div>\n\n </div>\n\n </div>\n </div>\n</div>' ) , e . put ( "partials/desktop/welcome.html" , "" ) , e . put ( "partials/mobile/audio_player.html" , ' < div class = "audio_player_wrap clearfix" > \ n < a class = "im_message_file_button" ng - click = "togglePlay()" ng - class = "{im_message_file_button_dl_audio: audio.downloaded}" > \ n < i class = "im_message_file_button_icon" ng - class = "{audio_player_btn_icon_pause: mediaPlayer.player.playing}" > < / i > \ n < / a > \ n < d i v c l a s s = " a u d i o _ p l a y e r _ t i t l e _ w r a p " > \ n < d i v c l a s s = " a u d i o _ p l a y e r _ m e t a p u l l - r i g h t " n g - i f = " a u d i o . d o w n l o a d e d & a m p ; & a m p ; ( m e d i a P l a y e r . p l a y e r . d u r a t i o n | | a u d i o . d u r a t i o n ) " n g - s w i t c h = " m e d i a P l a y e r . p l a y e r . p l a y i n g | | m e d i a P l a y e r . p l a y e r . c u r r e n t T i m e > 0 " > \ n < s p a n n g - s w i t c h - w h e n = " t r u e " c l a s s = " a u d i o _ p l a y e r _ d u r a t i o n " n g - b i n d = " m e d i a P l a y e r . p l a y e r . c u r r e n t T i m e | d u r a t i o n R e m a i n s : ( m e d i a P l a y e r . p l a y e r . d u r a t i o n | | a u d i o . d u r a t i o n ) " > < / s p a n > \ n < s p a n n g - s w i t c h - d e f a u l t c l a s s = " a u d i o _ p l a y e r _ d u r a t i o n " n g - b i n d =
e . put ( "partials/mobile/chat_create_modal.html" , '<div class="contacts_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li class="navbar-quick-right">\n <a ng-class="{disabled: group.creating}" ng-click="createGroup()" ng-bind="group.creating ? \'group_create_submit_active\' : \'group_create_submit\' | i18n" ng-disabled="group.creating"></a>\n </li>\n <li>\n <a ng-click="$dismiss()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 my-i18n="group_create_modal_title"></h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body">\n\n <form class="modal_simple_form" ng-submit="createGroup()" my-vertical-position="0.25">\n\n <div class="form-group">\n <input class="form-control input-lg" my-focused type="text" placeholder="{{\'group_create_name\' | i18n}}" ng-model="group.name"/>\n </div>\n\n </form>\n\n </div>\n\n</div>' ) , e . put ( "partials/mobile/chat_edit_modal.html" , '<div class="contacts_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li class="navbar-quick-right">\n <a ng-class="{disabled: group.updating}" ng-click="updateGroup()" ng-bind="group.updating ? \'group_edit_submit_active\' : \'group_edit_submit\' | i18n" ng-disabled="group.updating"></a>\n </li>\n <li>\n <a ng-click="$dismiss()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 my-i18n="group_edit_modal_title"></h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body">\n\n <form class="modal_simple_form" ng-submit="updateGroup()" my-vertical-position="0.25">\n\n <div class="form-group">\n <input class="form-control input-lg" my-focused type="text" placeholder="{{\'group_edit_name\' | i18n}}" ng-model="group.name"/>\n </div>\n\n </form>\n\n </div>\n\n</div>' ) , e . put ( "partials/mobile/chat_modal.html" , '<div class="chat_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-toggle-wrap dropdown" dropdown>\n <a class="dropdown-toggle navbar-toggle" dropdown-toggle>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n </a>\n <ul class="dropdown-menu">\n <li ng-if="chatFull.thumb.location" ng-if="hasRights(\'edit_title\')">\n <a ng-click="deletePhoto()" my-i18n="group_modal_menu_delete_photo"></a>\n </li>\n <li ng-if="hasRights(\'edit_title\' ) ">\n <a ng-click=" editTitle ( ) " my-i18n=" group _modal _menu _edit _group "></a>\n </li>\n <li>\n <a ng-click=" flushHistory ( ) " my-i18n=" group _modal _menu _delete _chat "></a>\n </li>\n </ul>\n </div>\n\n <div class=" navbar - header ">\n\n <ul class=" nav navbar - nav navbar - quick - nav ">\n <li>\n <a ng-click=" $close ( ) " class=" navbar - quick - media - back ">\n <i class=" icon icon - back "></i>\n <div class=" navbar - quick - back - title ">\n <h4 my-i18n=" group _modal _info " > < / h 4 > \ n < / d i v > \ n < / a > \ n < / l i > \ n
e . put ( "partials/mobile/import_contact_modal.html" , '<div class="import_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li class="navbar-quick-right">\n <a ng-class="{disabled: progress.enabled}" ng-click="doImport()" ng-bind="progress.enabled ? \'contact_import_modal_submit_active\' : \'contact_import_modal_submit\' | i18n" ng-disabled="progress.enabled"></a>\n </li>\n <li>\n <a ng-click="$dismiss()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 my-i18n="contact_import_modal_title"></h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body">\n\n <form class="modal_simple_form" ng-submit="doImport()" my-vertical-position="0.2">\n\n <div class="form-group">\n <input class="form-control input-lg" my-focused type="text" placeholder="{{\'contact_import_modal_phone\' | i18n}}" ng-model="importContact.phone" my-submit-on-enter/>\n </div>\n <div class="form-group">\n <input class="form-control input-lg" type="text" placeholder="{{\'contact_edit_modal_first_name\' | i18n}}" ng-model="importContact.first_name" my-submit-on-enter/>\n </div>\n <div class="form-group">\n <input class="form-control input-lg" type="text" placeholder="{{\'contact_edit_modal_last_name\' | i18n}}" ng-model="importContact.last_name" my-submit-on-enter/>\n </div>\n\n <div class="import_modal_phonebook_wrap" ng-if="phonebookAvailable">\n <a class="btn btn-link" ng-click="importPhonebook()" my-i18n="contact_import_modal_phonebook"></a>\n </div>\n\n </form>\n\n </div>\n</div>' ) , e . put ( "partials/mobile/login.html" , ' < div class = "tg_page_head" > \ n < div class = "navbar navbar-static-top navbar-inverse navbar_peer_not_selected" > \ n < div class = "container" > \ n < div class = "navbar-header" > \ n \ n < ul class = "nav navbar-nav navbar-quick-nav" > \ n < li class = "navbar-quick-right login_head_submit_wrap" > \ n < a class = "disabled" disabled = "disabled" ng - if = "progress.enabled" class = "login_head_submit_progress" > \ n < my - i18n ng - if = "!credentials.phone_code_hash" msgid = "login_generating_key" > < /my-i18n><my-i18n ng-if="credentials.phone_code_hash && !credentials.phone_code_valid" msgid="login_checking_code"></my - i18n > < my - i18n ng - if = "credentials.phone_code_valid && credentials.phone_unoccupied" msgid = "login_signing_up" > < /my-i18n><my-i18n ng-if="credentials.phone_code_valid && credentials.password_needed" msgid="login_checking_password"></my - i18n > < span my - loading - dots > < / s p a n > \ n < / a > \ n < a n g - i f = " ! p r o g r e s s . e n a b l e d & a m p ; & a m p ; ! c r e d e n t i a l s . p h o n e _ c o d e _ h a s h " n g - c l i c k = " s e n d C o d e ( ) " > \ n < m y - i 1 8 n m s g i d = " m o d a l _ n e x t " > < / m y - i 1 8 n > < i c l a s s = " i c o n i c o n - n e x t - s u b m i t " > < / i > \ n < / a > \ n < a n g - i f = " ! p r o g r e s s . e n a b l e d & a m p ; & a m p ; c r e d e n t i a l s . p h o n e _ c o d e _ h a s h & a m p ; & a m p ; ! c r e d e n t i a l s . p h o n e _ c o d e _ v a l i d " n g - c l i c k = " l o g I n ( ) " > \ n < m y - i 1 8 n m s g i d = " m o d a l _ n e x t " > < / m y - i 1 8 n > < i c l a s s = " i c o n i c o n - n e x t - s u b m i t " > < / i > \ n < / a > \ n < a n g - i f = " ! p r o g r e s s . e n a b l e d & a m p ; & a m p ; c r e d e n t i a l s . p h o n e _ c o d e _ v a l i d & a m p ; & a m p ; c r e d e n t i a l s . p h o n e _ u n o c c u p i e d " n g - c l i c k = " l o g I n ( t r u e ) " > \ n < m y - i 1 8 n m s g i d = " m o d a l _ n e x t " > < / m y - i 1 8 n > < i c l a s s = " i c o n i c o n - n e x t - s u b m i t " > < / i > \ n < / a > \ n < a n g - i f = " ! p r o g r e s s . e n a b l e d & a m p ; & a m p ; c r e d e n t i a l s . p h o n e _ c o d e _ v a l i d & a m p ; & a m p ; c r e d e n t i a l s . p a s s w o r d _ n e e d e d " n g - c l i c k = " c h e c k P a s s w o r d ( ) " > \ n < m y - i 1 8 n m s g i d = " m o d a l _ n e x t " > < / m y - i 1 8 n > < i c l a s s = " i c o n i c o n - n e x t - s u b m i t " > < / i > \ n < / a > \ n < / l i > \ n < l i > \ n < a c l a s s = " n a v b a r - b r a n d t g _ l o g o _ w r a p " h r e f = " h t t p s : / / t e l e g r a m . o r g " t a r g e t = " _ b l a n k " > < i c
e . put ( "partials/mobile/password_update_modal.html" , '<div class="username_edit_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li class="navbar-quick-right">\n <a ng-class="{disabled: passwordSettings.updating}" ng-click="updatePassword()" ng-disabled="passwordSettings.updating" ng-switch="action">\n <span ng-switch-when="disable" ng-bind="passwordSettings.updating ? \'password_delete_active\' : \'password_delete_submit\' | i18n"></span>\n <span ng-switch-default ng-bind="passwordSettings.updating ? \'password_create_active\' : \'password_create_submit\' | i18n"></span>\n </a>\n </li>\n <li>\n <a ng-click="$dismiss()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 ng-switch="action">\n <my-i18n ng-switch-when="disable" msgid="password_delete_title"></my-i18n>\n <my-i18n ng-switch-default msgid="password_change_title"></my-i18n>\n </h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body">\n\n <form class="modal_simple_form" ng-submit="updatePassword()" my-vertical-position="0.3">\n\n <div ng-if="password._ != \'account.noPassword\'" class="md-input-group" ng-class="{\'md-input-error\': passwordSettings.error_field == \'cur_password\'}" my-labeled-input>\n <label class="md-input-label" my-i18n="password_current_placeholder"></label>\n <input class="md-input" my-focused type="password" ng-model="passwordSettings.cur_password" name="cur_password" my-focus-on="cur_password_focus" />\n </div>\n\n <div ng-if="action != \'disable\'" class="md-input-group md-input-grouped" ng-class="{\'md-input-error\': passwordSettings.error_field == \'new_password\'}" my-labeled-input>\n <label class="md-input-label" my-i18n="password_new_placeholder"></label>\n <input class="md-input" type="password" ng-model="passwordSettings.new_password" name="new_password" my-focus-on="new_password_focus" />\n </div>\n\n <div ng-if="action != \'disable\'" class="md-input-group" ng-class="{\'md-input-error\': passwordSettings.confirm_password && passwordSettings.new_password && passwordSettings.confirm_password != passwordSettings.new_password}" my-labeled-input>\n <label class="md-input-label" my-i18n="password_confirm_placeholder"></label>\n <input class="md-input" type="password" ng-model="passwordSettings.confirm_password" name="confirm_password" my-focus-on="confirm_password_focus" />\n </div>\n\n <div ng-if="action != \'disable\'" class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="password_hint_placeholder"></label>\n <input class="md-input" type="text" ng-model="passwordSettings.hint" name="hint" />\n </div>\n\n <div ng-if="action != \'disable\'" class="md_simple_form_description" my-i18n="password_create_description"></div>\n\n <div ng-if="action != \'disable\'" class="md-input-group" ng-class="{\'md-input-error\': passwordSettings.error_field == \'email\'}" my-labeled-input>\n <label class="md-input-label" my-i18n="password_email_placeholder"></label>\n <input class="md-input" type="text" ng-model="passwordSettings.email" name="email" />\n </div>\n\n </form>\n\n </div>\n\n</div>' ) , e . put ( "partials/mobile/peer_select.html" , ' < div class = "peer_select_modal_wrap" > \ n \ n < div class = "tg_page_head tg_modal_head" > \ n < div class = "navbar navbar-static-top navbar-inverse" > \ n < div class = "container" > \ n \ n < a class = "navbar-search-wrap" ng - click = "toggleSearch()" > \ n < i class = "icon-search" > < / i > \ n < / a > \ n \ n
e . put ( "partials/mobile/username_edit_modal.html" , '<div class="username_edit_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li class="navbar-quick-right">\n <a ng-class="{disabled: profile.updating}" ng-click="updateUsername()" ng-bind="profile.updating ? \'username_edit_submit_active\' : \'username_edit_submit\' | i18n" ng-disabled="profile.updating"></a>\n </li>\n <li>\n <a ng-click="$dismiss()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 my-i18n="username_edit_modal_title"></h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body">\n\n <form class="modal_simple_form" ng-submit="updateUsername()" my-vertical-position="0.3">\n\n <div class="form-group import_modal_field_wrap" ng-class="{\'has-error\': checked.error, \'has-feedback\': checked.feedback.length > 0}">\n <input class="form-control input-md" my-focused type="text" placeholder="{{\'username_edit_placeholder\' | i18n}}" ng-model="profile.username" name="username" ng-model-options="{updateOn: \'default blur\', debounce: {default: 600, blur: 0}}"/>\n <span ng-if="checked.error" class="glyphicon form-control-feedback" ng-class="{\'glyphicon-remove\': checked.error}"></span>\n </div>\n\n <div class="modal_simple_form_description" my-i18n="username_edit_description_md"></div>\n\n </form>\n\n </div>\n\n</div>' ) , e . put ( "partials/mobile/video_modal.html" , '<div class="media_modal_bottom_panel_wrap">\n <div class="media_modal_bottom_panel">\n <div class="media_modal_bottom_actions pull-right">\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="delete()" title="{{\'media_modal_delete\' | i18n}}">\n <i class="media_modal_action_btn_delete"></i>\n </a>\n </div>\n\n <div class="media_modal_bottom_actions pull-left">\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="forward()" title="{{\'media_modal_forward\' | i18n}}">\n <i class="media_modal_action_btn_forward"></i>\n </a>\n </div>\n\n <div class="media_modal_info_wrap" ng-if="video.user_id > 0">\n <a class="media_modal_author" my-peer-link="video.user_id" peer-watch="true"></a>\n <br/>\n <span class="media_modal_date" ng-bind="video.date | dateOrTime :true"></span>\n </div>\n\n </div>\n</div>\n\n<div class="media_modal_top_panel_wrap">\n <div class="media_modal_top_panel">\n <div class="media_modal_top_actions pull-right">\n <a class="media_modal_action_btn" ng-click="download()" title="{{\'media_modal_download\' | i18n}}">\n <i class="media_modal_action_btn_download"></i>\n </a>\n </div>\n <div class="media_modal_top_actions pull-left">\n <a ng-click="$close()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 class="media_modal_title_wrap" my-i18n="media_modal_video"></h4>\n </div>\n </a>\n </div>\n </div>\n</div>\n\n<div class="modal-dialog">\n <div class="modal-content">\n <div my-modal-width="{{video.full.width}}" class="media_modal_wrap video_modal_wrap" my-vertical-position="0.5">\n\n <div class="modal-body">\n\n <div class="video_modal_image_wrap" my-load-video video="video"></div>\n\n </div>\n\n </div>\n </div>\n</div>\n\n' ) , e . put ( "partials/mobile/welcome.html" , "" ) } ] ) , function ( e , t , n , a ) { function i ( e ) { ConfigStorage . get ( "emojis_popular" , function ( t ) { var n = [ ] ; if ( t && t . length ) { for ( var a = 0 , i = t . length ; i > a ; a ++ ) n . push ( { code : t [ a ] [ 0 ] , rate : t [ a ] [ 1 ] } ) ; return void e ( n ) } ConfigStorage . get ( "emojis_recent" , function ( t ) { t = t || y || [ ] ; for ( var a , i , o = 0 , s = t . length ; s > o ; o ++ ) a = t [ o ] ,
var u , p , m = ! 1 , g = ! 1 , h = ! 1 , f = ! 1 , _ = ! 1 , v = ! 1 , y = ! 1 , b = function ( ) { m != ( e . selectedMsgs [ e . historyMessage . mid ] || ! 1 ) && ( m = ! m , t . toggleClass ( s , m ) ) } , w = function ( ) { g != e . historyMessage . grouped && ( g && t . removeClass ( g ) , g = e . historyMessage . grouped , g && t . addClass ( g ) ) , v != ( e . historyMessage . needDate || ! 1 ) && ( v = ! v , v ? u ? u . show ( ) : ( u = $ ( i ) , $ ( u [ 0 ] . firstChild ) . text ( a ( e . historyMessage . date ) ) , p ? u . insertBefore ( p ) : u . prependTo ( t ) ) : u . hide ( ) ) } ; b ( ) , w ( ) , e . $on ( "messages_select" , b ) , e . $on ( "messages_regroup" , w ) , e . $on ( "messages_focus" , function ( n , a ) { a == e . historyMessage . mid != h && ( h = ! h , t . toggleClass ( r , h ) ) } ) ; var k ; if ( ! e . historyMessage . pFlags . out && ( e . historyMessage . pFlags . unread || e . historyMessage . unreadAfter ) ) { var S = function ( ) { e . peerHistory . peerID == e . historyPeer . id && y != ( e . historyUnreadAfter == e . historyMessage . mid ) && ( y = ! y , y ? p ? p . show ( ) : p = $ ( o ) . prependTo ( t ) : ( p . hide ( ) , k && k ( ) ) ) } ; S ( ) , k = e . $on ( "messages_unread_after" , S ) } if ( e . historyMessage . pFlags . unread && e . historyMessage . pFlags . out ) { t . addClass ( l ) ; var C = e . $on ( "messages_read" , function ( ) { e . historyMessage . pFlags . unread || ( t . removeClass ( l ) , C ( ) , k && ! y && k ( ) ) } ) } if ( e . historyMessage . error || e . historyMessage . pending ) { var M = function ( ) { _ != ( e . historyMessage . pending || ! 1 ) && ( _ = ! _ , t . toggleClass ( d , _ ) ) , f != ( e . historyMessage . error || ! 1 ) && ( f = ! f , t . toggleClass ( c , f ) ) , f || _ || x ( ) } , x = e . $on ( "messages_pending" , M ) ; M ( ) } } var a = e ( "myDate" ) , i = '<div class="im_message_date_split im_service_message_wrap"><div class="im_service_message"></div></div>' , o = '<div class="im_message_unread_split">' + t ( "unread_messages_split" ) + "</div>" , s = "im_message_selected" , r = "im_message_focus" , l = "im_message_unread" , c = "im_message_error" , d = "im_message_pending" ; return { templateUrl : templateUrl ( "message" ) , link : n } } ] ) . directive ( "myExternalEmbed" , function ( ) { function e ( e , r , l ) { var c = e . $eval ( l . myExternalEmbed ) ; if ( c ) { var d = "" , u = ! 1 ; switch ( c [ 0 ] ) { case "youtube" : var p = c [ 1 ] ; d = '<div class="im_message_media_embed im_message_video_embed"><' + s + ' type="text/html" frameborder="0" src="https://www.youtube.com/embed/' + p + '?autoplay=0&controls=2" webkitallowfullscreen mozallowfullscreen allowfullscreen></' + s + "></div>" ; break ; case "vimeo" : var p = c [ 1 ] ; d = '<div class="im_message_media_embed im_message_video_embed"><' + s + ' type="text/html" frameborder="0" src="https://player.vimeo.com/video/' + p + '?title=0&byline=0&portrait=0" webkitallowfullscreen mozallowfullscreen allowfullscreen></' + s + "></div>" ; break ; case "instagram" : var m = c [ 1 ] ; d = '<div class="im_message_media_embed im_message_insta_embed"><' + s + ' type="text/html" frameborder="0" src="https://instagram.com/p/' + m + '/embed/"></' + s + "></div>" ; break ; case "vine" : var g = c [ 1 ] ; d = '<div class="im_message_media_embed im_message_vine_embed"><' + s + ' type="text/html" frameborder="0" src="https://vine.co/v/' + g + '/embed/simple"></' + s + "></div>" ; break ; case "soundcloud" : var h = c [ 1 ] ; d = '<div class="im_message_media_embed im_message_soundcloud_embed"><' + s + ' type="text/html" frameborder="0" src="https://w.soundcloud.com/player/?url=' + encodeEntities ( encodeURIComponent ( h ) ) + '&auto_play=false&hide_related=true&show_comments=false&show_user=true&show_reposts=false&visual=true"></' + s + "></div>" ; break ; case "spotify" : var f = c [ 1 ] ; d = '<div class="im_message_media_embed im_message_spotify_embed"><' + s + ' type="text/html" frameborder="0" allowtransparency="true" src="https://embed.spotify.com/?uri=spotify:' + encodeEntities ( encodeURIComponent ( f ) ) + '"></' + s + "></div>" ; break ; case "twitter" : d = '<div class="im_message_twitter_embed"><blockquote class="twitter-tweet" lang="en"><a href="' + c [ 1 ] + '"></a></blockquote></div>' , u = function ( ) { t ? window . twttr && twttr . widgets . load ( r [ 0 ] ) : ( t = ! 0 , $ ( "<script>" ) . appendTo ( "body" ) . on ( "load" , function ( ) { twttr . events . bind ( "loaded" , function ( e ) { for ( var t = 0 ; t < i . length ; t ++ ) i [ t ] . $emit ( "ui_height" ) ; i = [ ] } ) } ) . attr ( "src" , "https://platform.twitter.com/widgets.js" ) ) , i . push ( e ) } ; break ; case "facebook" : d = '<div class="im_message_facebook_embed"><div class="fb-post" data-href="' + c [ 1 ] + '" data-width="300"></div></div>' , u = function ( ) { n ? window . FB && FB . XFBML . parse ( r [ 0 ] ) : ( n = ! 0 , $ ( "<script>" ) . appendTo ( "body" ) . on ( "load" , function ( ) { FB . Event . subscribe ( "xfbml.render" , function ( e ) { for ( var t = 0 ; t < o . length ; t ++ ) o [ t ] . $emit ( " ui _heigh
} ) , l . toggleClass ( "document_fullsize_zoomed" , p ) } , i . toggleZoom ( ! 1 ) , c . attr ( "src" , t ) , r . hide ( ) , l . css ( { width : i . frameWidth , height : i . frameHeight } ) . show ( ) } } ; h = setInterval ( s , 20 ) , a . onload = s , a . src = t , setZeroTimeout ( s ) } ) } return { link : i , templateUrl : templateUrl ( "full_document" ) , scope : { document : "=myLoadDocument" } } } ] ) . directive ( "myGeoPointMap" , [ "ExternalResourcesManager" , function ( e ) { function t ( t , n , a ) { var i = n . attr ( "width" ) || 200 , o = n . attr ( "height" ) || 200 ; n . attr ( "src" , "img/blank.gif" ) ; var s = Config . ExtCredentials . gmaps . api _key , r = "https://maps.googleapis.com/maps/api/staticmap?sensor=false¢er=" + t . point . lat + "," + t . point [ "long" ] + "&zoom=15&size=" + i + "x" + o + "&scale=2&key=" + s ; e . downloadImage ( r ) . then ( function ( e ) { n . attr ( "src" , e ) } ) } return { link : t , scope : { point : "=myGeoPointMap" } } } ] ) . directive ( "myLoadingDots" , [ "$interval" , function ( e ) { function t ( e , t , a ) { t . html ( n ( t [ 0 ] ) ? '<div class="loading_dots"><i></i><i></i><i></i></div>' : "..." ) } function n ( e ) { if ( void 0 === a && ( a = void 0 !== e . style . animationName , a === ! 1 ) ) { var t , n = "Webkit Moz O ms Khtml" . split ( " " ) ; for ( t = 0 ; t < n . length ; t ++ ) if ( void 0 !== e . style [ n [ t ] + "AnimationName" ] ) { a = ! 0 ; break } } return a } return { link : t } ; var a } ] ) . directive ( "myFocused" , [ "shouldFocusOnInteraction" , function ( e ) { return { link : function ( t , n , a ) { return e ? void setTimeout ( function ( ) { setFieldSelection ( n [ 0 ] ) } , 100 ) : ! 1 } } } ] ) . directive ( "myFocusOn" , [ "shouldFocusOnInteraction" , function ( e ) { return { link : function ( t , n , a ) { t . $on ( a . myFocusOn , function ( ) { return e ? void onContentLoaded ( function ( ) { setFieldSelection ( n [ 0 ] ) } ) : ! 1 } ) } } } ] ) . directive ( "myFileUpload" , function ( ) { function e ( e , t , n ) { t . on ( "change" , function ( ) { var t = this ; e . $apply ( function ( ) { e . photo . file = t . files [ 0 ] , setTimeout ( function ( ) { try { t . value = "" } catch ( e ) { } } , 1e3 ) } ) } ) } return { link : e } } ) . directive ( "myModalWidth" , function ( ) { function e ( e , t , n ) { n . $observe ( "myModalWidth" , function ( e ) { $ ( t [ 0 ] . parentNode . parentNode ) . css ( { width : parseInt ( e ) + ( Config . Mobile ? 0 : 32 ) } ) } ) } return { link : e } } ) . directive ( "myModalNav" , function ( ) { function e ( e , t , n ) { var a = function ( t ) { var a = t . target ; if ( ! a || "INPUT" != a . tagName && "TEXTAREA" != a . tagName ) switch ( t . keyCode ) { case 39 : case 32 : case 34 : case 40 : e . $eval ( n . next ) ; break ; case 37 : case 33 : case 38 : e . $eval ( n . prev ) } } ; $ ( document ) . on ( "keydown" , a ) , e . $on ( "$destroy" , function ( ) { $ ( document ) . off ( "keydown" , a ) } ) } return { link : e } } ) . directive ( "myCustomBackground" , function ( ) { function e ( e , t , n ) { $ ( "html" ) . css ( { background : n . myCustomBackground } ) , e . $on ( "$destroy" , function ( ) { $ ( "html" ) . css ( { background : "" } ) } ) } return { link : e } } ) . directive ( "myInfiniteScroller" , function ( ) { function e ( e , t , n ) { var a = $ ( ".nano-content" , t ) [ 0 ] , i = ! 1 ; $ ( a ) . on ( "scroll" , function ( n ) { t . is ( ":visible" ) && ! i && a . scrollTop >= a . scrollHeight - a . clientHeight - 300 && ( i = ! 0 , e . $apply ( function ( ) { e . slice . limit += e . slice . limitDelta || 20 } ) , onContentLoaded ( function ( ) { i = ! 1 , $ ( t ) . nanoScroller ( ) } ) ) } ) } return { link : e , scope : ! 0 } } ) . directive ( "myModalPosition" , [ "$window" , "$timeout" , function ( e , t ) { function n ( n , a , i ) { var o = function ( ) { if ( ! Config . Mobile || ! $ ( a [ 0 ] . parentNode . parentNode . parentNode ) . hasClass ( "mobile_modal" ) ) { var e = a [ 0 ] . parentNode . offsetHeight , n = a [ 0 ] . parentNode . parentNode . parentNode , o = $ ( ".media_modal_bottom_panel_wrap" , n ) [ 0 ] , s = n . offsetHeight - ( o && o . offsetHeight || 0 ) ; s > e ? $ ( a [ 0 ] . parentNode ) . css ( "marginTop" , ( s - e ) / 2 ) : $ ( a [ 0 ] . parentNode ) . css ( "marginTop" , "" ) , "no" != i . animation && t ( function ( ) { $ ( a [ 0 ] . parentNode ) . addClass ( "modal-content-animated" ) } , 300 ) } } ; onContentLoaded ( o ) , $ ( e ) . on ( "resize" , o ) , n . $on ( "ui_height" , function ( e , t ) { t ? o ( ) : onContentLoaded ( o ) } ) } return { link : n } } ] ) . directive ( "myVerticalPosition" , [ "$window" , "$timeout" , function ( e , t ) { function n ( t , n , a ) { var i = "true" === a . padding , o = 0 , s = function ( ) { var s = n [ 0 ] . offsetHeight , r = s - ( s && i ? 2 * o : 0 ) , l = a . myVerticalPosition && parseFloat ( a . myVerticalPosition ) || . 5 , c = a . contHeight ? t . $eval ( a . contHeight ) : $ ( e ) . height ( ) , d = c > r ? parseInt ( ( c - r ) * l ) : "" , u = i ? { paddingTop : d , paddingBottom : d } : { marginTop : d , marginBottom : d } ; n . css ( u ) , n . addClass ( "vertical-aligned" ) , o !== d && t . $emit ( "ui_height" ) , o = d } ; $ ( e ) . on ( "resize" , s ) , onContentLoaded ( s ) , t . $on ( "ui_height" , function ( ) { onContentLoaded ( s ) } ) } return { link : n } } ] ) . directive ( "myUserStatus" , [ "$filter" , "$rootScope" , "AppUsersManager" , function ( e , t , n ) { function a ( ) { angular . forEach ( r , function ( e ) { e ( ) } ) } fu